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); }
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); }
public Creature(PrimaryStats primaryStats, Inventory inventory) { this.PrimaryStats = primaryStats; this.Inventory = inventory; CurrentHealth = SetAndReturnMaxHealth(); }
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(); }
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); * }*/ } }
public float GetValue(PrimaryStats stat, float ilvl, int seed) { if (!ContainsStat(stat)) { return(0); } return(data.GetModEffect(ilvl, seed)); }
public bool ContainsStat(PrimaryStats stat) { if (GetModType() == ItemModType.Status) { return(false); } return(data.isStatType(ItemModEffects.Primary) && data.isStat(stat)); }
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); }
public void ModifiedHP() { if (PrimaryStats.HP == 0) { loseEXP(); PrimaryStats.Reset(true); Summons.RemoveAllSummons(); } }
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); }
public bool isStat(PrimaryStats stat) { if (PrimaryStat == null) { return(false); } if (PrimaryStat == stat) { return(true); } return(false); }
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))); }
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); }
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(); }
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(); }
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); }
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)); }
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); }
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); } }
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); }
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); }
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(); }
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); }
public virtual int GetStatValue(PrimaryStats stat, float ilvl) { return(0); }
public int currentStat(PrimaryStats index) { return _primaryStats[index].currentValue; }
public void increasePrimaryStat(PrimaryStats index, int value) { _primaryStats[index].baseValue += value; _primaryStats[index].currentValue += value; }
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); }
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)); } }
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); }
public int baseStat(PrimaryStats index) { return _primaryStats[index].baseValue; }
public int StatDifference(PrimaryStats stat, ItemData data, float ilvl) { int results = GetStatValue(stat, ilvl) - data.GetStatValue(stat, ilvl); return(results); }