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

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



二一四.饥饿的儿童(不时有孤儿向你乞讨,施舍黄金后离开,否则跟随你直到午夜冻饿而死)

	1.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/forest.lua文件,在inst:AddComponent("clock")的下一行插入以下内容:

local function createbeggar(inst)
  for k = 1,math.random(3,7) do
	local pt = GetPlayer():GetPosition()
	local beggar = SpawnPrefab("foliage")
	beggar.Transform:SetPosition(pt.x+(math.random(50)-math.random(50)), 0, pt.z+(math.random(50)-math.random(50)))
	beggar.AnimState:SetBank("wilson")
	local names = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
	local buildname = names[math.random(#names)]
	beggar.AnimState:SetBuild(buildname)
	beggar.Transform:SetScale(0.8, 0.8, 0.8)
	beggar.AnimState:OverrideSymbol("swap_body", "armor_grass", "swap_body")
	beggar.AnimState:Hide("ARM_carry")
	beggar.AnimState:Show("ARM_normal")
	beggar.AnimState:PlayAnimation("idle")
	local sound = beggar.entity:AddSoundEmitter()
	local shadow = beggar.entity:AddDynamicShadow()
	shadow:SetSize( 1.3, .6 )
	beggar.Transform:SetFourFaced()
	local brain = require "brains/chesterbrain"
	beggar:SetBrain(brain)
	beggar:AddComponent("knownlocations")
	beggar:AddComponent("locomotor")
	beggar.components.locomotor.walkspeed = 5
	beggar.components.locomotor.runspeed = 15
	beggar:SetStateGraph("SGshadowwaxwell")
	MakeCharacterPhysics(beggar, 50, .5)
	beggar:RemoveComponent("stackable")
	beggar:RemoveComponent("tradable")
	beggar:RemoveComponent("fuel")
	beggar:RemoveComponent("inventoryitem")
	beggar:RemoveComponent("edible")
	beggar:RemoveComponent("perishable")
	beggar:RemoveComponent("burnable")
	beggar:RemoveComponent("propagator")
	beggar:RemoveTag("cattoy")
	beggar:AddComponent("follower")
	beggar.components.follower:SetLeader(GetPlayer())
	beggar:AddComponent("health")
	beggar.components.health:SetMaxHealth(500)
	beggar.components.health:SetInvincible(true)
	beggar.components.health.nofadeout = true
	beggar:AddComponent("combat")
	beggar:DoPeriodicTask(math.random(10,60), function(beggar)
		beggar.SoundEmitter:PlaySound("dontstarve/characters/willow/hurt")
		beggar.AnimState:PlayAnimation("hungry")
	end )
	beggar:AddComponent("trader")
	beggar.components.trader:SetAcceptTest(function(beggar, item) 
		if GetPlayer().components.inventory:Has("goldnugget", 10) then
		   if item.prefab == "goldnugget" then
			  return true
		   end
		end
		return false
	end )
	beggar.components.trader.onaccept = function(beggar, giver, item)
		GetPlayer().components.inventory:ConsumeByName("goldnugget", 9)
		GetPlayer().components.sanity:DoDelta(5)
		beggar.components.locomotor:Stop()
		beggar:SetBrain(nil)
		beggar.components.follower:SetLeader(nil)
		beggar.AnimState:PlayAnimation("idle_onemanband1_loop",true)
		beggar:DoTaskInTime(5, function() beggar:Remove() end )
	end
	beggar:ListenForEvent( "nighttime", function()
		beggar.components.locomotor:Stop()
		beggar:SetBrain(nil)
		beggar.components.follower:SetLeader(nil)
		beggar.AnimState:PlayAnimation("idle_shiver_pre")
		beggar.AnimState:PushAnimation("idle_shiver_loop")
		beggar.AnimState:PushAnimation("idle_shiver_pst", false)
		beggar:RemoveComponent("trader")
		beggar:DoTaskInTime(math.random(1,6), function()
			beggar.components.health:SetInvincible(false)
			beggar.components.health:Kill()
		end )
	end, GetWorld())
	beggar:ListenForEvent("death", function()
		GetPlayer():DoTaskInTime(2, function()
			GetPlayer().components.sanity:DoDelta(-10)
		end )
	end )
	beggar:AddTag("beggars")
  end
end
	inst:ListenForEvent( "daytime", function() if math.random()<.3 then createbeggar(inst) end end , GetWorld())


	2.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/foliage.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

local function onsave(inst, data)
	if inst:HasTag("beggars") then
		data.beggars = true
	end
end
local function onload(inst, data)
  if data and data.beggars then
	inst.AnimState:SetBank("wilson")
	local names = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
	local buildname = names[math.random(#names)]
	inst.AnimState:SetBuild(buildname)
	inst.Transform:SetScale(0.8, 0.8, 0.8)
	inst.AnimState:OverrideSymbol("swap_body", "armor_grass", "swap_body")
	inst.AnimState:Hide("ARM_carry")
	inst.AnimState:Show("ARM_normal")
	inst.AnimState:PlayAnimation("idle")
	local sound = inst.entity:AddSoundEmitter()
	local shadow = inst.entity:AddDynamicShadow()
	shadow:SetSize( 1.3, .6 )
	inst.Transform:SetFourFaced()
	local brain = require "brains/chesterbrain"
	inst:SetBrain(brain)
	inst:AddComponent("knownlocations")
	inst:AddComponent("locomotor")
	inst.components.locomotor.walkspeed = 5
	inst.components.locomotor.runspeed = 15
	inst:SetStateGraph("SGshadowwaxwell")
	MakeCharacterPhysics(inst, 50, .5)
	inst:RemoveComponent("stackable")
	inst:RemoveComponent("tradable")
	inst:RemoveComponent("fuel")
	inst:RemoveComponent("inventoryitem")
	inst:RemoveComponent("edible")
	inst:RemoveComponent("perishable")
	inst:RemoveComponent("burnable")
	inst:RemoveComponent("propagator")
	inst:RemoveTag("cattoy")
	inst:AddComponent("follower")
	inst.components.follower:SetLeader(GetPlayer())
	inst:AddComponent("health")
	inst.components.health:SetMaxHealth(500)
	inst.components.health:SetInvincible(true)
	inst.components.health.nofadeout = true
	inst:AddComponent("combat")
	inst:DoPeriodicTask(math.random(10,60), function(inst)
		inst.SoundEmitter:PlaySound("dontstarve/characters/willow/hurt")
		inst.AnimState:PlayAnimation("hungry")
	end )
	inst:AddComponent("trader")
	inst.components.trader:SetAcceptTest(function(inst, item) 
		if GetPlayer().components.inventory:Has("goldnugget", 10) then
		   if item.prefab == "goldnugget" then
			  return true
		   end
		end
		return false
	end )
	inst.components.trader.onaccept = function(inst, giver, item)
		GetPlayer().components.inventory:ConsumeByName("goldnugget", 9)
		GetPlayer().components.sanity:DoDelta(5)
		inst.components.locomotor:Stop()
		inst:SetBrain(nil)
		inst.components.follower:SetLeader(nil)
		inst.AnimState:PlayAnimation("idle_onemanband1_loop",true)
		inst:DoTaskInTime(5, function() inst:Remove() end )
	end
	inst:ListenForEvent( "nighttime", function()
		inst.components.locomotor:Stop()
		inst:SetBrain(nil)
		inst.components.follower:SetLeader(nil)
		inst.AnimState:PlayAnimation("idle_shiver_pre")
		inst.AnimState:PushAnimation("idle_shiver_loop")
		inst.AnimState:PushAnimation("idle_shiver_pst", false)
		inst:RemoveComponent("trader")
		inst:DoTaskInTime(math.random(1,6), function()
			inst.components.health:SetInvincible(false)
			inst.components.health:Kill()
		end )
	end, GetWorld())
	inst:ListenForEvent("death", function()
		GetPlayer():DoTaskInTime(2, function()
			GetPlayer().components.sanity:DoDelta(-10)
		end )
	end )
	inst:AddTag("beggars")
  end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可开启一个独特的游戏模式,在饥荒世界这苦寒之地,有许多失去亲人的儿童正在忍饥挨饿,已经站稳脚跟的你,有责任帮助他们。不时会有孤儿向你乞讨,只要10个黄金(拿着黄金对儿童点鼠标左键),就能给予他们几天的温饱(儿童将离开),你也会获得心灵的宁静(补5点脑)。如果你不愿付出,他们也不会给你添任何麻烦,只是默默地跟随,期盼着一点点施舍。当黑夜来临时,他们将在你眼前冻饿而死,苍天为之动容(你将降10点脑),痛惜一个幼小生命的逝去。何去何从,由你自己决定。不要与“荒野之狼”一同修改