游民星空 > 攻略秘籍 > 攻略 > 正文

饥荒 全人物解锁及主角自动回血等实用修改教程

2015-01-21 11:28:46 来源:互联网 作者:易宁 我要投稿

第201页:私家军

展开

二零一.私家军(用火药种私家军,可装备盔甲、帽子,需要支付工资)

  用记事本打开游戏目录\data\DLC0001\scripts\prefabs\gunpowder.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

  local function itemtest(inst, item, slot)

  if item.prefab == "armorgrass" or item.prefab == "armorwood" or item.prefab == "armormarble" or item.prefab == "armor_sanity" or item.prefab == "armorruins" or item.prefab == "footballhat" or item.prefab == "ruinshat" or item.prefab == "beefalohat" or item.prefab == "featherhat" or item.prefab == "goldnugget" then

  return true

  end

  return false

  end

  local slotpos = { Vector3(0,32+4,0), Vector3(0,-(32+4),0), Vector3(0,-(64+32+8+4),0)}

  local widgetbuttoninfo = {

  text = "Go",

  position = Vector3(0, -165, 0),

  fn = function(inst)

  if inst:HasTag("mercenary") then

  if inst.components.container:Has("goldnugget", 20) then inst:AddTag("cango") end

  inst.components.container:Close(GetPlayer())

  GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")

  inst.AnimState:Hide("HAT")

  inst.AnimState:Hide("HAT_HAIR")

  inst.AnimState:Show("HAIR_NOHAT")

  inst.AnimState:Show("HAIR")

  inst.AnimState:ClearOverrideSymbol("swap_body")

  for k,v in pairs(inst.components.container.slots) do

  if v.prefab == "footballhat" or v.prefab == "ruinshat" or v.prefab == "beefalohat" or v.prefab == "featherhat" then

  inst.AnimState:Show("HAT")

  inst.AnimState:Show("HAT_HAIR")

  inst.AnimState:Hide("HAIR_NOHAT")

  inst.AnimState:Hide("HAIR")

  end

  if v and v.prefab == "armorgrass" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_grass", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(15)

  end )

  end

  if v and v.prefab == "armorwood" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(20)

  end )

  end

  if v and v.prefab == "armormarble" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_marble", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(25)

  end )

  end

  if v and v.prefab == "armor_sanity" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_sanity", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(30)

  end )

  end

  if v and v.prefab == "armorruins" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_ruins", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(35)

  end )

  end

  if v and v.prefab == "footballhat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_football", "swap_hat")

  end

  if v and v.prefab == "ruinshat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_ruins", "swap_hat")

  end

  if v and v.prefab == "beefalohat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_beefalo", "swap_hat")

  end

  if v and v.prefab == "featherhat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_feather", "swap_hat")

  end

  end

  end

  end }

  inst:AddComponent("container")

  inst.components.container.widgetbuttoninfo = widgetbuttoninfo

  inst.components.container:SetNumSlots(#slotpos)

  inst.components.container.widgetslotpos = slotpos

  inst.components.container.widgetpos = Vector3(0,180,0)

  inst.components.container.side_align_tip = 160

  inst.components.container.canbeopened = false

  inst.components.container.itemtestfn = itemtest

  inst.components.container.onopenfn = function(inst) inst:RemoveTag("cango") end

  local items = { SWORD = "swap_spear" }

  local function EquipItem(inst, item)

  if item then

  inst.AnimState:OverrideSymbol("swap_object", item, item)

  inst.AnimState:Show("ARM_carry")

  inst.AnimState:Hide("ARM_normal")

  end

  end

  inst.items = items

  inst.equipfn = EquipItem

  EquipItem(inst)

  local function OnDeploy (inst, pt)

  if GetPlayer().components.inventory:Has("goldnugget", 100) then

  GetPlayer().components.inventory:ConsumeByName("goldnugget", 100)

  local mercenary = SpawnPrefab("gunpowder")

  mercenary.Transform:SetPosition(pt.x, pt.y, pt.z)

  mercenary.AnimState:SetBank("wilson")

  mercenary.AnimState:SetBuild("wilson")

  mercenary.AnimState:PlayAnimation("idle")

  mercenary.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear")

  mercenary.AnimState:Show("ARM_carry")

  mercenary.AnimState:Hide("ARM_normal")

  mercenary.Transform:SetFourFaced()

  local shadow = mercenary.entity:AddDynamicShadow()

  shadow:SetSize( 1.3, .6 )

  MakeCharacterPhysics(mercenary, 75, .5)

  local minimap = mercenary.entity:AddMiniMapEntity()

  minimap:SetIcon( "researchlab.png" )

  mercenary:AddTag("mercenary")

  mercenary:AddComponent("locomotor")

  mercenary.components.locomotor.walkspeed = 8

  mercenary.components.locomotor.runspeed = 15

  mercenary:SetStateGraph("SGshadowwaxwell")

  mercenary:RemoveComponent("stackable")

  mercenary:RemoveComponent("explosive")

  mercenary:RemoveComponent("inventoryitem")

  mercenary:RemoveComponent("burnable")

  mercenary:RemoveComponent("propagator")

  mercenary:RemoveComponent("deployable")

  mercenary:RemoveComponent("bait")

  mercenary:RemoveTag("molebait")

  mercenary:AddComponent("follower")

  mercenary:AddComponent("inventory")

  mercenary.components.container.canbeopened = true

  mercenary:AddComponent("combat")

  mercenary.components.combat.hiteffectsymbol = "torso"

  mercenary.components.combat:SetDefaultDamage(50)

  mercenary.components.combat:SetRange(2, 3)

  mercenary.components.combat:SetAttackPeriod(0.5)

  mercenary.components.combat:SetRetargetFunction(2, function(mercenary)

  if not mercenary.components.health:IsDead() then

  return FindEntity(mercenary, 25, function(guy)

  if guy.components.health and not guy.components.health:IsDead() then

  return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")

  end

  end)

  end

  end )

  mercenary.components.combat:SetKeepTargetFunction(function(mercenary, target) return target and target:IsValid() end )

  mercenary:AddComponent("health")

  mercenary.components.health:SetMaxHealth(1500)

  mercenary.components.health.nofadeout = true

  mercenary:DoPeriodicTask(1, function(mercenary)

  if mercenary:HasTag("cango") then

  if not mercenary.components.container:Has("goldnugget", 20) then

  mercenary.AnimState:SetBloomEffectHandle("")

  mercenary.components.locomotor:Stop()

  mercenary:SetBrain(nil)

  mercenary.components.follower:SetLeader(nil)

  else

  mercenary.AnimState:SetBloomEffectHandle("shaders/anim.ksh")

  local brain = require "brains/abigailbrain"

  mercenary:SetBrain(brain)

  mercenary:RestartBrain()

  mercenary.components.follower:SetLeader(GetPlayer())

  end

  else

  mercenary.AnimState:SetBloomEffectHandle("")

  mercenary.components.locomotor:Stop()

  mercenary:SetBrain(nil)

  mercenary.components.follower:SetLeader(nil)

  end

  end )

  mercenary:DoPeriodicTask(480, function(mercenary)

  if mercenary.components.container:Has("goldnugget", 20) then

  mercenary.components.container:ConsumeByName("goldnugget", 20)

  mercenary.components.health:DoDelta(500)

  end

  end )

  mercenary:AddComponent( "playerprox" )

  mercenary.components.playerprox:SetDist(3,5)

  mercenary.components.playerprox:SetOnPlayerNear(function(mercenary)

  mercenary.components.locomotor.walkspeed = 1

  mercenary.components.locomotor.runspeed = 2

  end )

  mercenary.components.playerprox:SetOnPlayerFar(function(mercenary)

  mercenary.components.locomotor.walkspeed = 8

  mercenary.components.locomotor.runspeed = 15

  end )

  end

  inst.components.stackable:Get():Remove()

  end

  inst:AddComponent("deployable")

  inst.components.deployable.ondeploy = OnDeploy

  local function onsave(inst, data)

  if inst:HasTag("mercenary") then

  data.mercenary = true

  end

  if inst:HasTag("cango") then

  data.cango = true

  end

  end

  local function onload(inst, data)

  if data and data.mercenary then

  inst.AnimState:SetBank("wilson")

  inst.AnimState:SetBuild("wilson")

  inst.AnimState:PlayAnimation("idle")

  inst.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear")

  inst.AnimState:Show("ARM_carry")

  inst.AnimState:Hide("ARM_normal")

  inst.Transform:SetFourFaced()

  local shadow = inst.entity:AddDynamicShadow()

  shadow:SetSize( 1.3, .6 )

  MakeCharacterPhysics(inst, 75, .5)

  local minimap = inst.entity:AddMiniMapEntity()

  minimap:SetIcon( "researchlab.png" )

  inst:AddTag("mercenary")

  inst:AddComponent("locomotor")

  inst.components.locomotor.walkspeed = 8

  inst.components.locomotor.runspeed = 15

  inst:SetStateGraph("SGshadowwaxwell")

  inst:RemoveComponent("stackable")

  inst:RemoveComponent("explosive")

  inst:RemoveComponent("inventoryitem")

  inst:RemoveComponent("burnable")

  inst:RemoveComponent("propagator")

  inst:RemoveComponent("deployable")

  inst:RemoveComponent("bait")

  inst:RemoveTag("molebait")

  inst:AddComponent("follower")

  inst:AddComponent("inventory")

  inst.components.container.canbeopened = true

  inst:AddComponent("combat")

  inst.components.combat.hiteffectsymbol = "torso"

  inst.components.combat:SetDefaultDamage(50)

  inst.components.combat:SetRange(2, 3)

  inst.components.combat:SetAttackPeriod(0.5)

  inst.components.combat:SetRetargetFunction(2, function(inst)

  if not inst.components.health:IsDead() then

  return FindEntity(inst, 25, function(guy)

  if guy.components.health and not guy.components.health:IsDead() then

  return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")

  end

  end)

  end

  end )

  inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )

  inst:AddComponent("health")

  inst.components.health:SetMaxHealth(1500)

  inst.components.health.nofadeout = true

  inst:DoPeriodicTask(1, function(inst)

  if inst:HasTag("cango") then

  if not inst.components.container:Has("goldnugget", 20) then

  inst.AnimState:SetBloomEffectHandle("")

  inst.components.locomotor:Stop()

  inst:SetBrain(nil)

  inst.components.follower:SetLeader(nil)

  else

  inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")

  local brain = require "brains/abigailbrain"

  inst:SetBrain(brain)

  inst:RestartBrain()

  inst.components.follower:SetLeader(GetPlayer())

  end

  else

  inst.AnimState:SetBloomEffectHandle("")

  inst.components.locomotor:Stop()

  inst:SetBrain(nil)

  inst.components.follower:SetLeader(nil)

  end

  end )

  inst:DoPeriodicTask(480, function(inst)

  if inst.components.container:Has("goldnugget", 20) then

  inst.components.container:ConsumeByName("goldnugget", 20)

  inst.components.health:DoDelta(500)

  end

  end )

  inst:AddComponent( "playerprox" )

  inst.components.playerprox:SetDist(3,5)

  inst.components.playerprox:SetOnPlayerNear(function(inst)

  inst.components.locomotor.walkspeed = 1

  inst.components.locomotor.runspeed = 2

  end )

  inst.components.playerprox:SetOnPlayerFar(function(inst)

  inst.components.locomotor.walkspeed = 8

  inst.components.locomotor.runspeed = 15

  end )

  inst.AnimState:Hide("HAT")

  inst.AnimState:Hide("HAT_HAIR")

  inst.AnimState:Show("HAIR_NOHAT")

  inst.AnimState:Show("HAIR")

  inst.AnimState:ClearOverrideSymbol("swap_body")

  for k,v in pairs(inst.components.container.slots) do

  if v.prefab == "footballhat" or v.prefab == "ruinshat" or v.prefab == "beefalohat" or v.prefab == "featherhat" then

  inst.AnimState:Show("HAT")

  inst.AnimState:Show("HAT_HAIR")

  inst.AnimState:Hide("HAIR_NOHAT")

  inst.AnimState:Hide("HAIR")

  end

  if v and v.prefab == "armorgrass" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_grass", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(15)

  end )

  end

  if v and v.prefab == "armorwood" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(20)

  end )

  end

  if v and v.prefab == "armormarble" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_marble", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(25)

  end )

  end

  if v and v.prefab == "armor_sanity" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_sanity", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(30)

  end )

  end

  if v and v.prefab == "armorruins" then

  inst.AnimState:OverrideSymbol("swap_body", "armor_ruins", "swap_body")

  inst:ListenForEvent("attacked", function(inst, data)

  inst.components.health:DoDelta(35)

  end )

  end

  if v and v.prefab == "footballhat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_football", "swap_hat")

  end

  if v and v.prefab == "ruinshat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_ruins", "swap_hat")

  end

  if v and v.prefab == "beefalohat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_beefalo", "swap_hat")

  end

  if v and v.prefab == "featherhat" then

  inst.AnimState:OverrideSymbol("swap_hat", "hat_feather", "swap_hat")

  end

  end

  end

  if data and data.cango then

  inst:AddTag("cango")

  end

  end

  inst.OnSave = onsave

  inst.OnLoad = onload

  即可在身上有100个黄金时,用火药种私家军,将花费100个黄金,身上黄金数不足时不会种出来。鼠标左键点击他可打开格子,放入至少20个黄金后,点Go按钮,会跟随你打仗。追上他用鼠标左键再次点击,可让他停在原地,想让他继续跟随,就再点Go按钮即可。私家军士兵每天的工资是20个黄金,自动从他身上的黄金中扣除(并同时回补三分之一的血),如果他身上的黄金数不足20个时,将罢工,请及时续费。如果私家军的格子中有盔甲、帽子,点Go按钮会自动装备。装备盔甲可提高私家军的防御力,按防御力由低到高排序为草盔甲、木盔甲、大理石盔甲、夜魔盔甲、远古盔甲。装备帽子只起到装饰作用,可装备的帽子有猪皮帽、远古帽、牛毛帽、羽毛帽。不要在他的格子里放2个盔甲或2个帽子,他只会选择1个装备。私家军在小地图上显示为科学机器的图标,可以方便地找到他们的位置。火药在科学选项(画着原子)下,用1个烂鸡蛋、1个木炭、1个硝石制造

更多相关内容请关注:饥荒专区

责任编辑:Shy夏夏

上一页 201 202 203 204 205 206 207 208 209 210 211 下一页
友情提示:支持键盘左右键“← →”翻页

本文是否解决了您的问题

文章内容导航
游民星空APP
随手浏览游戏攻略
code
攻略合集
单机游戏下载
休闲娱乐
综合热点资讯
游民星空联运游戏