public int AddMesos(int value, bool isSelf = false) { var newMesos = 0; if (value < 0) { if ((Inventory.Mesos - value) < 0) { newMesos = 0; } else { newMesos = Inventory.Mesos + value; // neg - neg = pos } } else { if (((long)Inventory.Mesos + value) > Int32.MaxValue) { newMesos = Int32.MaxValue; } else { newMesos = Inventory.Mesos + value; } } var mesosDiff = newMesos - Inventory.Mesos; Inventory.Mesos = newMesos; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Mesos, Inventory.Mesos, isSelf); return(mesosDiff); }
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 void ModifyMaxHP(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "maxhp", add = true }); PrimaryStats.MaxHP = (short)(((PrimaryStats.MaxHP + value) > Constants.MaxMaxHp) ? Constants.MaxMaxHp : (PrimaryStats.MaxHP + value)); CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.MaxHp, PrimaryStats.MaxHP); }
public void SetSP(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "sp", add = false }); PrimaryStats.SP = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Sp, PrimaryStats.SP); }
public void SetFame(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "fame", add = false }); PrimaryStats.Fame = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Fame, value); }
public void SetMesos(int value, bool isSelf = false) { if (value < 0) { value = 0; } Inventory.Mesos = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Mesos, Inventory.Mesos, isSelf); }
public void SetSkin(byte id) { _characterLog.Info(new StatChangeLogRecord { value = id, type = "skin", add = false }); Skin = id; CharacterStatsPacket.SendStatChange(this, (byte)CharacterStatsPacket.StatFlags.Skin, id); MapPacket.SendAvatarModified(this, MapPacket.AvatarModFlag.Skin); }
public void SetHair(int id) { _characterLog.Info(new StatChangeLogRecord { value = id, type = "hair", add = false }); Hair = id; CharacterStatsPacket.SendStatChange(this, (int)CharacterStatsPacket.StatFlags.Hair, id); MapPacket.SendAvatarModified(this, MapPacket.AvatarModFlag.Equips);//Because hair is a equip I guess }
public void SetFace(int id) { _characterLog.Info(new StatChangeLogRecord { value = id, type = "face", add = false }); Face = id; CharacterStatsPacket.SendStatChange(this, (int)CharacterStatsPacket.StatFlags.Eyes, id); MapPacket.SendAvatarModified(this, MapPacket.AvatarModFlag.Face); }
public void SetLuk(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "luk", add = false }); PrimaryStats.Luk = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Luk, PrimaryStats.Luk); this.FlushDamageLog(); }
public void SetJob(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "job", add = false }); PrimaryStats.Job = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Job, value); this.FlushDamageLog(); Server.Instance.CenterConnection.UpdatePlayerJobLevel(this); }
public void SetLevel(byte value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "level", add = false }); PrimaryStats.Level = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Level, value); MapPacket.SendPlayerLevelupAnim(this); this.FlushDamageLog(); Server.Instance.CenterConnection.UpdatePlayerJobLevel(this); }
public void SetMPAndMaxMP(short value, bool isBySelf = false, bool sendPacket = true) { if (value < 0) { value = 0; } SetMaxMP(value); PrimaryStats.MP = value; if (sendPacket == true) { CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Mp, value, isBySelf); } }
public void AddSP(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "sp", add = true }); if (value + PrimaryStats.SP > Int16.MaxValue) { PrimaryStats.SP = Int16.MaxValue; } else { PrimaryStats.SP += value; } CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Sp, PrimaryStats.SP); }
public void AddAP(short value, bool isSelf = false) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "ap", add = true }); if (value + PrimaryStats.AP > Int16.MaxValue) { PrimaryStats.AP = Int16.MaxValue; } else { PrimaryStats.AP += value; } CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Ap, PrimaryStats.AP, isSelf); }
public void SetHPAndMaxHP(short value, bool sendPacket = true) { if (value <= 0) { value = 1; } SetMaxHP(value); PrimaryStats.HP = value; if (sendPacket == true) { CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Hp, value); } }
public void SetMaxMP(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "maxmp", add = false }); if (value > Constants.MaxMaxMp) { value = Constants.MaxMaxMp; } else if (value < Constants.MinMaxMp) { value = Constants.MinMaxMp; } PrimaryStats.MaxMP = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.MaxMp, value); }
public void AddLuk(short value) { _characterLog.Info(new StatChangeLogRecord { value = value, type = "luk", add = true }); if (value + PrimaryStats.Luk > Int16.MaxValue) { PrimaryStats.Luk = Int16.MaxValue; } else { PrimaryStats.Luk += value; } CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Luk, PrimaryStats.Luk); this.FlushDamageLog(); }
public void DamageMP(short amount) { PrimaryStats.MP = (short)(amount > PrimaryStats.MP ? 0 : PrimaryStats.MP - amount); CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Mp, PrimaryStats.MP, false); }
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 void SetEXP(int value) { PrimaryStats.EXP = value; CharacterStatsPacket.SendStatChange(this, (uint)CharacterStatsPacket.StatFlags.Exp, value); }