代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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键,可变回主角