Don't Starve Together

Don't Starve Together

MX - Slot (Extra Equipment Slots)
Mon-ius  [developer] 8 Dec, 2022 @ 2:32am
开发者日志 Dev log
以后的小故事都会写在这里,MOD介绍页中将更多介绍和MOD功能相关的内容;
If you'd like to see how I thought, why I did, where I stood, read more details here;

As an add-on part of this mod, If you like it give me:steamthumbsup:, 如果你笑了,请给我点赞捏~
< >
Showing 1-7 of 7 comments
Mon-ius  [developer] 8 Dec, 2022 @ 4:03pm 
V3.1.3.1 更新日记: 原批的BGM真有劲, 才听30分钟就把BUG写出来了😁, 游戏里应该也能work, 只因友们也要多👂; 进游戏测试后, 不对怎么C stack overflow了捏, 是Lua能干出来的事情🐎; ao~原来我用了Lua5.1的未公开`newproxy`, 为什么这么使捏, 那你得问穹(workshop-2384660166)的作者应该也是只因荒MOD中文WIKI作者之一为啥要劫持整个AnimState, 并且用完也不给还原捏, 为了兼容它的一番操作, 只能创建一个userdata来fit, 但是一晚上, 搞不定, 有懂哥可以下面发炎或者群里细🔒。好了, 我要去Klei论坛发炎了, 里面懂哥应该多, 不出意外的话, 这个搞不定就暂时不继续更了, 只能希望Klei的老哥们还没开始过圣诞节🎄,或者窝回头有时间有兴趣看看C层的代码实现, 也不能怪上面提到的Modder, 毕竟它算圈子里水平高的,兼容不了,说明窝功力不够,考虑的不够周全,不过话说回来,现在的功能也够用,如果和官方PY成功,说不定在下个版本的Wilson更新中就能直接用到官方实现的5格,毕竟`BACKPACK`图层都已经上线就差实装了,本MOD就相当于是个凑合的过渡。以上就是V3.1.3.1(未实装)的更新;
Mon-ius  [developer] 8 Dec, 2022 @ 5:03pm 
### V3.1.3.2
更新日记: Bug写到一半,发现`Klei`推送了更新,过圣诞节了,我的信才写了一半,看来今年是没有人回了,看了一眼订阅量,有大概300块好兄弟取消了订阅,不然就快到2K订阅了,肯定是窝太菜了,反正窝也不care,就是图一乐,听了一会轩子老师的ASMR,想起来`C stack overflow` 可能是之前的方案 `new` 了太多 `newproxy`产生的userdata, 以至于 `Klei`的菜🐔引擎处理不来这么复杂的gc, 现在让这个创建的userdata常驻内存应该就可以完美解决问题, 但是捏还是要得测试才能推送给大家。另外捏,musha的融合双背包问题也有了着落,预计等版本稳定后可以推送更新,大家可以先分开布局将就一下; 以及提到的影甲崩溃的问题,这个等3.1.4版本就可以解决,目测和本次更新需要解决的问题一致; 另外,把护符放在胡须的位置,也就是头顶也是无奈之举,后面可以提供一个开关,如果你不喜欢可以和护甲共享同一个`Animate`位置;
Mon-ius  [developer] 10 Dec, 2022 @ 2:16pm 
### V3.1.3.3

本来想通过Hook整个`EQUIPSLOTS`的metatable来实现统一的白名单列表, 系统性的实现装备系统的映射, 很可惜Klei引擎使用的Lua5.1版本不资瓷 __pairs 元方法, 并且Klei多次使用`pairs(EQUIPSLOTS)`处理整个装备系统, 唯一可行的方案是需要覆盖Lua本身的pairs函数和next函数, 但可能引起新的系统性的bug, 故本重写计划宣告破产; 设计方案(废稿)如下:
```
local function HookEpsImpl()
local _eq = EQUIPSLOTS;
local _mxtable = {
__index = IndexDebug,
__newindex = function (t,k,v) _eq[k] = v end,
__len = function (t) return #_eq end,
__pairs = function (t) return pairs(_eq) end,
__ipairs = function (t) return ipairs(_eq) end,
};

EQUIPSLOTS = {};
setmetatable(EQUIPSLOTS, _mxtable);
print("Set meta table for EQUIPSLOTS");
end
```
Mon-ius  [developer] 10 Dec, 2022 @ 6:58pm 
### V3.1.3.4

