代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
二六九.公车站(用草席卷种公车站,买票坐到下一站) 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/bedroll_straw.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容: inst.kind = "" inst.soundpath = "dontstarve/creatures/rook/" inst.effortsound = "dontstarve/creatures/rook/steam" local function OnDeploy (inst, pt) local busstation = SpawnPrefab("bedroll_straw") busstation.Transform:SetPosition(pt.x, pt.y, pt.z) busstation.AnimState:SetBank("sign_home") busstation.AnimState:SetBuild("sign_home") busstation.AnimState:PlayAnimation("idle") busstation.Transform:SetScale(1.5, 1.5, 1.5) busstation.AnimState:SetMultColour(255/255,105/255,0/255,0.8) local minimap = busstation.entity:AddMiniMapEntity() minimap:SetIcon( "sign.png" ) busstation:RemoveComponent("inventoryitem") busstation:RemoveComponent("stackable") busstation:RemoveComponent("fuel") busstation:RemoveComponent("sleepingbag") busstation:RemoveComponent("burnable") busstation:RemoveComponent("propagator") busstation:RemoveComponent("deployable") busstation:AddTag("busstation") busstation:AddComponent("workable") busstation.components.workable:SetWorkAction(ACTIONS.HAMMER) busstation.components.workable:SetWorkLeft(3) busstation.components.workable:SetOnFinishCallback(function(busstation) SpawnPrefab("collapse_big").Transform:SetPosition(busstation.Transform:GetWorldPosition()) GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood") busstation:Remove() end ) busstation:AddComponent("trader") busstation.components.trader:SetAcceptTest(function(busstation, item) if item.prefab == "goldnugget" then return true end return false end ) busstation.components.trader.onaccept = function(busstation, giver, item) busstation:AddTag("startingpoint") local target = FindEntity(busstation, 3000, function(guy) return guy:HasTag("busstation") and not guy:HasTag("startingpoint") end ) if target then GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") GetPlayer().components.playercontroller:Enable(false) local pt1 = busstation:GetPosition() local bus = SpawnPrefab("bedroll_straw") bus.Transform:SetPosition(pt1.x+15+2, 0, pt1.z-15+2) bus.AnimState:SetBank("rook") bus.AnimState:SetBuild("rook_build") bus.AnimState:PlayAnimation("idle", true) bus.Transform:SetFourFaced() bus.Transform:SetScale(1.2, 1.2, 1.2) bus.AnimState:SetMultColour(255/255,105/255,0/255,1) local sound = bus.entity:AddSoundEmitter() bus:RemoveComponent("inventoryitem") bus:RemoveComponent("stackable") bus:RemoveComponent("fuel") bus:RemoveComponent("sleepingbag") bus:RemoveComponent("burnable") bus:RemoveComponent("propagator") bus:RemoveComponent("deployable") bus:AddTag("goodbye") bus:AddComponent("locomotor") bus.components.locomotor.walkspeed = 5 bus.components.locomotor.runspeed = 10 bus:SetStateGraph("SGrook") bus:AddComponent("health") bus.components.health:SetMaxHealth(1000) bus.components.health:SetInvincible(true) bus:AddComponent("combat") bus:AddComponent("follower") bus:AddComponent("knownlocations") bus:DoTaskInTime(1, function() bus.components.locomotor:GoToPoint(Point(pt1.x+2, 0, pt1.z+2)) end ) bus:DoTaskInTime(9, function() GetPlayer():Hide() GetPlayer().components.health:SetInvincible(true) local shadow = GetPlayer().entity:AddDynamicShadow() shadow:SetSize( 0, 0 ) bus.components.locomotor:GoToPoint(Point(pt1.x-15+2, 0, pt1.z+15+2)) end ) GetPlayer():DoTaskInTime(15, function() TheFrontEnd:Fade(false,1) bus:Remove() GetPlayer().Transform:SetPosition(target.Transform:GetWorldPosition()) GetPlayer():DoTaskInTime(2, function() TheFrontEnd:Fade(true,1) busstation:RemoveTag("startingpoint") GetPlayer():Show() GetPlayer().components.health:SetInvincible(false) GetPlayer().components.playercontroller:Enable(true) local shadow = GetPlayer().entity:AddDynamicShadow() shadow:SetSize( 1.3, .6 ) end ) end ) else SpawnPrefab("goldnugget").Transform:SetPosition(GetPlayer().Transform:GetWorldPosition()) busstation:RemoveTag("startingpoint") end end inst.components.stackable:Get():Remove() end inst:AddComponent("deployable") inst.components.deployable.ondeploy = OnDeploy local function onsave(inst, data) if inst:HasTag("goodbye") then data.goodbye = true end if inst:HasTag("busstation") then data.busstation = true end end local function onload(inst, data) if data and data.goodbye then inst:Remove() end if data and data.busstation then inst.AnimState:SetBank("sign_home") inst.AnimState:SetBuild("sign_home") inst.AnimState:PlayAnimation("idle") inst.Transform:SetScale(1.5, 1.5, 1.5) inst.AnimState:SetMultColour(255/255,105/255,0/255,0.8) local minimap = inst.entity:AddMiniMapEntity() minimap:SetIcon( "sign.png" ) inst:RemoveComponent("inventoryitem") inst:RemoveComponent("stackable") inst:RemoveComponent("fuel") inst:RemoveComponent("sleepingbag") inst:RemoveComponent("burnable") inst:RemoveComponent("propagator") inst:RemoveComponent("deployable") inst:AddTag("busstation") inst:AddComponent("workable") inst.components.workable:SetWorkAction(ACTIONS.HAMMER) inst.components.workable:SetWorkLeft(3) inst.components.workable:SetOnFinishCallback(function(inst) SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition()) GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood") inst:Remove() end ) inst:AddComponent("trader") inst.components.trader:SetAcceptTest(function(inst, item) if item.prefab == "goldnugget" then return true end return false end ) inst.components.trader.onaccept = function(inst, giver, item) inst:AddTag("startingpoint") local target = FindEntity(inst, 3000, function(guy) return guy:HasTag("busstation") and not guy:HasTag("startingpoint") end ) if target then GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") GetPlayer().components.playercontroller:Enable(false) local pt1 = inst:GetPosition() local bus = SpawnPrefab("bedroll_straw") bus.Transform:SetPosition(pt1.x+15+2, 0, pt1.z-15+2) bus.AnimState:SetBank("rook") bus.AnimState:SetBuild("rook_build") bus.AnimState:PlayAnimation("idle", true) bus.Transform:SetFourFaced() bus.Transform:SetScale(1.2, 1.2, 1.2) bus.AnimState:SetMultColour(255/255,105/255,0/255,1) local sound = bus.entity:AddSoundEmitter() bus:RemoveComponent("inventoryitem") bus:RemoveComponent("stackable") bus:RemoveComponent("fuel") bus:RemoveComponent("sleepingbag") bus:RemoveComponent("burnable") bus:RemoveComponent("propagator") bus:RemoveComponent("deployable") bus:AddTag("goodbye") bus:AddComponent("locomotor") bus.components.locomotor.walkspeed = 5 bus.components.locomotor.runspeed = 10 bus:SetStateGraph("SGrook") bus:AddComponent("health") bus.components.health:SetMaxHealth(1000) bus.components.health:SetInvincible(true) bus:AddComponent("combat") bus:AddComponent("follower") bus:AddComponent("knownlocations") bus:DoTaskInTime(1, function() bus.components.locomotor:GoToPoint(Point(pt1.x+2, 0, pt1.z+2)) end ) bus:DoTaskInTime(9, function() GetPlayer():Hide() GetPlayer().components.health:SetInvincible(true) local shadow = GetPlayer().entity:AddDynamicShadow() shadow:SetSize( 0, 0 ) bus.components.locomotor:GoToPoint(Point(pt1.x-15+2, 0, pt1.z+15+2)) end ) GetPlayer():DoTaskInTime(15, function() TheFrontEnd:Fade(false,1) bus:Remove() GetPlayer().Transform:SetPosition(target.Transform:GetWorldPosition()) GetPlayer():DoTaskInTime(2, function() TheFrontEnd:Fade(true,1) inst:RemoveTag("startingpoint") GetPlayer():Show() GetPlayer().components.health:SetInvincible(false) GetPlayer().components.playercontroller:Enable(true) local shadow = GetPlayer().entity:AddDynamicShadow() shadow:SetSize( 1.3, .6 ) end ) end ) else SpawnPrefab("goldnugget").Transform:SetPosition(GetPlayer().Transform:GetWorldPosition()) inst:RemoveTag("startingpoint") end end end end inst.OnSave = onsave inst.OnLoad = onload 即可在地图的任意两个地点,用草席卷种公车站,给站牌1个黄金(拿着黄金对站牌点鼠标左键),会来公共汽车送你到另一个站牌,方便在两点间快速移动。公车站须种在空旷的地方,以便公共汽车行驶。如果只种了一个公车站,则站牌不会接受你的黄金。公车站在小地图上显示为路牌的图标。不想要公车站时,用锤子砸掉即可。草席卷在生存选项下(画着绳套)下,用6个草、1个绳子制造