public static string GetStatus(Player player) { NpcCore Villager = NpcEvents.GetNpc(UniType); if (Villager == null) { return(string.Empty); } BonusStatus status; bool isClaimed = false; //if (!DailyBonusClaimed.TryGetValue(player.Username, out status)) DailyBonusClaimed.Add(player.Username, GetStatusFromFile(player)); //SetStatusInFile(player); DailyBonusClaimed[player.Username] = GetStatusFromFile(player); status = DailyBonusClaimed[player.Username]; isClaimed = status.Status; Villager.Player = player; string text = string.Format(SkyBlock.LangManager.getLang("eng").getString("skyblock.npc_dailybonus.npc_txt_1")); if (isClaimed) { text = string.Format(SkyBlock.LangManager.getLang("eng").getString("skyblock.npc_dailybonus.npc_txt_2")); } return(text); }
/// <summary> /// Add this subject to the npcCharacter's memories. /// </summary> /// <param name="npcCharacter">The NPC to add memories to.</param> public override void TeachNpc(NpcCore npcCharacter) { if (!npcCharacter.Definition.Memories.Exists(o => o.SubjectID == this.subjectID)) { npcCharacter.Definition.Memories.Add(new LocationMemory(subjectID, 0, 0)); } }
internal void TeachNpc(NpcCore npc) { subject.TeachNpc(npc); LocationMemory locationMemory = npc.Definition.Memories.Find(o => o.SubjectID == Subject.SubjectID) as LocationMemory; locationMemory.LastTimeSeen = DateTime.Now; locationMemory.ObjectMemories = localObjects; }
public static void SpawnVillager() { NpcCore Villager = new NpcCore(15, string.Format(SkyBlock.LangManager.getLang("eng").getString("skyblock.npc_dailybonus.npc_txt_1")), Level) { KnownPosition = new PlayerLocation(-199945.5, 97, -199990.5, 300, 300), Gravity = 0, Height = 0, HideNameTag = true, UniType = UniType, NoAi = true }; Villager.SpawnEntity(); }
public override void InitializeFromSubject(MasterSubjectList _masterSubjectList, Subject newSubject) { AiTickRate = 0.5f; isDead = false; subject = newSubject as AnimalSubject; masterSubjectList = _masterSubjectList; npcCharacter = new NpcCore(this, masterSubjectList, subject); Inventory = new Inventory((subject as AnimalSubject).InventorySize, masterSubjectList); destinationWayPoints = new Vector3[0]; isCurrentLocationExplored = false; }
/// <summary> /// Pass-through to damage npc /// </summary> /// <param name="subjectAttacker"></param> /// <param name="damageAmount"></param> /// <param name="NpcAttacker"></param> /// <returns></returns> public bool Damage(Subject subjectAttacker, int damageAmount, NpcCore NpcAttacker = null) { if (npcCharacter.IsDead) { return(false); //already dead, so cannot damage } GameObject.FindGameObjectWithTag("GameController").GetComponent <PlacementControllerScript>().PopMessage((-damageAmount).ToString(), gameObject.transform.position, 0); if (npcCharacter.Damage(subjectAttacker, damageAmount, NpcAttacker)) { return(true); //it was killed } else { return(false); } }
/// <summary> /// Consider whether I should attack another NPC. /// </summary> /// <param name="npcToConsider">The NPC to consider attacking.</param> /// <param name="damageAmount">The amount of damage we received from the NPC if applicable.</param> /// <returns>True = attack, False = do not attack.</returns> internal bool ShouldFight(NpcCore npcToConsider, int?damageAmount = null) { bool shouldAttack = false; if (damageAmount != null) { //we were attacked //TODO: assess whether I should attack or not } else { //haven't been attacked by them //TODO: assess whether I should attack or not } return(shouldAttack); }
/// <summary> /// Inflict DamageAmount of health damage to character. /// </summary> /// <param name="subjectAttacker">Source of damage.</param> /// <param name="damageAmount">Amount of damage to inflict.</param> /// <param name="NpcAttacker">Attacking NPC if applicable.</param> /// <returns>True: Character was killed by the damage. False: still alive.</returns> public bool Damage(Subject subjectAttacker, int damageAmount, NpcCore NpcAttacker = null) { if (IsDead) { return(false); //cannot damage because it is already dead } health -= damageAmount; health = Math.Max(health, 0); if (health < 1) { Die(); } else if (health <= definition.HealthDanger) { // decrease safety by percentage of max health that damage received was safety -= (damageAmount / definition.HealthMax) * 100; } UpdateMemory(NpcMemoryChangeEvent.HealthDamage, subjectAttacker); if (NpcAttacker != null) { if (ShouldFight(NpcAttacker, damageAmount)) { status.SetState(NpcStates.Fighting); //TODO: add a subroutine that will trigger a fight action if fighting state is set. } else { // set safety minimum to flee drivers.SetTopDriver(NpcDrivers.Safety); } } return(IsDead); }
public override void TeachNpc(NpcCore npcCharacter) { npcCharacter.Definition.Memories.Add(new SubjectMemory(subjectID, 0, 0)); }
public abstract void TeachNpc(NpcCore npcCharacter);