独孤求懒羊羊败 发表于 2026-1-18 22:11:09

335魔兽怎么移植家宅系统

本帖最后由 独孤求懒羊羊败 于 2026-1-18 22:16 编辑

如图            还有这个奎尔萨拉斯做到大地图是怎么做到的

epyanlove 发表于 2026-1-19 03:12:04

一下是AI回答:

    可以,但必须做“大手术”,而不是简单改几行 OBJ 加载逻辑。
    AzerothCore 的 obj 系统本质只是“把模型文件挂到地图坐标上”,而 WoW12 的家宅系统是一套独立副本+动态地形+持久化场景+权限+装修编辑器的复合子系统。两者定位完全不同,因此想靠“改 obj”就复刻家宅,至少要自己补上以下缺口:

    1. 独立副本域
       - 家宅是每人/每公会一份的副本,不是公共地图。
       - 需要新建 Map/InstanceType,把地块做成可动态生成的副本模板(类似 garrison 技术,但 garrison 是单场景静态布局,家宅还要支持地形、楼层、房间形状变化)。

    2. 动态地形与建筑骨架
       - obj 系统不会改地形高度、不会切房间。
       - 必须引入新的地形块(ADT)即时拼接,或者把“地板/墙壁/屋顶”做成可拼接的 GameObject 族,再写一套网格对齐与碰撞忽略规则。

    3. 持久化装修数据
       - 家宅的 300-5000 件家具、坐标、旋转、缩放都要离线保存。
       - AzerothCore 的 GameObject 表没有“玩家维度”字段,需要新增 housing_gameobject 表,并在玩家上线时动态 spawn/despawn。

    4. 权限与访客机制
       - 需要 housing_permission 表记录屋主/好友/公会/公开的访问级别;
       - 进入副本时根据权限动态设置可见/可交互标记。

    5. 家具收集与账号共享
       - 官方用战网成就解锁图纸,哔哔可简化为任务、掉落或商城。
       - 需要新增 housing_item_template 与 housing_unlock 表,把“图纸”与“模型 id”解耦,支持账号共享。

    6. 客户端改造
       - 原版 3.3.5a 客户端没有装修 UI。
       - 要么自己做 Lua 插件(限制大),要么向客户端注入新界面代码(需要 patch exe/FrameXML),否则玩家无法“拖拽家具”。

    7. 搬家与“一键还原”
       - 放弃房屋时要把当前 layout 序列化成 blob 存库;
       - 买新房后反序列化重新 spawn,同时处理旧地块回收。

    已有参考实现
    - 在 AzerothCore 圈子里最接近的是 mod-guildhouse,它把“公会大厅”做成一个独立副本,内部用 GameObject 摆家具,但只能算静态展示,不支持动态地形、楼层、权限细分,也不支持“每个玩家一块地”。
    - 如果在此基础上继续扩展:
      – 把副本按玩家 ID 动态创建;
      – 把 guildhouse_spawn 表改造成 housing_furniture;
      – 再补上装修 UI 与权限表,就能做出“轻量版家宅”。

    结论
    “改 obj 系统”最多让你把模型摆到地图上;要实现真正的 WoW12 家宅,必须新增副本域、持久化装修数据、权限模块和客户端编辑界面,相当于在 AzerothCore 里再盖一套“garrison-plus”。技术可行,但工作量 ≈ 一个小型资料片,需要同时动服务端、数据库和客户端。


下面还有关于模型缩放:

    AzerothCore(即 Mangos/Trinity 系)的“Object 系统”本身**没有“模型大小”这一字段**,也**不会在服务端对 .m2/.wmo 做缩放限制**。
    想改变一个 GameObject 在游戏里的“个头”,只有三条路可走,而且都不是在“Object 系统”里直接填写“模型尺寸”就能完成的:

    1. 改模型文件
       在 Blender/3ds Max 里把模型做成你想要的大小后重新导出为 .m2,用替代补丁扔进客户端。服务端只记录文件路径,不关心顶点坐标范围,因此没有“大小”字段给你填 。

    2. 用 GameObject 的缩放字段(0-255)
       gameobject_template 表里有
       `size` 字段(Trinity/AzerothCore 叫 `size`,有的分支叫 `scale`)。
       这是服务端唯一会向下发送到客户端的“统一缩放系数”,取值 0–255 代表 0–2.55 倍。
       超过 2.55 倍就要回到方法 1,直接改模型。

    3. 临时 Scale 法术或 C++ 硬编码
       如果你只是想让某一次召唤变大/变小,可以给刷出来的 GO 套一个带 SPELL_EFFECT_SET_SCALE 的法术,或者在 `GameObject::CreateFromProto` 里手动 `SetObjectScale(…)`。
       但这仍然受客户端最大 4 倍硬限,且重启后失效,除非你把值写回 `gameobject_template::size`。

    结论
    Object 系统里**没有“模型大小”属性**;唯一可调的就是 `gameobject_template.size`(0-255 → 0-2.55 倍)。再大就只能改模型本身或者做客户端补丁 。
转载自某爱论坛里面的工程不是这里能研究的 我只能说你想多了 靠335来实现基本不现实

superstarlei 发表于 2026-1-19 08:44:08

找暴雪拿源码,自己再适配

好吧你输了 发表于 2026-1-19 13:15:45

epyanlove 发表于 2026-1-19 03:12
一下是AI回答:

    可以,但必须做“大手术”,而不是简单改几行 OBJ 加载逻辑。


这是真大佬

liyicheng556 发表于 2026-1-19 14:40:19

进来看看,学习一下
页: [1]
查看完整版本: 335魔兽怎么移植家宅系统

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明