--Well,If you want to understand some idiotic commits,DON'T use machine translate,some words' meaning isn't their original meaning --E.G. 啥B = 傻逼 --So just call somebody that understand Chinese (inclede memes..?) --上文:告诉不懂中文的人怎么看这些注释.jpg --[[ 待审议案 白名单制度 - 已经烂透了除非有更多否则否 双模型计算 - MWB:你说得对,但是《MWB》事Viper自主研发的一款开放世界游戏(指自由改枪) ]] --do return end local cv_enabled = CreateClientConVar("savee_transarmtopmwn_enable", 1) CreateClientConVar("savee_transarmtopmwn_enableshoulder", 1) --0:都禁 1:禁Traps 2:不禁 CreateClientConVar("savee_transarmtopmwn_infscl", 0) --? local autoscaling = CreateClientConVar("savee_transarmtopmwn_autoscale", 1) local autoscale_lerpval = CreateClientConVar("savee_transarmtopmwn_autoscale_lerpvalue", 0.5) local exscale = CreateClientConVar("savee_transarmtopmwn_autoscale_exscale", 0.1) local newVersion = CreateClientConVar("savee_transarmtopmwn_newversion", 1) --CreateClientConVar("savee_transarmtopmwn_useclmdl", 1) local myfunkinhugeval = math.huge local function calcBaseScale(ent) local bone1, bone2, bone3 = ent:LookupBone("ValveBiped.Bip01_R_UpperArm"), ent:LookupBone("ValveBiped.Bip01_R_Forearm"), ent:LookupBone("ValveBiped.Bip01_R_Hand") local bp2 = ent:GetBonePosition(bone2) local dist1 = ent:GetBonePosition(bone1):Distance(bp2) local dist2 = bp2:Distance(ent:GetBonePosition(bone3)) --print(dist2) local baseScale = Lerp(autoscale_lerpval:GetFloat(), 11.69 / dist1, 11.48 / dist2 ) return baseScale end -- 这个if里的代码为2026/2/6后新增 if newVersion:GetBool() then local nextThink = CreateClientConVar("savee_transarmtopmwn_nextThink", 0.5) --新代码, 即2026/2/5之后写的 --[[local shoulder = { ["ValveBiped.Bip01_L_Clavicle"] = true, ["ValveBiped.Bip01_R_Clavicle"] = true, } local shoulder = { ["ValveBiped.Bip01_L_Clavicle"] = true, ["ValveBiped.Bip01_R_Clavicle"] = true, }]] -- 检查该骨骼是否有上臂作为父级 ---@return bool 是否以上臂作为父级 local function Check(ch, i) --n,nn) --do return true end local shoulder = GetConVar("savee_transarmtopmwn_enableshoulder"):GetInt() local name = ch:GetBoneName(i) if string.find(name,"Shoulder") then return shoulder > 0 elseif string.find(name,"Trapezius") then return shoulder > 1 end local lArm = ch:LookupBone("ValveBiped.Bip01_L_UpperArm") local rArm = ch:LookupBone("ValveBiped.Bip01_R_UpperArm") while (i and i ~= -1) do if i == lArm or i == rArm then return true end i = ch:GetBoneParent(i) end return false --[[return ((!ch:LookupBone(n) and !ch:LookupBone(nn)) --黑名单 or string.find(n,"Spine") or string.find(nn,"Spine") or ((i==1 and string.find(n,"Trapezius")) or (string.find(n,"Shoulder") or string.find(n,"Trapezius"))) or string.find(n,"Thigh") or string.find(n,"Calf") or string.find(n,"Foot") or string.find(n,"Toe0") or string.find(nn,"Thigh") or string.find(nn,"Calf") or string.find(nn,"Foot") or string.find(nn,"Toe0") or string.find(nn,"Head") or string.find(nn,"Head") or string.find(nn,"Neck") or string.find(nn,"Neck") ) --白名单 and !string.find(n,"Wrist") and !string.find(n,"Elbow") and !string.find(n,"Bicep") and (i==0 or (i==1 and !string.find(n,"Shoulder")) or (!string.find(n,"Shoulder") and !string.find(n,"Trapezius") ))]] end local function buildbonepos(ent,nb) if not cv_enabled:GetBool() then return end local p = LocalPlayer() local baseScale = calcBaseScale(p) local d = 1 + (baseScale - 1) * (1 + exscale:GetFloat()) local posDlt = p:EyePos() - p:GetAimVector() * 100 for i = 0, nb - 1 do local mat = ent:GetBoneMatrix( i ) if ( !mat ) then continue end local scale = mat:GetScale() if not Check(ent, i) then --print(ent:GetBoneName(i)) mat:Scale( GetConVar("savee_transarmtopmwn_infscl"):GetBool() and Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval) or Vector(0,0,0) ) mat:SetTranslation(posDlt) elseif autoscaling:GetBool() then scale:Mul(d) mat:Scale(scale) end ent:SetBoneMatrix( i, mat ) end --ent:DrawModel() end --你要等这些实体全部加载完毕 timer.Simple(0, function() --令人庆幸的是这里没有Draw(), 给我们的发挥提供了空间 local gmod_hands = scripted_ents.GetStored("gmod_hands") --ErrorNoHalt(util.TableToJSON(gmod_hands, true)) local function _replacedDraw(self, fl) if cv_enabled:GetBool() then local infscl = GetConVar("savee_transarmtopmwn_infscl"):GetBool() --print("draw") local p = self:GetOwner() if not IsValid(p) then p = LocalPlayer() end self:SetModel(p:GetModel()) local epos = p:EyePos() local avdlt = p:GetAimVector() * 100 self:SetRenderOrigin(epos - avdlt) self:SetupBones() local mod = self.Savee_transcarmtopmwm_BoneMods local nb = self:GetBoneCount() if not mod then mod = {} for i = 0, nb - 1 do if not Check(self, i) then mod[i] = true end end self.Savee_transcarmtopmwm_BoneMods = mod end --print(dist2) local baseScale = calcBaseScale(p) local d = 1 + (baseScale - 1) * (1 + exscale:GetFloat()) self.Savee_transcarmtopmwm_CustomScale = d --print(baseScale) for i = 0, nb - 1 do local mat = self:GetBoneMatrix(i) if not mat then continue end local scale = mat:GetScale() --mat:Scale(Vector(15, 15, 15)) --print(scale) --do continue end if mod[i] then mat:Scale(infscl and Vector(myfunkinhugeval, myfunkinhugeval, myfunkinhugeval) or Vector(0,0,0)) mat:SetTranslation(epos - avdlt) elseif autoscaling:GetBool() then scale:Mul(d) mat:Scale(scale) end --scale:Mul(d) --mat:Scale(scale * 5) self:SetBoneMatrix(i, mat) end end self:DrawModel(fl) end local function mainfunc() timer.Adjust("Savee_transcarmtopmwm_modelswap", nextThink:GetFloat()) -- 基本部分 local p = LocalPlayer() if not IsValid(p) then return end local hands = p:GetHands() if not IsValid(hands) then return end local enabled = cv_enabled:GetBool() if enabled then hands:SetModel(p:GetModel()) if not hands.Savee_transcarmtopmwm_modelswapped then hands.Savee_transcarmtopmwm_modelswapped = hands:AddCallback("BuildBonePositions", buildbonepos) end for i = 0, p:GetNumBodyGroups() do hands:SetBodygroup(i, p:GetBodygroup(i)) end elseif hands.Savee_transcarmtopmwm_modelswapped then local pm = player_manager.TranslateToPlayerModelName(p:GetModel()) hands:SetModel(player_manager.TranslatePlayerHands(pm).model) hands:RemoveCallback("BuildBonePositions", hands.Savee_transcarmtopmwm_modelswapped) hands.Savee_transcarmtopmwm_modelswapped = nil hands.Savee_transcarmtopmwm_BoneMods = nil end hands.Draw = function(self, fl, ...) if enabled then local p = self:GetOwner() self:SetRenderOrigin(p:EyePos() - p:GetAimVector() * 1000) end self:DrawModel(fl, ...) end if not enabled then return end -- MW NVG Support -- 参见 https://steamcommunity.com/sharedfiles/filedetails/?id=2532012185 if IsValid(p.vrnvghand) then for i = 0, p:GetNumBodyGroups() do p.vrnvghand:SetBodygroup(i, p:GetBodygroup(i)) end if not p.vrnvghand.Savee_transcarmtopmwm_callback then p.vrnvghand.Savee_transcarmtopmwm_callback = p.vrnvghand:AddCallback("BuildBonePositions", buildbonepos) end --p.vrnvghand.RenderOverride = replacedDraw --hands.Draw end end --降低开销 timer.Create("Savee_transcarmtopmwm_modelswap", nextThink:GetFloat(), 0, mainfunc) gameevent.Listen("player_spawn") hook.Add("player_spawn", "savee_transcarmtopmwm", function(data) if not cv_enabled:GetBool() or data.userid ~= LocalPlayer():UserID() then return end timer.Simple(0.05, mainfunc) end) end) return end -- 下面的代码是老版本的C手转换器 -- 注释被保留以展示我(和我的代码)以前是多么逆天(当然现在也是.jpg) TRANSCARMTOPMWN_CMdl = TRANSCARMTOPMWN_CMdl--时隔多年这玩意又活了,勒 --[[ 首先我写这段的时候我的脑子炸了 好,首先 这有个metatable,它控制着整个Entity 那么他是怎么运作的呢? 他要搜固定的meta里是否存在这个值 结果很显然:先前的meta存在这个值 所以直接返还该值,无论新meta是否定义它 那么为什么我要Copy那个table? 方便下一步编写,你不能为了一只苍蝇炸了整个店,所以要买杀虫药 而杀虫药不好可以换下一个(即直接删了重写) 但是你店没了你只能重开一个(指原meta被修改整个系统都死了) 而重开需要时间 第一步就是改它的索引,很简单 第二步就是加对应的东西,无了 ]] local function Check(ch,n,nn) local i=GetConVar("savee_transarmtopmwn_enableshoulder"):GetInt() return ((!ch:LookupBone(n) and !ch:LookupBone(nn)) --黑名单 or string.find(n,"Spine") or string.find(nn,"Spine") or ((i==1 and string.find(n,"Trapezius")) or (string.find(n,"Shoulder") or string.find(n,"Trapezius"))) or string.find(n,"Thigh") or string.find(n,"Calf") or string.find(n,"Foot") or string.find(n,"Toe0") or string.find(nn,"Thigh") or string.find(nn,"Calf") or string.find(nn,"Foot") or string.find(nn,"Toe0") ) --白名单 and !string.find(n,"Wrist") and !string.find(n,"Elbow") and !string.find(n,"Bicep") and (i==0 or (i==1 and !string.find(n,"Shoulder")) or (!string.find(n,"Shoulder") and !string.find(n,"Trapezius") )) end --要覆写gmod_hands的meta,改metatable真的太好使辣(到时候改回来就好,大概) local Meta = table.Copy(FindMetaTable("Entity")) --累了,毁灭吧 local OldGetModel = Meta.GetModel local Old__index = Meta.__index function Meta:__index( key ) --if key != "__index" then local val=Meta[key] if val then --print("yes") return val end --end return Old__index(self,key) end function Meta:GetModel() local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 --print("CUM1") local p=LocalPlayer() if on and IsValid(p) and self == p:GetHands() and IsValid(p:GetActiveWeapon()) and (!weapons.IsBasedOn(p:GetActiveWeapon():GetClass(),"mg_base") or p:GetActiveWeapon():GetViewModel().m_CHands.transcarmtopmwms2) then --print("CUM1") return p:GetModel() --return OldGetModel(self) else --print("CUM2") --if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end return OldGetModel(self) end end local OldGetBodygroup = Meta.GetBodygroup function Meta:GetBodygroup(i) local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 --print("CUM1") local p=LocalPlayer() --print("叫了") if on and IsValid(p) then return p:GetBodygroup(i) --return OldGetBodygroup(self,i) else return OldGetBodygroup(self,i) end end local OldGetBodyGroups = Meta.GetBodyGroups function Meta:GetBodyGroups(i) local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 --print("CUM1") local p=LocalPlayer() --print("叫了") if on and IsValid(p) then --print("CUM1") return p:GetBodyGroups() --return OldGetBodyGroups(self,i) else --print("CUM2") --if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end return OldGetBodyGroups(self,i) end end --setmetatable(LocalPlayer():GetTable(),Meta) --print(LocalPlayer()) --debug.setmetatable(LocalPlayer(),FindMetaTable("Player")) --debug.setmetatable(LocalPlayer():GetHands(),FindMetaTable("Entity")) --debug.setmetatable(LocalPlayer():GetHands(),Meta) --分段支持... concommand.Add("savee_transarmtopmwn_dumbreset", function() if not GetConVar("savee_transarmtopmwn_enable"):GetBool() then return end if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end end) local function CreateCHand(vm, hand) if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end local p = LocalPlayer() local mod = hand.savee_transarmtopmwm_mod or {} TRANSCARMTOPMWN_CMdl = ClientsideModel(p:GetModel(), RENDERGROUP_VIEWMODEL) local baseScale = calcBaseScale(TRANSCARMTOPMWN_CMdl) function TRANSCARMTOPMWN_CMdl:GetPlayerColor() return p:GetPlayerColor() end TRANSCARMTOPMWN_CMdl:SetPos(hand:GetPos()) TRANSCARMTOPMWN_CMdl:SetNoDraw(true) TRANSCARMTOPMWN_CMdl:SetParent(vm) TRANSCARMTOPMWN_CMdl:AddEffects(EF_BONEMERGE) TRANSCARMTOPMWN_CMdl:AddEffects(EF_PARENT_ANIMATES) TRANSCARMTOPMWN_CMdl:SetRenderMode(RENDERMODE_NORMAL) TRANSCARMTOPMWN_CMdl:SetRenderFX(kRenderFxNone) TRANSCARMTOPMWN_CMdl:AddCallback("BuildBonePositions",function(ent,nb) for i = 0, nb - 1 do local mat = ent:GetBoneMatrix( i ) if ( !mat ) then continue end local scale = mat:GetScale() if mod[i] then --print(ent:GetBoneName(i)) mat:Scale( GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 and Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval) or Vector(0,0,0) ) mat:SetTranslation(mat:GetTranslation()-p:GetAimVector()*114514) elseif autoscaling:GetBool() then local d = 1 + (baseScale - 1) * (1 + exscale:GetFloat()) scale:Mul(d) mat:Scale(scale) ent.CustomScale = scale end ent:SetBoneMatrix( i, mat ) end --ent:DrawModel() end) end local Run --MW SUPPORT --我操你个妈我他妈杀了CLModel这个贱种我看看你这个啥B东西能不能抽风我杀你个妈你个寄吧东西,操你妈 --TFA过于特殊了(准确的说是TFA CS:O) local function PaintFunc(vm,hand,tfa)--vm,tomodify) --if !Run then return end --print("DRAW") --if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end local p = LocalPlayer() if !IsValid(p)then return end local w=p:GetActiveWeapon() --local hand = p:GetHands() --print(debug.setmetatable(p.GetHands,Meta)) if !IsValid(hand) then return end if !IsValid(vm) then vm=hand end local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 --and !hook.Run("CalcView", p,p:EyePos(),p:EyeAngles(),p:GetFOV()).drawviewer --do return end --local TRANSCARMTOPMWN_CMdlTemp = tomodify or TRANSCARMTOPMWN_CMdl if on and (!hand.savee_transcarmtopmwm_hide) then --debug.setmetatable(hand,{}) --hand:DoSetup(p) p:SetupBones() --因未知原因它会出这个BUG hand.savee_transcarmtopmwm_hide = true hand.savee_transcarmtopmwm_befmat = hand:GetMaterial() debug.setmetatable(hand,Meta) --local inparent={} local mod={} --[[for i=0,p:GetBoneCount()-1 do --检测1:确认根父级 local n=p:GetBoneName(i) if hand:LookupBone(n) then --print(n) inparent[i] = true --[[for i=0,p:GetBoneCount()-1 do --检测2:确认延伸父级 if inparent[p:GetBoneParent(i)] then inparent[p:GetBoneParent(i)] = true print(n,p:GetBoneName(p:GetBoneParent(i))) end end] end end]] --local m=hand:GetBoneMatrix(6) --m:Scale(Vector(20,2,0.2)) --hand:SetBoneMatrix(6,m) if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end --print("ENABLED") --print("NEWMODELCREATED") --print(TRANSCARMTOPMWN_CMdl) for i=0,p:GetBoneCount()-1 do local n=p:GetBoneName(i) local nn=p:GetBoneName(p:GetBoneParent(i)) if Check(hand,n,nn) then mod[i]=true --MW NVG支持(VectorAssassin97找到的这个不兼容的Addon) --MW NVG使用的似乎是其它的怪东西,它直接搞了个CLMDL给我整不会了 --所以我决定直接改骨骼 if IsValid(p.vrnvghand) then --print("V") --p.vrnvghand:SetMaterial("Models/effects/vol_light001") --p.vrnvghand:SetModel(p:GetModel()) if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then p.vrnvghand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) else p.vrnvghand:ManipulateBoneScale(i, Vector(0,0,0)) end p.vrnvghand:ManipulateBonePosition(i,Vector(-myfunkinhugeval,0,-myfunkinhugeval)) end --else print(n) end end hand.savee_transarmtopmwm_mod = mod CreateCHand(vm, hand) --`hand.Draw = function() end --[[if !hand.savee_transarmtopmwm_olddraw then hand.savee_transarmtopmwm_olddraw = hand.Draw end function hand:Draw() --print("1") end]] --if vrnvghandsmodel then vrnvghandsmodel = p:GetModel() end --if IsValid(p.vrnvghand) then -- p.vrnvghand:SetModel(p:GetModel()) --end --[[function hand:GetRenderMesh() --print(f) return { Mesh = IMesh, Material = self:GetMaterial() } end]] --print("RES???") elseif on then --hand:SetupBones() --if vrnvghandsmodel then vrnvghandsmodel = hand.savee_transcarmtopmwm_mdl end --print("STILL CUM") --for i=0,p:GetViewModel():GetBoneCount()-1 do -- print(p:GetViewModel():GetBoneName(i)) --end --TRANSCARMTOPMWN_CMdlTemp:SetModel(p:GetModel()) --print(RUN)\ --if tomodify == hand then --end --else --TRANSCARMTOPMWN_CMdlTemp:SetModel("") --end --cam.End3D() --[[if IsValid(p.vrnvghand) then --print("SMJB") p.vrnvghand:SetModel(p:GetModel()) end]] if tfa then if IsValid(hand) then hand:SetMaterial(hand.savee_transcarmtopmwm_befmat) if !isnumber(hand.savee_transcarmtopmwm_callback) then --print(dist2) local baseScale = calcBaseScale(hand) local mod = hand.savee_transarmtopmwm_mod hand.savee_transcarmtopmwm_callback = hand:AddCallback("BuildBonePositions",function(ent,nb) for i = 0, nb - 1 do local mat = ent:GetBoneMatrix( i ) if ( !mat ) then continue end local scale = mat:GetScale() if mod[i] then --print(ent:GetBoneName(i)) mat:Scale( GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 and Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval) or Vector(0,0,0) ) mat:SetTranslation(mat:GetTranslation()-p:GetAimVector()*114514) elseif autoscaling:GetBool() then local d = 1 + (baseScale - 1) * (1 + exscale:GetFloat()) scale:Mul(d) mat:Scale(scale) ent.CustomScale = scale end ent:SetBoneMatrix( i, mat ) end --ent:DrawModel() end) --ent:DrawModel() end hand:SetModel(p:GetModel()) for i = 0,p:GetNumBodyGroups() do hand:SetBodygroup(i,p:GetBodygroup(i)) end end else if IsValid(hand) then hand:SetMaterial("savee/transchand/invisiblemat/invisiblemat") if isnumber(hand.savee_transcarmtopmwm_callback) then hand:RemoveCallback("BuildBonePositions",hand.savee_transcarmtopmwm_callback) local playermodel = player_manager.TranslateToPlayerModelName( p:GetModel() ) hand:SetModel(player_manager.TranslatePlayerHands( playermodel ).model) hand.savee_transcarmtopmwm_callback=nil end end --print(baseScale) if !IsValid(TRANSCARMTOPMWN_CMdl) then CreateCHand(vm, hand) end TRANSCARMTOPMWN_CMdl:SetMaterial(hand.savee_transcarmtopmwm_befmat) TRANSCARMTOPMWN_CMdl:SetParent(hand:GetParent()) --TRANSCARMTOPMWN_CMdl:AddEffects(EF_BONEMERGE_FASTCULL) TRANSCARMTOPMWN_CMdl:SetRenderOrigin(hand:GetParent():GetPos()) TRANSCARMTOPMWN_CMdl:SetRenderAngles(hand:GetParent():GetAngles()) for i=0,p:GetNumBodyGroups() do TRANSCARMTOPMWN_CMdl:SetBodygroup(i,p:GetBodygroup(i)) --print("?") end --print("?2") TRANSCARMTOPMWN_CMdl:SetSkin(p:GetSkin()) --function TRANSCARMTOPMWN_CMdl:RenderOverride() --end --cam.IgnoreZ(false) --print(1) --render.SetLightingOrigin(Vector()) TRANSCARMTOPMWN_CMdl:DrawModel(STUDIO_RENDER) --cam.IgnoreZ(false) end if IsValid(p.vrnvghand) then --print("?)") --print(p.vrnvghand:GetModel()) --p.vrnvghand:SetModel(p:GetModel()) for i=0,p:GetBoneCount()-1 do local n=p:GetBoneName(i) local nn=p:GetBoneName(p:GetBoneParent(i)) if Check(hand,n,nn) then if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then p.vrnvghand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) else p.vrnvghand:ManipulateBoneScale(i, Vector(0,0,0)) end p.vrnvghand:ManipulateBonePosition(i,Vector(-myfunkinhugeval,0,-myfunkinhugeval)) --[[else print(n)]] continue end local vec = Vector(1, 1, 1) vec:Mul(TRANSCARMTOPMWN_CMdl.CustomScale) p.vrnvghand:ManipulateBoneScale(i, vec) end for i=0,p:GetNumBodyGroups() do p.vrnvghand:SetBodygroup(i,p:GetBodygroup(i)) end end --hand:SetModel(p:GetModel()) elseif !on and hand.savee_transcarmtopmwm_hide then hand.savee_transcarmtopmwm_hide = false debug.setmetatable(hand,FindMetaTable("Entity")) hand:SetMaterial(hand.savee_transcarmtopmwm_befmat) if isnumber(hand.savee_transcarmtopmwm_callback) then hand:RemoveCallback("BuildBonePositions",hand.savee_transcarmtopmwm_callback) hand.savee_transcarmtopmwm_callback=nil end local playermodel = player_manager.TranslateToPlayerModelName( p:GetModel() ) hand:SetModel(player_manager.TranslatePlayerHands( playermodel ).model) if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end end --if IsValid(p.vrnvghand) then -- --print("YOUSHOULDNOTHAVEDONETHIS") -- --p.vrnvghand:SetMaterial("Models/effects/vol_light001") --end --NextThink = CurTime()+0.03 --return true --阻止默认vm绘制 end --Old Paintfunc(为啥不是draw?) --local function PaintFunc()--vm,tomodify) -- --if !Run then return end -- --print("DRAW") -- --if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end -- local p = LocalPlayer() -- -- if !IsValid(p)then return end -- local w=p:GetActiveWeapon() -- local hand = p:GetHands() -- --print(debug.setmetatable(p.GetHands,Meta)) -- if !IsValid(hand) then return end -- if !IsValid(vm) then vm=hand end -- local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 and !hook.Run("CalcView", p,p:EyePos(),p:EyeAngles(),p:GetFOV()).drawviewer -- -- local TRANSCARMTOPMWN_CMdlTemp = tomodify or TRANSCARMTOPMWN_CMdl -- if on and (!hand.savee_transcarmtopmwm_hide or hand.savee_transcarmtopmwm_mdl != p:GetModel()) then -- --debug.setmetatable(hand,{}) -- --hand:DoSetup(p) -- p:SetupBones() --因未知原因它会出这个BUG -- hand.savee_transcarmtopmwm_hide = true -- if !istable(hand.savee_transcarmtopmwm_bonesdata) then hand.savee_transcarmtopmwm_bonesdata = {} end -- hand.savee_transcarmtopmwm_befmat = hand:GetMaterial() -- hand.savee_transcarmtopmwm_befcol = hand:GetColor() -- hand.savee_transcarmtopmwm_befrender = hand:GetRenderMode() -- if isnumber(hand.savee_transcarmtopmwm_callback) then -- hand:RemoveCallback("BuildBonePositions",hand.savee_transcarmtopmwm_callback) -- end -- hand.savee_transcarmtopmwm_callback=hand:AddCallback("BuildBonePositions",function(ent,nb) -- for i = 0, nb - 1 do -- local mat = ent:GetBoneMatrix( i ) -- if ( !mat ) then continue end -- -- local scale = mat:GetScale() -- mat:Scale( Vector(0,0,0) ) -- ent:SetBoneMatrix( i, mat ) -- end -- end) -- --hand:SetRenderMode(RENDERMODE_GLOW) -- --hand:SetMaterial("Models/effects/vol_light001") -- --hand:SetColor(Color(0,0,0,0)) -- --if !hand.savee_transcarmtopmwm_oldrenderoverride then -- -- hand.savee_transcarmtopmwm_oldrenderoverride = hand.RenderOverride -- --end -- -- --print("WC2NM") -- --function hand:RenderOverride() --我渲染你奶奶个孙子你个寄吧东西 -- -- --print("WCNM") -- -- --self:DrawModel() -- -- --print(self) -- -- --self:AddEffects(EF_NODRAW) -- -- --return -- --end -- debug.setmetatable(hand,Meta) -- --local inparent={} -- local mod={} -- --[[for i=0,p:GetBoneCount()-1 do --检测1:确认根父级 -- local n=p:GetBoneName(i) -- if hand:LookupBone(n) then -- --print(n) -- inparent[i] = true -- --[[for i=0,p:GetBoneCount()-1 do --检测2:确认延伸父级 -- if inparent[p:GetBoneParent(i)] then -- inparent[p:GetBoneParent(i)] = true -- print(n,p:GetBoneName(p:GetBoneParent(i))) -- end -- end] -- end -- end]] -- --local m=hand:GetBoneMatrix(6) -- --m:Scale(Vector(20,2,0.2)) -- --hand:SetBoneMatrix(6,m) -- --TRANSCARMTOPMWN_CMdl:Remove() -- --print("NEWMODELCREATED") -- --print(TRANSCARMTOPMWN_CMdl) -- if IsValid(TRANSCARMTOPMWN_CMdl) then -- TRANSCARMTOPMWN_CMdl:Remove() -- end -- if !IsValid(TRANSCARMTOPMWN_CMdlTemp) then -- TRANSCARMTOPMWN_CMdlTemp=ClientsideModel(p:GetModel(), RENDERGROUP_VIEWMODEL) -- end -- TRANSCARMTOPMWN_CMdlTemp:SetLOD(0) -- TRANSCARMTOPMWN_CMdlTemp:AddEffects( EF_BONEMERGE ) -- TRANSCARMTOPMWN_CMdlTemp:AddEffects( EF_PARENT_ANIMATES ) -- --print(vm) -- TRANSCARMTOPMWN_CMdlTemp:SetParent(vm) -- TRANSCARMTOPMWN_CMdlTemp:SetMoveType( MOVETYPE_NONE ) -- TRANSCARMTOPMWN_CMdlTemp:SetNoDraw(true) -- function TRANSCARMTOPMWN_CMdlTemp:GetPlayerColor() return p:GetPlayerColor() end -- TRANSCARMTOPMWN_CMdlTemp:SetModel(p:GetModel()) -- --TRANSCARMTOPMWN_CMdlTemp:SetMaterial("Models/effects/vol_light001") -- --print("1") -- for i=0,p:GetBoneCount()-1 do -- local n=p:GetBoneName(i) -- local nn=p:GetBoneName(p:GetBoneParent(i)) -- if Check(hand,n,nn) -- then -- mod[i]=true -- if !hand.savee_transcarmtopmwm_bonesdata[i] then -- hand.savee_transcarmtopmwm_bonesdata[i]={hand:GetManipulateBoneScale(i),hand:GetManipulateBonePosition(i)} -- end -- if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then -- --print(n) -- TRANSCARMTOPMWN_CMdlTemp:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) --从PAC3中发现,应该是通过极端大来隐藏MESH -- --if IsValid(tomodify) then -- hand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- --end -- else -- TRANSCARMTOPMWN_CMdlTemp:ManipulateBoneScale(i, Vector(0,0,0)) -- --if IsValid(tomodify) then -- hand:ManipulateBoneScale(i, Vector(0,0,0)) -- --end -- end -- TRANSCARMTOPMWN_CMdlTemp:ManipulateBonePosition(i,Vector(myfunkinhugeval,0,myfunkinhugeval)) -- --if IsValid(tomodify) then -- hand:ManipulateBonePosition(i,Vector(myfunkinhugeval,0,myfunkinhugeval)) -- --end -- --MW NVG支持(VectorAssassin97找到的这个不兼容的Addon) -- --MW NVG使用的似乎是其它的怪东西,它直接搞了个CLMDL给我整不会了 -- --所以我决定直接改骨骼 -- if IsValid(p.vrnvghand) then -- --print("V") -- --p.vrnvghand:SetMaterial("Models/effects/vol_light001") -- if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then -- p.vrnvghand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- else -- p.vrnvghand:ManipulateBoneScale(i, Vector(0,0,0)) -- end -- p.vrnvghand:ManipulateBonePosition(i,Vector(-myfunkinhugeval,0,-myfunkinhugeval)) -- end -- end -- end -- -- --hand:SetupBones() -- --local playermodel = player_manager.TranslateToPlayerModelName( p:GetModel() ) -- -- hand:SetModel(player_manager.TranslatePlayerHands( playermodel ).model) -- -- hand:SetModel(p:GetModel()) -- -- --hand.savee_transcarmtopmwm_callback = hand:AddCallback( "BuildBonePositions", function( ent, numbones ) -- -- local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 -- -- if !on then return end -- -- for i = 0, numbones - 1 do -- -- if !mod[i] then continue end -- -- local mat = ent:GetBoneMatrix( i ) -- -- if ( !mat ) then continue end ---- -- -- local scale = mat:GetScale() -- -- mat:Scale(Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- -- ent:SetBoneMatrix( i, mat ) -- -- end -- --end ) -- --TRANSCARMTOPMWN_CMdlTemp:AddCallback( "BuildBonePositions", function( ent, numbones ) -- -- local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 -- -- if !on then return end -- -- for i = 0, numbones - 1 do -- -- if !mod[i] then continue end -- -- local mat = ent:GetBoneMatrix( i ) -- -- if ( !mat ) then continue end ---- -- -- local scale = mat:GetScale() -- -- mat:Scale(Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- -- ent:SetBoneMatrix( i, mat ) -- -- end -- --end ) -- hand.savee_transcarmtopmwm_mdl = p:GetModel() -- if tomodify then -- --print("NM") -- tomodify:SetModel(p:GetModel()) -- hand.savee_transarmtopmwn_modified = true -- end -- --[[if !hand.savee_transarmtopmwm_olddraw then -- hand.savee_transarmtopmwm_olddraw = hand.Draw -- end -- function hand:Draw() -- --print("1") -- end]] -- --if vrnvghandsmodel then vrnvghandsmodel = p:GetModel() end -- --if IsValid(p.vrnvghand) then -- -- p.vrnvghand:SetModel(p:GetModel()) -- --end -- --[[function hand:GetRenderMesh() -- --print(f) -- return { Mesh = IMesh, Material = self:GetMaterial() } -- end]] -- --print("RES???") -- elseif on then -- --hand:SetupBones() -- --if vrnvghandsmodel then vrnvghandsmodel = hand.savee_transcarmtopmwm_mdl end -- if !IsValid(TRANSCARMTOPMWN_CMdlTemp) and tomodify != hand then -- hand.savee_transcarmtopmwm_hide = false -- return -- end -- --print("STILL CUM") -- --for i=0,p:GetViewModel():GetBoneCount()-1 do -- -- print(p:GetViewModel():GetBoneName(i)) -- --end -- --TRANSCARMTOPMWN_CMdlTemp:SetModel(p:GetModel()) -- --print(RUN)\ -- --if tomodify == hand then -- --end -- --else -- --TRANSCARMTOPMWN_CMdlTemp:SetModel("") -- --end -- --cam.End3D() -- if tomodify == hand then -- hand:SetMaterial("") -- if isnumber(hand.savee_transcarmtopmwm_callback) then -- hand:RemoveCallback("BuildBonePositions",hand.savee_transcarmtopmwm_callback) -- hand.savee_transcarmtopmwm_callback=nil -- end -- else -- hand:SetMaterial("savee/transchand/invisiblemat/invisiblemat") -- if !isnumber(hand.savee_transcarmtopmwm_callback) then -- hand.savee_transcarmtopmwm_callback=hand:AddCallback("BuildBonePositions",function(ent,nb) -- for i = 0, nb - 1 do -- local mat = ent:GetBoneMatrix( i ) -- if ( !mat ) then continue end -- -- local scale = mat:GetScale() -- mat:Scale( Vector(0,0,0) ) -- ent:SetBoneMatrix( i, mat ) -- end -- end) -- end -- end -- if IsValid(p.vrnvghand) then -- --print("?)") -- --print(p.vrnvghand:GetModel()) -- --p.vrnvghand:SetModel(p:GetModel()) -- for i=0,p:GetBoneCount()-1 do -- local n=p:GetBoneName(i) -- local nn=p:GetBoneName(p:GetBoneParent(i)) -- if Check(hand,n,nn) -- then -- if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then -- p.vrnvghand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- else -- p.vrnvghand:ManipulateBoneScale(i, Vector(0,0,0)) -- end -- p.vrnvghand:ManipulateBonePosition(i,Vector(-myfunkinhugeval,0,-myfunkinhugeval)) -- --[[else -- print(n)]] -- end -- end -- for i=0,p:GetNumBodyGroups() do -- p.vrnvghand:SetBodygroup(i,p:GetBodygroup(i)) -- end -- end -- for i=0,p:GetNumBodyGroups() do -- TRANSCARMTOPMWN_CMdlTemp:SetBodygroup(i,p:GetBodygroup(i)) -- end -- TRANSCARMTOPMWN_CMdlTemp:SetSkin(p:GetSkin()) -- TRANSCARMTOPMWN_CMdlTemp:SetParent(vm) -- TRANSCARMTOPMWN_CMdlTemp:SetModel(hand.savee_transcarmtopmwm_mdl) -- --cam.Start3D(EyePos(),EyeAngles(),p:GetFOV()) -- --if tomodify != hand then -- TRANSCARMTOPMWN_CMdlTemp:SetRenderOrigin(vm:GetPos()) -- TRANSCARMTOPMWN_CMdlTemp:SetRenderAngles(vm:GetAngles()) -- TRANSCARMTOPMWN_CMdlTemp:DrawModel() -- --print(hand:GetPos(Vector(0,0,0))) -- --hand:SetNoDraw(false) -- --print("SET!") -- elseif !on and hand.savee_transcarmtopmwm_hide then -- hand.savee_transcarmtopmwm_hide = false -- local playermodel = player_manager.TranslateToPlayerModelName( p:GetModel() ) -- --local t=player_manager.TranslatePlayerHands( playermodel ) -- --PrintTable(t) -- --[[if isfunction(hand.savee_transarmtopmwm_olddraw) then -- hand.Draw = hand.savee_transarmtopmwm_olddraw -- hand.savee_transarmtopmwm_olddraw = nil -- end]] -- -- --hand.GetRenderMesh = hand.savee_transcarmtopmwm_befmeshdraw -- if isnumber(hand.savee_transcarmtopmwm_callback) then -- hand:RemoveCallback("BuildBonePositions",hand.savee_transcarmtopmwm_callback) -- end -- debug.setmetatable(hand,FindMetaTable("Entity")) -- hand:SetRenderMode(hand.savee_transcarmtopmwm_befrender) -- hand:SetModel(player_manager.TranslatePlayerHands( playermodel ).model) -- hand.RenderOverride = hand.savee_transcarmtopmwm_oldrenderoverride -- hand.savee_transcarmtopmwm_oldrenderoverride = nil --移除 -- --hand:SetupBones() -- net.Start("transcarmtopmwm_netmsg") -- net.WriteBool(true) -- net.SendToServer() -- hand:SetMaterial(hand.savee_transcarmtopmwm_befmat) -- hand:SetColor(hand.savee_transcarmtopmwm_befcol) -- if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end -- -- for i,v in pairs(hand.savee_transcarmtopmwm_bonesdata) do -- hand:ManipulateBoneScale(i, v[1]) -- hand:ManipulateBonePosition(i, v[2]) -- if IsValid(p.vrnvghand) then -- p.vrnvghand:ManipulateBoneScale(i, v[1]) -- p.vrnvghand:ManipulateBonePosition(i,v[2]) -- end -- end -- hand.savee_transcarmtopmwm_bonesdata = nil -- end -- if !tomodify then -- --if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end -- TRANSCARMTOPMWN_CMdl = TRANSCARMTOPMWN_CMdlTemp -- else -- --SafeRemoveEntity(TRANSCARMTOPMWN_CMdlTemp) -- hand:SetModel(hand.savee_transcarmtopmwm_mdl) -- end -- --if IsValid(p.vrnvghand) then -- -- --print("YOUSHOULDNOTHAVEDONETHIS") -- -- --p.vrnvghand:SetMaterial("Models/effects/vol_light001") -- --end -- -- --NextThink = CurTime()+0.03 -- --return true --阻止默认vm绘制 --end local TFABefore hook.Add("PreDrawPlayerHands","savee_transcarmtopmwm",function(hand,vm) --do return end --if !Run then -- timer.Simple(5, function() -- Run = true -- end) -- return --end local p = LocalPlayer() --vm=p:GetViewModel() local w=p:GetActiveWeapon() if IsValid(w) and (weapons.IsBasedOn(w:GetClass(),"mg_base")) then local hand=p:GetHands() TRANSCARMTOPMWN_CMdl:Remove() local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 if on and !w:GetViewModel().m_CHands.transcarmtopmwm then --print(vm:GetNoDraw()) --print("CAL") local playermodel = player_manager.TranslateToPlayerModelName( LocalPlayer():GetModel() ) hand:SetModel(player_manager.TranslatePlayerHands( playermodel ).model) --elseif on then --print("CALL") --timer.Simple(0.1,function() -- if !IsValid(p) or !IsValid(w) then return end -- local ch=w:GetViewModel().m_CHands -- for i=0,p:GetBoneCount()-1 do -- local n=p:GetBoneName(i) -- local nn=p:GetBoneName(p:GetBoneParent(i)) -- if ((!ch:LookupBone(n) and !ch:LookupBone(nn)) --黑名单 -- or string.find(n,"Spine") or string.find(nn,"Spine") -- ) --白名单 -- and !string.find(n,"Wrist") and !string.find(n,"Elbow") and !string.find(n,"Shoulder") and !string.find(n,"Bicep") and !string.find(n,"Trapezius") -- then -- if GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 then -- -- hand:ManipulateBoneScale(i, Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval)) -- -- else -- -- hand:ManipulateBoneScale(i, Vector(0,0,0)) -- end -- hand:ManipulateBonePosition(i,Vector(myfunkinhugeval,0,myfunkinhugeval)) -- end -- end -- hand:SetModel(p:GetModel()) --end) end --TFABefore = false return end --print(w) --if w.IsTFAWeapon then TFABefore = true end PaintFunc(vm,hand,w.IsTFAWeapon) end) hook.Add("HUDPaint","savee_transcarmtopmwm",function(vm) --do return end --print("111,12341") local p = LocalPlayer() if !IsValid(p) then return end local hand = p:GetHands() --hand:SetNoDraw(true) --hand.RenderOverride = nil local w=p:GetActiveWeapon() if !IsValid(w) or !IsValid(hand) then return end --print(weapons.IsBasedOn(w:GetClass(),"mg_base")) --local playermodel = player_manager.TranslateToPlayerModelName( LocalPlayer():GetModel() ) --local mdl = player_manager.TranslatePlayerHands( playermodel ).model local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 if on and IsValid(w) and weapons.IsBasedOn(w:GetClass(),"mg_base") and !w:GetViewModel().m_CHands.transcarmtopmwm then if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end --p:GetHands():SetMaterial("phoenix_storms/metalfloor_2-3") --print(w:GetViewModel()) --PrintTable(w:GetViewModel():GetTable()) --PaintFunc(w:GetViewModel().m_CHands) --w:GetViewModel():SetMaterial("phoenix_storms/metalfloor_2-3") local wvm = w:GetViewModel() local ch=wvm.m_CHands local old = ch.RenderOverride local mod={} --hand:SetModel(p:GetModel()) if on and !ch.savee_transcarmtopmwm_bonesdata then ch.savee_transcarmtopmwm_bonesdata = {} for i=0,p:GetBoneCount()-1 do local n=p:GetBoneName(i) local nn=p:GetBoneName(p:GetBoneParent(i)) if Check(ch,n,nn) then mod[i]=true end end --ch:SetPos(Vector(1145,1145,1145)) end local baseScale = calcBaseScale(p) --ch:SetupBones() ch:AddCallback( "BuildBonePositions", function(ent,nb) for i = 0, nb - 1 do local mat = ent:GetBoneMatrix( i ) if ( !mat ) then continue end local scale = mat:GetScale() if mod[i] then --print(ent:GetBoneName(i)) mat:Scale( GetConVar("savee_transarmtopmwn_infscl"):GetInt() == 1 and Vector(myfunkinhugeval,myfunkinhugeval,myfunkinhugeval) or Vector(0,0,0) ) mat:SetTranslation(mat:GetTranslation() - p:GetAimVector()*114514) elseif autoscaling:GetBool() then local d = 1 + (baseScale - 1) * (1 + exscale:GetFloat()) scale:Mul(d) mat:Scale(scale) ent.CustomScale = scale end ent:SetBoneMatrix( i, mat ) end --ent:DrawModel() end) --p:GetHands():SetModel(p:GetModel()) --timer.Simple(0.1, function() -- if IsValid(ch) then ch.transcarmtopmwms2 = true end -- if IsValid(w) then -- w:Holster() -- w:Deploy() -- -- end --end) function ch:RenderOverride(flags) if (!self:CanDraw()) then return end local on = GetConVar("savee_transarmtopmwn_enable"):GetInt()==1 local tar= on and p or p:GetHands() --print(tar) self:SetModel(tar:GetModel()) --local p = self:GetParent():GetOwner():GetOwner() --print(p) self:SetSkin(tar:GetSkin()) for b = 0, tar:GetNumBodyGroups(), 1 do self:SetBodygroup(b, tar:GetBodygroup(b)) end if (VManip != nil) then --local oldmdl = p:GetHands():GetModel() p:GetHands():SetParent(self:GetParent()) --p:GetHands():SetModel(p:GetModel()) --p:GetHands():SetMaterial("") p:GetHands():DrawModel(flags) --for thermals --p:GetHands():SetMaterial("Models/effects/vol_light001") --p:GetHands():SetModel(oldmdl) --its a useless call outside of thermals but i dont care self:DrawModel(flags) else self:DrawModel(flags) end --print("OVR") end --function ch:Draw() print("1") end ch.transcarmtopmwm = true elseif w.IsTFAWeapon then if IsValid(TRANSCARMTOPMWN_CMdl) then TRANSCARMTOPMWN_CMdl:Remove() end end end) --[[if ( CLIENT ) then concommand.Add( "bones_cl", function( ply ) local ent = ply:GetEyeTrace().Entity if ( !IsValid( ent ) ) then return end ent:AddCallback( "BuildBonePositions", function( ent, numbones ) for i = 0, numbones - 1 do local mat = ent:GetBoneMatrix( i ) if ( !mat ) then continue end local scale = mat:GetScale() mat:Scale( Vector(124,0,1) ) ent:SetBoneMatrix( i, mat ) end end ) end ) end]]