Exemplo n.º 1
0
 void StatsSetup(int atk, int amr) //Khoi tao mac dinh cho player
 {
     basePrimary      = new PrimaryStats(atk, amr);
     currentPrimary   = new PrimaryStats(basePrimary.PowerAttack, basePrimary.Armor);
     maxSecondary     = new SecondaryStats(100 + (int)(basePrimary.Armor * 0.5f), 100 + (int)(basePrimary.PowerAttack * 0.5f));
     currentSecondary = new SecondaryStats(maxSecondary.Hearth, maxSecondary.Mana);
 }
Exemplo n.º 2
0
    public int GetStats(PrimaryStats stat)
    {
        int total = 0;

        if (data is ItemWeapon)
        {
            total = ((ItemWeapon)data).GetStatValue(stat, ItemLevel);
        }
        else if (data is ItemArmor)
        {
            total = ((ItemArmor)data).GetStatValue(stat, ItemLevel);
        }
        else
        {
            total = 0;
        }

        foreach (ItemAffix affix in Affixes)
        {
            if (affix.isStatType(ItemModEffects.Primary))
            {
                switch (affix.GetModType())
                {
                case ItemModType.Add:
                    total += Mathf.RoundToInt(affix.GetValue(stat, ItemLevel, _VarianceSeed));
                    break;

                default:
                    break;
                }
            }
        }

        return(total);
    }
Exemplo n.º 3
0
        public Creature(PrimaryStats primaryStats, Inventory inventory)
        {
            this.PrimaryStats = primaryStats;
            this.Inventory    = inventory;

            CurrentHealth = SetAndReturnMaxHealth();
        }
Exemplo n.º 4
0
        public void ModifyHP(short value, bool sendPacket = true)
        {
            var startValue = PrimaryStats.HP;

            if ((PrimaryStats.HP + value) < 0)
            {
                PrimaryStats.HP = 0;
            }
            else if ((PrimaryStats.HP + value) > PrimaryStats.GetMaxHP(false))
            {
                PrimaryStats.HP = PrimaryStats.GetMaxHP(false);
            }
            else
            {
                PrimaryStats.HP = (short)(PrimaryStats.HP + value);
            }


            if (sendPacket)
            {
                CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Hp, PrimaryStats.HP);
            }

            if (startValue == PrimaryStats.HP)
            {
                // Doesn't matter
                return;
            }
            ModifiedHP();
        }
Exemplo n.º 5
0
        public void ModifyMP(short value, bool sendPacket = true)
        {
            if ((PrimaryStats.MP + value) < 0)
            {
                PrimaryStats.MP = 0;
            }
            else if ((PrimaryStats.MP + value) > PrimaryStats.GetMaxMP(false))
            {
                PrimaryStats.MP = PrimaryStats.GetMaxMP(false);
            }
            else
            {
                PrimaryStats.MP = (short)(PrimaryStats.MP + value);
            }
            if (sendPacket)
            {
                CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Mp, PrimaryStats.MP);

                /*if (this.PartyID != -1)
                 * {
                 *  MapPacket.UpdatePartyMemberMP(this);
                 *  MapPacket.ReceivePartyMemberMP(this);
                 * }*/
            }
        }
Exemplo n.º 6
0
 public float GetValue(PrimaryStats stat, float ilvl, int seed)
 {
     if (!ContainsStat(stat))
     {
         return(0);
     }
     return(data.GetModEffect(ilvl, seed));
 }
Exemplo n.º 7
0
 public bool ContainsStat(PrimaryStats stat)
 {
     if (GetModType() == ItemModType.Status)
     {
         return(false);
     }
     return(data.isStatType(ItemModEffects.Primary) && data.isStat(stat));
 }
Exemplo n.º 8
0
    void StatSetup(int str, int agi, int intl, int stam, int spr)
    {
        basePrimary    = new PrimaryStats(str, agi, intl, stam, spr);
        currentPrimary = new PrimaryStats(basePrimary.strength, basePrimary.agility, basePrimary.intellect, basePrimary.stamina, basePrimary.spirit);

        maxSecondary     = new SecondaryStats(currentPrimary.stamina * 10, currentPrimary.intellect * 10, currentPrimary.agility * 10);
        currentSecondary = new SecondaryStats(maxSecondary.health, maxSecondary.magic, maxSecondary.energy);
    }