之前因为兼容`Musha` 和 `Architect` 不小心把 `HeavyLifting`的 feature给兼容掉了, 顺便一说 `Musha`和`Architect`的作者真的是💩, 喜欢Hook `ACTIONS.PICKUP.fn`,全局判定,拉完就跑,搞偷袭,所以为了避免之前大家穿护甲的状态下捡背包掉线的状况,额外增加了一个强制判定在`HeavyLifting`的兼容层 `caller.name == nil and picker.name ==nil and self.equipslots["body"] == nil`,一定程度上增加了对这类不讲武德的MOD作者的抗性,但是目前副作用未知; 最后啊,以后想做MOD的各位如果觉得,画画图就能搞个好MOD,然后再炒几个好像很火但是也不知道辣鸡不辣鸡的MOD的代码,那你可算找对MOD了,好好看看本MOD的代码,不懂的就来加群细🔒,至少玩家们可以用你的MOD的时候多开点其他省心的MOD,不要学棒子,刀子没几把,整天想搞个大新闻。
Mon-ius  [developer] 13 Dec, 2022 @ 9:23am 
### V3.1.5

正在我为调试无洞穴和一些奇怪的bug,比如烧木甲闪退,带魔光护符掉线等发愁(睡觉)的时候,啪的一下,很快啊,Klei就不知道怎么的修复了我的代码,可能是引擎层面上,大家尽情享用吧,最近一周如果没有bug报告的话,应该就结档了,可能会根据热度和订阅人数做一些定期更新,解锁一些和本MOD无关,但也有些关系(主要原相关MOD做的太拉)的功能;
Mon-ius  [developer] 15 Dec, 2022 @ 5:08am 
### V3.1.6

说好的放假过圣诞节,然后昨天14号就发布暗改更新,还不带公告的那种,改了大部分图层的操作,还给sg的`EventHandler("equip")`加了个写死的`EQUIPSLOTS.BODY`, 导致骑牛搬重物的唱跳rap直接打断施法,好在我防范意识强,被我提前预判抓到了小辫子,在大部分人没发现这个bug的时候就已经采取了修复措施,具体bug是骑牛的状态server和client的Klei辣鸡引擎的内部写法不同,导致人物在`Server`卡`dismounting`状态,但是在`Client`卡`idle`状态,表现就是人物消失动不了,按方向键没有反应; 如果遇到卡住了,可以按 键盘的点 "\`"调出来游戏命令框,在远程(按Control可以切换)输入`ThePlayer.sg:GoToState("idle")`, 人物就会从牛身上下来;

暗改代码是 `SGwilson.lua` 里面第1148行的 `equip`和`unequip`加了写死的`EQUIPSLOTS.BODY`进行强制判断, 导致正常唱跳rape的下牛操作无法执行
EventHandler("equip", fn) if data.eslot == EQUIPSLOTS.BODY and data.item ~= nil and data.item:HasTag("heavy") then ... end

具体原理是在不改变原有`SGwilson.lua`的前提下将 `EQUIPSLOTS.BODY` 替换为 `EQUIPSLOTS.BODY`, 那么通过cover关键函数`ins.sg.sg.events.equip.fn`即可轻松秒杀;:thetrap:
Mon-ius  [developer] 16 Dec, 2022 @ 4:40pm 
### V3.1.7

先更新一下外围内容,再推送游戏内MOD更新,搞了一晚上,重新在炸栈哥[stackoverflow.com]那里学习了一下Lua的MetaTable机制, 重构了一下`AnimatState`相关HOOK代码:

```lua _mt.__index = function (_, _fn) return function (_, _s, ...) print(_s, symbol); return _s ~=nil and string.find(_s, "body") and __anim__[_fn](__anim__, symbol, ...) or __anim__[_fn](__anim__, _s, ...) end; end ```

最后得出结论,Klei其实只在V3.1.6发布前一天出手了,而且是狠狠的出手(骑牛动画bug),并且除此之外,都没有!!!,其实是我没睡好,忘了V3.1.4的时候我临时打了个补丁,限制了魔光护符的行为,至于为什么魔光护符会在无洞穴情况炸档,是因为我设计`AnimatState`的HOOK的时候只考虑了 `OverrideSymbol`, `OverrideItemSkinSymbol`, `ClearOverrideSymbol`这三种情况, 把第二个参数劫持到目标`Symbol`, 然鹅魔光护符会额外调用`SetBloomEffectHandle`以及`ClearBloomEffectHandle`,最终导致覆盖了正确的参数,炸💩了 Klei本就脆弱的引擎;

```log [00:15:42]: Assert failure 'h != INVALID_RESOURCE_HANDLE' at /jenkins-buildmaster/workspace/DST_BuildGame_OSX/source/game/components/AnimStateComponent.cpp(1892) [00:15:42]: Assert failure 'BREAKPT:' at /jenkins-buildmaster/workspace/DST_BuildGame_OSX/source/game/components/AnimStateComponent.cpp(1892) ```
< >
Showing 1-7 of 7 comments
Per page: 1530 50