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); } }