Exemplo n.º 9
0
 public void ModifiedHP()
 {
     if (PrimaryStats.HP == 0)
     {
         loseEXP();
         PrimaryStats.Reset(true);
         Summons.RemoveAllSummons();
     }
 }
Exemplo n.º 10
0
 void UpdateStatValue(PrimaryStats stat, int difference)
 {
     //print(stat.ToString() + " [" + difference + "]");
     if (!PrimaryStatsUpdates.ContainsKey(stat))
     {
         print("Error: No UI Text Element for stat: " + stat);
         return;
     }
     UpdateStatValue(PrimaryStatsUpdates[stat], difference);
 }
Exemplo n.º 11
0
 public bool isStat(PrimaryStats stat)
 {
     if (PrimaryStat == null)
     {
         return(false);
     }
     if (PrimaryStat == stat)
     {
         return(true);
     }
     return(false);
 }
Exemplo n.º 12
0
        public void PartyHPUpdate()
        {
            if (PartyID == 0)
            {
                return;
            }

            Field
            .GetInParty(PartyID)
            .Where(p => p.ID != ID)
            .ForEach(p => p.SendPacket(PartyPacket.SendHpUpdate(PrimaryStats.HP, PrimaryStats.GetMaxHP(), ID)));
        }
Exemplo n.º 13
0
    public float GetStatMultiplier(PrimaryStats stat)
    {
        float multiplier = 1f;

        foreach (EquipmentType type in EquipedItems.Keys)
        {
            if (EquipedItems[type] != null)
            {
                multiplier += EquipedItems[type].GetMultiplier(stat);
            }
        }

        return(multiplier);
    }
Exemplo n.º 14
0
        private void Initialize()
        {
            UnitLevel = new Level(200);

            Conditions = Condition.None;

            Primary        = new PrimaryStats();
            Secondary      = new SecondaryStats();
            Defense        = new DefenseStats();
            ElementDefense = new ArcaneElementStats();
            ArmorTypes     = new ArmorTypeStats();
            WeaponTypes    = new WeaponDamageTypeStats();

            SetMajorStats();
        }
Exemplo n.º 15
0
        private void Initialize(int[] primary, int[] secondary, int[] defense, int[] element, int[] armorType, int[] weaponType)
        {
            UnitLevel = new Level(200);

            Conditions = Condition.None;

            Primary        = new PrimaryStats(primary);
            Secondary      = new SecondaryStats(secondary);
            Defense        = new DefenseStats(defense);
            ElementDefense = new ArcaneElementStats(element);
            ArmorTypes     = new ArmorTypeStats(armorType);
            WeaponTypes    = new WeaponDamageTypeStats(weaponType);

            SetMajorStats();
        }
Exemplo n.º 16
0
    public int GetStatDifference(PrimaryStats stat, Item data, Hero hero)
    {
        // Get the base hero stats without the item
        // Get the (original % effect) then remove the item stats after the multi
        float heroBaseStat = (hero.GetPrimaryStat(stat) / hero.GetStatMultiplier(stat)) - GetStats(stat);
        float baseMulti    = hero.GetStatMultiplier(stat) - GetMultiplier(stat);

        // Get the hero stats with the new item
        // Add the  item stats before the multi then scale by the % effect, finish by subtracting the original value to get the difference
        float diffValue = ((heroBaseStat + data.GetStats(stat)) * (baseMulti + data.GetMultiplier(stat))) - hero.GetPrimaryStat(stat);

        //Debug.Log("[Item Calc] " + stat + " multi: " + data.GetMultiplier(stat));

        return(Mathf.RoundToInt(diffValue));
        //return data.GetStats(stat) - GetStats(stat);
    }
