public static void SetPartyMemberExp(PlayerMgr ch, long expamount, short stat, long sp) { try { ch.Character.Information.XP += expamount; bool level = false; while (ch.Character.Information.XP >= ObjData.Manager.LevelData[ch.Character.Information.Level]) { ch.Character.Information.XP -= ObjData.Manager.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(Client.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) { PlayerMgr sys = Helpers.GetInformation.GetPlayer(m); // here comes the messy way ObjData.guild_player mygp = new ObjData.guild_player(); int myindex = 0; foreach (ObjData.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(Client.Packet.Player_LevelUpEffect(ch.Character.Information.UniqueID)); ch.client.Send(Client.Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, stat)); ch.SavePlayerInfo(); } else { ch.client.Send(Client.Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, 0)); ch.SavePlayerExperince(); } } catch (Exception ex) { Log.Exception(ex); } }
public void CalcSharedPartyExpSp(int paramexp, party pt, PlayerMgr targetplayer, ref long outexp) { try { byte mlv = ObjData.Manager.ObjectBase[ID].Level; // party average int k = 0; List<int> NearbyMembers = new List<int>(9); if (pt.Members.Count != 0) { double playerDist; foreach (int memb in pt.Members) { PlayerMgr i = Helpers.GetInformation.GetPlayer(memb); //playerDist = Formule.gamedistance(targetplayer.Character.Position.x, targetplayer.Character.Position.y, i.Character.Position.x, i.Character.Position.y); playerDist = Formule.gamedistance(targetplayer.Character.Position, i.Character.Position); if (playerDist >= 50) { NearbyMembers.Add(i.Character.Information.UniqueID); } } foreach (int l in NearbyMembers) { k += Helpers.GetInformation.GetPlayer(l).Character.Information.Level; } k = (int)(k / pt.Members.Count); //k = átlag. foreach (int mem in NearbyMembers) { PlayerMgr ch = Helpers.GetInformation.GetPlayer(mem); int ptsp = 97; //This isn't the right formula. TODO: We must find the right one! int ptexp = (int)((((paramexp / mlv) + (mlv - k)) * mlv) / k) * ch.Character.Information.Level; ptexp *= Helpers.Settings.Rate.Experience; byte kat = Kat; if (kat == 20) kat = 25; ptexp *= kat; //we multiply the exp according to type of the mob. //TODO: premium ticket //gap: ptexp -= (ptexp * (ch.Character.Information.Level) - Math.Abs(ch.Character.Information.Level - ch.MasteryGetBigLevel)) * 10 / 100; if (ch.Character.Information.Level == 110 && ch.Character.Information.XP >= 4000000000) ptexp = 0; //we calculate the amount of sp: if (Math.Abs(ObjData.Manager.ObjectBase[ID].Level - k) < 10) { int gap = Math.Abs(ch.Character.Information.Level - ch.MasteryGetBigLevel) * 10; if (gap >= 90) gap = 90; ptsp = (ptsp * (100 + gap)) / k; //Instead of 100 I share with the avareage of the party, so we get a proportionate number. ptsp *= kat; ptsp *= Helpers.Settings.Rate.SkillPoint; } //Send total to all in party (Set exp from formula) SetPartyMemberExp(ch, (long)ptexp, ch.Character.Information.Attributes, (long)ptsp); SetSp(ch, ptsp); if (ch.Character.Network.Guild.Guildid != 0) { if (Math.Abs(ch.Character.Network.Guild.LastDonate - ch.Character.Network.Guild.DonateGP) >= 10) { DB.query("UPDATE guild_members SET guild_points='" + ch.Character.Network.Guild.DonateGP + "' WHERE guild_member_id='" + ch.Character.Information.CharacterID + "'"); ch.Character.Network.Guild.LastDonate = ch.Character.Network.Guild.DonateGP; // 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) { PlayerMgr sys = Helpers.GetInformation.GetPlayer(m); // here comes the messy way ObjData.guild_player mygp = new ObjData.guild_player(); int myindex = 0; foreach (ObjData.guild_player gp in sys.Character.Network.Guild.MembersInfo) { if (gp.MemberID == ch.Character.Information.CharacterID) { mygp = gp; mygp.DonateGP = ch.Character.Network.Guild.DonateGP; break; } myindex++; } sys.Character.Network.Guild.MembersInfo[myindex] = mygp; } } ch.Character.Network.Guild.Send(Client.Packet.GuildUpdate(ch.Character, 9, 0, 0, 0)); } } outexp = ptexp; } } else return; } catch (Exception ex) { Log.Exception(ex); } }
public void CalcSharedPartyExpSp(int paramexp, party pt, PlayerMgr targetplayer, ref long outexp) { try { byte mlv = ObjData.Manager.ObjectBase[ID].Level; // party average int k = 0; List <int> NearbyMembers = new List <int>(9); if (pt.Members.Count != 0) { double playerDist; foreach (int memb in pt.Members) { PlayerMgr i = Helpers.GetInformation.GetPlayer(memb); //playerDist = Formule.gamedistance(targetplayer.Character.Position.x, targetplayer.Character.Position.y, i.Character.Position.x, i.Character.Position.y); playerDist = Formule.gamedistance(targetplayer.Character.Position, i.Character.Position); if (playerDist >= 50) { NearbyMembers.Add(i.Character.Information.UniqueID); } } foreach (int l in NearbyMembers) { k += Helpers.GetInformation.GetPlayer(l).Character.Information.Level; } k = (int)(k / pt.Members.Count); //k = átlag. foreach (int mem in NearbyMembers) { PlayerMgr ch = Helpers.GetInformation.GetPlayer(mem); int ptsp = 97; //This isn't the right formula. TODO: We must find the right one! int ptexp = (int)((((paramexp / mlv) + (mlv - k)) * mlv) / k) * ch.Character.Information.Level; ptexp *= Helpers.Settings.Rate.Experience; byte kat = Kat; if (kat == 20) { kat = 25; } ptexp *= kat; //we multiply the exp according to type of the mob. //TODO: premium ticket //gap: ptexp -= (ptexp * (ch.Character.Information.Level) - Math.Abs(ch.Character.Information.Level - ch.MasteryGetBigLevel)) * 10 / 100; if (ch.Character.Information.Level == 110 && ch.Character.Information.XP >= 4000000000) { ptexp = 0; } //we calculate the amount of sp: if (Math.Abs(ObjData.Manager.ObjectBase[ID].Level - k) < 10) { int gap = Math.Abs(ch.Character.Information.Level - ch.MasteryGetBigLevel) * 10; if (gap >= 90) { gap = 90; } ptsp = (ptsp * (100 + gap)) / k; //Instead of 100 I share with the avareage of the party, so we get a proportionate number. ptsp *= kat; ptsp *= Helpers.Settings.Rate.SkillPoint; } //Send total to all in party (Set exp from formula) SetPartyMemberExp(ch, (long)ptexp, ch.Character.Information.Attributes, (long)ptsp); SetSp(ch, ptsp); if (ch.Character.Network.Guild.Guildid != 0) { if (Math.Abs(ch.Character.Network.Guild.LastDonate - ch.Character.Network.Guild.DonateGP) >= 10) { DB.query("UPDATE guild_members SET guild_points='" + ch.Character.Network.Guild.DonateGP + "' WHERE guild_member_id='" + ch.Character.Information.CharacterID + "'"); ch.Character.Network.Guild.LastDonate = ch.Character.Network.Guild.DonateGP; // 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) { PlayerMgr sys = Helpers.GetInformation.GetPlayer(m); // here comes the messy way ObjData.guild_player mygp = new ObjData.guild_player(); int myindex = 0; foreach (ObjData.guild_player gp in sys.Character.Network.Guild.MembersInfo) { if (gp.MemberID == ch.Character.Information.CharacterID) { mygp = gp; mygp.DonateGP = ch.Character.Network.Guild.DonateGP; break; } myindex++; } sys.Character.Network.Guild.MembersInfo[myindex] = mygp; } } ch.Character.Network.Guild.Send(Client.Packet.GuildUpdate(ch.Character, 9, 0, 0, 0)); } } outexp = ptexp; } } else { return; } } catch (Exception ex) { Log.Exception(ex); } }
public static void SetPartyMemberExp(PlayerMgr ch, long expamount, short stat, long sp) { try { ch.Character.Information.XP += expamount; bool level = false; while (ch.Character.Information.XP >= ObjData.Manager.LevelData[ch.Character.Information.Level]) { ch.Character.Information.XP -= ObjData.Manager.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(Client.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) { PlayerMgr sys = Helpers.GetInformation.GetPlayer(m); // here comes the messy way ObjData.guild_player mygp = new ObjData.guild_player(); int myindex = 0; foreach (ObjData.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(Client.Packet.Player_LevelUpEffect(ch.Character.Information.UniqueID)); ch.client.Send(Client.Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, stat)); ch.SavePlayerInfo(); } else { ch.client.Send(Client.Packet.Player_getExp(ch.Character.Information.UniqueID, expamount, sp, 0)); ch.SavePlayerExperince(); } } catch (Exception ex) { Log.Exception(ex); } }