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

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


  1
  2.炸弹客(用红色护身符种炸弹客,购买遥控炸弹,放在地上按键盘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个红宝石制造