Exemplo n.º 17
0
    public AgentData CreateNewAgent()
    {
//		string forename = forenames [Random.Range (0, forenames.Length)];
//		string surname = forenames [Random.Range (0, surnames.Length)];
        Random.seed = Random.seed;
        int seed = Random.seed;

        int row = Random.Range(0, data.Length);

        string forename = data[row].forename;
        string surname  = data [Random.Range(0, data.Length)].surname;
        string codename = GetCodename();

        gender = data [row].gender;

        int count = Random.Range(0, 5);

        string[] aliases = new string[count];
        string   alias   = "";

        for (int i = 0; i < count; i++)
        {
            Name aliasName = GetAlias(forename, surname, gender);

            aliases[i] = aliasName.forename + " " + aliasName.surname;
            alias     += aliasName.forename + " " + aliasName.surname + ", ";
        }

        alias = alias.Trim((", ").ToCharArray());

        int day   = Random.Range(1, 31);
        int month = Random.Range(1, 13);
        int year  = int.Parse(SelectionEngine.GetItem(agesList));

        System.DateTime birthday = new System.DateTime(year, month, 1);
        birthday = birthday.AddDays(day);

        height = GetHeightForAgent(CalculateAge(System.DateTime.Now, day, month, year), gender);

        string hair = SelectionEngine.GetItem(hairs);
        string eyes = SelectionEngine.GetItem(eyess);

        PrimaryStats stats  = GetPrimaryStats();
        SkillsHolder skills = GetSkills();

        return(new AgentData(forename, surname, codename, aliases, gender, birthday.Day.ToString(), birthday.Month.ToString(), birthday.Year.ToString(), height, eyes, hair, stats, skills));
    }
Exemplo n.º 18
0
    public float GetClassLevelScale(HeroClass hclass, PrimaryStats stat)
    {
        switch (hclass)
        {
        case HeroClass.Tank:
            return(tankLevelScale[stat]);

        case HeroClass.Assassin:
            return(assassinLevelScale[stat]);

        case HeroClass.Mage:
            return(mageLevelScale[stat]);

        case HeroClass.Bruiser:
            return(attackerLevelScale[stat]);
        }
        return(0f);
    }
Exemplo n.º 19
0
        public void HandleDeath()
        {
            HackLog.Info("Player will be moved back to town/return map");
            ModifyHP(50, false);

            // Remove all buffs
            PrimaryStats.Reset(true);

            // There's only 1 map that has this. Its the pharmacy map in kerning
            if (Field.ReturnMap == Constants.InvalidMap)
            {
                ChangeMap(Field.ID);
            }
            else
            {
                ChangeMap(Field.ReturnMap);
            }
        }
Exemplo n.º 20
0
        public void FillPlayerToDB()
        {
            Weapon PlayerWeapon = new Weapon("Nůž", 1, 1, WeaponType.Melee, "Malý kapesní nožík", 0, true, 9999, 1);
            Armor  PlayerArmor  = new Armor("Oblečení", 1, 1, "Klasické hadry", 0, true, 9999, 1);

            Consumable PlayerItem1 = new Consumable("Jablko", 7, true, 5, "popis", 9, true, 9999, 9999);

            Inventory PlayerInventory = new Inventory()
            {
                Id       = 1,
                ItemList = new List <AItem>()
                {
                    PlayerWeapon,
                    PlayerArmor,
                },
                CreatureId  = 1,
                UsingArmor  = PlayerArmor,
                UsingWeapon = PlayerWeapon,
            };

            this.InsertWithChildren(PlayerInventory);

            PrimaryStats PlayerStats = new PrimaryStats(5, 5, 5, 5, 5)
            {
                CreatureId = 1,
            };

            this.InsertWithChildren(PlayerStats);

            var Player = new Player()
            {
                Id           = 1,
                InLocationId = 1,
                InFight      = false,
                Inventory    = PlayerInventory,
                PrimaryStats = PlayerStats,
            };

            Player.DefaultData(5);
            this.InsertWithChildren(Player);
        }
Exemplo n.º 21
0
    public string GetDisplayValue(PrimaryStats stat, float ilvl, int seed)
    {
        if (!ContainsStat(stat))
        {
            return("");
        }
        string result = "";

        switch (data.ModType)
        {
        case ItemModType.Add:
            result = "+" + Mathf.RoundToInt(data.GetModEffect(ilvl, seed)) + " " + stat.ToString();
            break;

        case ItemModType.Multi:
        default:
            Debug.Log("[Display Stat] " + stat + ": " + (data.GetModEffect(ilvl, seed)));
            result = "+" + Mathf.RoundToInt(data.GetModEffect(ilvl, seed) * 100f) + "% " + stat.ToString();
            break;
        }
        return(result);
    }
