public void OnNPCAtStockpile(ref NPCBase.NPCState state) { if (_weapon != null) { return; } if (_colonyState.CallToArmsEnabled) { _weapon = GetWeapon(NPC); if (_weapon == null) { foreach (BlockJobManager <GuardJobInstance> w in ServerManager.BlockEntityCallbacks.AutoLoadedInstances.Where(t => t as BlockJobManager <GuardJobInstance> != null)) { if (_stock.Contains(w.Settings.RecruitmentItem)) { _stock.TryRemove(w.Settings.RecruitmentItem); NPC.Inventory.Add(w.Settings.RecruitmentItem); _weapon = w.Settings as GuardJobSettings; break; } } } } }
public static bool TryGetNPCGuardSettings(this IJob job, out GuardJobSettings settings) { if (job != null && job is GuardJobInstance guardJob) { settings = (GuardJobSettings)guardJob.Settings; return(true); } settings = null; return(false); }
public static bool TryGetNPCGuardDefaultSettings(this IJob job, out GuardJobSettings settings) { if (job != null && job is GuardJobInstance guardJob) { settings = (GuardJobSettings)guardJob.Settings; if (ServerManager.BlockEntityCallbacks.TryGetGuardJobSettings(settings.NPCTypeKey, out settings)) { return(true); } } settings = null; return(false); }
public static GuardJobSettings GetWeapon(NPCBase npc) { GuardJobSettings weapon = null; var inv = SettlerInventory.GetSettlerInventory(npc); foreach (BlockJobManager <GuardJobInstance> w in ServerManager.BlockEntityCallbacks.AutoLoadedInstances.Where(t => t as BlockJobManager <GuardJobInstance> != null)) { if (npc.Inventory.Contains(w.Settings.RecruitmentItem) || inv.Weapon.Id == w.Settings.RecruitmentItem.Type) { weapon = w.Settings as GuardJobSettings; break; } } return(weapon); }
public PandaGuardJobSettings(GuardJobSettings settings) { BlockTypes = settings.BlockTypes; NPCType = settings.NPCType; NPCTypeKey = settings.NPCTypeKey; OnShootAudio = settings.OnShootAudio; RecruitmentItem = settings.RecruitmentItem; ShootItem = settings.ShootItem; SleepType = settings.SleepType; Range = settings.Range; Damage = settings.Damage; CooldownShot = settings.CooldownShot; OnShootResultItem = settings.OnShootResultItem; CooldownSearchingTarget = settings.CooldownSearchingTarget; CooldownMissingItem = settings.CooldownMissingItem; OnHitAudio = settings.OnHitAudio; }
static void Postfix(GuardJobSettings __instance, GuardJobInstance instance, ref NPCBase.NPCState state) { // Log.WriteWarning("GuardJobSettingsHookShootAtTarget::Postfix"); npc = null; }
public static bool TryGetGuardJobSettings(this BlockEntities.BlockEntityCallbacks callbacks, string name, out GuardJobSettings guardJobSettings) { guardJobSettings = null; var guardJobInstance = callbacks.AutoLoadedInstances.Where(o => o is BlockJobManager <GuardJobInstance> manager && manager.Settings is GuardJobSettings set && set.NPCTypeKey == name).FirstOrDefault() as BlockJobManager <GuardJobInstance>; if (guardJobInstance == null) { PandaLogger.Log(ChatColor.yellow, "Unable to find guard job settings for {0}", name); } else { guardJobSettings = guardJobInstance.Settings as GuardJobSettings; } return(guardJobSettings != null); }
public static bool TryGetNPCGuardDefaultSettings(this NPC.NPCBase npc, out GuardJobSettings settings) { return(TryGetNPCGuardDefaultSettings(npc.Job, out settings)); }
static void Postfix(GuardJobSettings __instance, GuardJobInstance instance, ref NPCBase.NPCState state) { DebugLog.Write(MethodBase.GetCurrentMethod().DeclaringType + "::" + MethodBase.GetCurrentMethod().Name); npc = null; }