public static void RemoveOnDisconnect(party p, Systems c) { //Remove client and member if it contains our removing character if (p.Members.Contains(c.Character.Information.UniqueID)) { p.Members.Remove(c.Character.Information.UniqueID); p.MembersClient.Remove(c.client); } //Send packet to each player foreach (int member in p.Members) { Systems playerdetail = GetPlayer(member); if (p.Members.Count > 1) { playerdetail.client.Send(Packet.Party_Data(1, 0)); } else { //Send removal of party playerdetail.client.Send(Packet.Party_Data(3, playerdetail.Character.Information.UniqueID)); //Remove party state playerdetail.Character.Network.Party = null; } } }
///////////////////////////////////////////////////////////////////////////////// // Update mp ///////////////////////////////////////////////////////////////////////////////// #region Update MP public void UpdateMp() { //Wrap our function inside a catcher try { //Send update mp packet Send(Packet.UpdatePlayer(this.Character.Information.UniqueID, 0x10, 2, this.Character.Stat.SecondMP)); //If character is in a party if (Character.Network.Party != null) { //Send mp update packet to party Character.Network.Party.Send(Packet.Party_Data(6, this.Character.Information.UniqueID)); } } catch (Exception ex) { Console.WriteLine("Update MP Error {0}", ex); Systems.Debugger.Write(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Update HP ///////////////////////////////////////////////////////////////////////////////// #region Update HP public void UpdateHp() { //Wrap our function inside a catcher try { //Send packet to update player hp Send(Packet.UpdatePlayer(this.Character.Information.UniqueID, 0x20, 1, this.Character.Stat.SecondHp)); //If Character is in a party if (Character.Network.Party != null) { //Update party visual hp update Character.Network.Party.Send(Packet.Party_Data(6, this.Character.Information.UniqueID)); } } catch (Exception ex) { Console.WriteLine("Update hp error {0}", ex); Systems.Debugger.Write(ex); } }
void CharacterRequest() { try { //Open packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Get targeted player information Systems sys = GetPlayer(Character.Network.TargetID); if (this.Character.State.UnionApply && sys.Character.State.UnionApply) { if (Reader.Byte() == 1 && Reader.Byte() == 0) { //Need to sniff decline packet info Character.State.UnionApply = false; sys.Character.State.UnionApply = false; } else { //Check for null and set unique id for union and insert our own guild. if (sys.Character.Network.Guild.Unions == null) { int uniqueid = MsSQL.GetRowsCount("SELECT * FROM guild_unions"); sys.Character.Network.Guild.UniqueUnion = uniqueid + 1; MsSQL.InsertData("INSERT INTO guild_unions (union_leader, union_guildid, union_unique_id) VALUES ('" + sys.Character.Network.Guild.Guildid + "','" + sys.Character.Network.Guild.Guildid + "','" + sys.Character.Network.Guild.UniqueUnion + "')"); } //Update database MsSQL.InsertData("INSERT INTO guild_unions (union_leader, union_guildid, union_unique_id) VALUES ('" + sys.Character.Network.Guild.Guildid + "','" + Character.Network.Guild.Guildid + "','" + sys.Character.Network.Guild.UniqueUnion + "')"); //Send union packet to newly joined player client.Send(Packet.UnionInfo(this)); //Send update packet to all guilds in union foreach (int member in Character.Network.Guild.Members) { //Make sure the member is there if (member != 0) { //If the user is not the newly invited member get player info Systems tomember = GetPlayerMainid(member); //Send guild update packet if (tomember != null) { if (!tomember.Character.Network.Guild.SingleSend) { if (Character.Information.CharacterID != tomember.Character.Information.CharacterID) { tomember.Character.Network.Guild.SingleSend = true; tomember.client.Send(Packet.GuildUpdate(Character, 14, 0, 0, 0)); } } } } } foreach (int member in Character.Network.Guild.UnionMembers) { //Make sure the member is there if (member != 0) { //If the user is not the newly invited member get player info Systems tomember = GetPlayerMainid(member); //Send guild update packet if (tomember != null) { if (!tomember.Character.Network.Guild.SingleSend) { tomember.Character.Network.Guild.SingleSend = true; tomember.client.Send(Packet.GuildUpdate(Character, 14, 0, 0, 0)); } } } } //Disable the bool again foreach (int member in Character.Network.Guild.Members) { //Make sure member isnt null if (member != 0) { //Get guildmember details Systems guildmember = GetPlayerMainid(member); //Make sure guildmember isnt null if (guildmember != null) { //Disable bool to allow resend new packets. guildmember.Character.Network.Guild.SingleSend = false; } } } //Disable the bool again foreach (int member in Character.Network.Guild.UnionMembers) { //Make sure member isnt null if (member != 0) { //Get guildmember details Systems guildmember = GetPlayerMainid(member); //Make sure guildmember isnt null if (guildmember != null) { //Disable bool to allow resend new packets. guildmember.Character.Network.Guild.SingleSend = false; } } } //Reset bools Character.State.UnionApply = false; sys.Character.State.UnionApply = false; } } //------------------------------------- [ Exchange invite ] -------------------------------------// else if (this.Character.State.Exchanging && sys.Character.State.Exchanging) { if (Reader.Byte() == 1 && Reader.Byte() == 0) { sys.client.Send(Packet.Exchange_Cancel()); Character.State.Exchanging = false; sys.Character.State.Exchanging = false; } else { sys.client.Send(Packet.OpenExhangeWindow(1, this.Character.Information.UniqueID)); client.Send(Packet.OpenExhangeWindow(sys.Character.Information.UniqueID)); Character.Network.Exchange.Window = true; Character.Network.Exchange.ItemList = new List <DarkEmu_GameServer.Global.slotItem>(); sys.Character.Network.Exchange.Window = true; sys.Character.Network.Exchange.ItemList = new List <DarkEmu_GameServer.Global.slotItem>(); } } //------------------------------------- [ Guild invite ] -------------------------------------// else if (this.Character.State.GuildInvite && sys.Character.State.GuildInvite) { //If byte equals 2 the type is denied if (Reader.Byte() == 2) { //Denied request Character.State.GuildInvite = false; sys.Character.State.GuildInvite = false; //Send refused packet to sender sys.client.Send(Packet.IngameMessages(SERVER_GUILD, IngameMessages.UIIT_MSG_GUILDERR_JOIN_GUILD_REFUSED)); } //If not denied we start adding the new member else { //Invite guild member (Add member count + 1). int guildmemberadd = sys.Character.Network.Guild.Members.Count + 1; //Update database MsSQL.InsertData("INSERT INTO guild_members (guild_id, guild_member_id, guild_rank, guild_points, guild_fortress, guild_grant, guild_perm_join, guild_perm_withdraw, guild_perm_union, guild_perm_storage, guild_perm_notice) VALUES ('" + sys.Character.Network.Guild.Guildid + "','" + Character.Information.CharacterID + "','10','0','1','" + "" + "','0','0','0','0','0')"); MsSQL.UpdateData("UPDATE guild SET guild_members_t='" + guildmemberadd + "' WHERE guild_name='" + sys.Character.Network.Guild.Name + "'"); //Reload new member and load character data for guildinfo LoadPlayerGuildInfo(true); //Send packets to network and spawned players foreach (int member in Character.Network.Guild.Members) { //Make sure the member is there if (member != 0) { //We dont send this info to the invited user. if (member != Character.Information.CharacterID) { //If the user is not the newly invited member get player info Systems tomember = GetPlayerMainid(member); //Send guild update packet tomember.LoadPlayerGuildInfo(true); tomember.client.Send(Packet.GuildUpdate(Character, 1, Character.Information.CharacterID, 0, 0)); tomember.client.Send(Packet.GuildSetOnline(Character.Network.Guild, Character.Information.UniqueID)); tomember.client.Send(Packet.GuildUpdate(Character, 6, Character.Information.CharacterID, 0, 0)); } //Send information to the invited player else { //Send guild data packets to invited client.Send(Packet.SendGuildStart()); client.Send(Packet.SendGuildInfo(Character.Network.Guild)); client.Send(Packet.SendGuildEnd()); //Load union data for new invited player LoadUnions(); } } } //Set bools to false for new invite Character.State.GuildInvite = false; sys.Character.State.GuildInvite = false; } } //------------------------------------- [ Party invite ] -------------------------------------// else { //If invitation is accepted if (Reader.Byte() == 1 && Reader.Byte() == 1) { //First we set our main checks (Check if player is in party or not). if (Character.Network.Party != null) { return; } //Set bools for check Character.Information.CheckParty = true; sys.Character.Information.CheckParty = true; //Set main party information party JoiningParty = sys.Character.Network.Party; //Check party type members allowed need message if full if (JoiningParty.Type == 4 && JoiningParty.Members.Count > 3) { //Send party is full message to player client.Send(Packet.IngameMessages(Systems.SERVER_PARTY_MESSAGES, IngameMessages.UIIT_MSG_PARTYERR_ALREADY_FULL)); return; } if (JoiningParty.Type == 5 && JoiningParty.Members.Count > 7) { //Send party is full message to player client.Send(Packet.IngameMessages(Systems.SERVER_PARTY_MESSAGES, IngameMessages.UIIT_MSG_PARTYERR_ALREADY_FULL)); return; } //If the current count == 0 then add party and add me if (JoiningParty.Members.Count == 0) { //Add ourselfs to the party list JoiningParty.Members.Add(sys.Character.Information.UniqueID); //Add our client to the party list JoiningParty.MembersClient.Add(sys.client); //Set party id JoiningParty.ptid = Party.Count + 1; //Set party network info sys.Character.Network.Party = JoiningParty; //Send permissions sys.client.Send(Packet.Party_Member(sys.Character.Information.UniqueID)); //Send party data to leader sys.client.Send(Packet.Party_DataMember(JoiningParty)); //Send party data packet to leader (Other player that joined). sys.client.Send(Packet.Party_Data(2, Character.Information.UniqueID)); //Add invited member to the list JoiningParty.Members.Add(Character.Information.UniqueID); JoiningParty.MembersClient.Add(client); //Set party info for invited member Character.Network.Party = JoiningParty; //Send permissions client.Send(Packet.PartyOwnerInformation(Character.Information.UniqueID)); //Send party data client.Send(Packet.Party_DataMember(JoiningParty)); //return return; } //If there are more members in the current party else { //Repeat for each member using count for (byte b = 0; b <= JoiningParty.Members.Count - 1; b++) { //Get player information from [b] Systems others = GetPlayer(JoiningParty.Members[b]); //Send party data to member others.client.Send(Packet.Party_Data(2, Character.Information.UniqueID)); } //Add the invited member to list JoiningParty.Members.Add(Character.Information.UniqueID); //Add the invited client to the list JoiningParty.MembersClient.Add(client); //Set party Character.Network.Party = JoiningParty; //Send permissions client.Send(Packet.PartyOwnerInformation(Character.Information.UniqueID)); //Send party data client.Send(Packet.Party_DataMember(JoiningParty)); return; } } //If denied request else { //Send denied message to the player joining client.Send(Packet.IngameMessages(Systems.SERVER_PARTY_MEMBER, IngameMessages.UIIT_MSG_PARTYERR_JOIN_PARTY_REFUSED)); //Set both bools to false so inviting can be done again sys.Character.Information.CheckParty = false; Character.Information.CheckParty = false; } } } //Catch bad exception errors catch (Exception ex) { //Write information to the console Console.WriteLine("Request error: {0}", ex); //Write information to the debug log Debugger.Write(ex); } }
void Player_Movement(object e) { try { if (Character.Position.RecordedTime <= 0) { if (Timer.Movement != null) { Timer.Movement.Dispose(); } Character.Position.Walking = false; if (Character.Action.PickUping) { Player_PickUpItem(); } Character.Position.z = Character.Position.wZ; if (Timer.SpawnWatch.ElapsedMilliseconds >= 10) { ObjectSpawnCheck(); Timer.SpawnWatch.Restart(); } Movement_CaveTeleport(); } else { //If player is in a party send location update packet to each member if (Character.Network.Party != null) { foreach (int member in Character.Network.Party.Members) { if (member != Character.Information.UniqueID) { Systems memberinfo = GetPlayer(member); memberinfo.client.Send(Packet.Party_Data(6, member)); } } } if (Character.Action.nAttack) { Character.Position.kX -= (Character.Position.wX * 10) / 100; Character.Position.kY -= (Character.Position.wY * 10) / 100; if (Character.Information.Item.wID != 0) { if (Math.Sqrt(Character.Position.kX * Character.Position.kX + Character.Position.kY * Character.Position.kY) <= Data.ItemBase[Character.Information.Item.wID].ATTACK_DISTANCE) { Character.Position.RecordedTime = 0; if (Character.Action.nAttack) { ActionAttack(); } if (Timer.SpawnWatch.ElapsedMilliseconds >= 150) { this.ObjectSpawnCheck(); Timer.SpawnWatch.Restart(); } Timer.Movement.Dispose(); Character.Position.z = Character.Position.wZ; Character.Action.PickUping = false; Character.Position.Walking = false; return; } } else { if (Math.Sqrt(Character.Position.kX * Character.Position.kX + Character.Position.kY * Character.Position.kY) <= 1) { Character.Position.RecordedTime = 0; if (Character.Action.nAttack) { ActionAttack(); } if (Timer.SpawnWatch.ElapsedMilliseconds >= 1000) { this.ObjectSpawnCheck(); Timer.SpawnWatch.Restart(); } Timer.Movement.Dispose(); Character.Position.z = Character.Position.wZ; Character.Action.PickUping = false; Character.Position.Walking = false; return; } } } else if (Character.Action.sAttack) { Character.Position.kX -= (Character.Position.wX * 10) / 100; Character.Position.kY -= (Character.Position.wY * 10) / 100; double test = Character.Action.Skill.Distance; if (test == 0) { test = Data.ItemBase[Character.Information.Item.wID].ATTACK_DISTANCE; } if (Math.Sqrt(Character.Position.kX * Character.Position.kX + Character.Position.kY * Character.Position.kY) < test) { if (Character.Action.sAttack) { StartSkill(); } Character.Position.RecordedTime = 0; Character.aRound = new bool[10]; if (Timer.SpawnWatch.ElapsedMilliseconds >= 1000) { this.ObjectSpawnCheck(); Timer.SpawnWatch.Restart(); } Timer.Movement.Dispose(); Character.Position.z = Character.Position.wZ; Character.Action.PickUping = false; Character.Position.Walking = false; return; } } Character.aRound = new bool[10]; Character.Position.x += (Character.Position.wX * 10) / 100; Character.Position.y += (Character.Position.wY * 10) / 100; if (Character.Transport.Right) { Character.Transport.Horse.x = Character.Position.x; Character.Transport.Horse.y = Character.Position.y; } Character.Position.RecordedTime -= (Character.Position.Time * 0.1); if (Timer.SpawnWatch.ElapsedMilliseconds >= 10) { this.ObjectSpawnCheck(); this.ObjectAttackCheck(); Timer.SpawnWatch.Restart(); } } } catch (Exception ex) { Console.WriteLine("Move call error: {0}", ex); Systems.Debugger.Write(ex); } }
void LeaveParty() { try { //Make sure the party isnt null to prevent errors. if (Character.Network.Party != null) { //Remove the character member info Character.Network.Party.Members.Remove(Character.Information.UniqueID); //Remove client Character.Network.Party.MembersClient.Remove(client); //If the owner removes the party set new leader if (Character.Information.UniqueID == Character.Network.Party.LeaderID) { //Repeat for each member in the party foreach (int partymembers in Character.Network.Party.Members) { Systems partymember = GetPlayer(partymembers); //Send party update data to player client.Send(Packet.Party_Data(1, 0)); //If the count is 1, we remove the party information if (partymember != null) { if (Character.Network.Party.Members.Count == 1) { //If its a formed party remove the entry. (check). if (Character.Network.Party.IsFormed) { DeleteFormedParty(Character.Network.Party.ptid); } //Remove party member from member list partymember.Character.Network.Party.Members.Remove(partymember.Character.Information.UniqueID); //Remove the party member client from the list partymember.Character.Network.Party.MembersClient.Remove(partymember.client); //Set party to null partymember.Character.Network.Party = null; //Set bool to false so the player can join another party partymember.Character.Information.CheckParty = false; //Send packet to member partymember.client.Send(Packet.Party_Data(1, 0)); } //If more party members are in the party we dont remove the party. else { //Get first available member for new leader partymember.Character.Network.Party.LeaderID = Character.Network.Party.Members[0]; //Send update packet to member partymember.client.Send(Packet.Party_Data(9, Character.Network.Party.Members[0])); //Send removal of the user partymember.client.Send(Packet.Party_Data(3, Character.Information.UniqueID)); } } } //Set player information Character.Network.Party = null; Character.Information.CheckParty = false; } else { //Send party update data to player client.Send(Packet.Party_Data(1, 0)); //For each member in the party foreach (int partymember in Character.Network.Party.Members) { //Get player information Systems partym = GetPlayer(partymember); //If auto disband party if (Character.Network.Party.Members.Count == 1) { //If its a formed party remove the entry. (check). if (partym.Character.Network.Party.IsFormed) { partym.DeleteFormedParty(Character.Network.Party.ptid); } //Remove the owner member partym.Character.Network.Party.Members.Remove(this.Character.Information.UniqueID); //Remove the client partym.Character.Network.Party.MembersClient.Remove(this.client); //Set party to null partym.Character.Network.Party = null; //Bool to false so can be invited again partym.Character.Information.CheckParty = false; //Visual update packet partym.client.Send(Packet.Party_Data(1, 0)); } //If the player has enough players (Not auto disband). else { //Remove information for all party members partym.Character.Network.Party.Members.Remove(Character.Information.UniqueID); //Remove the client partym.Character.Network.Party.MembersClient.Remove(client); //Remove the id partym.client.Send(Packet.Party_Data(3, Character.Information.UniqueID)); //Set null party info partym.Character.Network.Party = null; //Set bool partym.Character.Information.CheckParty = false; } } //Set party network to null Character.Network.Party = null; //Set bool to false so player can go in new party. Character.Information.CheckParty = false; } } } catch (Exception ex) { Console.WriteLine("Leave party error {0}", ex); Systems.Debugger.Write(ex); } }
void PartyBan() { try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); int TargetID = Reader.Int32(); Reader.Close(); //Get targeted player information Systems s = GetPlayers(TargetID); //Remove id of the member Character.Network.Party.Members.Remove(s.Character.Information.UniqueID); //Remove the client of the member Character.Network.Party.MembersClient.Remove(s.client); //Repeat for each member the updated party information foreach (int partymember in Character.Network.Party.Members) { //Get player information for the next member Systems partym = GetPlayer(partymember); //Remove the kicked player partym.Character.Network.Party.Members.Remove(s.Character.Information.UniqueID); partym.Character.Network.Party.MembersClient.Remove(s.client); //If we have one member remaining in the party we disband the party if (partym.Character.Network.Party.Members.Count == 1) { //If its formed in the list remove the listening if (partym.Character.Network.Party.IsFormed) { partym.DeleteFormedParty(Character.Network.Party.ptid); } //Send update packet to the party member partym.client.Send(Packet.Party_Data(1, 0)); //Send update packet to the current player client.Send(Packet.Party_Data(1, 0)); //Set party to null for the current player Character.Network.Party = null; //Set party to null for the remaining member partym.Character.Network.Party = null; //Set bool for current player Character.Information.CheckParty = false; //Set bool for the remaining party member partym.Character.Information.CheckParty = false; } //If there are more members (Not autodisband party). else { //Send the update packet to the party member partym.client.Send(Packet.Party_Data(3, TargetID)); } } //Set the kicked player bool to false s.Character.Information.CheckParty = false; //Remove the party network for the kicked player s.Character.Network.Party = null; //Send update packet to the kicked player s.client.Send(Packet.Party_Data(1, 0)); } catch (Exception ex) { Console.WriteLine("Party Ban Error {0}", ex); Systems.Debugger.Write(ex); } }