Exemplo n.º 22
0
    public AgentData(string fName, string sName, string cName, string[] aNames, string gend, string dob, string mob, string yob, string iHeight, string iEyes, string iHair, PrimaryStats iStats, SkillsHolder iSkills)
    {
        foreame  = fName;
        surname  = sName;
        codename = cName;
        aliases  = aNames;

        gender = gend;

        dayOfBirth   = dob;
        monthOfBirth = mob;
        yearOfBirth  = yob;

        height = iHeight;

        eyes = iEyes;
        hair = iHair;

        stats  = iStats;
        skills = iSkills;

        CalculateWage();
    }
Exemplo n.º 23
0
    public float GetMultiplier(PrimaryStats stat)
    {
        float multiplier = 0f;

        Random.InitState(_VarianceSeed);

        foreach (ItemAffix affix in Affixes)
        {
            if (affix.isStatType(ItemModEffects.Primary))
            {
                switch (affix.GetModType())
                {
                case ItemModType.Multi:
                    multiplier += affix.GetValue(stat, ItemLevel, _VarianceSeed);
                    break;

                default:
                    break;
                }
            }
        }

        return(multiplier);
    }
Exemplo n.º 24
0
 public virtual int GetStatValue(PrimaryStats stat, float ilvl)
 {
     return(0);
 }
Exemplo n.º 25
0
 public int currentStat(PrimaryStats index)
 {
     return _primaryStats[index].currentValue;
 }
Exemplo n.º 26
0
 public void increasePrimaryStat(PrimaryStats index, int value)
 {
     _primaryStats[index].baseValue += value;
     _primaryStats[index].currentValue += value;
 }
Exemplo n.º 27
0
 public bool isStat(PrimaryStats stat)
 {
     return(data.isStat(stat));
 }
    List <AffixDisplayInformation> AddToAffixList(List <AffixDisplayInformation> list, PrimaryStats stat, ItemAffix affix)
    {
        bool existsInList = false;

        foreach (AffixDisplayInformation info in list)
        {
            if (info.primary != null && info.primary == stat && info.type == affix.GetModType())
            {
                info.value  += affix.GetValue(stat, item.ItemLevel, item.VarianceSeed);
                existsInList = true;
            }
        }

        if (!existsInList)
        {
            AffixDisplayInformation info = new AffixDisplayInformation();
            info.primary = stat;
            info.value   = affix.GetValue(stat, item.ItemLevel, item.VarianceSeed);
            info.type    = affix.GetModType();

            list.Add(info);
        }

        return(list);
    }
