Open MoranOrz opened 7 months ago
大佬还是没懂,那个扫皮肤代码怎么添加,能详细说说吗
大佬,你能扛起这个mod的大旗嘛,穷学生就看你了
看不懂,在init里面加了也没有作用,依然还是会出现透明箱子
给不懂的说一下哈 打开游戏文件夹/mods/Local Collection Skins/scripts/init.lua 在最后添加代码
SKIN_SOUND_FX = {}
local function AddSkinSounds(inst)
-- NOTES(JBK): Do not do fancy shorthand loops these should be easily searchable.
-- FIXME(JBK): These variable names for them being stored on the inst are not consistent.
local sounds = SKIN_SOUND_FX[inst:GetSkinName()]
if sounds then
-- Weapon
inst.hit_skin_sound = sounds.hit
-- Whip
inst.skin_sound_small = sounds.small
inst.skin_sound_large = sounds.large
-- Equipment
inst.skin_equip_sound = sounds.equip
-- Chest
inst.skin_place_sound = sounds.place
inst.skin_open_sound = sounds.open
inst.skin_close_sound = sounds.close
-- Bundle Wrap
inst.skin_wrap_sound = sounds.wrap
-- Bug Net
inst.overridebugnetsound = sounds.net
-- Glomling, reviver, staff
inst.skin_sound = sounds.genericuse -- FIXME(JBK): This variable name on both sides and split the objects out.
-- Staff
inst.skin_castsound = sounds.cast
-- Orange Staff
if inst.components.blinkstaff and (sounds.preteleport or sounds.postteleport) then
inst.components.blinkstaff:SetSoundFX(sounds.preteleport, sounds.postteleport)
end
end
end
function treasurechest_init_fn (inst, build_name)
if inst.components.placer then
basic_init_fn(inst, build_name, "treasure_chest") -- NOTES(JBK): Chests can not be built as upgraded form.
return
elseif not TheWorld.ismastersim then
return
end
if inst._chestupgrade_stacksize then
if build_name:find("treasurechest_upgraded_", 21, true) then
basic_init_fn(inst, build_name, "treasure_chest_upgraded")
else
basic_init_fn(inst, build_name:gsub("treasurechest_", "treasurechest_upgraded_"), "treasure_chest_upgraded")
end
else
if build_name:find("treasurechest_upgraded_", 21, true) then
basic_init_fn(inst, build_name:gsub("treasurechest_upgraded_", "treasurechest_"), "treasure_chest")
else
basic_init_fn(inst, build_name, "treasure_chest")
end
end
AddSkinSounds(inst)
end
function dragonflychest_init_fn (inst, build_name)
if inst.components.placer then
basic_init_fn(inst, build_name, "dragonfly_chest") -- NOTES(JBK): Chests can not be built as upgraded form.
return
elseif not TheWorld.ismastersim then
return
end
if inst._chestupgrade_stacksize then
if build_name:find("dragonflychest_upgraded_", 21, true) then
basic_init_fn(inst, build_name, "dragonfly_chest_upgraded")
else
basic_init_fn(inst, build_name:gsub("dragonflychest_", "dragonflychest_upgraded_"), "dragonfly_chest_upgraded")
end
else
if build_name:find("dragonflychest_upgraded_", 21, true) then
basic_init_fn(inst, build_name:gsub("dragonflychest_upgraded_", "dragonflychest_"), "dragonfly_chest")
else
basic_init_fn(inst, build_name, "dragonfly_chest")
end
end
AddSkinSounds(inst)
end
保存重新加载游戏就可以了 但是用这个方法扫出来的皮肤只要不是原皮重新进游戏还是会变空 要用黑化行为学shift+右键框选重新扫 所以就是 用处不大 解决这个问题需要有人大改一下整个mod 解决之前如果一定要升级箱子建议一直用原皮吧
提供一种 “掩耳盗铃” 式的解决方案,在创意工坊里有个mod叫做 “宝箱升级贴图不变”,链接是https://steamcommunity.com/sharedfiles/filedetails/?id=3275185052 启用了这个mod后,升级的高箱子外形保持为矮箱子,因此就避免了高箱子贴图丢失的问题,矮箱子的皮肤就随便扫吧。
我不懂mod代码,看modmain大概是通过把 "_upgraded" 给替换掉来实现的,不知道能不能给修复箱子贴图丢失的bug一些启发。
一、弹性空间制造器升级的问题
在普通箱与龙鳞箱中,有对
skin_name
进行string
拼接的操作。 由于本 MOD 是有作者标记ms_zhnkc9_gmail_com_
为开头的skin_name
,因此会导致拼接后无法对应上skin_name
而消失贴图。目前有两个想法可能解决此问题:
ms_zhnkc9_gmail_com_
后挪至尾部,可能能解决。(作者已退游,不一定能帮这个忙,希望有个大佬能看懂项目源码帮忙解决一下。)对
AnimState:SetSkin
函数进行拦截加判断,特殊处理箱子这个问题。(仅为个人猜想)二、无视升级的时候消失贴图的问题,仅对扫皮肤进行修复
已确定是因为字符拼接问题导致的贴图消失,因此可以在
init.lua
中重写treasurechest_init_fn
和dragonflychest_init_fn
函数,对拼接字符进行正确的处理。 以下为本人的修复方案,水平有限,只能保证扫皮肤不会空了:记得把
AddSkinSounds
方法拷贝过来 龙鳞箱也是如此修复后记:
使用方法二修复后,依旧存在的问题(本人水平低,希望有大佬能给个建议/解决方案)
upgraded
升级后的皮肤,当然造出来是矮的皮肤,即使建造投影是高的。(不知道怎么让这些升级后的皮肤不在制作栏预览)龙鳞箱没有上面制作栏能预览到升级后皮肤的问题。 反正目前我的水平只能这么修复着勉强使用,希望有大佬看到 issues 能帮忙解决一下。
附加修复另外两个致命性 Bug 的方案
1、在开启 “能力勋章” 模组时,捆绑包装的
skin
会变成number
类型,导致本模组SpawnPrefab
函数使用错误的数据而引起崩溃。 以下为解决方案(在作者 issues 前修好了):2、阿比盖尔的花扫皮肤引起的崩溃。 以下为解决方案(作者 issues 的方案):