public static void SetPartyMemberExp(Systems ch, long expamount, short stat, long sp)
{
try
{
ch.Character.Information.XP += expamount;
bool level = false;
while (ch.Character.Information.XP >= Data.LevelData[ch.Character.Information.Level])
{
ch.Character.Information.XP -= Data.LevelData[ch.Character.Information.Level];
if (ch.Character.Information.XP < 1) ch.Character.Information.XP = 0;
stat += 3;
ch.Character.Information.Attributes += 3;
ch.Character.Information.Level++;
ch.Character.Stat.Intelligence++;
ch.Character.Stat.Strength++;
ch.UpdateIntelligenceInfo(1);
ch.UpdateStrengthInfo(1);
ch.SetStat();
level = true;
}
if (level)
{
if (ch.Character.Network.Guild.Guildid != 0)
{
// 1 question again where we set info to databse at lvlup? ah got it :)
ch.Character.Network.Guild.Send(Packet.GuildUpdate(ch.Character, 8, 0, 0, 0));
// set new amount to every guild members guild class
foreach (int m in ch.Character.Network.Guild.Members)
{
int targetindex = ch.Character.Network.Guild.MembersInfo.FindIndex(i => i.MemberID == m);
if (ch.Character.Network.Guild.MembersInfo[targetindex].Online)
{
Systems sys = Systems.GetPlayer(m);
// here comes the messy way
Global.guild_player mygp = new Global.guild_player();
int myindex = 0;
foreach (Global.guild_player gp in sys.Character.Network.Guild.MembersInfo)
{
if (gp.MemberID == ch.Character.Information.CharacterID)
{
mygp = gp;
mygp.Level = ch.Character.Information.Level;
break;
}
myindex++;
}
sys.Character.Network.Guild.MembersInfo[myindex] = mygp;
}
}
}
ch.Send(Packet.Player_LevelUpEffect(ch.Character.Information.UniqueID));
ch.client.Send(Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, stat));
ch.SavePlayerInfo();
}
else
{
ch.client.Send(Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, 0));
ch.SavePlayerExperince();
}
}
catch (Exception ex)
{
Systems.Debugger.Write(ex);
}
}