代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。

原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html


 1
 2二二六.遁形术(按键盘I键主角变身随机小动物,敌人会失去攻击目标,再按I键变回人
 3
 4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playercontroller")的下一行插入以下内容:
 5
 6TheInput:AddKeyUpHandler(KEY_I, function()
 7	if not inst:HasTag("chameleon") then
 8	   inst.components.locomotor:Stop()
 9	   inst.components.talker:ShutUp()
10	   inst.components.playercontroller:Enable(false)
11	   local head = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.HEAD)
12	   GetPlayer().components.inventory:DropItem(head)
13	   local hands = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS)
14	   GetPlayer().components.inventory:DropItem(hands)
15	   local body = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.BODY)
16	   GetPlayer().components.inventory:DropItem(body)
17	   inst.components.health:SetInvincible(true)
18	   inst.components.hunger:Pause()
19	   inst.components.sanity.ignore = true
20	   inst.components.temperature:SetTemp(20)
21	   SpawnPrefab("collapse_small").Transform:SetPosition(inst.Transform:GetWorldPosition())
22	   inst:DoTaskInTime(0.3, function() 
23		   inst:AddTag("chameleon")
24		   inst.chameleon = inst:DoPeriodicTask(.5, function()
25			   local pos = Vector3(inst.Transform:GetWorldPosition())
26			   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 25)
27			   for k,v in pairs(ents) do
28				   if v.components.combat and v.components.combat.target and v.components.combat.target == inst then
29					  v.components.combat:SetTarget(nil)
30				   end
31			   end
32		   end )
33		   if math.random()<.18 then
34			  inst.AnimState:SetBank("rabbit")
35			  inst.AnimState:SetBuild("rabbit_build")
36			  inst.AnimState:PlayAnimation("idle")
37			  local rabbitsounds = { scream = "dontstarve/rabbit/scream", hurt = "dontstarve/rabbit/scream_short", }
38			  inst.sounds = rabbitsounds
39			  inst.data = {}
40			  inst:SetStateGraph("SGrabbit")
41			  shadow:SetSize( 1, .75 )
42		   elseif math.random()<.36 then
43			  inst.AnimState:SetBank("perd")
44			  inst.AnimState:SetBuild("perd")
45			  inst.AnimState:PlayAnimation("idle_loop")
46			  inst:SetStateGraph("SGperd")
47			  shadow:SetSize( 1.5, .75 )
48		   elseif math.random()<.54 then
49			  inst.AnimState:SetBank("frog")
50			  inst.AnimState:SetBuild("frog")
51			  inst.AnimState:PlayAnimation("idle")
52			  inst:SetStateGraph("SGfrog")
53			  shadow:SetSize( 1.5, .75 )
54		   elseif math.random()<.72 then
55			  inst.AnimState:SetBank("butterfly")
56			  inst.AnimState:SetBuild("butterfly_basic")
57			  inst.AnimState:PlayAnimation("idle")
58			  inst:SetStateGraph("SGbutterfly")
59			  shadow:SetSize( .8, .5 )
60		   else
61			  inst.AnimState:SetBank("bee")
62			  inst.AnimState:SetBuild("bee_build")
63			  inst.AnimState:PlayAnimation("idle")
64			  local workersounds = { takeoff = "dontstarve/bee/bee_takeoff", attack = "dontstarve/bee/bee_attack", buzz = "dontstarve/bee/bee_fly_LP", hit = "dontstarve/bee/bee_hurt", death = "dontstarve/bee/bee_death", }
65			  inst.sounds = workersounds
66			  inst:SetStateGraph("SGbee")
67			  shadow:SetSize( .8, .5 )
68		   end
69		   inst.components.playercontroller:Enable(true)
70	   end )
71	else
72		inst.components.locomotor:Stop()
73		inst.components.talker:ShutUp()
74		inst.components.playercontroller:Enable(false)
75		SpawnPrefab("collapse_small").Transform:SetPosition(inst.Transform:GetWorldPosition())
76		inst:DoTaskInTime(0.3, function()
77			inst:RemoveTag("chameleon")
78			if inst.chameleon then inst.chameleon:Cancel() inst.chameleon = nil end
79			inst.AnimState:SetBank("wilson")
80			inst.AnimState:SetBuild(name)
81			inst.AnimState:PlayAnimation("idle")
82			inst:SetStateGraph("SGwilson")
83			shadow:SetSize( 1.3, .6 )
84			inst.components.health:SetInvincible(false)
85			inst.components.hunger:Resume()
86			inst.components.sanity.ignore = false
87			inst.components.temperature:SetTemp(nil)
88			inst.components.playercontroller:Enable(true)
89		end )
90	end
91end )
92
93	即可在被敌人追得穷途末路时,大声喊出咒语“哎呀妈呀”(请使用东北口音),并按键盘I键,主角随机变身为兔子、火鸡、青蛙、蝴蝶、蜜蜂等小动物,敌人会被迷惑,从而失去攻击目标,让你可以成功脱身。每种小动物各有特色,火鸡可以快速采摘植物、蜜蜂可以蛰敌人等,体验一下作小动物的感觉吧。运用遁形术变身时,血、饥饿、脑会锁死,穿戴的装备会掉在地上,不想让其掉落,就提前卸下。再次按键盘I键,可变回主角