第293页:新移民
展开二四三.新移民(白天石头营火附近出现新移民,自动打怪,可与他们做买卖)
1.用记事本打开游戏目录\data\DLC0001\scripts\prefabs\firepit.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local function createnpc(inst)
for k = 1,math.random(10,25) do
local pt = inst:GetPosition()
local npc = SpawnPrefab("frog")
npc.Transform:SetPosition(pt.x+(math.random(50)-math.random(50)), 0, pt.z+(math.random(50)-math.random(50)))
npc.AnimState:SetBank("wilson")
local names = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
local buildname = names[math.random(#names)]
npc.AnimState:SetBuild(buildname)
local hats = {"hat_bee","hat_beefalo","hat_bush","hat_earmuffs","hat_feather","hat_flower","hat_football","hat_miner","hat_ruins","hat_slurper","hat_slurtle","hat_spider","hat_straw","hat_top","hat_walrus","hat_winter","hat_rain","hat_watermelon","hat_ice","hat_catcoon","hat_wathgrithr"}
local hat = hats[math.random(#hats)]
npc.AnimState:OverrideSymbol("swap_hat", hat, "swap_hat")
local armors = {"armor_grass","armor_marble","armor_onemanband","armor_ruins","armor_sanity","armor_slurper","armor_slurtleshell","armor_sweatervest","armor_trunkvest_summer","armor_trunkvest_winter","armor_wood","torso_rain"}
local armor = armors[math.random(#armors)]
npc.AnimState:OverrideSymbol("swap_body", armor, "swap_body")
npc.AnimState:Show("HAT")
npc.AnimState:Show("HAT_HAIR")
npc.AnimState:Hide("HAIR_NOHAT")
npc.AnimState:Hide("HAIR")
npc.AnimState:Hide("ARM_carry")
npc.AnimState:Show("ARM_normal")
npc.AnimState:PlayAnimation("idle")
MakeCharacterPhysics(npc, 75, .5)
local minimap = npc.entity:AddMiniMapEntity()
minimap:SetIcon( "lighter.png" )
npc:RemoveComponent("sleeper")
npc:RemoveComponent("thief")
npc:RemoveComponent("lootdropper")
npc:RemoveTag("animal")
npc:RemoveTag("prey")
npc:RemoveTag("smallcreature")
npc:RemoveTag("frog")
npc:RemoveTag("canbetrapped")
npc:RemoveAllEventCallbacks()
npc:SetStateGraph("SGshadowwaxwell")
npc.components.health:SetMaxHealth(1000)
npc:RemoveComponent("combat")
npc:AddComponent("combat")
npc.components.combat:SetDefaultDamage(10)
npc.components.combat:SetAttackPeriod(1)
npc.components.combat:SetRetargetFunction(3, function(npc)
if not npc.components.health:IsDead() then
return FindEntity(npc, 20, function(guy)
if guy.components.combat and guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == npc or npc.components.combat.target == guy or guy:HasTag("monster")
end
end )
end
end )
npc.components.combat:SetKeepTargetFunction(function(npc, target) return target and target:IsValid() end )
npc:ListenForEvent("attacked", function(npc, data)
npc.components.combat:SetTarget(data.attacker)
npc.components.combat:ShareTarget(data.attacker, 30, function(dude) return dude:HasTag("npcs") and not dude.components.health:IsDead() end, 5)
end )
npc:AddComponent("trader")
npc.components.trader:SetAcceptTest(function(npc, item)
if item.prefab == "cave_banana" or item.prefab == "carrot" or item.prefab == "corn" or item.prefab == "pumpkin" or item.prefab == "eggplant" or item.prefab == "durian" or item.prefab == "pomegranate" or item.prefab == "dragonfruit" or item.prefab == "berries" or item.prefab == "cactus_meat" or item.prefab == "watermelon" or item.prefab == "acorn" or item.prefab == "meat" or item.prefab == "smallmeat" or item.prefab == "fish" or item.prefab == "eel" or item.prefab == "drumstick" or item.prefab == "bird_egg" or item.prefab == "froglegs" or item.prefab == "monstermeat" or item.prefab == "butter" or item.prefab == "butterflywings" or item.prefab == "cutlichen" or item.prefab == "foliage" or item.prefab == "honey" or item.prefab == "lightbulb" or item.prefab == "red_cap" or item.prefab == "green_cap" or item.prefab == "blue_cap" or item.prefab == "petals" or item.prefab == "petals_evil" or item.prefab == "redgem" or item.prefab == "bluegem" or item.prefab == "purplegem" or item.prefab == "greengem" or item.prefab == "orangegem" or item.prefab == "yellowgem" then
return true
end
return false
end )
npc.components.trader.onaccept = function(npc, giver, item)
for k = 1, 2 do
local goldnugget = SpawnPrefab("goldnugget")
GetPlayer().components.inventory:GiveItem(goldnugget)
end
end
npc:ListenForEvent( "nighttime", function() npc:Remove() end , GetWorld())
npc:AddComponent("talker")
npc:DoPeriodicTask(math.random(30,60), function()
local words = {"Good day","I'm happy","I like here","Thank you","Where's the enemy","I'm hungry","Too hot","Too cold","Hello","Bye","Sorry","Good morning","Good afternoon","Good evening","I'll go home","I want to go hunting","I'm going to mining","I want to go to the farm","I want to pick","I want to go fishing","I'm going to catch","I want to fight","I want to have a rest","I was a good man","I want to be rich","I was lucky","I want to make friends"}
local word = words[math.random(#words)]
npc.components.talker:Say(word, 4, false)
end)
npc:AddTag("npcs")
end
end
inst:ListenForEvent( "daytime", function() createnpc(inst) end , GetWorld())
2.用记事本打开游戏目录\data\scripts\prefabs\frog.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local names = {"swap_axe","swap_batbat","swap_cane","swap_diviningrod","swap_ruins_bat","swap_fishingrod","swap_goldenaxe","swap_goldenpickaxe","swap_goldenshovel","swap_ham_bat","swap_hammer","swap_lucy_axe","swap_nightmaresword","swap_pickaxe","swap_pitchfork","swap_ruins_bat","swap_shovel","swap_spear","swap_spike","swap_umbrella","swap_spear_wathgrithr","swap_parasol"}
local weapon = names[math.random(#names)]
local items = { SWORD = weapon }
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 onsave(inst, data)
if inst:HasTag("npcs") then
data.npcs = true
end
end
local function onload(inst, data)
if data and data.npcs then
inst.AnimState:SetBank("wilson")
local names = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
local buildname = names[math.random(#names)]
inst.AnimState:SetBuild(buildname)
local hats = {"hat_bee","hat_beefalo","hat_bush","hat_earmuffs","hat_feather","hat_flower","hat_football","hat_miner","hat_ruins","hat_slurper","hat_slurtle","hat_spider","hat_straw","hat_top","hat_walrus","hat_winter","hat_rain","hat_watermelon","hat_ice","hat_catcoon","hat_wathgrithr"}
local hat = hats[math.random(#hats)]
inst.AnimState:OverrideSymbol("swap_hat", hat, "swap_hat")
local armors = {"armor_grass","armor_marble","armor_onemanband","armor_ruins","armor_sanity","armor_slurper","armor_slurtleshell","armor_sweatervest","armor_trunkvest_summer","armor_trunkvest_winter","armor_wood","torso_rain"}
local armor = armors[math.random(#armors)]
inst.AnimState:OverrideSymbol("swap_body", armor, "swap_body")
inst.AnimState:Show("HAT")
inst.AnimState:Show("HAT_HAIR")
inst.AnimState:Hide("HAIR_NOHAT")
inst.AnimState:Hide("HAIR")
inst.AnimState:Hide("ARM_carry")
inst.AnimState:Show("ARM_normal")
inst.AnimState:PlayAnimation("idle")
MakeCharacterPhysics(inst, 75, .5)
local minimap = inst.entity:AddMiniMapEntity()
minimap:SetIcon( "lighter.png" )
inst:RemoveComponent("sleeper")
inst:RemoveComponent("thief")
inst:RemoveComponent("lootdropper")
inst:RemoveTag("animal")
inst:RemoveTag("prey")
inst:RemoveTag("smallcreature")
inst:RemoveTag("frog")
inst:RemoveTag("canbetrapped")
inst:RemoveAllEventCallbacks()
inst:SetStateGraph("SGshadowwaxwell")
inst.components.health:SetMaxHealth(1000)
inst:RemoveComponent("combat")
inst:AddComponent("combat")
inst.components.combat:SetDefaultDamage(10)
inst.components.combat:SetAttackPeriod(1)
inst.components.combat:SetRetargetFunction(3, function(inst)
if not inst.components.health:IsDead() then
return FindEntity(inst, 20, function(guy)
if guy.components.combat and guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == inst or inst.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)
inst.components.combat:ShareTarget(data.attacker, 30, function(dude) return dude:HasTag("npcs") and not dude.components.health:IsDead() end, 5)
end )
inst:AddComponent("trader")
inst.components.trader:SetAcceptTest(function(inst, item)
if item.prefab == "cave_banana" or item.prefab == "carrot" or item.prefab == "corn" or item.prefab == "pumpkin" or item.prefab == "eggplant" or item.prefab == "durian" or item.prefab == "pomegranate" or item.prefab == "dragonfruit" or item.prefab == "berries" or item.prefab == "cactus_meat" or item.prefab == "watermelon" or item.prefab == "acorn" or item.prefab == "meat" or item.prefab == "smallmeat" or item.prefab == "fish" or item.prefab == "eel" or item.prefab == "drumstick" or item.prefab == "bird_egg" or item.prefab == "froglegs" or item.prefab == "monstermeat" or item.prefab == "butter" or item.prefab == "butterflywings" or item.prefab == "cutlichen" or item.prefab == "foliage" or item.prefab == "honey" or item.prefab == "lightbulb" or item.prefab == "red_cap" or item.prefab == "green_cap" or item.prefab == "blue_cap" or item.prefab == "petals" or item.prefab == "petals_evil" or item.prefab == "redgem" or item.prefab == "bluegem" or item.prefab == "purplegem" or item.prefab == "greengem" or item.prefab == "orangegem" or item.prefab == "yellowgem" then
return true
end
return false
end )
inst.components.trader.onaccept = function(inst, giver, item)
for k = 1, 2 do
local goldnugget = SpawnPrefab("goldnugget")
GetPlayer().components.inventory:GiveItem(goldnugget)
end
end
inst:ListenForEvent( "nighttime", function() inst:Remove() end , GetWorld())
inst:AddComponent("talker")
inst:DoPeriodicTask(math.random(30,60), function()
local words = {"Good day","I'm happy","I like here","Thank you","Where's the enemy","I'm hungry","Too hot","Too cold","Hello","Bye","Sorry","Good morning","Good afternoon","Good evening","I'll go home","I want to go hunting","I'm going to mining","I want to go to the farm","I want to pick","I want to go fishing","I'm going to catch","I want to fight","I want to have a rest","I was a good man","I want to be rich","I was lucky","I want to make friends"}
local word = words[math.random(#words)]
inst.components.talker:Say(word, 4, false)
end)
inst:AddTag("npcs")
end
end
inst.OnSave = onsave
inst.OnLoad = onload
即可在白天时,石头营火附近有新移民走动,黑夜离去,会主动攻击怪物,有他们的地方是安全的。他们愿意购买你的肉类、蔬菜和宝石(拿着物品对新移民点鼠标左键),每个物品可以卖2个黄金。如果你攻击新移民,附近的其他人将围殴你。新移民会自言自语,听听他们都说了些什么吧。在地图各处建造石头营火及其他建筑,就会形成许多小镇,饥荒世界从此不再冷清。新移民在小地图上显示为打火机图标(代表着希望),通过查看小地图,可以了解各个小镇的人口情况
更多相关内容请关注:饥荒专区
责任编辑:Shy夏夏