예제 #1
0
        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);
        }
예제 #2
0
 /// <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));
     }
 }
예제 #3
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;
    }
예제 #4
0
        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();
        }
예제 #5
0
 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;
 }
예제 #6
0
 /// <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);
     }
 }
예제 #7
0
    /// <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);
    }
예제 #8
0
    /// <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);
    }
예제 #9
0
 public override void TeachNpc(NpcCore npcCharacter)
 {
     npcCharacter.Definition.Memories.Add(new SubjectMemory(subjectID, 0, 0));
 }
예제 #10
0
 public abstract void TeachNpc(NpcCore npcCharacter);