Skip to content

Commit

Permalink
版本发布 0.35
Browse files Browse the repository at this point in the history
修复宠物bug
修复 墙体放置无皮肤
  • Loading branch information
zhnkc9 committed Oct 29, 2023
1 parent 2820106 commit 154c886
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 18 deletions.
2 changes: 1 addition & 1 deletion resource/modinfo.tpl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "导狗必死"
description = "导狗必死全家"
author = "[email protected]"
version = "0.2.34.beta"
version = "0.2.35.beta"

forumthread = ""

Expand Down
5 changes: 2 additions & 3 deletions resource/skinprefabs.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,11 @@ table.insert(prefs, CreatePrefabSkin("{{ prefix + skinid }}",{
},
{% else if key == "build_name_override" %}
{{ key }} = {{ dump(value) }} ,
{% else if key == "base_prefab" and (value == "\"campfire\"" or value == "\"lantern\"") %}
{% else if key == "base_prefab" %}
{{ key }} = {{ value }} ,
init_fn = {{ attrs.init_fn }},
{% else if key == "skins" %}
skins = { {% for sk,sv in value %}{{ sk }} = "{{sv}}" , {% endfor %} },
{% else if key == "origin_skins" or key == "origin_build_name" or key == "bigportrait_anim" or key == "init_fn"%}
{% else if key == "origin_skins" or key == "origin_build_name" or key == "bigportrait_anim"%}
{% else %}
{{ key }} = {{ value }},
{% endif %}
Expand Down
46 changes: 32 additions & 14 deletions resource/source/skinloader/skinloader.lua
Original file line number Diff line number Diff line change
Expand Up @@ -324,39 +324,34 @@ for name, fn in pairs(ProxySet.pst) do fns_call(name, fn, true) end
local SKIN_BUILDS = {}
local function ApplySkin(_inst, name, skin)
_inst.skinname = skin
_inst.moddedskinname = skin
local isGemPrefab, _, realprefab = name:find("^gemprefab_(.+)_%d+$")
if isGemPrefab then
name = realprefab
end
local _fn
if (skin) then
_fn = rawget(_G, skin .. "_" .. "init" .. "_fn") or
rawget(_G, name .. "_" .. "init" .. "_fn")
else
_fn = rawget(_G, name .. "_clear_fn")
end
local _prefab = skin and Prefabs[skin] or nil
local _fn = _prefab and _prefab.init_fn or
skin and rawget(_G, name .. "_" .. "init" .. "_fn") or
rawget(_G, name .. "_clear_fn")
if not _fn then
local def_build = _inst.AnimState:GetBuild()
rawset(_G, name .. "_" .. "init" .. "_fn",
function(__inst, build_name) basic_init_fn(__inst, build_name, def_build) end)
_fn = rawget(_G, name .. "_" .. (skin and "init" or "clear") .. "_fn")
end
local build_name = (Prefabs[skin] ~= nil and Prefabs[skin].build_name_override) or skin

local build_name = (_prefab and _prefab.build_name_override) or skin
if SKIN_BUILDS[_inst.AnimState] then
SKIN_BUILDS[_inst.AnimState]:set(build_name or "")
end
if _fn then
_fn(_inst, build_name)
end
_fn(_inst, build_name)
end

local _ReskinEntity = Sim.ReskinEntity
function Sim:ReskinEntity(targetGUID, currentskin, skin, idkwhat, userid, ...)
_ReskinEntity(self, targetGUID, currentskin, skin, idkwhat, userid, ...)
local inst = Ents[targetGUID]
if inst == nil then return end
if not table.contains(JoinArrays(DST_CHARACTERLIST, MODCHARACTERLIST), inst.prefab) then
if skin and skin:start_with_that_prefix() and
not table.contains(JoinArrays(DST_CHARACTERLIST, MODCHARACTERLIST), inst.prefab) then
ApplySkin(inst, inst.prefab, skin or nil)
elseif skin == nil then
if SKIN_BUILDS[inst.AnimState] then
Expand All @@ -374,3 +369,26 @@ function SpawnPrefab(name, skin, ...)
end
return ent
end

local _AddAnimState = Entity.AddAnimState
local _GetSkinBuild = AnimState.GetSkinBuild
local _Remove = EntityScript.Remove
function Entity:AddAnimState(...)
local guid = self:GetGUID()
local inst = Ents[guid]
local hasanimstate = inst.AnimState
local animstate = _AddAnimState(self, ...)
if inst and not hasanimstate then
SKIN_BUILDS[animstate] = net_string(guid, "xyandtc.build")
end
return animstate
end
function AnimState:GetSkinBuild(...)
return (SKIN_BUILDS[self] and SKIN_BUILDS[self]:value() ~= "" and SKIN_BUILDS[self]:value()) or _GetSkinBuild(self, ...)
end
function EntityScript:Remove(...)
if self.AnimState then
SKIN_BUILDS[self.AnimState] = nil
end
return _Remove(self, ...)
end
9 changes: 9 additions & 0 deletions src/LParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,8 @@ namespace LParser {

std::unordered_set<string> clothing_type = {"body", "hand", "legs", "feet"};

regex item_type("^(.*?)_?(builder|item)$");

// 用于匹配人物的正则
regex characte("^.*(wathgrithr|wes|wanda|wortox|wendy|wormwood|woodie|willow|wolfgang|" \
"waxwell|wilson|webber|winona|wonkey|wurt|wickerbottom|wx78|warly|walter).*$");
Expand All @@ -227,6 +229,13 @@ namespace LParser {
string pattern = kvs.contains("base_prefab") ? \
util::removeSurroundingChars(kvs["base_prefab"], "\"")
+ "|" + skinid : skinid;

// 如果 skinid 后缀是item _item build _build
if (regex_search(skinid, match, item_type))
pattern += "|" + match[1];

LOG(info) << "processSkinprefabs:pattern:" << pattern << "; [1] " << match[1];

regex dup("(?<=\")([^\"/]*?(" + pattern + ")[^\"]*?)(?=\")");

string origin_build_name;
Expand Down

0 comments on commit 154c886

Please sign in to comment.