代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2三0七.炸弹客(用红色护身符种炸弹客,购买遥控炸弹,放在地上按键盘Delete键引爆)
3
4 1.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playeractionpicker")的下一行插入以下内容:
5
6TheInput:AddKeyUpHandler(KEY_DELETE, function()
7 GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold")
8 inst:DoTaskInTime(0.1, function()
9 local pos = Vector3(inst.Transform:GetWorldPosition())
10 local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 100)
11 for k,v in pairs(ents) do
12 if v:HasTag("bomballright") and v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then
13 local pos1 = Vector3(v.Transform:GetWorldPosition())
14 local ents1 = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 15)
15 for k,i in pairs(ents1) do
16 if i.components.combat and i.components.health and not i.components.health:IsDead() and not i:HasTag("player") then
17 SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(i.Transform:GetWorldPosition())
18 i.components.health:Kill()
19 end
20 if i.components.workable and i.components.workable.workleft > 0 and not i.components.inventoryitem then
21 SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(i.Transform:GetWorldPosition())
22 i.components.workable:Destroy(v)
23 end
24 end
25 GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
26 SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
27 SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
28 SpawnPrefab("groundpoundring_fx").Transform:SetPosition(v.Transform:GetWorldPosition())
29 GetClock():DoLightningLighting()
30 GetPlayer().components.playercontroller:ShakeCamera(v, "FULL", 0.7, 0.02, .5, 40)
31 v:Remove()
32 end
33 end
34 end )
35end )
36
37
38 2.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/amulet.lua文件,在inst.AnimState:PlayAnimation("redamulet")的下一行插入以下内容:
39
40local function makebomber(inst)
41 local pt = inst:GetPosition()
42 local bomber = SpawnPrefab("amulet")
43 bomber.Transform:SetPosition(pt.x, pt.y, pt.z)
44 bomber.AnimState:SetBank("wilson")
45 bomber.AnimState:SetBuild("wx78")
46 bomber.AnimState:OverrideSymbol("swap_hat", "hat_catcoon", "swap_hat")
47 bomber.AnimState:OverrideSymbol("swap_body", "swap_krampus_sack", "backpack")
48 bomber.AnimState:OverrideSymbol("swap_body", "swap_krampus_sack", "swap_body")
49 bomber.AnimState:Show("HAT")
50 bomber.AnimState:Show("HAT_HAIR")
51 bomber.AnimState:Hide("HAIR_NOHAT")
52 bomber.AnimState:Hide("HAIR")
53 bomber.AnimState:Hide("ARM_carry")
54 bomber.AnimState:Show("ARM_normal")
55 bomber.Transform:SetFourFaced()
56 bomber.AnimState:PlayAnimation("idle")
57 bomber:RemoveComponent("equippable")
58 bomber:RemoveComponent("inventoryitem")
59 bomber:RemoveComponent("finiteuses")
60 bomber:RemoveComponent("deployable")
61 MakeLargeBurnable(bomber)
62 MakeLargePropagator(bomber)
63 bomber:AddComponent("trader")
64 bomber.components.trader:SetAcceptTest(function(bomber, item)
65 if GetPlayer().components.inventory:Has("goldnugget", 10) then
66 if item.prefab == "goldnugget" then
67 return true
68 end
69 end
70 return false
71 end )
72 bomber.components.trader.onaccept = function(bomber, giver, item)
73 GetPlayer().components.inventory:ConsumeByName("goldnugget", 9)
74 GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
75 bomber.AnimState:PlayAnimation("give")
76 local bomb = SpawnPrefab("amulet")
77 bomb.AnimState:SetBank("bee_mine_maxwell")
78 bomb.AnimState:SetBuild("bee_mine_maxwell")
79 bomb.AnimState:PlayAnimation("idle")
80 bomb.Transform:SetScale(0.8, 0.8, 0.8)
81 bomb.AnimState:SetMultColour(255/255,255/255,0/255,1)
82 bomb.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
83 bomb:AddComponent("named")
84 bomb.components.named:SetName("Bomb")
85 local minimap = bomb.entity:AddMiniMapEntity()
86 minimap:SetIcon( "beemine.png" )
87 bomb:RemoveComponent("equippable")
88 bomb:RemoveComponent("inventoryitem")
89 bomb:RemoveComponent("finiteuses")
90 bomb:RemoveComponent("deployable")
91 bomb:AddComponent("inventoryitem")
92 bomb.components.inventoryitem:ChangeImageName("beemine")
93 bomb.components.inventoryitem:SetOnDroppedFn(function()
94 bomb:AddTag("bomballright")
95 end )
96 bomb.components.inventoryitem:SetOnPickupFn(function()
97 bomb:RemoveTag("bomballright")
98 end )
99 bomb.components.inventoryitem:SetOnPutInInventoryFn(function()
100 bomb:RemoveTag("bomballright")
101 end )
102 bomb:AddTag("bomb")
103 GetPlayer().components.inventory:GiveItem(bomb)
104 end
105 bomber:AddTag("bomber")
106 for k = 1, 11 do
107 local result_offset = FindValidPositionByFan(1 * 2 * PI, 2, 11, function(offset)
108 local x,y,z = (pt + offset):Get()
109 local ents = TheSim:FindEntities(x,y,z , 1)
110 return not next(ents)
111 end)
112 if result_offset then
113 local bombbye = SpawnPrefab("amulet")
114 bombbye.Transform:SetPosition((pt + result_offset):Get())
115 bombbye.AnimState:SetBank("bee_mine_maxwell")
116 bombbye.AnimState:SetBuild("bee_mine_maxwell")
117 bombbye.AnimState:PlayAnimation("idle")
118 bombbye.Transform:SetScale(0.8, 0.8, 0.8)
119 bombbye.AnimState:SetMultColour(255/255,255/255,0/255,1)
120 bombbye.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
121 bombbye:RemoveComponent("equippable")
122 bombbye:RemoveComponent("inventoryitem")
123 bombbye:RemoveComponent("finiteuses")
124 bombbye:RemoveComponent("deployable")
125 MakeLargeBurnable(bombbye)
126 MakeLargePropagator(bombbye)
127 bombbye:AddTag("NOCLICK")
128 bombbye:AddTag("bombbye")
129 end
130 end
131end
132local function OnDeploy (inst, pt)
133 makebomber(inst)
134 inst:Remove()
135end
136 inst:AddComponent("deployable")
137 inst.components.deployable.ondeploy = OnDeploy
138local function onsave(inst, data)
139 if inst:HasTag("bomber") then
140 data.bomber = true
141 end
142 if inst:HasTag("bombbye") then
143 data.bombbye = true
144 end
145 if inst:HasTag("bomb") then
146 data.bomb = true
147 end
148 if inst:HasTag("bomballright") then
149 data.bomballright = true
150 end
151end
152local function onload(inst, data)
153 if data and data.bomber then
154 makebomber(inst)
155 inst:Remove()
156 end
157 if data and data.bombbye then
158 inst:Remove()
159 end
160 if data and data.bomb then
161 inst.AnimState:SetBank("bee_mine_maxwell")
162 inst.AnimState:SetBuild("bee_mine_maxwell")
163 inst.AnimState:PlayAnimation("idle")
164 inst.Transform:SetScale(0.8, 0.8, 0.8)
165 inst.AnimState:SetMultColour(255/255,255/255,0/255,1)
166 inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
167 inst:AddComponent("named")
168 inst.components.named:SetName("Bomb")
169 local minimap = inst.entity:AddMiniMapEntity()
170 minimap:SetIcon( "beemine.png" )
171 inst:RemoveComponent("equippable")
172 inst:RemoveComponent("inventoryitem")
173 inst:RemoveComponent("finiteuses")
174 inst:RemoveComponent("deployable")
175 inst:AddComponent("inventoryitem")
176 inst.components.inventoryitem:ChangeImageName("beemine")
177 inst.components.inventoryitem:SetOnDroppedFn(function()
178 inst:AddTag("bomballright")
179 end )
180 inst.components.inventoryitem:SetOnPickupFn(function()
181 inst:RemoveTag("bomballright")
182 end )
183 inst.components.inventoryitem:SetOnPutInInventoryFn(function()
184 inst:RemoveTag("bomballright")
185 end )
186 inst:AddTag("bomb")
187 end
188 if data and data.bomballright then
189 inst:AddTag("bomballright")
190 end
191end
192 inst.OnSave = onsave
193 inst.OnLoad = onload
194
195 即可用红色护身符种炸弹客,给炸弹客10个黄金(拿着黄金对炸弹客点鼠标左键),可购买遥控炸弹,将炸弹放在地上,按键盘Delete键可遥控引爆,能炸死除主角外的任何生物,炸毁建筑、树木等。遥控炸弹在小地图上显示为炸弹图标,引爆时不要让同伴靠近。不想要炸弹客了,烧掉即可(拿着火炬对其点鼠标右键)。红色护身符在魔法选项(画着红骷髅)下,用3个黄金、2个噩梦燃料、1个红宝石制造