コード例 #1
0
        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;
                        }
                    }
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 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;
 }
コード例 #6
0
 static void Postfix(GuardJobSettings __instance, GuardJobInstance instance, ref NPCBase.NPCState state)
 {
     // Log.WriteWarning("GuardJobSettingsHookShootAtTarget::Postfix");
     npc = null;
 }
コード例 #7
0
        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);
        }
コード例 #8
0
 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;
 }