YN251-我的王国(用远古短棒种国王雕像,可获得税收,有警察巡逻并听你调遣)
代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。 原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html 二五一.我的王国(用远古短棒种国王雕像,可获得税收,有警察巡逻并听你调遣) 用MT管理器打开游戏目录/assets/scripts/prefabs/ruins_bat.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容: 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 createguru(inst) local pt = inst:GetPosition() local guru = SpawnPrefab("ruins_bat") guru.Transform:SetPosition(pt.x, pt.y, pt.z) guru.AnimState:SetBank("wilson") if GetPlayer().prefab == "wilson" then guru.AnimState:SetBuild("wilson") end if GetPlayer().prefab == "wendy" then guru.AnimState:SetBuild("wendy") end if GetPlayer().prefab == "wes" then guru.AnimState:SetBuild("wes") end if GetPlayer().prefab == "wickerbottom" then guru.AnimState:SetBuild("wickerbottom") end if GetPlayer().prefab == "willow" then guru.AnimState:SetBuild("willow") end if GetPlayer().prefab == "wolfgang" then guru.AnimState:SetBuild("wolfgang") end if GetPlayer().prefab == "wx78" then guru.AnimState:SetBuild("wx78") end if GetPlayer().prefab == "woodie" then guru.AnimState:SetBuild("woodie") end if GetPlayer().prefab == "waxwell" then guru.AnimState:SetBuild("waxwell") end if GetPlayer().prefab == "wathgrithr" then guru.AnimState:SetBuild("wathgrithr") end if GetPlayer().prefab == "webber" then guru.AnimState:SetBuild("webber") end guru.AnimState:PlayAnimation("idle") guru.AnimState:OverrideSymbol("swap_object", "swap_cane", "swap_cane") guru.AnimState:Hide("ARM_normal") guru.AnimState:Show("ARM_carry") guru.AnimState:OverrideSymbol("swap_hat", "hat_ruins", "swap_hat") guru.AnimState:Show("HAT") guru.AnimState:Show("HAT_HAIR") guru.AnimState:Hide("HAIR_NOHAT") guru.AnimState:Hide("HAIR") guru.Transform:SetFourFaced() guru.Transform:SetRotation( 0 ) guru.Transform:SetScale(3.5, 3.5, 3.5) local shadow = guru.entity:AddDynamicShadow() shadow:SetSize( 6, 3.5 ) local minimap = guru.entity:AddMiniMapEntity() minimap:SetIcon( "obelisk.png" ) guru.AnimState:SetBloomEffectHandle("shaders/anim.ksh") guru:AddTag("guru") guru:RemoveTag("sharp") guru:RemoveComponent("weapon") guru:RemoveComponent("finiteuses") guru:RemoveComponent("inventoryitem") guru:RemoveComponent("equippable") guru:RemoveComponent("deployable") local light = guru.entity:AddLight() light:SetFalloff(1) light:SetIntensity(.8) light:SetRadius(10) light:SetColour(180/255, 195/255, 50/255) light:Enable(true) guru:AddComponent("workable") guru.components.workable:SetWorkAction(ACTIONS.HAMMER) guru.components.workable:SetWorkLeft(5) guru.components.workable:SetOnFinishCallback(function(guru) SpawnPrefab("collapse_big").Transform:SetPosition(guru.Transform:GetWorldPosition()) GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood") guru:Remove() end ) guru:AddComponent("pickable") guru.components.pickable:SetUp("goldnugget", 480, math.random(15,25)) guru.components.pickable:SetOnPickedFn(function(guru) guru.AnimState:SetBloomEffectHandle("") end ) guru.components.pickable:SetOnRegenFn(function(guru) guru.AnimState:SetBloomEffectHandle("shaders/anim.ksh") end ) guru:ListenForEvent( "daytime", function() for k = 1,math.random(10,25) do local pt0 = guru:GetPosition() local ground = GetWorld() local x = pt0.x+(math.random(50)-math.random(50)) local z = pt0.z+(math.random(50)-math.random(50)) local tile = ground.Map:GetTileAtPoint(x,0, z) if tile ~= GROUND.IMPASSABLE and tile ~= GROUND.INVALID then local militia = SpawnPrefab("ruins_bat") militia.Transform:SetPosition(x,0,z) militia.AnimState:SetBank("wilson") local buildnames = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"} local buildname = buildnames[math.random(#buildnames)] militia.AnimState:SetBuild(buildname) militia.AnimState:OverrideSymbol("swap_hat", "hat_walrus", "swap_hat") militia.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body") militia.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear") militia.AnimState:Show("HAT") militia.AnimState:Show("HAT_HAIR") militia.AnimState:Hide("HAIR_NOHAT") militia.AnimState:Hide("HAIR") militia.AnimState:Hide("ARM_normal") militia.AnimState:Show("ARM_carry") militia.AnimState:PlayAnimation("idle") militia.Transform:SetFourFaced() local shadow = militia.entity:AddDynamicShadow() shadow:SetSize( 1.3, .6 ) MakeCharacterPhysics(militia, 75, .5) local minimap = militia.entity:AddMiniMapEntity() minimap:SetIcon( "statue_small.png" ) militia:AddTag("militia") militia:AddComponent("locomotor") militia.components.locomotor.walkspeed = 5 militia.components.locomotor.runspeed = 10 militia:SetStateGraph("SGshadowwaxwell") local brain = require "brains/frogbrain" militia:SetBrain(brain) militia:RemoveTag("sharp") militia:RemoveComponent("weapon") militia:RemoveComponent("finiteuses") militia:RemoveComponent("inventoryitem") militia:RemoveComponent("equippable") militia:RemoveComponent("deployable") militia:AddComponent("follower") militia:AddComponent("knownlocations") militia:AddComponent("health") militia.components.health:SetMaxHealth(1200) militia.components.health.nofadeout = true militia:AddComponent("combat") militia.components.combat:SetDefaultDamage(20) militia.components.combat:SetAttackPeriod(1) militia.components.combat.hiteffectsymbol = "torso" militia.components.combat:SetRange(2, 3) militia.components.combat:SetRetargetFunction(2, function(militia) if not militia.components.health:IsDead() then return FindEntity(militia, 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 ) militia.components.combat:SetKeepTargetFunction(function(militia, target) return target and target:IsValid() end ) militia:ListenForEvent("attacked", function(militia, data) militia.components.combat:SetTarget(data.attacker) end ) militia.components.inspectable.getstatus = function(militia) if not militia:HasTag("letsgo") then local brain = require "brains/abigailbrain" militia:SetBrain(brain) militia:RestartBrain() militia.components.follower:SetLeader(GetPlayer()) militia:AddTag("letsgo") else local brain = require "brains/frogbrain" militia:SetBrain(brain) militia:RestartBrain() militia.components.follower:SetLeader(nil) militia:RemoveTag("letsgo") end end militia:ListenForEvent( "nighttime", function() militia:Remove() end , GetWorld()) end end end , GetWorld()) end local function OnDeploy (inst, pt) if GetPlayer().components.inventory:Has("goldnugget", 1000) then GetPlayer().components.inventory:ConsumeByName("goldnugget", 1000) createguru(inst) inst:Remove() end end inst:AddComponent("deployable") inst.components.deployable.ondeploy = OnDeploy local function onsave(inst, data) if inst:HasTag("guru") then data.guru = true end if inst:HasTag("militia") then data.militia = true end if inst:HasTag("letsgo") then data.letsgo = true end end local function onload(inst, data) if data and data.guru then createguru(inst) inst:Remove() end if data and data.militia then inst.AnimState:SetBank("wilson") local buildnames = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"} local buildname = buildnames[math.random(#buildnames)] inst.AnimState:SetBuild(buildname) inst.AnimState:OverrideSymbol("swap_hat", "hat_walrus", "swap_hat") inst.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body") inst.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear") inst.AnimState:Show("HAT") inst.AnimState:Show("HAT_HAIR") inst.AnimState:Hide("HAIR_NOHAT") inst.AnimState:Hide("HAIR") inst.AnimState:Hide("ARM_normal") inst.AnimState:Show("ARM_carry") inst.AnimState:PlayAnimation("idle") inst.Transform:SetFourFaced() local shadow = inst.entity:AddDynamicShadow() shadow:SetSize( 1.3, .6 ) MakeCharacterPhysics(inst, 75, .5) local minimap = inst.entity:AddMiniMapEntity() minimap:SetIcon( "statue_small.png" ) inst:AddTag("militia") inst:AddComponent("locomotor") inst.components.locomotor.walkspeed = 5 inst.components.locomotor.runspeed = 10 inst:SetStateGraph("SGshadowwaxwell") local brain = require "brains/frogbrain" inst:SetBrain(brain) inst:RemoveTag("sharp") inst:RemoveComponent("weapon") inst:RemoveComponent("finiteuses") inst:RemoveComponent("inventoryitem") inst:RemoveComponent("equippable") inst:RemoveComponent("deployable") inst:AddComponent("follower") inst:AddComponent("knownlocations") inst:AddComponent("health") inst.components.health:SetMaxHealth(1200) inst.components.health.nofadeout = true inst:AddComponent("combat") inst.components.combat:SetDefaultDamage(20) inst.components.combat:SetAttackPeriod(1) inst.components.combat.hiteffectsymbol = "torso" inst.components.combat:SetRange(2, 3) 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:ListenForEvent("attacked", function(inst, data) inst.components.combat:SetTarget(data.attacker) end ) inst.components.inspectable.getstatus = function(inst) if not inst:HasTag("letsgo") then local brain = require "brains/abigailbrain" inst:SetBrain(brain) inst:RestartBrain() inst.components.follower:SetLeader(GetPlayer()) inst:AddTag("letsgo") else local brain = require "brains/frogbrain" inst:SetBrain(brain) inst:RestartBrain() inst.components.follower:SetLeader(nil) inst:RemoveTag("letsgo") end end inst:ListenForEvent( "nighttime", function() inst:Remove() end , GetWorld()) end if data and data.letsgo then local brain = require "brains/abigailbrain" inst:SetBrain(brain) inst:RestartBrain() inst.components.follower:SetLeader(GetPlayer()) inst:AddTag("letsgo") end end inst.OnSave = onsave inst.OnLoad = onload 即可在身上有1000个黄金时,用远古短棒种国王雕像(你自己的形象),宣誓你在这块大陆上的主权,将消费1000个黄金,身上黄金数不足时,不会种出雕像。当雕像发光时,代表当地的税收已经上缴(每日一次),用鼠标左键点雕像,可收到税款。每天白天,雕像周围会有警察巡逻,黑夜将离去,他们会攻击任何来犯的敌人。鼠标左键点警察(不要拿武器,以免误伤),可让他跟随你(黑夜离去),再次点击可解除跟随。在大陆各地树起国王雕像,建立你的王国,统治整块大陆吧。可通过小地图查看你的势力范围,国王雕像在小地图上显示为方尖碑图标,警察显示为天使雕像图标。不想要国王雕像时,用锤子砸掉即可。远古短棒在远古选项(画着远古祭坛)下,用3个活木头、4个铥矿石、4个噩梦燃料制造,制造时须靠近远古祭坛