Exemplo n.º 29
0
    public int GetPrimaryStat(PrimaryStats stat)
    {
        int         results         = 0;
        float       multiplier      = 1f;
        LeaderSkill LeadershipSkill = PlayerManager.Instance.CurrentLeaderSkill;

        switch (stat)
        {
        case PrimaryStats.Strength:
            results = Mathf.RoundToInt(data.Strength + Mathf.RoundToInt(data.StrengthScale * Level) + (data.StrengthQualityBase * (int)_quality) + (Level * data.StrengthQualityScale * (int)_quality));

            // Personality Effect
            switch (personality)
            {
            case HeroPersonality.Couragous:
            case HeroPersonality.Steady:
            case HeroPersonality.Energetic:
                // Increase stat based on personality
                results = Mathf.RoundToInt(results * 1.1f);
                break;

            case HeroPersonality.Perceptive:
            case HeroPersonality.Stalwart:
            case HeroPersonality.Agile:
                // Decrease stat based on personality
                results = Mathf.RoundToInt(results * 0.9f);
                break;
            }
            break;

        case PrimaryStats.Vitality:
            results = Mathf.RoundToInt(data.Vitality + Mathf.RoundToInt(data.VitalityScale * Level) + (data.VitalityQualityBase * (int)_quality) + (Level * data.VitalityQualityScale * (int)_quality));

            // Personality Effect
            switch (personality)
            {
            case HeroPersonality.Stalwart:
            case HeroPersonality.Tenacious:
            case HeroPersonality.Vigorous:
                // Increase stat based on personality
                results = Mathf.RoundToInt(results * 1.1f);
                break;

            case HeroPersonality.Couragous:
            case HeroPersonality.Astute:
            case HeroPersonality.Nimble:
                // Decrease stat based on personality
                results = Mathf.RoundToInt(results * 0.9f);
                break;
            }
            break;

        case PrimaryStats.Intelligence:
            results = Mathf.RoundToInt(data.Intelligence + Mathf.RoundToInt(data.IntelligenceScale * Level) + (data.IntelligenceQualityBase * (int)_quality) + (Level * data.IntelligenceQualityScale * (int)_quality));

            // Personality Effect
            switch (personality)
            {
            case HeroPersonality.Perceptive:
            case HeroPersonality.Astute:
            case HeroPersonality.Wise:
                // Increase stat based on personality
                results = Mathf.RoundToInt(results * 1.1f);
                break;

            case HeroPersonality.Energetic:
            case HeroPersonality.Tenacious:
            case HeroPersonality.Swift:
                // Decrease stat based on personality
                results = Mathf.RoundToInt(results * 0.9f);
                break;
            }
            break;

        case PrimaryStats.Speed:
            results = Mathf.RoundToInt(data.Speed + Mathf.RoundToInt(data.Speed * Level) + (data.SpeedQualityBase * (int)_quality) + (Level * data.SpeedQualityScale * (int)_quality));

            // Personality Effect
            switch (personality)
            {
            case HeroPersonality.Agile:
            case HeroPersonality.Nimble:
            case HeroPersonality.Swift:
                // Increase stat based on personality
                results = Mathf.RoundToInt(results * 1.1f);
                break;

            case HeroPersonality.Steady:
            case HeroPersonality.Vigorous:
            case HeroPersonality.Wise:
                // Decrease stat based on personality
                results = Mathf.RoundToInt(results * 0.9f);
                break;
            }
            break;
        }

        foreach (EquipmentType type in EquipedItems.Keys)
        {
            results    += EquipedItems[type].GetStats(stat);
            multiplier += EquipedItems[type].GetMultiplier(stat);
        }

        //Debug.Log(stat + " calc: " + results + " * " + (multiplier * 100f).ToString("0") + "%");

        if (LeadershipSkill != null && LeadershipSkill.type == LeadershipSkillType.PrimaryStatBoost && LeadershipSkill.primaryStat == stat)
        {
            return(Mathf.RoundToInt(results * multiplier * LeadershipSkill.Multiplier));
        }
        else
        {
            return(Mathf.RoundToInt(results * multiplier));
        }
    }
