Code:
namespace Source.Structures.Instances
{
class Experience
{
public static void ProcessLeveling(GameClient Attacker, IBaseEntity Opponent, GuildMonster GuildMob, uint Damage, ushort SpellID)
{
#region TG
if (GuildMob != null)
{
if (Attacker.Entity.MapID.ID == 1039)
{
if (SpellID == 0)
ConquerSpell.CalculateProfExp(Attacker, Damage);
if (SpellID != 0)
ConquerSpell.CalculateSpellExp(Attacker, SpellID, Damage);
CalculateExp(Attacker, GuildMob.Level, Damage);
return;
}
}
#endregion
#region Monsters
else if (Attacker.Entity.EntityFlag == EntityFlag.Player && Opponent.EntityFlag == EntityFlag.Monster)
{
Monster Monster = (Monster)Opponent.Owner;
if (Monster.IsGuard) return;
if (SpellID == 0)
ConquerSpell.CalculateProfExp(Attacker, Damage);
if (SpellID != 0)
ConquerSpell.CalculateSpellExp(Attacker, SpellID, Damage);
if (Attacker.Team.Active)
ConquerTeam.CalculateExp(Attacker, (byte)(Opponent.Owner as Entity).Level); //Problem
CalculateExp(Attacker, (Opponent.Owner as Monster).Entity.Level, Damage);
}
#endregion
}
public static void CalculateExp(GameClient Attacker, int OpponentLv, uint Damage)
{
if (Attacker.Entity.Level < 130)
{
double AddedExp = 0;
if (OpponentLv + 4 < Attacker.Entity.Level) AddedExp = 0.1;
if (OpponentLv + 4 >= Attacker.Entity.Level) AddedExp = 1;
if (OpponentLv >= Attacker.Entity.Level) AddedExp = 1.1;
if (OpponentLv - 4 > Attacker.Entity.Level) AddedExp = 1.3;
Damage = Convert.ToUInt32(Damage * AddedExp);
Damage *= (uint)DataStructures.ExperienceRate;
if (Attacker.ExperienceMultiply > 0)
Damage *= Attacker.ExperienceMultiply;
if (Attacker.Entity.MapID == 1039)
Damage = (uint)Math.Round((double)Damage * 0.1); // * tgModifier
Attacker.Experience += (int)Damage;
uint Needed = Database.LoadLevelExp((byte)Attacker.Entity.Level);
if ((int)(Attacker.Experience - Needed) >= 0)
{
//Attacker.Experience -= (int)Needed;
Attacker.Experience = 0;
StatusChange.Level(Attacker, (byte)(Attacker.Entity.Level + 1), true);
}
Attacker.Send(new StatTypePacket(Attacker.Entity.UID, (uint)Attacker.Experience, StatIDs.Experience).Serialize());
}
}
}
}






