rons0n Posted April 27, 2015 Share Posted April 27, 2015 So I decided to make my own summoner clone by taking Heavenfall's Summoner coding and tweaking it a bit to make it compatible with DST. After a bit of tweaking I encountered this:[00:03:18]: [string "scripts/behaviours/chattynode.lua"]:22: bad argument #1 to 'random' (interval is empty)I also may have completely butchered the code so I want to say sorry to Heavenfall beforehand as I have no idea what I'm doing ;_;. I don't know what files I have to provide you so heres my butchered version of summonclone. local brain = require "brains/summonclonebrain"local assets ={ Asset("ATLAS", "images/inventoryimages/summonclone.xml"), Asset("ANIM", "anim/player_basic.zip"), Asset("ANIM", "anim/player_idles_shiver.zip"), Asset("ANIM", "anim/player_actions.zip"), Asset("ANIM", "anim/player_actions_axe.zip"), Asset("ANIM", "anim/player_actions_pickaxe.zip"), Asset("ANIM", "anim/player_actions_shovel.zip"), Asset("ANIM", "anim/player_actions_blowdart.zip"), Asset("ANIM", "anim/player_actions_eat.zip"), Asset("ANIM", "anim/player_actions_item.zip"), Asset("ANIM", "anim/player_cave_enter.zip"), Asset("ANIM", "anim/player_actions_uniqueitem.zip"), Asset("ANIM", "anim/player_actions_bugnet.zip"), Asset("ANIM", "anim/player_actions_fishing.zip"), Asset("ANIM", "anim/player_actions_boomerang.zip"), Asset("ANIM", "anim/player_bush_hat.zip"), Asset("ANIM", "anim/player_attacks.zip"), Asset("ANIM", "anim/player_idles.zip"), Asset("ANIM", "anim/player_rebirth.zip"), Asset("ANIM", "anim/player_jump.zip"), Asset("ANIM", "anim/player_amulet_resurrect.zip"), Asset("ANIM", "anim/player_teleport.zip"), Asset("ANIM", "anim/wilson_fx.zip"), Asset("ANIM", "anim/player_one_man_band.zip"), Asset("ANIM", "anim/player_slurtle_armor.zip"), Asset("ANIM", "anim/player_staff.zip"), Asset("ANIM", "anim/shadow_hands.zip"), Asset("SOUND", "sound/sfx.fsb"), Asset("SOUND", "sound/wilson.fsb"),}local prefabs ={}local onloadfn = function(inst, data) if data and data.sleeping then inst.components.sleeper:GoToSleep() endendlocal onsavefn = function(inst, data) if inst.components.sleeper:IsAsleep() then data.sleeping = true endendlocal function CalcSanityAura(inst, observer) if inst.components.follower and inst.components.follower.leader == observer then return -TUNING.SANITYAURA_LARGE end return 0endlocal function CalcSanityAura_Maxwell(inst, observer) return 0endlocal function ShouldAcceptItem(inst, item) local currenthealth = inst.components.health.currenthealth / inst.components.health.maxhealth if item.components.edible and currenthealth < 1 and item.components.edible.healthvalue > 0 then return true end if item.components.equippable and (item.components.equippable.equipslot == EQUIPSLOTS.HEAD or item.components.equippable.equipslot == EQUIPSLOTS.HANDS or item.components.equippable.equipslot == EQUIPSLOTS.BODY) and not item.components.projectile then if item.prefab == "batbat" then print ("refusing batbat") return false end return true endendlocal function OnGetItemFromPlayer(inst, giver, item) if item.components.equippable and (item.components.equippable.equipslot == EQUIPSLOTS.HEAD or item.components.equippable.equipslot == EQUIPSLOTS.HANDS or item.components.equippable.equipslot == EQUIPSLOTS.BODY) then local newslot = item.components.equippable.equipslot local current = inst.components.inventory:GetEquippedItem(newslot) if current then inst.components.inventory:DropItem(current) end inst.components.inventory:Equip(item) elseif item.components.edible then inst.components.health:DoDelta(item.components.edible:GetHealth(inst), nil, item.prefab) inst:PushEvent("oneatsomething", {food = item}) inst.sg:GoToState("eat") endendlocal function OnRefuseItem(inst, item) inst.sg:GoToState("refuse") local playerprefab = GetPlayer() local actualprefab = playerprefab.prefab inst.components.talker:Say(GetString(actualprefab, "ACTIONFAIL_GENERIC"))endlocal function NormalRetargetFn(inst) return FindEntity(inst, TUNING.PIG_TARGET_DIST, function(guy) return guy:HasTag("monster") and guy.prefab ~= "webber" and guy.components.health and not guy.components.health:IsDead() and inst.components.combat:CanTarget(guy) end)endlocal function fn(Sim) local inst = CreateEntity() local trans = inst.entity:AddTransform() local anim = inst.entity:AddAnimState() local sound = inst.entity:AddSoundEmitter() local shadow = inst.entity:AddDynamicShadow() local whoisplayer = ThePlayer shadow:SetSize( 1.5, .75 ) inst.Transform:SetFourFaced() MakeCharacterPhysics(inst, 30, .3) --inst:AddTag("monster") inst:AddTag("summonclone") inst:AddTag("sheltercarrier") inst:AddTag("summonedbyplayer") inst:AddTag("scarytoprey") anim:SetBank("wilson") local summonclonebuild = ThePlayer anim:SetBuild(summonclonebuild.prefab) --anim:PlayAnimation("idle_loop", true) ------------------------------------------ inst:AddComponent("locomotor") -- locomotor must be constructed before the stategraph inst.components.locomotor.runspeed = 7 inst.components.locomotor.walkspeed = 7 ------------------------------------------ ------------------------------------------ inst:AddComponent("sanityaura") inst.components.sanityaura.aurafn = CalcSanityAura MakeMediumBurnableCharacter(inst, "pig_torso") ------------------ inst:AddComponent("health") inst.components.health:SetMaxHealth(TUNING.WILSON_HEALTH) ------------------ inst:AddComponent("combat") inst.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE) --inst.components.combat.hiteffectsymbol = "pig_torso" inst.components.combat:SetAttackPeriod(2) inst.components.combat:SetRetargetFunction(3, NormalRetargetFn) ------------------------------------------ inst:AddComponent("inventory") ------------------------------------------ inst.entity:AddLabel() inst.Label:SetFontSize(20) inst.Label:SetFont(DEFAULTFONT) inst.Label:SetColour(1, 1, 1) inst.Label:Enable(true) ------------------------------------------ inst:AddComponent("follower") inst.components.follower.maxfollowtime = 99999999 --print("treeguard should follow "..whoisplayer) whoisplayer.components.leader:AddFollower(inst) inst.components.follower:AddLoyaltyTime(9999999) ------------------------------------------ inst:AddComponent("talker") inst.components.talker:StopIgnoringAll() ------------------------------------------ inst:AddComponent("inspectable") local minimap = inst.entity:AddMiniMapEntity() minimap:SetIcon( "summonclone.tex" ) ------------------------------------------ inst.Transform:SetScale(0.9, 0.9, 0.9) inst:SetBrain(brain) if ACTIONS.SITCOMMAND ~= nil then inst:AddComponent("followersitcommand") end inst:AddComponent("lootdropper") inst:AddComponent("norecipelootdrop") inst:AddComponent("trader") inst.components.trader:SetAcceptTest(ShouldAcceptItem) inst.components.trader.onaccept = OnGetItemFromPlayer inst.components.trader.onrefuse = OnRefuseItem inst.AnimState:Hide("ARM_carry") inst.AnimState:Show("ARM_normal") inst:AddComponent("wisecrackerclone") -- begin custom functions if summonclonebuild.prefab == "wilson" then inst:AddComponent("beard") inst.components.beard.onreset = function() inst.AnimState:ClearOverrideSymbol("beard") end inst.components.beard.prize = "beardhair" local beard_days = {4, 8, 16} local beard_bits = {1, 2, 4} inst.components.beard:AddCallback(beard_days[1], function() inst.AnimState:OverrideSymbol("beard", "beard", "beard_short") inst.components.beard.bits = beard_bits[1] end) inst.components.beard:AddCallback(beard_days[2], function() inst.AnimState:OverrideSymbol("beard", "beard", "beard_medium") inst.components.beard.bits = beard_bits[2] end) inst.components.beard:AddCallback(beard_days[3], function() inst.AnimState:OverrideSymbol("beard", "beard", "beard_long") inst.components.beard.bits = beard_bits[3] end) end if summonclonebuild.prefab == "willow" then inst.components.health.fire_damage_scale = 0 end if summonclonebuild.prefab == "wolfgang" then inst.components.health:SetMaxHealth(TUNING.WILSON_HEALTH * 1.5 ) inst.components.combat.damagemultiplier = 1.5 end if summonclonebuild.prefab == "wx78" then inst.components.eater.ignoresspoilage = true end --if not summonclonebuild.prefab == "wes" then inst:AddComponent("talkercloneishurt") --end if summonclonebuild.prefab == "wes" then inst.Label:SetFontSize(0) end if summonclonebuild.prefab == "waxwell" then inst.components.sanityaura.aurafn = CalcSanityAura_Maxwell end if summonclonebuild.prefab == "wickerbottom" then inst:AddComponent("researchpointconverter") inst:AddTag("researchmachine") inst.components.researchpointconverter.level = 1 end --copypaste cause lazy. local function onkill(inst, data) if data.cause == inst.prefab and not data.inst:HasTag("prey") then if GetPlayer() then GetPlayer().components.sanity:DoDelta(5) end end end if summonclonebuild.prefab == "wathgrithr" then inst:ListenForEvent("entity_death", function(wrld, data) onkill(inst, data) end, GetWorld()) end inst:ListenForEvent( "nighttime", function() inst.components.health:DoDelta(-10) end, TheWorld) inst:SetStateGraph("SGsummonclone") return instendreturn Prefab( "common/summonclone", fn, assets, prefabs) Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/ Share on other sites More sharing options...
DarkXero Posted April 27, 2015 Share Posted April 27, 2015 This line causes the crash:local str = self.chatlines[math.random(#self.chatlines)]because #self.chatlines is 0. The chattynode behaviour is in the brain. Post the brain. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632550 Share on other sites More sharing options...
rons0n Posted April 27, 2015 Author Share Posted April 27, 2015 (edited) @DarkXero Oh alright, heres the butchered version of the summonclonebrain!require "behaviours/wander"require "behaviours/follow"require "behaviours/faceentity"require "behaviours/chaseandattack"require "behaviours/runaway"require "behaviours/doaction"--require "behaviours/choptree"require "behaviours/findlight"require "behaviours/panic"require "behaviours/chattynode"require "behaviours/leash"local SEE_DIST = 20local MAX_WANDER_DIST = 20local MIN_FOLLOW_LEADER = 1local MAX_FOLLOW_LEADER = 15local TARGET_FOLLOW_LEADER = (MAX_FOLLOW_LEADER+MIN_FOLLOW_LEADER)/2local GO_HOME_DIST = 5local KEEP_FACE_DIST = 8local START_RUN_DIST = 3local STOP_RUN_DIST = 5local MAX_CHASE_TIME = 10local MAX_CHASE_DIST = 30local SEE_LIGHT_DIST = 20local TRADE_DIST = 20local SEE_TREE_DIST = 15local SEE_TARGET_DIST = 20local SEE_FOOD_DIST = 10local KEEP_CHOPPING_DIST = 10local RUN_AWAY_DIST = 5local STOP_RUN_AWAY_DIST = 8local function ShouldRunAway(inst, target) return not inst.components.trader:IsTryingToTradeWithMe(target)endlocal SummonClone = Class(Brain, function(self, inst) Brain._ctor(self, inst)end)function SummonClone:OnAttacked(attacker) self.inst.components.combat:SetTarget(attacker) self.inst.components.combat:ShareTarget(attacker, 30, function(dude) return dude:HasTag("summonedbyplayer") and dude.components.follower.leader == GetPlayer() end, 5)endfunction SummonClone:OnAttackOther(target) self.inst.components.combat:ShareTarget(target, 30, function(dude) return dude:HasTag("summonedbyplayer") and dude.components.follower.leader == GetPlayer() end, 5)endlocal function GetFaceTargetFn(inst) return inst.components.follower.leaderendlocal function KeepFaceTargetFn(inst, target) return inst.components.follower.leader == targetendlocal function GetLeader(inst) return inst.components.follower and inst.components.follower.leaderendlocal function GetStayPos(inst) return inst.components.followersitcommand.locations["currentstaylocation"]endlocal function GetWanderPoint(inst) if inst.components.followersitcommand and inst.components.followersitcommand:IsCurrentlyStaying() then return GetStayPos(inst) else local target = GetLeader(inst) or GetPlayer() if target then return target:GetPosition() end endendlocal function ShouldGoHome(inst) local homePos = inst.components.followersitcommand.locations["currentstaylocation"] local myPos = Vector3(inst.Transform:GetWorldPosition() ) return (homePos and distsq(homePos, myPos) > GO_HOME_DIST*GO_HOME_DIST)endlocal function GoHomeAction(inst) local homePos = inst.components.followersitcommand.locations["currentstaylocation"] if homePos then return BufferedAction(inst, nil, ACTIONS.WALKTO, nil, homePos, nil, 0.2) endendfunction SummonClone:OnStart() local root = PriorityNode( { IfNode(function() local target = self.inst.components.combat.target if target and target:HasTag("bee") then local beehome = target.components.homeseeker and target.components.homeseeker.home if beehome and beehome.prefab == "beebox" then self.inst.components.combat:GiveUp() end end end, "OnFire", Panic(self.inst) ), WhileNode(function() return self.inst.components.health.takingfiredamage end, "OnFire", ChattyNode(self.inst, STRINGS.SUMMONCLONE_TALK_PANICFIRE, Panic(self.inst))), WhileNode(function() local currenthealth = self.inst.components.health.currenthealth / self.inst.components.health.maxhealth if currenthealth < 0.1 then local playerprefab = GetPlayer() local prefab = playerprefab.prefab self.inst.components.talker:Say(GetString(prefab, "ANNOUNCE_HUNGRY")) return true end end, "CloseToDeath", Panic(self.inst)), ChattyNode(self.inst, STRINGS.SUMMONCLONE_TALK_FIGHT, WhileNode( function() return self.inst.components.combat.target == nil or not self.inst.components.combat:InCooldown() end, "AttackMomentarily", ChaseAndAttack(self.inst, MAX_CHASE_TIME, MAX_CHASE_DIST) )), WhileNode( function() return self.inst.components.combat.target and self.inst.components.combat:InCooldown() end, "Dodge", RunAway(self.inst, function() return self.inst.components.combat.target end, RUN_AWAY_DIST, STOP_RUN_AWAY_DIST) ), IfNode(function() if (self.inst.components.follower.leader == nil) then local x,y,z = self.inst.Transform:GetWorldPosition() local ents = TheSim:FindEntities(x,y,z, TUNING.SPIDERHAT_RANGE, {"player"}) if (#ents > 0) then local newfather = ents[1] newfather.components.leader:AddFollower(self.inst) self.inst.components.follower.maxfollowtime = 99999999 self.inst.components.follower:AddLoyaltyTime(9999999) self.inst.components.combat:GiveUp() return true else return false end end end, "OnFire", Panic(self.inst) ), --umbrellafollow IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == false then if self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS) and (self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "umbrella" or self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "grass_umbrella" or self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "torch") then return true end end end, "has leader", Follow(self.inst, GetLeader, 1, 2.5, 1.5)), --true follow IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == false then return true elseif self.inst.components.follower.leader ~= nil and not self.inst.components.followersitcommand then return true end end, "has leader", Follow(self.inst, GetLeader, MIN_FOLLOW_LEADER, TARGET_FOLLOW_LEADER, MAX_FOLLOW_LEADER)), -- and one where it is "gohome" to a position IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == true then return true end end, "has leader", WhileNode(function() return ShouldGoHome(self.inst) end, "ShouldGoHome", DoAction(self.inst, GoHomeAction, "Go Home", true ))), IfNode(function() return self.inst.components.follower.leader ~= nil end, "has leader", FaceEntity(self.inst, GetFaceTargetFn, KeepFaceTargetFn )), }, .1) self.bt = BT(self.inst, root) self.inst:ListenForEvent("attacked", function(inst, data) self:OnAttacked(data.attacker) end) self.inst:ListenForEvent("onattackother", function(inst, data) self:OnAttackOther(data.target) end)endfunction SummonClone:OnInitializationComplete() --self.inst.components.knownlocations:RememberLocation("home", Point(self.inst.Transform:GetWorldPosition()))endreturn SummonClone Edited April 27, 2015 by rons0n Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632565 Share on other sites More sharing options...
DarkXero Posted April 27, 2015 Share Posted April 27, 2015 @rons0n, doSTRINGS.SUMMONCLONE_TALK_PANICFIRESTRINGS.SUMMONCLONE_TALK_FIGHTexist? Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632573 Share on other sites More sharing options...
rons0n Posted April 27, 2015 Author Share Posted April 27, 2015 @DarkXero I have:GLOBAL.STRINGS.SUMMONCLONE_TALK_PANICFIRE = { "Oww!", "I'm burning!", "It burns!" }GLOBAL.STRINGS.SUMMONCLONE_TALK_FIGHT = {} --setup in prefabInside the characters modmain, but thats all. I don't think I have that string in anywhere else. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632575 Share on other sites More sharing options...
DarkXero Posted April 27, 2015 Share Posted April 27, 2015 @rons0n, GLOBAL.STRINGS.SUMMONCLONE_TALK_FIGHT is empty, then the # will be 0.Add something to it, like "You are a big guy." Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632577 Share on other sites More sharing options...
rons0n Posted April 27, 2015 Author Share Posted April 27, 2015 Wow something as simple as that, huh:GLOBAL.STRINGS.SUMMONCLONE_TALK_PANICFIRE = { "Oww!", "I'm burning!", "It burns!" }GLOBAL.STRINGS.SUMMONCLONE_TALK_FIGHT = {"For you."} --setup in prefabThanks again! Now Im 10 steps in the 100 other steps I have to do for complete compatability! May I ask for 1 more little thing before I go and butcher the code more?elseif GetWorld().components.seasonmanager:GetCurrentTemperature() < TUNING.FROSTY_BREATH then inst.AnimState:PlayAnimation("idle_shiver_loop")I have this and it crashes my game everytime, and thats because seasonmanager doesnt exist in DST right? So what do I replace it with? I think I have to change GetWorld() to 'TheWorld' too. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632583 Share on other sites More sharing options...
DarkXero Posted April 27, 2015 Share Posted April 27, 2015 @rons0n, right. You can obtain world temperature from the world state. You can use:TheWorld.state.temperature Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632585 Share on other sites More sharing options...
rons0n Posted April 27, 2015 Author Share Posted April 27, 2015 Looks like I derped: elseif TheWorld.state.temperature:GetCurrentTemperature() < TUNING.FROSTY_BREATH then inst.AnimState:PlayAnimation("idle_shiver_loop")Gave me a 'temperature' (a number value)' error. *Cough* Also I need help on one more thing. The clones trading component. She has her tagged but nothing is happening, I can't seem to give her anything The code is posted in the first spoiler and it looks like it has everything it needs so what am I missing?And of course, the tradable in modmain:function HF_addtradablecomponenttoprefab(inst) if not inst.components.tradable then inst:AddComponent("tradable") endendAddPrefabPostInit("axe", HF_addtradablecomponenttoprefab) Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632608 Share on other sites More sharing options...
DarkXero Posted April 27, 2015 Share Posted April 27, 2015 @rons0n, it'selseif TheWorld.state.temperature < TUNING.FROSTY_BREATH then inst.AnimState:PlayAnimation("idle_shiver_loop")and you are missinginst.components.trader:Enable()to allow trades. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632614 Share on other sites More sharing options...
rons0n Posted April 27, 2015 Author Share Posted April 27, 2015 Thanks! I'm almost done making her work. But I have a problem, when the client makes the clone it works just as expected, but for the client it'll ways go to the host. How can I make it so when the client makes it, it'll follow the client? And lastely, Heavenfall's custom followersitoncommand component. There isn't anything wrong with it as far as I know but nothing is happening. And I'm sure I added the component everywhere it needed to be. I don't think you want the whole file so i'll just post only bits of code in spoilers: Modmain:local ACTIONS = GLOBAL.ACTIONSSTRINGS.ACTIONS.SITCOMMAND = "Order to Stay"STRINGS.ACTIONS.SITCOMMAND_CANCEL = "Order to Follow"ACTIONS.SITCOMMAND = GLOBAL.Action(2, true, true)ACTIONS.SITCOMMAND.fn = function(act) local targ = act.target if targ and targ.components.followersitcommand then act.doer.components.locomotor:Stop() act.doer.components.talker:Say(GLOBAL.GetString(act.doer.prefab, "ANNOUNCE_SITCOMMAND")) targ.components.followersitcommand:SetStaying(true) targ.components.followersitcommand:RememberSitPos("currentstaylocation", GLOBAL.Point(targ.Transform:GetWorldPosition())) return true endendACTIONS.SITCOMMAND.str = STRINGS.ACTIONS.SITCOMMANDACTIONS.SITCOMMAND.id = "SITCOMMAND"ACTIONS.SITCOMMAND_CANCEL = GLOBAL.Action(2, true, true)ACTIONS.SITCOMMAND_CANCEL.fn = function(act) local targ = act.target if targ and targ.components.followersitcommand then act.doer.components.locomotor:Stop() act.doer.components.talker:Say(GLOBAL.GetString(act.doer.prefab, "ANNOUNCE_SITCOMMAND_CANCEL")) targ.components.followersitcommand:SetStaying(false) return true endendACTIONS.SITCOMMAND_CANCEL.str = STRINGS.ACTIONS.SITCOMMAND_CANCELACTIONS.SITCOMMAND_CANCEL.id = "SITCOMMAND_CANCEL" summonerclone.lua: if ACTIONS.SITCOMMAND ~= nil then inst:AddComponent("followersitcommand") end Heavenfall's followersitcommand component:print("Loading FollowerSitCommand component....")local FollowerSitCommand = Class(function(self, inst) self.inst = inst self.stay = false self.locations = {}end)function FollowerSitCommand:CollectSceneActions(doer, actions, rightclick) if rightclick and self.inst.components.follower and self.inst.components.follower.leader == ThePlayer then if not self.inst.components.followersitcommand:IsCurrentlyStaying() then table.insert(actions, ACTIONS.SITCOMMAND) else table.insert(actions, ACTIONS.SITCOMMAND_CANCEL) end endendfunction FollowerSitCommand:IsCurrentlyStaying() return self.stayendfunction FollowerSitCommand:SetStaying(stay) self.stay = stayendfunction FollowerSitCommand:RememberSitPos(name, pos) self.locations[name] = posend-- onsave and onload may seem cumbersome but it requires to iterate because onload doesn't accept tables as single varsfunction FollowerSitCommand:OnSave() if self.stay == true then local data = { stay = self.stay, varx = self.locations.currentstaylocation["x"], vary = self.locations.currentstaylocation["y"], varz = self.locations.currentstaylocation["z"] } return data endend function FollowerSitCommand:OnLoad(data) if data then self.stay = data.stay self.locations.currentstaylocation = { } self.locations.currentstaylocation["x"] = data.varx self.locations.currentstaylocation["y"] = data.vary self.locations.currentstaylocation["z"] = data.varz endend return FollowerSitCommand And lastly the brain:require "behaviours/wander"require "behaviours/follow"require "behaviours/faceentity"require "behaviours/chaseandattack"require "behaviours/runaway"require "behaviours/doaction"--require "behaviours/choptree"require "behaviours/findlight"require "behaviours/panic"require "behaviours/chattynode"require "behaviours/leash"local SEE_DIST = 20local MAX_WANDER_DIST = 20local MIN_FOLLOW_LEADER = 1local MAX_FOLLOW_LEADER = 15local TARGET_FOLLOW_LEADER = (MAX_FOLLOW_LEADER+MIN_FOLLOW_LEADER)/2local GO_HOME_DIST = 5local KEEP_FACE_DIST = 8local START_RUN_DIST = 3local STOP_RUN_DIST = 5local MAX_CHASE_TIME = 10local MAX_CHASE_DIST = 30local SEE_LIGHT_DIST = 20local TRADE_DIST = 20local SEE_TREE_DIST = 15local SEE_TARGET_DIST = 20local SEE_FOOD_DIST = 10local KEEP_CHOPPING_DIST = 10local RUN_AWAY_DIST = 5local STOP_RUN_AWAY_DIST = 8local function ShouldRunAway(inst, target) return not inst.components.trader:IsTryingToTradeWithMe(target)endlocal SummonClone = Class(Brain, function(self, inst) Brain._ctor(self, inst)end)function SummonClone:OnAttacked(attacker) self.inst.components.combat:SetTarget(attacker) self.inst.components.combat:ShareTarget(attacker, 30, function(dude) return dude:HasTag("summonedbyplayer") and dude.components.follower.leader == ThePlayer end, 5)endfunction SummonClone:OnAttackOther(target) self.inst.components.combat:ShareTarget(target, 30, function(dude) return dude:HasTag("summonedbyplayer") and dude.components.follower.leader == ThePlayer end, 5)endlocal function GetFaceTargetFn(inst) return inst.components.follower.leaderendlocal function KeepFaceTargetFn(inst, target) return inst.components.follower.leader == targetendlocal function GetLeader(inst) return inst.components.follower and inst.components.follower.leaderendlocal function GetStayPos(inst) return inst.components.followersitcommand.locations["currentstaylocation"]endlocal function GetWanderPoint(inst) if inst.components.followersitcommand and inst.components.followersitcommand:IsCurrentlyStaying() then return GetStayPos(inst) else local target = GetLeader(inst) or ThePlayer if target then return target:GetPosition() end endendlocal function ShouldGoHome(inst) local homePos = inst.components.followersitcommand.locations["currentstaylocation"] local myPos = Vector3(inst.Transform:GetWorldPosition() ) return (homePos and distsq(homePos, myPos) > GO_HOME_DIST*GO_HOME_DIST)endlocal function GoHomeAction(inst) local homePos = inst.components.followersitcommand.locations["currentstaylocation"] if homePos then return BufferedAction(inst, nil, ACTIONS.WALKTO, nil, homePos, nil, 0.2) endendfunction SummonClone:OnStart() local root = PriorityNode( { IfNode(function() local target = self.inst.components.combat.target if target and target:HasTag("bee") then local beehome = target.components.homeseeker and target.components.homeseeker.home if beehome and beehome.prefab == "beebox" then self.inst.components.combat:GiveUp() end end end, "OnFire", Panic(self.inst) ), WhileNode(function() return self.inst.components.health.takingfiredamage end, "OnFire", ChattyNode(self.inst, STRINGS.SUMMONCLONE_TALK_PANICFIRE, Panic(self.inst))), WhileNode(function() local currenthealth = self.inst.components.health.currenthealth / self.inst.components.health.maxhealth if currenthealth < 0.1 then local playerprefab = ThePlayer local prefab = playerprefab.prefab self.inst.components.talker:Say(GetString(prefab, "ANNOUNCE_HUNGRY")) return true end end, "CloseToDeath", Panic(self.inst)), ChattyNode(self.inst, STRINGS.SUMMONCLONE_TALK_FIGHT, WhileNode( function() return self.inst.components.combat.target == nil or not self.inst.components.combat:InCooldown() end, "AttackMomentarily", ChaseAndAttack(self.inst, MAX_CHASE_TIME, MAX_CHASE_DIST) )), WhileNode( function() return self.inst.components.combat.target and self.inst.components.combat:InCooldown() end, "Dodge", RunAway(self.inst, function() return self.inst.components.combat.target end, RUN_AWAY_DIST, STOP_RUN_AWAY_DIST) ), IfNode(function() if (self.inst.components.follower.leader == nil) then local x,y,z = self.inst.Transform:GetWorldPosition() local ents = TheSim:FindEntities(x,y,z, TUNING.SPIDERHAT_RANGE, {"player"}) if (#ents > 0) then local newfather = ents[1] newfather.components.leader:AddFollower(self.inst) self.inst.components.follower.maxfollowtime = 99999999 self.inst.components.follower:AddLoyaltyTime(9999999) self.inst.components.combat:GiveUp() return true else return false end end end, "OnFire", Panic(self.inst) ), --umbrellafollow IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == false then if self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS) and (self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "umbrella" or self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "grass_umbrella" or self.inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS).prefab == "torch") then return true end end end, "has leader", Follow(self.inst, GetLeader, 1, 2.5, 1.5)), --true follow IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == false then return true elseif self.inst.components.follower.leader ~= nil and not self.inst.components.followersitcommand then return true end end, "has leader", Follow(self.inst, GetLeader, MIN_FOLLOW_LEADER, TARGET_FOLLOW_LEADER, MAX_FOLLOW_LEADER)), -- and one where it is "gohome" to a position IfNode(function() if self.inst.components.follower.leader ~= nil and self.inst.components.followersitcommand and self.inst.components.followersitcommand:IsCurrentlyStaying() == true then return true end end, "has leader", WhileNode(function() return ShouldGoHome(self.inst) end, "ShouldGoHome", DoAction(self.inst, GoHomeAction, "Go Home", true ))), IfNode(function() return self.inst.components.follower.leader ~= nil end, "has leader", FaceEntity(self.inst, GetFaceTargetFn, KeepFaceTargetFn )), }, .1) self.bt = BT(self.inst, root) self.inst:ListenForEvent("attacked", function(inst, data) self:OnAttacked(data.attacker) end) self.inst:ListenForEvent("onattackother", function(inst, data) self:OnAttackOther(data.target) end)endfunction SummonClone:OnInitializationComplete() --self.inst.components.knownlocations:RememberLocation("home", Point(self.inst.Transform:GetWorldPosition()))endreturn SummonClone Sorry for putting 99.9% on the burden on you, I didn't think i'd hit this many hurdles. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632664 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 The "local whoisplayer = ThePlayer" is what makes the summons follow the host.The code is executed in the server, ThePlayer is the host.I don't know how the summons are generated, you will have to pass a parameter somehow. Have you added any actions before? I'm not sure how are you doing this, heavenfall's code looks fine.Not sure what I can recommend here to look at, maybe the Throwable spears mod of rezecib?http://steamcommunity.com/sharedfiles/filedetails/?id=354415247I will look into making the followersitcommand for a dummy follower. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632711 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 Well, I got this (attachment).Tags propagate through the net, so they are very useful to avoid using replicas! My followersitcommand goes in the components folder.My modmain into your modmain. You write AddComponent("followersitcommand") and the tags do the rest. For both host and client. Try it out!stuff.zip Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632715 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 Yup, that was the fix I needed thanks! I also fixed the follower issue by removing the whoisplayer completely from the prefab file. (Or was your custom followersitcommand the cause? I dunno lol) But a small problem I'm dealing with now is the character teleporting. My client, yet again, gets the Out-Of-Memory crash. It occurs after teleporting a few times around the map. At first I thought it was the beefalo scare code you gave me awhile back but removing that still didn't remedy it. I'm starting to think this is more on my client's side but...anyway heres the tidbit of the crash log:[00:00:00]: Starting Up[00:00:00]: Version: 134801[00:00:00]: Don't Starve Together: 134801 WIN32_STEAMNNN Build Date: 2015-04-27_16-58-08[00:00:00]: Parsing commandline[00:00:00]: Command Line Arguments: [00:00:00]: Initializin Minidump handler[00:00:00]: ....Done[00:00:00]: Initializing Steam[00:00:00]: Steam AppBuildID: 603996[00:00:00]: Steam BetaName(Branch): [rog_together_beta][00:00:00]: ....Done[00:00:00]: Fixing DPI[00:00:00]: ...Done[00:00:00]: THREAD - started 'GAClient' (9328)[00:00:00]: HttpClient::ClientThread::Main()[00:00:07]: ProfileIndex:12.15[00:00:07]: THREAD - started 'GAClient' (8624)[00:00:07]: Network tick rate: U=15(2), D=0[00:00:07]: THREAD - started 'GAClient' (6924)[00:00:07]: HttpClient::ClientThread::Main()[00:00:07]: HttpClient::ClientThread::Main()[00:00:08]: Network tick rate: U=15(2), D=0[00:00:08]: Authorized application C:\Program Files (x86)\Steam\steamapps\common\Don't Starve Together Beta\bin\dontstarve_steam.exe is enabled in the firewall.[00:00:08]: WindowsFirewall - Application already authorized[00:00:08]: loaded ping_cache[00:00:08]: OnLoadPermissionList: APP:Klei/DoNotStarveTogether/save/blocklist.txt (Failure)[00:00:08]: OnLoadPermissionList: APP:Klei/DoNotStarveTogether/save/adminlist.txt (Failure)[00:00:08]: Offline user name: OU_76561198162990845[00:00:08]: SteamID: 76561198162990845[00:00:08]: cGame::InitializeOnMainThread[00:00:08]: WindowManager::Initialize[00:00:08]: THREAD - started 'GAClient' (1116)[00:00:08]: CreateWindow: Requesting 1398,756 - 5/6/5 - -1/-1/-1 - 0[00:00:08]: HttpClient::ClientThread::Main()[00:00:08]: CreateEGLContext: 16 configs found[00:00:08]: RestoreWindowPosition[00:00:08]: Saved Client Pos (22 x 66)[00:00:08]: Adjusted Window Pos (14 x 35)[00:00:08]: EnsureWindowOnScreen[00:00:08]: All good.[00:00:08]: THREAD - started 'WindowsInputManager' (5808)[00:00:08]: Renderer initialize: Okay[00:00:10]: AnimManager initialize: Okay[00:00:10]: Buffers initialize: Okay[00:00:11]: cDontStarveGame::DoGameSpecificInitialize()[00:00:11]: GameSpecific initialize: Okay[00:00:11]: cGame::StartPlaying[00:00:11]: LOADING LUA[00:00:11]: DoLuaFile scripts/main.lua[00:00:11]: DoLuaFile loading buffer scripts/main.lua[00:00:11]: scripts/main.lua(167,1) running main.lua [00:00:11]: loaded modindex [00:00:11]: ModIndex: Beginning normal load sequence. [00:00:11]: ModIndex:GetModsToLoad inserting moddir, saberlion-ROG [00:00:11]: ModIndex:GetModsToLoad inserting moddir, workshop-376333686 [00:00:11]: Could not load mod_config_data/modconfiguration_saberlion-ROG [00:00:11]: Loading mod: saberlion-ROG (Saber Lion!) Version:1.1.7 [00:00:11]: loaded mod_config_data/modconfiguration_workshop-376333686 [00:00:11]: Loading mod: workshop-376333686 (Always On Status) Version:1.1.4 [00:00:11]: Mod: workshop-376333686 (Always On Status) Loading modworldgenmain.lua [00:00:11]: Mod: workshop-376333686 (Always On Status) Mod had no modworldgenmain.lua. Skipping. [00:00:11]: Mod: workshop-376333686 (Always On Status) Loading modmain.lua [00:00:11]: Mod: saberlion-ROG (Saber Lion!) Loading modworldgenmain.lua [00:00:11]: Mod: saberlion-ROG (Saber Lion!) Mod had no modworldgenmain.lua. Skipping. [00:00:11]: Mod: saberlion-ROG (Saber Lion!) Loading modmain.lua [00:00:14]: LOADING LUA SUCCESS[00:00:14]: PlayerDeaths loaded morgue 5569 [00:00:14]: loaded profile [00:00:14]: bloom_enabled false [00:00:14]: loaded saveindex [00:00:14]: OnFilesLoaded() [00:00:14]: OnUpdatePurchaseStateComplete [00:00:16]: Mod: workshop-376333686 (Always On Status) Registering prefabs [00:00:16]: Mod: workshop-376333686 (Always On Status) Registering default mod prefab [00:00:16]: Mod: saberlion-ROG (Saber Lion!) Registering prefabs [00:00:16]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/saberlion [00:00:16]: Mod: saberlion-ROG (Saber Lion!) saberlion [00:00:16]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/sabermeat [00:00:16]: Mod: saberlion-ROG (Saber Lion!) sabermeat [00:00:16]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/summonclone [00:00:16]: Mod: saberlion-ROG (Saber Lion!) summonclone [00:00:16]: Mod: saberlion-ROG (Saber Lion!) Registering default mod prefab [00:00:17]: Load FE [00:00:17]: Load FE: done [00:00:17]: platform_motd table: 12DF8A58 [00:00:17]: SimLuaProxy::QueryServer()[00:00:17]: SimLuaProxy::QueryServer()[00:00:17]: SimLuaProxy::QueryServer()[00:00:17]: ModIndex: Load sequence finished successfully. [00:00:17]: Reset() returning[00:00:19]: platform_motd table: 0B7D4FB8 [00:02:04]: OnSteamLobbyJoinRequested( 109775242024965176 )[00:02:04]: ForceAuthenticationDialog[00:02:05]: [200] Account Communication Success (6)[00:02:05]: [ACCOUNT_ACTION_TOKEN_PURPOSE] Received UserId from TokenPurpose: KU_Gl4sTPnP[00:02:05]: DownloadAndJoinSteamServer: 109775242024965176[00:02:05]: QueryServerComplete no callback[00:02:15]: Attempting to join: Animu is a type of loli[00:02:15]: At 138.229.157.194:10999[00:02:16]: [200] Account Communication Success (13)[00:02:16]: Joining Steam Room : 109775242024965176[00:02:16]: void cSteamPunchthrough::MessageResult( RakNet::Console_JoinRoom * message )[00:02:16]: MemberJoinedRoom: Member named Arcade and ID 76561198046032840 joined room with ID 109775242024965176[00:02:16]: Connecting using Steam Punchthrough address[00:02:20]: Connection request accepted to 202.112.175.232|1 with GUID 612489604559898773[00:02:20]: Network external address discovered: 150.136.105.220|1[00:02:20]: SendClientHandShakePacket: IBjYM6oMYfvrv5sllBcs9XLUeHPKVlKf to 612489604559898773[00:02:20]: DeserializeHandShakeServerListing[00:02:20]: Network tick rate: U=10(3), D=15[00:02:20]: Version: 134801[00:02:20]: Begin Session: 06A0000CDC951C6B[00:02:21]: Done Downloading Client Object Data[00:02:21]: DownloadMods and temp disable [00:02:21]: Does saberlion-ROG v:1.1.7 exist? true [00:02:21]: We now have the required mods, enable them for server [00:02:21]: Temp Enabling saberlion-ROG [00:02:21]: ModIndex:SetTempModConfigData [00:02:21]: Setting temp mod config for mod saberlion-ROG [00:02:21]: Mods are setup for server, save the mod index and proceed. [00:02:21]: [00:02:21]: Downloading [0] From: server_temp[00:02:21]: 0 (43%) 1/1 server_temp\server_save 114000b / 261927b[00:02:21]: 0 (86%) 1/1 server_temp\server_save 228000b / 261927b[00:02:22]: 0 (100%) 1/1 server_temp\server_save 261927b / 261927b[00:02:22]: Download complete[0] Files: 1 Size: 261927[00:02:22]: unloading prefabs for mod MOD_workshop-376333686 [00:02:22]: unloading prefabs for mod MOD_saberlion-ROG [00:02:22]: Collecting garbage...[00:02:22]: lua_gc took 0.03 seconds[00:02:22]: ~NetworkLuaProxy()[00:02:22]: ~SimLuaProxy()[00:02:22]: lua_close took 0.04 seconds[00:02:22]: cGame::StartPlaying[00:02:22]: LOADING LUA[00:02:22]: DoLuaFile scripts/main.lua[00:02:22]: DoLuaFile loading buffer scripts/main.lua[00:02:22]: scripts/main.lua(167,1) running main.lua [00:02:22]: loaded modindex [00:02:22]: ModIndex: Beginning normal load sequence. [00:02:22]: ModIndex:GetModsToLoad inserting moddir, saberlion-ROG [00:02:22]: ModIndex:GetModsToLoad inserting moddir, workshop-376333686 [00:02:22]: Could not load mod_config_data/modconfiguration_saberlion-ROG [00:02:22]: Loading mod: saberlion-ROG (Saber Lion!) Version:1.1.7 [00:02:22]: loaded mod_config_data/modconfiguration_workshop-376333686 [00:02:22]: Loading mod: workshop-376333686 (Always On Status) Version:1.1.4 [00:02:22]: Mod: workshop-376333686 (Always On Status) Loading modworldgenmain.lua [00:02:22]: Mod: workshop-376333686 (Always On Status) Mod had no modworldgenmain.lua. Skipping. [00:02:22]: Mod: workshop-376333686 (Always On Status) Loading modmain.lua [00:02:22]: Mod: saberlion-ROG (Saber Lion!) Loading modworldgenmain.lua [00:02:22]: Mod: saberlion-ROG (Saber Lion!) Mod had no modworldgenmain.lua. Skipping. [00:02:22]: Mod: saberlion-ROG (Saber Lion!) Loading modmain.lua [00:02:22]: LOADING LUA SUCCESS[00:02:22]: PlayerDeaths loaded morgue 5569 [00:02:22]: loaded profile [00:02:22]: bloom_enabled false [00:02:22]: loaded saveindex [00:02:22]: OnFilesLoaded() [00:02:22]: OnUpdatePurchaseStateComplete [00:02:22]: Unload FE [00:02:22]: Unload FE done [00:02:24]: Mod: workshop-376333686 (Always On Status) Registering prefabs [00:02:24]: Mod: workshop-376333686 (Always On Status) Registering default mod prefab [00:02:24]: Mod: saberlion-ROG (Saber Lion!) Registering prefabs [00:02:24]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/saberlion [00:02:24]: Mod: saberlion-ROG (Saber Lion!) saberlion [00:02:24]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/sabermeat [00:02:24]: Mod: saberlion-ROG (Saber Lion!) sabermeat [00:02:24]: Mod: saberlion-ROG (Saber Lion!) Registering prefab file: prefabs/summonclone [00:02:24]: Mod: saberlion-ROG (Saber Lion!) summonclone [00:02:24]: Mod: saberlion-ROG (Saber Lion!) Registering default mod prefab [00:02:25]: LOAD BE [00:02:27]: Could not preload undefined prefab 0x4058bc0 (molehat)[00:02:27]: Could not preload undefined prefab 0x20e21d7a (puppet_wes)[00:02:27]: Could not preload undefined prefab 0x20e21d7a (puppet_wes)[00:02:29]: LOAD BE: done [00:02:29]: Deserialize world session from client_temp/server_save [00:02:29]: Save file is at version 1 [00:02:29]: MiniMapComponent::AddAtlas( minimap/minimap_data.xml )[00:02:29]: MiniMapComponent::AddAtlas( ../mods/saberlion-ROG/images/inventoryimages/summonclone.xml )[00:02:29]: MiniMapComponent::AddAtlas( ../mods/saberlion-ROG/images/map_icons/saberlion.xml )[00:02:30]: Loading Nav Grid [00:02:30]: Reconstructing topology [00:02:30]: ...Sorting points [00:02:30]: ...Sorting edges [00:02:30]: ...Connecting nodes [00:02:30]: ...Validating connections [00:02:31]: ...Housekeeping [00:02:31]: ...Done! [00:02:31]: ModIndex: Load sequence finished successfully. [00:02:31]: Reset() returning[00:02:31]: QueryServerComplete no callback[00:02:33]: Attempting to send resume request[00:02:34]: ReceiveResumeNotification[00:02:34]: Deleting user session from session/06A0000CDC951C6B/KU_Gl4sTPnP_/0000000001[00:02:38]: Movement prediction enabled [00:02:38]: Could not find anim build temperature[00:02:38]: Could not find anim bank [temperature][00:02:38]: Could not find anim build temperature[00:02:38]: Could not find anim bank [temperature][00:02:38]: Loading minimap from session/06A0000CDC951C6B/KU_Gl4sTPnP_/minimap[00:02:38]: Clearing minimap[00:02:47]: [Physics] Error deserializing mass for entity summonclone[101075][00:02:49]: [Physics] Error deserializing mass for entity summonclone[101276][00:02:50]: [Physics] Error deserializing mass for entity summonclone[101478][00:02:52]: [Physics] Error deserializing mass for entity summonclone[101679][00:02:53]: [Physics] Error deserializing mass for entity summonclone[101880][00:02:55]: [Physics] Error deserializing mass for entity summonclone[102082][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102140][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102141][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102142][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102143][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102144][00:03:00]: [Physics] Error deserializing mass for entity summonclone[102145][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102140][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102141][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102142][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102143][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102144][00:03:30]: [Physics] Error deserializing mass for entity summonclone[102145][00:03:30]: RakNet detected a missing replica (19204)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (28464)[00:03:30]: RakNet detected a missing replica (37936)[00:03:30]: RakNet detected a missing replica (185507)[00:03:30]: RakNet detected a missing replica (123216)[00:03:30]: RakNet detected a missing replica (131523)[00:03:30]: RakNet detected a missing replica (125592)[00:03:30]: RakNet detected a missing replica (132192)[00:03:30]: RakNet detected a missing replica (160)[00:03:30]: RakNet detected a missing replica (152198)[00:03:30]: RakNet detected a missing replica (225812)[00:03:30]: RakNet detected a missing replica (7351)[00:03:30]: RakNet detected a missing replica (166327)[00:03:30]: RakNet detected a missing replica (81009)[00:03:30]: RakNet detected a missing replica (131116)[00:03:30]: RakNet detected a missing replica (67072)[00:03:30]: RakNet detected a missing replica (77940)[00:03:30]: RakNet detected a missing replica (1454)[00:03:30]: RakNet detected a missing replica (172880)[00:03:30]: RakNet detected a missing replica (198968)[00:03:30]: RakNet detected a missing replica (245637)[00:03:30]: RakNet detected a missing replica (92764)[00:03:30]: RakNet detected a missing replica (24617)[00:03:30]: RakNet detected a missing replica (40978)[00:03:30]: RakNet detected a missing replica (172491)[00:03:30]: RakNet detected a missing replica (72464)[00:03:30]: RakNet detected a missing replica (34130)[00:03:30]: RakNet detected a missing replica (195709)[00:03:30]: RakNet detected a missing replica (77468)[00:03:30]: RakNet detected a missing replica (259438)[00:03:30]: RakNet detected a missing replica (19291)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (154160)[00:03:30]: RakNet detected a missing replica (38018)[00:03:30]: RakNet detected a missing replica (227235)[00:03:30]: RakNet detected a missing replica (123300)[00:03:30]: RakNet detected a missing replica (253623)[00:03:30]: RakNet detected a missing replica (19204)[00:03:30]: RakNet detected a missing replica (42242)[00:03:30]: RakNet detected a missing replica (106247)[00:03:30]: RakNet detected a missing replica (180451)[00:03:30]: RakNet detected a missing replica (165214)[00:03:30]: RakNet detected a missing replica (11580)[00:03:30]: RakNet detected a missing replica (225528)[00:03:30]: RakNet detected a missing replica (255965)[00:03:30]: RakNet detected a missing replica (167757)[00:03:30]: RakNet detected a missing replica (230515)[00:03:30]: RakNet detected a missing replica (84851)[00:03:30]: RakNet detected a missing replica (193341)[00:03:30]: RakNet detected a missing replica (255673)[00:03:30]: RakNet detected a missing replica (29132)[00:03:30]: RakNet detected a missing replica (194820)[00:03:30]: RakNet detected a missing replica (159990)[00:03:30]: RakNet detected a missing replica (121987)[00:03:30]: RakNet detected a missing replica (71117)[00:03:30]: RakNet detected a missing replica (83274)[00:03:30]: RakNet detected a missing replica (92114)[00:03:30]: RakNet detected a missing replica (197747)[00:03:30]: RakNet detected a missing replica (108839)[00:03:30]: RakNet detected a missing replica (175227)[00:03:30]: RakNet detected a missing replica (248205)[00:03:30]: RakNet detected a missing replica (52111)[00:03:30]: RakNet detected a missing replica (218167)[00:03:30]: RakNet detected a missing replica (201453)[00:03:30]: RakNet detected a missing replica (106116)[00:03:30]: RakNet detected a missing replica (126201)[00:03:30]: RakNet detected a missing replica (47363)[00:03:30]: RakNet detected a missing replica (233984)[00:03:30]: RakNet detected a missing replica (16659)[00:03:30]: RakNet detected a missing replica (57438)[00:03:30]: RakNet detected a missing replica (222464)[00:03:30]: RakNet detected a missing replica (198211)[00:03:30]: RakNet detected a missing replica (92465)[00:03:30]: RakNet detected a missing replica (212746)[00:03:30]: RakNet detected a missing replica (19986)[00:03:30]: RakNet detected a missing replica (142940)[00:03:30]: RakNet detected a missing replica (134872)[00:03:30]: RakNet detected a missing replica (65942)[00:03:30]: RakNet detected a missing replica (197450)[00:03:30]: RakNet detected a missing replica (258366)[00:03:30]: RakNet detected a missing replica (77697)[00:03:30]: RakNet detected a missing replica (7691)[00:03:30]: RakNet detected a missing replica (31834)[00:03:30]: RakNet detected a missing replica (257761)[00:03:30]: RakNet detected a missing replica (239311)[00:03:30]: RakNet detected a missing replica (211231)[00:03:30]: RakNet detected a missing replica (178441)[00:03:30]: RakNet detected a missing replica (237206)[00:03:30]: RakNet detected a missing replica (220391)[00:03:30]: RakNet detected a missing replica (59085)[00:03:30]: RakNet detected a missing replica (66274)[00:03:30]: RakNet detected a missing replica (31731)[00:03:30]: RakNet detected a missing replica (213473)[00:03:30]: RakNet detected a missing replica (190136)[00:03:30]: RakNet detected a missing replica (42282)[00:03:30]: RakNet detected a missing replica (59786)[00:03:30]: RakNet detected a missing replica (178638)[00:03:30]: RakNet detected a missing replica (234249)[00:03:30]: RakNet detected a missing replica (245074)[00:03:30]: RakNet detected a missing replica (214617)[00:03:30]: RakNet detected a missing replica (247699)[00:03:30]: RakNet detected a missing replica (138134)[00:03:30]: RakNet detected a missing replica (194217)[00:03:30]: RakNet detected a missing replica (115237)[00:03:30]: RakNet detected a missing replica (261180)[00:03:30]: RakNet detected a missing replica (229848)[00:03:30]: RakNet detected a missing replica (65650)[00:03:30]: RakNet detected a missing replica (166181)[00:03:30]: RakNet detected a missing replica (77698)[00:03:30]: RakNet detected a missing replica (45699)[00:03:30]: RakNet detected a missing replica (106798)[00:03:30]: RakNet detected a missing replica (245535)[00:03:30]: RakNet detected a missing replica (134071)[00:03:30]: RakNet detected a missing replica (19256)[00:03:30]: RakNet detected a missing replica (201227)[00:03:30]: RakNet detected a missing replica (108800)[00:03:30]: RakNet detected a missing replica (255745)[00:03:30]: RakNet detected a missing replica (61560)[00:03:30]: RakNet detected a missing replica (106903)[00:03:30]: RakNet detected a missing replica (68495)[00:03:30]: RakNet detected a missing replica (7230)[00:03:30]: RakNet detected a missing replica (227831)[00:03:30]: RakNet detected a missing replica (222163)[00:03:30]: RakNet detected a missing replica (57756)[00:03:30]: RakNet detected a missing replica (250588)[00:03:30]: RakNet detected a missing replica (228431)[00:03:30]: RakNet detected a missing replica (162222)[00:03:30]: RakNet detected a missing replica (72947)[00:03:30]: RakNet detected a missing replica (81409)[00:03:30]: RakNet detected a missing replica (40125)[00:03:30]: RakNet detected a missing replica (63392)[00:03:30]: RakNet detected a missing replica (83315)[00:03:30]: RakNet detected a missing replica (102738)[00:03:30]: RakNet detected a missing replica (235892)[00:03:30]: RakNet detected a missing replica (49500)[00:03:30]: RakNet detected a missing replica (125641)[00:03:30]: RakNet detected a missing replica (60254)[00:03:30]: RakNet detected a missing replica (94883)[00:03:30]: RakNet detected a missing replica (258787)[00:03:30]: RakNet detected a missing replica (54541)[00:03:30]: RakNet detected a missing replica (148731)[00:03:30]: RakNet detected a missing replica (141281)[00:03:30]: RakNet detected a missing replica (31614)[00:03:30]: RakNet detected a missing replica (126528)[00:03:30]: RakNet detected a missing replica (140288)[00:03:30]: RakNet detected a missing replica (118980)[00:03:30]: RakNet detected a missing replica (47127)[00:03:30]: RakNet detected a missing replica (71936)[00:03:30]: RakNet detected a missing replica (180688)[00:03:30]: RakNet detected a missing replica (126988)[00:03:30]: RakNet detected a missing replica (36674)[00:03:30]: RakNet detected a missing replica (168708)[00:03:30]: RakNet detected a missing replica (192534)[00:03:30]: RakNet detected a missing replica (182229)[00:03:30]: RakNet detected a missing replica (98341)[00:03:30]: RakNet detected a missing replica (229458)[00:03:30]: RakNet detected a missing replica (113871)[00:03:30]: RakNet detected a missing replica (216032)[00:03:30]: RakNet detected a missing replica (182082)[00:03:30]: RakNet detected a missing replica (40726)[00:03:30]: RakNet detected a missing replica (162616)[00:03:30]: RakNet detected a missing replica (190963)[00:03:30]: RakNet detected a missing replica (118471)[00:03:30]: RakNet detected a missing replica (93890)[00:03:30]: RakNet detected a missing replica (173989)[00:03:30]: RakNet detected a missing replica (55289)[00:03:30]: RakNet detected a missing replica (162291)[00:03:30]: RakNet detected a missing replica (163896)[00:03:30]: RakNet detected a missing replica (253564)[00:03:30]: RakNet detected a missing replica (86072)[00:03:30]: RakNet detected a missing replica (145902)[00:03:30]: RakNet detected a missing replica (108938)[00:03:30]: RakNet detected a missing replica (113186)[00:03:30]: RakNet detected a missing replica (110131)[00:03:30]: RakNet detected a missing replica (222338)[00:03:30]: RakNet detected a missing replica (110548)[00:03:30]: RakNet detected a missing replica (152022)[00:03:30]: RakNet detected a missing replica (258532)[00:03:30]: RakNet detected a missing replica (231141)[00:03:30]: RakNet detected a missing replica (163242)[00:03:30]: RakNet detected a missing replica (159881)[00:03:30]: RakNet detected a missing replica (16207)[00:03:30]: RakNet detected a missing replica (73974)[00:03:30]: RakNet detected a missing replica (32988)[00:03:30]: RakNet detected a missing replica (90697)[00:03:30]: RakNet detected a missing replica (232352)[00:03:30]: RakNet detected a missing replica (112)[00:03:30]: RakNet detected a missing replica (124978)[00:03:30]: RakNet detected a missing replica (20867)[00:03:30]: RakNet detected a missing replica (107006)[00:03:30]: RakNet detected a missing replica (235293)[00:03:30]: RakNet detected a missing replica (134087)[00:03:30]: RakNet detected a missing replica (101632)[00:03:30]: RakNet detected a missing replica (217682)[00:03:30]: RakNet detected a missing replica (108800)[00:03:30]: RakNet detected a missing replica (255745)[00:03:30]: RakNet detected a missing replica (61560)[00:03:30]: RakNet detected a missing replica (106903)[00:03:30]: RakNet detected a missing replica (68495)[00:03:30]: RakNet detected a missing replica (7230)[00:03:30]: RakNet detected a missing replica (227831)[00:03:30]: RakNet detected a missing replica (222163)[00:03:30]: RakNet detected a missing replica (57756)[00:03:30]: RakNet detected a missing replica (250588)[00:03:30]: RakNet detected a missing replica (228431)[00:03:30]: RakNet detected a missing replica (162222)[00:03:30]: RakNet detected a missing replica (72947)[00:03:30]: RakNet detected a missing replica (81409)[00:03:30]: RakNet detected a missing replica (40125)[00:03:30]: RakNet detected a missing replica (63392)[00:03:30]: RakNet detected a missing replica (83315)[00:03:30]: RakNet detected a missing replica (102738)[00:03:30]: RakNet detected a missing replica (235892)[00:03:30]: RakNet detected a missing replica (49500)[00:03:30]: RakNet detected a missing replica (125641)[00:03:30]: RakNet detected a missing replica (60254)[00:03:30]: RakNet detected a missing replica (94883)[00:03:30]: RakNet detected a missing replica (258787)[00:03:30]: RakNet detected a missing replica (54541)[00:03:30]: RakNet detected a missing replica (148731)[00:03:30]: RakNet detected a missing replica (141281)[00:03:30]: RakNet detected a missing replica (31614)[00:03:30]: RakNet detected a missing replica (126528)[00:03:30]: RakNet detected a missing replica (140288)[00:03:30]: RakNet detected a missing replica (118980)[00:03:30]: RakNet detected a missing replica (47127)[00:03:30]: RakNet detected a missing replica (71936)[00:03:30]: RakNet detected a missing replica (246224)[00:03:30]: RakNet detected a missing replica (127214)[00:03:30]: RakNet detected a missing replica (102466)[00:03:30]: RakNet detected a missing replica (172908)[00:03:30]: RakNet detected a missing replica (77335)[00:03:30]: RakNet detected a missing replica (84943)[00:03:30]: RakNet detected a missing replica (98469)[00:03:30]: RakNet detected a missing replica (229458)[00:03:30]: RakNet detected a missing replica (113871)[00:03:30]: RakNet detected a missing replica (216032)[00:03:30]: RakNet detected a missing replica (182082)[00:03:30]: RakNet detected a missing replica (40726)[00:03:30]: RakNet detected a missing replica (162616)[00:03:30]: RakNet detected a missing replica (190963)[00:03:30]: RakNet detected a missing replica (118471)[00:03:30]: RakNet detected a missing replica (93890)[00:03:30]: RakNet detected a missing replica (173989)[00:03:30]: RakNet detected a missing replica (55289)[00:03:30]: RakNet detected a missing replica (162291)[00:03:30]: RakNet detected a missing replica (163896)[00:03:30]: RakNet detected a missing replica (253564)[00:03:30]: RakNet detected a missing replica (86072)[00:03:30]: RakNet detected a missing replica (145902)[00:03:30]: RakNet detected a missing replica (108938)[00:03:30]: RakNet detected a missing replica (113186)[00:03:30]: RakNet detected a missing replica (110131)[00:03:30]: RakNet detected a missing replica (222338)[00:03:30]: RakNet detected a missing replica (110548)[00:03:30]: RakNet detected a missing replica (152022)[00:03:30]: RakNet detected a missing replica (258532)[00:03:30]: RakNet detected a missing replica (231141)[00:03:30]: RakNet detected a missing replica (163242)[00:03:30]: RakNet detected a missing replica (159881)[00:03:30]: RakNet detected a missing replica (16207)[00:03:30]: RakNet detected a missing replica (73974)[00:03:30]: RakNet detected a missing replica (32988)[00:03:30]: RakNet detected a missing replica (90697)[00:03:30]: RakNet detected a missing replica (232352)[00:03:30]: RakNet detected a missing replica (112)[00:03:30]: RakNet detected a missing replica (124978)[00:03:30]: RakNet detected a missing replica (115842)[00:03:30]: RakNet detected a missing replica (106894)[00:03:30]: RakNet detected a missing replica (258076)[00:03:30]: RakNet detected a missing replica (68431)[00:03:30]: RakNet detected a missing replica (243645)[00:03:30]: RakNet detected a missing replica (19204)[00:03:30]: RakNet detected a missing replica (57345)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (158256)[00:03:30]: RakNet detected a missing replica (21613)[00:03:30]: RakNet detected a missing replica (74660)[00:03:30]: RakNet detected a missing replica (123368)[00:03:30]: RakNet detected a missing replica (122562)[00:03:30]: RakNet detected a missing replica (59392)[00:03:30]: RakNet detected a missing replica (203545)[00:03:30]: RakNet detected a missing replica (95342)[00:03:30]: RakNet detected a missing replica (184781)[00:03:30]: RakNet detected a missing replica (75543)[00:03:30]: RakNet detected a missing replica (215961)[00:03:30]: RakNet detected a missing replica (94061)[00:03:30]: RakNet detected a missing replica (169433)[00:03:30]: RakNet detected a missing replica (218838)[00:03:30]: RakNet detected a missing replica (199581)[00:03:30]: RakNet detected a missing replica (95602)[00:03:30]: RakNet detected a missing replica (228793)[00:03:30]: RakNet detected a missing replica (259702)[00:03:30]: RakNet detected a missing replica (203993)[00:03:30]: RakNet detected a missing replica (19229)[00:03:30]: RakNet detected a missing replica (57345)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (29744)[00:03:30]: RakNet detected a missing replica (38051)[00:03:30]: RakNet detected a missing replica (138660)[00:03:30]: RakNet detected a missing replica (123268)[00:03:30]: RakNet detected a missing replica (132807)[00:03:30]: RakNet detected a missing replica (32)[00:03:30]: RakNet detected a missing replica (135168)[00:03:30]: RakNet detected a missing replica (8192)[00:03:30]: RakNet detected a missing replica (98318)[00:03:30]: RakNet detected a missing replica (179601)[00:03:30]: RakNet detected a missing replica (18407)[00:03:30]: RakNet detected a missing replica (71901)[00:03:30]: RakNet detected a missing replica (95858)[00:03:30]: RakNet detected a missing replica (179604)[00:03:30]: RakNet detected a missing replica (128982)[00:03:30]: RakNet detected a missing replica (88985)[00:03:30]: RakNet detected a missing replica (93797)[00:03:30]: RakNet detected a missing replica (245200)[00:03:30]: RakNet detected a missing replica (218663)[00:03:30]: RakNet detected a missing replica (253335)[00:03:30]: RakNet detected a missing replica (94063)[00:03:30]: RakNet detected a missing replica (183441)[00:03:30]: RakNet detected a missing replica (45252)[00:03:30]: RakNet detected a missing replica (30)[00:03:30]: RakNet detected a missing replica (249957)[00:03:30]: RakNet detected a missing replica (126725)[00:03:30]: RakNet detected a missing replica (148133)[00:03:30]: RakNet detected a missing replica (34366)[00:03:30]: RakNet detected a missing replica (202366)[00:03:30]: RakNet detected a missing replica (29123)[00:03:30]: RakNet detected a missing replica (19260)[00:03:30]: RakNet detected a missing replica (57345)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (92208)[00:03:30]: RakNet detected a missing replica (21601)[00:03:30]: RakNet detected a missing replica (252067)[00:03:30]: RakNet detected a missing replica (123358)[00:03:30]: RakNet detected a missing replica (7872)[00:03:30]: RakNet detected a missing replica (59392)[00:03:30]: RakNet detected a missing replica (203545)[00:03:30]: RakNet detected a missing replica (95342)[00:03:30]: RakNet detected a missing replica (184781)[00:03:30]: RakNet detected a missing replica (75543)[00:03:30]: RakNet detected a missing replica (215961)[00:03:30]: RakNet detected a missing replica (94061)[00:03:30]: RakNet detected a missing replica (169433)[00:03:30]: RakNet detected a missing replica (218838)[00:03:30]: RakNet detected a missing replica (199581)[00:03:30]: RakNet detected a missing replica (95602)[00:03:30]: RakNet detected a missing replica (228793)[00:03:30]: RakNet detected a missing replica (259702)[00:03:30]: RakNet detected a missing replica (203993)[00:03:30]: RakNet detected a missing replica (19273)[00:03:30]: RakNet detected a missing replica (57345)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (228400)[00:03:30]: RakNet detected a missing replica (38028)[00:03:30]: RakNet detected a missing replica (81316)[00:03:30]: RakNet detected a missing replica (123152)[00:03:30]: RakNet detected a missing replica (45771)[00:03:30]: RakNet detected a missing replica (48)[00:03:30]: RakNet detected a missing replica (135168)[00:03:30]: RakNet detected a missing replica (8192)[00:03:30]: RakNet detected a missing replica (98318)[00:03:30]: RakNet detected a missing replica (179601)[00:03:30]: RakNet detected a missing replica (18407)[00:03:30]: RakNet detected a missing replica (71901)[00:03:30]: RakNet detected a missing replica (95858)[00:03:30]: RakNet detected a missing replica (179604)[00:03:30]: RakNet detected a missing replica (128982)[00:03:30]: RakNet detected a missing replica (88985)[00:03:30]: RakNet detected a missing replica (93797)[00:03:30]: RakNet detected a missing replica (245200)[00:03:30]: RakNet detected a missing replica (218663)[00:03:30]: RakNet detected a missing replica (253335)[00:03:30]: RakNet detected a missing replica (94063)[00:03:30]: RakNet detected a missing replica (118161)[00:03:30]: RakNet detected a missing replica (45236)[00:03:30]: RakNet detected a missing replica (30)[00:03:30]: RakNet detected a missing replica (249957)[00:03:30]: RakNet detected a missing replica (26885)[00:03:30]: RakNet detected a missing replica (148069)[00:03:30]: RakNet detected a missing replica (84284)[00:03:30]: RakNet detected a missing replica (202382)[00:03:30]: RakNet detected a missing replica (177273)[00:03:30]: RakNet detected a missing replica (19204)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (92208)[00:03:30]: RakNet detected a missing replica (5367)[00:03:30]: RakNet detected a missing replica (84644)[00:03:30]: RakNet detected a missing replica (123283)[00:03:30]: RakNet detected a missing replica (251074)[00:03:30]: RakNet detected a missing replica (125672)[00:03:30]: RakNet detected a missing replica (132192)[00:03:30]: RakNet detected a missing replica (160)[00:03:30]: RakNet detected a missing replica (189068)[00:03:30]: RakNet detected a missing replica (33300)[00:03:30]: RakNet detected a missing replica (15367)[00:03:30]: RakNet detected a missing replica (165815)[00:03:30]: RakNet detected a missing replica (80967)[00:03:30]: RakNet detected a missing replica (131116)[00:03:30]: RakNet detected a missing replica (67072)[00:03:30]: RakNet detected a missing replica (77940)[00:03:30]: RakNet detected a missing replica (124569)[00:03:30]: RakNet detected a missing replica (238416)[00:03:30]: RakNet detected a missing replica (205309)[00:03:30]: RakNet detected a missing replica (49285)[00:03:30]: RakNet detected a missing replica (129687)[00:03:30]: RakNet detected a missing replica (24617)[00:03:30]: RakNet detected a missing replica (40978)[00:03:30]: RakNet detected a missing replica (172491)[00:03:30]: RakNet detected a missing replica (22799)[00:03:30]: RakNet detected a missing replica (34218)[00:03:30]: RakNet detected a missing replica (225676)[00:03:30]: RakNet detected a missing replica (77372)[00:03:30]: RakNet detected a missing replica (66936)[00:03:30]: RakNet detected a missing replica (19291)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (152624)[00:03:30]: RakNet detected a missing replica (21683)[00:03:30]: RakNet detected a missing replica (125859)[00:03:30]: RakNet detected a missing replica (123305)[00:03:30]: RakNet detected a missing replica (35767)[00:03:30]: RakNet detected a missing replica (19204)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (91696)[00:03:30]: RakNet detected a missing replica (5270)[00:03:30]: RakNet detected a missing replica (29092)[00:03:30]: RakNet detected a missing replica (123330)[00:03:30]: RakNet detected a missing replica (52674)[00:03:30]: RakNet detected a missing replica (125648)[00:03:30]: RakNet detected a missing replica (132192)[00:03:30]: RakNet detected a missing replica (160)[00:03:30]: RakNet detected a missing replica (170653)[00:03:30]: RakNet detected a missing replica (230932)[00:03:30]: RakNet detected a missing replica (56515)[00:03:30]: RakNet detected a missing replica (34999)[00:03:30]: RakNet detected a missing replica (80922)[00:03:30]: RakNet detected a missing replica (131116)[00:03:30]: RakNet detected a missing replica (67072)[00:03:30]: RakNet detected a missing replica (77940)[00:03:30]: RakNet detected a missing replica (85650)[00:03:30]: RakNet detected a missing replica (42064)[00:03:30]: RakNet detected a missing replica (199063)[00:03:30]: RakNet detected a missing replica (49285)[00:03:30]: RakNet detected a missing replica (111278)[00:03:30]: RakNet detected a missing replica (24617)[00:03:30]: RakNet detected a missing replica (40978)[00:03:30]: RakNet detected a missing replica (172491)[00:03:30]: RakNet detected a missing replica (5391)[00:03:30]: RakNet detected a missing replica (34298)[00:03:30]: RakNet detected a missing replica (145553)[00:03:30]: RakNet detected a missing replica (77436)[00:03:30]: RakNet detected a missing replica (29305)[00:03:30]: RakNet detected a missing replica (19291)[00:03:30]: RakNet detected a missing replica (38144)[00:03:30]: RakNet detected a missing replica (23814)[00:03:30]: RakNet detected a missing replica (217648)[00:03:30]: RakNet detected a missing replica (5193)[00:03:30]: RakNet detected a missing replica (70308)[00:03:30]: RakNet detected a missing replica (123295)[00:03:30]: RakNet detected a missing replica (32951) I wish I could do some more testing but my Client tester is now out to bed sleeping and I'm to lazy to create a dedicated server. I'll keep you updated once my Client and I do more testing. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632752 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 Apparently I lost my editing permissions so my apologies for the extra post I should've clarified on one sentence, *"But a small problem I'm dealing with now is the character teleporting. My client, yet again, gets the Out-Of-Memory crash. It occurs after teleporting a few times around the map(With the clones actively following her)" Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632753 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 Leaks everywhere. The prefab fn is missing the AddNetwork and the if not TheWorld.ismastersim then return inst end.That should solve the missing replicas. Maybe the Physics issue too. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632755 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) Sorry I should've shown you my updated summonclone.lua, it already had all of those you suggested so I can't quite pinpoint the cause.local brain = require "brains/summonclonebrain"local assets ={ Asset("ATLAS", "images/inventoryimages/summonclone.xml"), Asset("ANIM", "anim/player_basic.zip"), Asset("ANIM", "anim/player_idles_shiver.zip"), Asset("ANIM", "anim/player_actions.zip"), Asset("ANIM", "anim/player_actions_axe.zip"), Asset("ANIM", "anim/player_actions_pickaxe.zip"), Asset("ANIM", "anim/player_actions_shovel.zip"), Asset("ANIM", "anim/player_actions_blowdart.zip"), Asset("ANIM", "anim/player_actions_eat.zip"), Asset("ANIM", "anim/player_actions_item.zip"), Asset("ANIM", "anim/player_cave_enter.zip"), Asset("ANIM", "anim/player_actions_uniqueitem.zip"), Asset("ANIM", "anim/player_actions_bugnet.zip"), Asset("ANIM", "anim/player_actions_fishing.zip"), Asset("ANIM", "anim/player_actions_boomerang.zip"), Asset("ANIM", "anim/player_bush_hat.zip"), Asset("ANIM", "anim/player_attacks.zip"), Asset("ANIM", "anim/player_idles.zip"), Asset("ANIM", "anim/player_rebirth.zip"), Asset("ANIM", "anim/player_jump.zip"), Asset("ANIM", "anim/player_amulet_resurrect.zip"), Asset("ANIM", "anim/player_teleport.zip"), Asset("ANIM", "anim/wilson_fx.zip"), Asset("ANIM", "anim/player_one_man_band.zip"), Asset("ANIM", "anim/player_slurtle_armor.zip"), Asset("ANIM", "anim/player_staff.zip"), Asset("ANIM", "anim/shadow_hands.zip"), Asset("SOUND", "sound/sfx.fsb"), Asset("SOUND", "sound/wilson.fsb"),}local prefabs ={ "saberlion"}local onloadfn = function(inst, data) if data and data.sleeping then inst.components.sleeper:GoToSleep() endendlocal onsavefn = function(inst, data) if inst.components.sleeper:IsAsleep() then data.sleeping = true endendlocal function CalcSanityAura(inst, observer) if inst.components.follower and inst.components.follower.leader == observer then return -TUNING.SANITYAURA_LARGE end return 0endlocal function CalcSanityAura_Maxwell(inst, observer) return 0endlocal function ShouldAcceptItem(inst, item) local currenthealth = inst.components.health.currenthealth / inst.components.health.maxhealth if item.components.edible and currenthealth < 1 and item.components.edible.healthvalue > 0 then return true end if item.components.equippable and (item.components.equippable.equipslot == EQUIPSLOTS.HEAD or item.components.equippable.equipslot == EQUIPSLOTS.HANDS or item.components.equippable.equipslot == EQUIPSLOTS.BODY) and not item.components.projectile then if item.prefab == "batbat" then print ("refusing batbat") return false end return true endendlocal function OnGetItemFromPlayer(inst, giver, item) if item.components.equippable and (item.components.equippable.equipslot == EQUIPSLOTS.HEAD or item.components.equippable.equipslot == EQUIPSLOTS.HANDS or item.components.equippable.equipslot == EQUIPSLOTS.BODY) then local newslot = item.components.equippable.equipslot local current = inst.components.inventory:GetEquippedItem(newslot) if current then inst.components.inventory:DropItem(current) end inst.components.inventory:Equip(item) elseif item.components.edible then inst.components.health:DoDelta(item.components.edible:GetHealth(inst), nil, item.prefab) inst:PushEvent("oneatsomething", {food = item}) inst.sg:GoToState("eat") endendlocal function OnRefuseItem(inst, item) inst.sg:GoToState("refuse") local playerprefab = ThePlayer local actualprefab = playerprefab.prefab inst.components.talker:Say(GetString(actualprefab, "ACTIONFAIL_GENERIC"))endlocal function NormalRetargetFn(inst) return FindEntity(inst, TUNING.PIG_TARGET_DIST, function(guy) return guy:HasTag("monster") and guy.prefab ~= "webber" and guy.components.health and not guy.components.health:IsDead() and inst.components.combat:CanTarget(guy) end)endlocal function fn(Sim) local inst = CreateEntity() inst.entity:AddTransform() inst.entity:AddAnimState() inst.entity:AddNetwork() inst.entity:AddSoundEmitter() inst.entity:AddDynamicShadow() --local whoisplayer = ThePlayer shadow:SetSize( 1.5, .75 ) inst.Transform:SetFourFaced() MakeCharacterPhysics(inst, 30, .3) --inst:AddTag("monster") inst:AddTag("summonclone") inst:AddTag("sheltercarrier") inst:AddTag("summonedbyplayer") inst:AddTag("scarytoprey") inst.AnimState:SetBank("wilson") inst.AnimState:SetBuild("saberlion") --anim:PlayAnimation("idle_loop", true) if not TheWorld.ismastersim then return inst end inst.entity:SetPristine() ------------------------------------------ inst:AddComponent("locomotor") -- locomotor must be constructed before the stategraph inst.components.locomotor.runspeed = 7 inst.components.locomotor.walkspeed = 7 ------------------------------------------ ------------------------------------------ inst:AddComponent("sanityaura") inst.components.sanityaura.aurafn = CalcSanityAura MakeMediumBurnableCharacter(inst, "pig_torso") ------------------ inst:AddComponent("health") inst.components.health:SetMaxHealth(TUNING.WILSON_HEALTH) ------------------ inst:AddComponent("combat") inst.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE) --inst.components.combat.hiteffectsymbol = "pig_torso" inst.components.combat:SetAttackPeriod(2) inst.components.combat:SetRetargetFunction(3, NormalRetargetFn) ------------------------------------------ inst:AddComponent("inventory") ------------------------------------------ inst.entity:AddLabel() inst.Label:SetFontSize(20) inst.Label:SetFont(DEFAULTFONT) inst.Label:SetColour(1, 1, 1) inst.Label:Enable(true) ------------------------------------------ inst:AddComponent("follower") inst.components.follower.maxfollowtime = 99999999 --print("treeguard should follow "..whoisplayer) inst.components.follower:AddLoyaltyTime(9999999) ------------------------------------------ inst:AddComponent("talker") inst.components.talker:StopIgnoringAll() ------------------------------------------ inst:AddComponent("inspectable") local minimap = inst.entity:AddMiniMapEntity() minimap:SetIcon( "summonclone.tex" ) ------------------------------------------ inst.Transform:SetScale(0.7, 0.7, 0.7) inst:SetBrain(brain) if ACTIONS.SITCOMMAND ~= nil then inst:AddComponent("followersitcommand") end inst:AddComponent("lootdropper") inst:AddComponent("norecipelootdrop") inst:AddComponent("trader") inst.components.trader:Enable() inst.components.trader:SetAcceptTest(ShouldAcceptItem) inst.components.trader.onaccept = OnGetItemFromPlayer inst.components.trader.onrefuse = OnRefuseItem inst.AnimState:Hide("ARM_carry") inst.AnimState:Show("ARM_normal") inst:AddComponent("wisecrackerclone") -- begin custom functions inst:ListenForEvent( "nighttime", function() inst.components.health:DoDelta(-10) end, TheWorld) inst:SetStateGraph("SGsummonclone") return instendreturn Prefab( "common/summonclone", fn, assets, prefabs) Well actually I just changed: local sound = inst.entity:AddSoundEmitter() local shadow = inst.entity:AddDynamicShadow() to inst.entity:AddSoundEmitter() inst.entity:AddDynamicShadow() Just now but I can't test if that did anything(As my client is sleeping). Edit update: Nope, that didn't fix anything. Edited April 28, 2015 by rons0n Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632758 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 That doesn't look wrong.You should do things step by step and looking at the log. To pinpoint what and when exactly the error triggers. Also, you have "could not find temperature bank". That shouldn't happen.So, maybe you touched something in the lion prefab that ended up affecting the summons? I'm gonna need the zip of the mod to test it as a whole. Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632852 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 Alright, I'll be heading off somewhere for a bit so my apologies if i give you a late response later. You've done like 90% of the work so I don't know if you want to be now called a contributor, its completely optional though. I don't wanna force you. saberlion.zip Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632856 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 No need to include me anywhere. I insist. You have done a lot of work yourself. Reading all the stuff was a rollercoaster.Here. I hope I did it correctly.saberlion.zip Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632885 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 "Gao screw you!" MY CHILDREN HATE ME. Anyway thanks for the fix as always DarkXero(And that little added component you gave her). Unfortunately the Out-Of-Memory crash still happens BUT ONLY if you use the c_move(AllPlayers) command. This seems to be unfixable as far as we know. She's completely fine going through wormholes and the telestaff(non console). So my conclusion is, if you never move her by console shes completely fine, and I'm content with that. Unless now the given information will help you spot the cause? Allwell, thanks! Uploading her now so people can embrace the Lion goodness! Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632912 Share on other sites More sharing options...
DarkXero Posted April 28, 2015 Share Posted April 28, 2015 @rons0n, I'm unable to replicate the issue. First, c_move(AllPlayers) won't work, because AllPlayers.Transform is nil.Second, if I do c_move(AllPlayers[1]), then I move to where my mouse is. So it works as intended. This, in a dedicated server. Myself as client.I even tried c_gonext("pigking"), and then I teleported, and then the cubs teleported. Are you sure you are doing c_move(AllPlayers) exactly?I need the very same steps you do, from entering the server until the crash.Do you c_spawn cubs? Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632941 Share on other sites More sharing options...
rons0n Posted April 28, 2015 Author Share Posted April 28, 2015 (edited) Sorry I should've been more clear, I tend to do that. Alright this is how I replicated it:1. Start (passworded)Server where im the host2. Client joins in hosted server3. I tell client to make atleast 6 clones4. I then move far away(really far by using the c_gonext("prefab") console command.5. type c_move(AllPlayers[2]) the client to my destination6. Client tells me she crashes Thats all there is to it sadly. I did not spawn in the cubs and im 100% sure this is exactly what we did. Maybe it could be related to just my client only? Don't know x_x I forgot to mention that both of us were saberlions. Edited April 28, 2015 by rons0n Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-632956 Share on other sites More sharing options...
DarkXero Posted April 29, 2015 Share Posted April 29, 2015 (edited) @rons0n, well, I managed to replicate the issue. However, I only managed to replicate it with one out of two people.It displayed the missing replica messages. I wrote the brain again, and optimized some things to see if I catched the error on the way.I also switched to using a followersitcommand replica instead of tags.Now I just lag, but not crash, but then again, maybe it's another outlier. Maybe it's a game limitation given how there's a crash if you teleport a follower without a delay (StartLeashing). Maybe there's something special to do while teleporting masses of entities? I leave this as conclusion.saberlion2.zip Edited April 29, 2015 by DarkXero Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-633042 Share on other sites More sharing options...
rons0n Posted April 29, 2015 Author Share Posted April 29, 2015 Even though I said I was content a few posts ago you still decided to go for the fix. Amazing!Sucks that you don't want to be marked as contributor as you've been racking your head trying to find the issue. I feel bad honestly. But regardless thanks for everything! I havent tested your new changes but I trust that it's going to work and I'll just update it now. I also agree this will be the final conclusion to this follower error. I know I already said thanks, but saying thanks again anyway. Thanks! Link to comment https://forums.kleientertainment.com/forums/topic/53261-follower-error/#findComment-633079 Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now