Exemplo n.º 30
0
        public void AddEXP(uint value, bool IsLastHit = false, bool Quest = false)
        {
            if (value == 0 || PrimaryStats.Level >= 200 || PrimaryStats.HP <= 0)
            {
                return;
            }

            var amount = (int)(value > Int32.MaxValue ? Int32.MaxValue : value);
            var amnt   = (uint)(PrimaryStats.EXP + amount);

            CharacterStatsPacket.SendGainEXP(this, amount, IsLastHit, Quest);
            var level = PrimaryStats.Level;

            var save        = false;
            var expRequired = Constants.GetLevelEXP(PrimaryStats.Level);

            if (amnt >= expRequired)
            {
                short apgain = 0;
                short spgain = 0;
                short mpgain = 0;
                short hpgain = 0;
                var   job    = (short)(PrimaryStats.Job / 100);

                var intt = PrimaryStats.GetIntAddition(true);

                amnt -= (uint)expRequired;

                level++;

                // Update EXP required...
                expRequired = Constants.GetLevelEXP(level);

                apgain += Constants.ApPerLevel;
                hpgain += RNG.Range.generate(
                    Constants.HpMpFormulaArguments[job, 0, (int)Constants.HpMpFormulaFields.HPMin],
                    Constants.HpMpFormulaArguments[job, 0, (int)Constants.HpMpFormulaFields.HPMax],
                    true
                    );

                mpgain += RNG.Range.generate(
                    Constants.HpMpFormulaArguments[job, 0, (int)Constants.HpMpFormulaFields.MPMin],
                    Constants.HpMpFormulaArguments[job, 0, (int)Constants.HpMpFormulaFields.MPMax],
                    true
                    );

                // Additional buffing through INT stats
                mpgain += (short)(
                    intt *
                    Constants.HpMpFormulaArguments[job, 0, (int)Constants.HpMpFormulaFields.MPIntStatMultiplier] /
                    200
                    );

                var improvedMaxHpIncreaseLvl = Skills.GetSkillLevel(Constants.Swordsman.Skills.ImprovedMaxHpIncrease);
                if (improvedMaxHpIncreaseLvl > 0)
                {
                    hpgain += CharacterSkills.GetSkillLevelData(Constants.Swordsman.Skills.ImprovedMaxHpIncrease, improvedMaxHpIncreaseLvl).XValue;
                }

                var improvedMaxMpIncreaseLvl = Skills.GetSkillLevel(Constants.Magician.Skills.ImprovedMaxMpIncrease);
                if (improvedMaxMpIncreaseLvl > 0)
                {
                    mpgain += CharacterSkills.GetSkillLevelData(Constants.Magician.Skills.ImprovedMaxMpIncrease, improvedMaxMpIncreaseLvl).XValue;
                }

                if (PrimaryStats.Job != 0)
                {
                    spgain = Constants.SpPerLevel;
                }

                if (level >= 200)
                {
                    amnt = 0;
                    // TODO: Announce max level!
                }

                // Overflow? lets reduce it
                if (amnt >= expRequired)
                {
                    amnt = (uint)(expRequired - 1);
                }

                _levelLog.Info(new LevelLogRecord
                {
                    level = level,
                    posX  = Position.X,
                    posY  = Position.Y,
                });

                ModifyMaxHP(hpgain);
                ModifyMaxMP(mpgain);
                SetLevel(level);
                AddAP(apgain);
                AddSP(spgain);
                ModifyHP(PrimaryStats.GetMaxHP(false));
                ModifyMP(PrimaryStats.GetMaxMP(false));
                save = true;
            }

            PrimaryStats.EXP = (int)amnt;

            // Calculate savepoints

            var stepOfSave  = CalculateSaveStep();
            var curDateTime = MasterThread.CurrentDate;

            if (!save)
            {
                if (lastSaveStep != stepOfSave)
                {
                    var levelTimeSpan = curDateTime - LastSavepoint;

                    if (levelTimeSpan.TotalSeconds >= 30)
                    {
                        _characterLog.Debug(
                            $"Saving because user reached save threshold. Current {stepOfSave} last {lastSaveStep}");
                        save          = true;
                        LastSavepoint = curDateTime;
                    }
                    else
                    {
                        AssertForHack(
                            levelTimeSpan.TotalSeconds < 20,
                            $"Getting fast EXP ({levelTimeSpan.TotalSeconds} seconds since last savepoint)",
                            levelTimeSpan.TotalSeconds < 15
                            );
                    }
                    _characterLog.Debug(
                        new SavepointLogRecord
                    {
                        level = PrimaryStats.Level,
                        posX  = Position.X,
                        posY  = Position.Y,
                        totalMillisBetween = (int)levelTimeSpan.TotalMilliseconds,
                        blocked            = save == false
                    }
                        );

                    lastSaveStep = stepOfSave;
                }
            }
            else
            {
                lastSaveStep = stepOfSave;
            }


            if (save)
            {
                LastSavepoint = curDateTime;
                Save();
            }

            CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Exp, PrimaryStats.EXP);
        }
Exemplo n.º 31
0
 public int baseStat(PrimaryStats index)
 {
     return _primaryStats[index].baseValue;
 }
Exemplo n.º 32
0
    public int StatDifference(PrimaryStats stat, ItemData data, float ilvl)
    {
        int results = GetStatValue(stat, ilvl) - data.GetStatValue(stat, ilvl);

        return(results);
    }