///////////////////////////////////////////////////////////////////////// // Union Apply ///////////////////////////////////////////////////////////////////////// public void unionapply() { try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Get target id (Targeted). int Target = Reader.Int32(); //Close reader Reader.Close(); //Get target details PlayerMgr targetplayer = Helpers.GetInformation.GetPlayer(Target); //Make sure the target is still there if (targetplayer != null) { //If allready in union if (targetplayer.Character.Network.Guild.UnionActive) return; //Set bools for both players targetplayer.Character.State.UnionApply = true; Character.State.UnionApply = true; //Set target player to us targetplayer.Character.Network.TargetID = Character.Information.UniqueID; //Send request to targeted player targetplayer.client.Send(Packet.PartyRequest(6, Character.Information.UniqueID, 0)); } } catch (Exception ex) { Log.Exception(ex); } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Private Message Open /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void PrivateMessageOpen() { try { PacketReader Reader = new PacketReader(PacketInformation.buffer); ///////////////////////////////////////////////////////////////////////////////////// byte type = Reader.Byte(); short typeget = (short)type; Reader.Close(); DB ms = new DB("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' AND idinfo ='" + typeget + "'"); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { string messageinfo = reader.GetString(3); client.Send(Packet.PrivateMessageOpen(type, messageinfo)); DB.query("UPDATE message SET status='1' WHERE receiver='" + Character.Information.Name + "' AND idinfo ='" + type + "'"); } } ms.Close(); } catch (Exception ex) { Log.Exception(ex); } }
void CharacterJobPick(byte[] buff) { //Wrap our function inside a catcher try { //Open packet reader PacketReader Reader = new PacketReader(buff); Reader.Skip(1); short namel = Reader.Int16(); string name = Reader.String(namel); byte job = Reader.Byte(); Reader.Close(); //Anti hack check string namecheck = DB.GetData("SELECT name FROM character WHERE account='" + Player.AccountName + "'", "name"); int jobcheck = Convert.ToInt32(DB.GetData("SELECT jobtype FROM users WHERE id='" + Player.AccountName + "'", "jobtype")); //If the name check is succesfull and account has no job set. if (jobcheck == 0 && namecheck.Length > 0) { //Write new job info DB.query("UPDATE users SET jobtype='" + job + "' WHERE id='" + Player.AccountName + "'"); } //Send visual confirmation client.Send(Packet.CharacterJobSelection()); } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Open Npc ///////////////////////////////////////////////////////////////////////////////// public void Open_NPC() { #region Open Npc try { Character.State.Busy = true; PacketReader Reader = new PacketReader(PacketInformation.buffer); Reader.UInt32(); byte type = Reader.Byte(); if (type == 1) { client.Send(Packet.OpenNPC(type)); } else { client.Send(Packet.OpenNPC(type)); } Reader.Close(); } catch (Exception ex) { Log.Exception(ex); } #endregion }
public void PartyAddmembers() { try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read target id int targetid = Reader.Int32(); //Close packet reader Reader.Close(); //Get detailed information from target PlayerMgr InvitedPlayer = Helpers.GetInformation.GetPlayer(targetid); //Check if the targeted player allready is in a party. if (InvitedPlayer.Character.Network.Party == null) { //Set target id of target player to our id InvitedPlayer.Character.Network.TargetID = this.Character.Information.UniqueID; //Send request InvitedPlayer.client.Send(Packet.PartyRequest(2, Character.Information.UniqueID, Character.Network.Party.Type)); } } //Write bad exception errors catch (Exception ex) { //Write error to the console. Console.WriteLine(ex); //Write error to the debug log } }
public void Connect() { //Wrap our function inside a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte type = Reader.Byte(); Reader.Skip(3); string ID = Reader.Text(); string PW = Reader.Text(); Reader.Close(); //Set login result information int LoginResult = LoginUser(ID, ref PW, ref Player, true); //If the login is succesfull if (LoginResult == 4) { //Send succes packet client.Send(Packet.ConnectSuccess()); } //If the login is wrong else { //Disconnect the user client.Disconnect(PacketInformation.Client); } } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Friend add response ///////////////////////////////////////////////////////////////////////////////// public void FriendAddResponse() { try { PacketReader reader = new PacketReader(PacketInformation.buffer); int Inviterid = reader.Int32(); int Myid = reader.Int32(); byte State = reader.Byte(); reader.Close(); PlayerMgr sys = Helpers.GetInformation.GetPlayer(Inviterid); if (sys != null) { if (State == 0) { //Declined client.Send(Packet.FriendDecline(Character.Information.Name)); sys.client.Send(Packet.FriendDecline(Character.Information.Name)); } else { //Accepted sys.client.Send(Packet.FriendData(Myid, 2, Character.Information.Name, Character, false)); client.Send(Packet.FriendData(Inviterid, 2, sys.Character.Information.Name, sys.Character, false)); DB.query("INSERT INTO friends (owner,friend_name,model_info) VALUES ('" + Character.Information.CharacterID + "','" + sys.Character.Information.CharacterID + "','" + sys.Character.Information.Model + "')"); DB.query("INSERT INTO friends (owner,friend_name,model_info) VALUES ('" + sys.Character.Information.CharacterID + "','" + Character.Information.CharacterID + "','" + Character.Information.Model + "')"); } } } catch (Exception ex) { Console.WriteLine("Friend Add Response Error {0}", ex); Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Add new friend ///////////////////////////////////////////////////////////////////////////////// public void FriendAdd() { try { PacketReader reader = new PacketReader(PacketInformation.buffer); short namelenght = reader.Int16(); string name = reader.String(namelenght); reader.Close(); if (name == Character.Information.Name) return; PlayerMgr sys = Helpers.GetInformation.GetPlayerName(name); if (sys != null) { sys.client.Send(Packet.FriendInviteTarget(sys.Character)); } else { //Packet cannot find user } } catch (Exception ex) { Console.WriteLine("Friend Add error {0}", ex); Log.Exception(ex); } }
public void SelectObject() { try { if (Character.Information.Scroll) return; PacketReader Reader = new PacketReader(PacketInformation.buffer); int objectid = Reader.Int32(); if (objectid == 0) return; //Character.Action.Target = objectid; //if (Character.Position.Walking) StopPlayerMovementO(objectid); if (objectid == Character.Information.UniqueID) return; WorldMgr.Monsters o = Helpers.GetInformation.GetObject(objectid); if (o != null) { byte[] bb = Packet.SelectObject(objectid, o.ID, o.LocalType, o.HP); if (bb == null) return; client.Send(bb); //Character.Action.Object = o; return; } PlayerMgr sys = Helpers.GetInformation.GetPlayers(objectid); if (o == null && sys != null) { client.Send(Packet.SelectObject(objectid, 0, 5, sys.Character.Stat.Hp)); Character.Action.Object = sys; return; } Reader.Close(); } catch (Exception ex) { Console.WriteLine("Selectobject error: {0}", ex); } }
public void GuildInvite() { //Wrap our code into a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read lenght of invited character name Int16 InvitedCharacterLEN = Reader.Int16(); //Read invited character name string InvitedCharacter = Reader.String(InvitedCharacterLEN); //Close packet reader Reader.Close(); //Get information for target PlayerMgr sys = Helpers.GetInformation.GetPlayerName(InvitedCharacter); //Set targetid information Character.Network.TargetID = sys.Character.Information.UniqueID; //If player allready has a guild if (sys.Character.Network.Guild.Guildid != 0) { client.Send(Packet.Message(OperationCode.SERVER_GUILD_WAIT, Messages.UIIT_MSG_GUILDERR_MEMBER_OF_ANOTHER_GUILD)); return; } //If player has to wait before the player can join another guild if (sys.Character.Information.GuildPenalty) { client.Send(Packet.Message(OperationCode.SERVER_GUILD_WAIT, Messages.UIIT_MSG_GUILD_PENALTY)); return; } //If the guild has max members if (Character.Network.Guild.TotalMembers >= Character.Network.Guild.MaxMembers) { client.Send(Packet.Message(OperationCode.SERVER_GUILD_WAIT, Messages.UIIT_MSG_GUILDERR_MEMBER_FULL)); } //If the character doesnt have join rights if (!Character.Network.Guild.joinRight) { //This should not happen unless hack attempt, because button should be grayed out return; } //Set targetid to the invited player sys.Character.Network.TargetID = this.Character.Information.UniqueID; //Send guild request packet sys.client.Send(Packet.PartyRequest(5, this.Character.Information.UniqueID, 0)); //Set bools active Character.State.GuildInvite = true; sys.Character.State.GuildInvite = true; } //Catch bad exception errors catch (Exception ex) { Log.Exception(ex); } }
public void CharacterScreen() { //Wrap our function inside a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte type = Reader.Byte(); //Switch on byte type switch (type) { case 1: //WorldMgr.character creation CharacterCreate(); break; case 2: //Character listening CharacterListing(); break; case 3: //Character deletion CharacterDelete(); break; case 4: //WorldMgr.character checking CharacterCheck(PacketInformation.buffer); break; case 5: //Character restoring CharacterRestore(); break; case 9: //Character job information CharacterJobInfo(); break; case 16: //Select job CharacterJobPick(PacketInformation.buffer); break; default: //We use this if we get a new case. Console.WriteLine("Character Screen Type: " + type); Disconnect("normal"); break; } //Close packet reader Reader.Close(); } catch (Exception ex) { Log.Exception(ex); } }
public void Save() { //Wrap our function inside a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); string player_path; byte[] file; //Switch on byte switch (Reader.Byte()) { case 1: //Save quickbar information player_path = Environment.CurrentDirectory + @"\PlayerData\Hotkey\" + Character.Information.CharacterID + ".ClientSettings"; file = System.IO.File.ReadAllBytes(player_path); byte Slot = Reader.Byte(); byte sType = Reader.Byte(); Slot *= 5; file[Slot] = sType; file[Slot + 1] = Reader.Byte(); file[Slot + 2] = Reader.Byte(); file[Slot + 3] = Reader.Byte(); file[Slot + 4] = Reader.Byte(); System.IO.File.WriteAllBytes(player_path, file); break; case 2: //Save autopotion information player_path = Environment.CurrentDirectory + @"\PlayerData\AutoPotion\" + Character.Information.CharacterID + ".ClientSettings"; file = System.IO.File.ReadAllBytes(player_path); file[0] = Reader.Byte(); file[1] = Reader.Byte(); file[2] = Reader.Byte(); file[3] = Reader.Byte(); file[4] = Reader.Byte(); file[5] = Reader.Byte(); file[6] = Reader.Byte(); System.IO.File.WriteAllBytes(player_path, file); UpdateHp(); UpdateMp(); break; } Reader.Close(); } catch (Exception ex) { Log.Exception(ex); } }
public void GuildTransferLeaderShip() { try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read guild id int Guildid = Reader.Int32(); //Read guild member id to transfer to int GuildMemberID = Reader.Int32(); //Close reader Reader.Close(); //Get detailed player information PlayerMgr NewLeader = Helpers.GetInformation.GetPlayerid(GuildMemberID); //Update database DB.query("UPDATE guild_members SET guild_rank='10',guild_perm_join='0',guild_perm_withdraw='0',guild_perm_union='0',guild_perm_storage='0',guild_perm_notice='0' WHERE guild_member_id='" + Character.Information.CharacterID + "'"); DB.query("UPDATE guild_members SET guild_rank='0',guild_perm_join='1',guild_perm_withdraw='1',guild_perm_union='1',guild_perm_storage='1',guild_perm_notice='1' WHERE guild_member_id='" + GuildMemberID + "'"); //Repeat for each member in our guild foreach (int member in Character.Network.Guild.Members) { //Make sure member is not null if (member != 0) { //Get information for the guildmember PlayerMgr guildmember = Helpers.GetInformation.GetPlayerMainid(member); //Make sure the guildmember isnt null if (guildmember != null) { //Send update packet of new leader guildmember.client.Send(Packet.GuildUpdate(Character, 3, GuildMemberID, 0, 0)); } } } //Send message to old owner PacketWriter Writer = new PacketWriter(); //Add opcode Writer.Create(OperationCode.SERVER_GUILD_TRANSFER_MSG); //Static byte 1 Writer.Byte(1); //Send bytes to client client.Send(Writer.GetBytes()); } //If a bad exception error happens catch (Exception ex) { Log.Exception(ex); } }
public void GuildWarGold() { PacketReader Reader = new PacketReader(PacketInformation.buffer); int guildid = Reader.Int32(); Reader.Close(); if (Character.Guild.GuildWarGold == 0) { //Send Packet Message No War Gold Received client.Send(Packet.GuildWarMsg(2)); } else { //Sniff packet for war gold } }
public void GuildMessage() { //Wrap our function inside a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read short int16 for title lenght short TitleL = Reader.Int16(); //Read string for title string Title = Reader.String(TitleL); //Read short Message lenght short MessageL = Reader.Int16(); //Read message string Message = Reader.String(MessageL); //Close reader Reader.Close(); //Update database guild message title and message DB.query("UPDATE guild SET guild_news_t='" + Title + "',guild_news_m='" + Message + "' WHERE guild_name='" + Character.Network.Guild.Name + "'"); //Set new message info to current member for sending packet update. Character.Network.Guild.NewsTitle = Title; Character.Network.Guild.NewsMessage = Message; //Repeat for each member in our guild foreach (int member in Character.Network.Guild.Members) { //Make sure the member is there if (member != 0) { //Get detailed information from member main id PlayerMgr characterinformation = Helpers.GetInformation.GetPlayerid(member); //Set the current member news title and message information characterinformation.Character.Network.Guild.NewsMessage = Message; characterinformation.Character.Network.Guild.NewsTitle = Title; //Send packet to the member to update guild message. characterinformation.client.Send(Packet.GuildUpdate(characterinformation.Character, 11, 0, 0, 0)); } } } //Catch any bad exception error catch (Exception ex) { Log.Exception(ex); } }
void HandleRegisterIcon() { try { PacketReader reader = new PacketReader(PacketInformation.buffer); byte type = reader.Byte(); int iconlenght = reader.Int32(); string icon = reader.Text(); reader.Close(); string convertedicon = ConvertToHex(icon); //Save output to .dat file in hex formatting. } catch (Exception ex) { Console.WriteLine("Guild icon register error {0}", ex); } }
void CharacterDelete() { //Wrap our function in a catcher try { //Open our reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte unused = Reader.Byte(); string name = Reader.Text(); Reader.Close(); //Update character deletion information DB.query("UPDATE character SET deletedtime=dateadd(dd,7,getdate()) WHERE name='" + name + "'"); //Update character visual screen client.Send(Packet.ScreenSuccess(3)); } catch (Exception ex) { Log.Exception(ex); } }
public void CharacterCheck(byte[] buff) { //Wrap our function into a catcher try { //Open our reader PacketReader Reader = new PacketReader(buff); byte ignored = Reader.Byte(); string name = Reader.Text(); Reader.Close(); if (CharacterCheck(name)) client.Send(Packet.CharacterName(4)); else client.Send(Packet.ScreenSuccess(4)); } catch (Exception ex) { Log.Exception(ex); } }
public static void ClientCheck(Definitions.Clientdefinition sys) { PacketReader Reader = new PacketReader(sys.PacketInformation.buffer); byte Locale = Reader.Byte(); string Name = Reader.Text(); int Version = Reader.Int32(); Reader.Close(); try { if (Name == "SR_Client") { sys.client.Send(Core.Packets.Connect._1()); sys.client.Send(Core.Packets.Connect._2()); sys.client.Send(Core.Packets.Connect._3()); sys.client.Send(Core.Packets.Connect._4()); sys.client.Send(Core.Packets.Connect._5()); if (Version == Definitions.Serverdef.SilkroadClientVersion)// { sys.client.Send(Core.Packets.Connect.ActualVersion()); } else if (Version < Definitions.Serverdef.SilkroadClientVersion - 1)// { sys.client.Send(Core.Packets.Connect.ClientIsToOld()); } else if (Version > Definitions.Serverdef.SilkroadClientVersion)// { sys.client.Send(Core.Packets.Connect.ClientIsToNew()); } else { //sys.client.Send(Patch.SendPatchFiles()); } } } catch (Exception error) { Console.WriteLine("Connect.cs Error: {0}", error); } }
public void GuildTitle() { //Wrap our function inside a catcher try { //Extra hack check if (Character.Network.Guild.Level < 4) return; //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read integer guild member selected int SelectedGuildMember = Reader.Int32(); //Read short lenght of title for guild member short GuildMemberTitleLEN = Reader.Int16(); //Read string guild member title string GuildMemberTitle = Reader.String(GuildMemberTitleLEN); //Close packet reader Reader.Close(); //Get selected guild member information PlayerMgr playerinfo = Helpers.GetInformation.GetPlayerMainid(SelectedGuildMember); //Make sure the character is still there if (playerinfo.Character != null) { //Update database set new title DB.query("UPDATE guild_members SET guild_grant='" + GuildMemberTitle + "' WHERE guild_member_id='" + playerinfo.Character.Information.CharacterID + "'"); //Send new character guild title update to each player in spawn reach Send(Packet.GuildSetTitle(Character.Guild.GuildID, playerinfo.Character.Information.Name, GuildMemberTitle)); //Send Final packet to client playerinfo.client.Send(Packet.GuildSetTitle2(Character.Guild.GuildID, SelectedGuildMember, GuildMemberTitle)); } } //Catch bad exception errors catch (Exception ex) { Log.Exception(ex); } }
public void NormalRequest() { try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Get invited member int Target = Reader.Int32(); //Get party type byte PartyType = Reader.Byte(); //Close reader Reader.Close(); //Get target player information PlayerMgr InvitedPlayer = Helpers.GetInformation.GetPlayer(Target); //First we check the our own player level if (Character.Information.Level < 5) { //Send message //Return return; } //Check target level if (InvitedPlayer.Character.Information.Level < 5) { //Send message //Return return; } //Set target information for invited player InvitedPlayer.Character.Network.TargetID = Character.Information.UniqueID; //If the player inviting, has no party yet. if (Character.Network.Party == null) { //Create new party WorldMgr.party Party = new WorldMgr.party(); //Set leader of party Party.LeaderID = Character.Information.UniqueID; //Set party type Party.Type = PartyType; //Add to party net info Character.Network.Party = Party; } //If the target player has no party yet. if (InvitedPlayer.Character.Network.Party == null) { //Send invitation packet InvitedPlayer.client.Send(Packet.PartyRequest(2, this.Character.Information.UniqueID, PartyType)); //Set invite bools InvitedPlayer.Character.Information.CheckParty = true; Character.Information.CheckParty = true; } } //Catch bad exception errors catch (Exception ex) { //Write information to the console Console.WriteLine(ex); //Write information to the debug log } }
public void KickFromGuild() { //Wrap our function inside a catcher try { //Open a new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read short value lenght of name below short CharacterNameLen = Reader.Int16(); //Read string charactername string CharacterName = Reader.String(CharacterNameLen); //Close packet reader Reader.Close(); //Get player information PlayerMgr TargetCharacter = Helpers.GetInformation.GetPlayerName(CharacterName); //Send required packets to network foreach (int member in Character.Network.Guild.Members) { //Make sure member s not null if (member != 0) { //Get information for the guildmember PlayerMgr guildmember = Helpers.GetInformation.GetPlayerMainid(member); //Make sure the guildmember isnt null if (guildmember != null) { //Make sure the kicked member does not receive the packet if (guildmember.Character.Information.CharacterID != TargetCharacter.Character.Information.CharacterID) { guildmember.client.Send(Packet.GuildUpdate(TargetCharacter.Character, 7, 0, 0, 0)); } } } } //Send update packet to the kicked player TargetCharacter.client.Send(Packet.GuildUpdate(TargetCharacter.Character, 7, 0, 0, 0)); //Send guild kick message packet to the kicked player PacketWriter Writer = new PacketWriter(); //Add opcode Writer.Create(OperationCode.SERVER_GUILD_KICK); //Add static byte 1 Writer.Byte(1); //Send packet to kicked member TargetCharacter.client.Send(Writer.GetBytes()); //Send guildkick visual packet update to kicked player TargetCharacter.Send(Packet.GuildKick(TargetCharacter.Character.Information.UniqueID)); //Remove the player from database DB.query("DELETE from guild_members where guild_member_id='" + TargetCharacter.Character.Information.CharacterID + "'"); //Update database Character.Network.Guild.TotalMembers -= 1; DB.query("UPDATE guild SET guild_members_t='" + Character.Network.Guild.TotalMembers + "' WHERE guild_name='" + Character.Network.Guild.Name + "'"); TargetCharacter.CleanUp(TargetCharacter); } //Catch bad exception errors catch (Exception ex) { //Write information to the console Console.WriteLine("Guild Kick Error: {0}", ex); //Write information to the debug log } }
///////////////////////////////////////////////////////////////////////////////// // Item Switch ///////////////////////////////////////////////////////////////////////////////// public void ItemMain() { #region Item Actions try { if (Character.State.Die || Character.Information.Scroll) return; PacketReader Reader = new PacketReader(PacketInformation.buffer); byte iType = Reader.Byte(); switch (iType) { case 0: if (Character.State.Busy) return; ItemMove(Reader.Byte(), Reader.Byte(), Reader.Int16()); break; case 1: ItemMoveInStorage(Reader.Byte(), Reader.Byte(), Reader.Int16()); break; case 2: Player_MoveItemToStorage(Reader.Byte(), Reader.Byte(), Reader.Int32()); break; case 3: Player_MoveStorageItemToInv(Reader.Byte(), Reader.Byte(), Reader.Int32()); break; case 4: ItemMoveToExhangePage(Reader.Byte()); break; case 5: ItemMoveExchangeToInv(Reader.Byte()); break; case 8: Player_BuyItem(Reader.Byte(), Reader.Byte(), Reader.Int16(), Reader.Int32()); break; case 9: Player_SellItem(Reader.Byte(), Reader.Int16(), Reader.UInt16()); break; case 7: if (Character.State.Busy) return; Player_DropItem(Reader.Byte()); break; case 10: if (Character.State.Busy) return; Player_DropGold(Reader.UInt64()); break; case 11: Player_TakeGoldW(iType, Reader.Int64()); break; case 12: Player_GiveGoldW(iType, Reader.Int64()); break; case 13: ItemExchangeGold(Reader.Int64()); break; case 16: MovePetToPet(Reader.Int32(), Reader.Byte(), Reader.Byte(), Reader.Int16()); break; case 24: //Player_BuyItemFromMall(Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Text()); break; case 26: MoveItemFromPet(Reader.Int32(), Reader.Byte(), Reader.Byte()); break; case 27: MoveItemToPet(Reader.Int32(), Reader.Byte(), Reader.Byte()); break; case 29: ItemMoveInStorage(Reader.Byte(), Reader.Byte(), Reader.Int16());//Move inside guild storage break; case 30: Player_MoveItemToStorage(Reader.Byte(), Reader.Byte(), Reader.Int32());//Move to guild storage break; case 31: Player_MoveStorageItemToInv(Reader.Byte(), Reader.Byte(), Reader.Int32());//Move from guild storage break; case 32: Player_GiveGoldW(iType, Reader.Int64());//Guild storage break; case 33: Player_TakeGoldW(iType, Reader.Int64());//Guild storage break; case 35: ItemAvatarUnEquip(Reader.Byte(), Reader.Byte()); break; case 36: ItemAvatarEquip(Reader.Byte(), Reader.Byte()); break; default: Print.Format("Unknown Item Function:{0}:{1}", iType, Decode.StringToPack(PacketInformation.buffer)); break; } Reader.Close(); } catch (Exception ex) { Log.Exception(ex); } #endregion }
public void ActionMain() { try { if (Character.State.Die) return; PacketReader Reader = new PacketReader(PacketInformation.buffer); byte type = Reader.Byte(); if (type != 2) { if (Character.Action.Cast) return; if (Character.Information.Scroll) return; switch (Reader.Byte()) { case 1: // normal attack if (Character.Action.nAttack) return; if (Character.Action.sAttack) return; if (Character.Transport.Right) return; Reader.Byte(); int id = Reader.Int32(); Reader.Close(); object os = Helpers.GetInformation.GetObjects(id); if (/*(Character.Action.Target == id && Timer.Attack != null) || */ id == Character.Information.UniqueID) { Reader.Close(); return; } Character.Action.PickUping = false; Character.Action.Object = os; Character.Action.nAttack = true; Character.Action.Target = id; StartAttackTimer(); break; case 2://pickup if (Character.Action.nAttack) return; if (Character.Action.sAttack) return; if (Character.Action.sCasting) return; if (Character.Action.PickUping) return; Reader.Byte(); int id2 = Reader.Int32(); Reader.Close(); Character.Action.Target = id2; Character.Action.PickUping = true; StartPickupTimer(1000); break; case 3://trace if (Character.Action.sAttack) return; if (Character.Action.sCasting) return; if (Character.State.Sitting) return; if (Character.Stall.Stallactive) return; Reader.Byte(); int id3 = Reader.Int32(); Character.Action.Target = id3; Reader.Close(); client.Send(Packet.ActionState(1, 1)); Character.Action.PickUping = false; Player_Trace(id3); break; case 4://use skill if (Character.Action.nAttack) { StopAttackTimer(); System.Threading.Thread.Sleep(300); } Character.Action.UsingSkillID = Reader.Int32(); SkillMain(Reader.Byte(), Reader); break; case 5: int id4 = Reader.Int32(); byte b_index = SkillGetBuffIndex(id4); SkillBuffEnd(b_index); break; default: Console.WriteLine("ActionMain case: " + Reader.Byte()); break; } } else StopAttackTimer(); } catch (Exception ex) { Log.Exception(ex); } }
void SkillMain(byte type, PacketReader Reader) { try { if (!SkillGetOpened(Character.Action.UsingSkillID)) return; client.Send(Packet.ActionState(1, 1)); switch (type) { case 1: if (Character.Action.sAttack) return; if (Character.Action.sCasting) return; if (Character.Action.nAttack) StopAttackTimer(); if (!Base.Skill.CheckWeapon(Character.Information.Item.wID, Character.Action.UsingSkillID)) { client.Send(Packet.Message(OperationCode.SERVER_ACTION_DATA, Messages.UIIT_SKILL_USE_FAIL_WRONGWEAPON)); client.Send(Packet.Messages2(OperationCode.SERVER_ACTIONSTATE, Messages.UIIT_SKILL_USE_FAIL_WRONGWEAPON)); return; } Character.Action.Target = Reader.Int32(); Character.Action.Skill.MainSkill = Character.Action.UsingSkillID; Character.Action.UsingSkillID = 0; Character.Action.Object = Helpers.GetInformation.GetObjects(Character.Action.Target); if (ObjData.Manager.SkillBase[Character.Action.Skill.MainSkill].isAttackSkill) { Character.Action.Skill = Base.Skill.Info(Character.Action.Skill.MainSkill, Character); if (!Character.Action.Skill.canUse || Character.Action.Target == Character.Information.UniqueID) return; WorldMgr.Monsters o = null; if (Character.Action.Object != null && Character.Action.Object.GetType().ToString() == "WorldMgr.Monsters") { o = Character.Action.Object as WorldMgr.Monsters; //if (o.AgressiveDMG == null) o.AgressiveDMG = new List<_agro>(); //if (Character.Action.Skill.OzelEffect == 5 && o.State != 4) return; //if (o.State == 4 && Character.Action.Skill.OzelEffect != 5) return; } if (o == null && Character.Action.Object != null && Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr") { if (!Character.Information.PvP || Character.State.Die) return; PlayerMgr sys = Character.Action.Object as PlayerMgr; //if (Character.Action.Skill.OzelEffect == 5 && sys.Character.State.LastState != 5) return; //if (sys.Character.State.LastState == 4 && Character.Action.Skill.OzelEffect != 5) return; } Character.Action.sAttack = true; ActionSkillAttack(); Reader.Close(); } else { Character.Action.sAttack = true; ActionSkill(); } break; case 0: SkillBuff(); break; case 2: MovementSkill(Reader); break; default: Console.WriteLine("Skillmain type: {0}", type); break; } } catch (Exception ex) { Log.Exception(ex); } }
void MovementSkill(PacketReader Reader) { try { if (!Character.Action.movementskill) { Character.Action.movementskill = true; MovementSkillTimer(ObjData.Manager.SkillBase[Character.Action.UsingSkillID].Properties1["tele"] + 500); if (Character.Action.sAttack || Character.Action.sCasting) return; if (Character.Stat.SecondMP < ObjData.Manager.SkillBase[Character.Action.UsingSkillID].Mana) { client.Send(Packet.ActionPacket(2, 4)); return; } else { Character.Stat.SecondMP -= ObjData.Manager.SkillBase[Character.Action.UsingSkillID].Mana; UpdateMp(); if (Timer.Movement != null) { Timer.Movement.Dispose(); Character.Position.Walking = false; } byte xSec = Reader.Byte(), ySec = Reader.Byte(); int x = Reader.Int32(), z = Reader.Int32(), y = Reader.Int32(); Reader.Close(); float gamex = Formule.gamex((float)x, xSec); float gamey = Formule.gamey((float)y, ySec); float farkx = gamex - Character.Position.x; float farky = gamey - Character.Position.y; float hesapy = 0, hesapx = 0; while (hesapx + hesapy < ObjData.Manager.SkillBase[Character.Action.UsingSkillID].Properties2["tele"] / 10) { Character.Position.x += (farkx / 30); Character.Position.y += (farky / 30); hesapx += Math.Abs((farkx / 30)); hesapy += Math.Abs((farky / 30)); } PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_ACTION_DATA); Writer.Byte(1); Writer.Byte(2); Writer.Byte(0x30); int overid = Character.Ids.GetCastingID(); Writer.DWord(Character.Action.UsingSkillID);//skillid Writer.DWord(Character.Information.UniqueID); //charid Writer.DWord(overid);//overid Writer.DWord(0); Writer.Byte(8); Writer.Byte(xSec); Writer.Byte(ySec); Writer.DWord(Formule.packetx(Character.Position.x, xSec)); Writer.DWord(0); Writer.DWord(Formule.packety(Character.Position.y, ySec)); Send(Writer.GetBytes()); client.Send(Packet.ActionState(2, 0)); ObjectSpawnCheck(); } } } catch (Exception ex) { Log.Exception(ex); } }
public void JoinFormedParty() { try { PacketReader Reader = new PacketReader(PacketInformation.buffer); //Packet reader party id int PartyID = Reader.Int32(); Reader.Close(); //Checks if (PartyID == 0) return; //Get character id from the party id int Playerid = Helpers.GetInformation.GetPartyleader(PartyID); //Get character information PlayerMgr sys = Helpers.GetInformation.GetPlayer(Playerid); //Open the invite sys.client.Send(Packet.JoinFormedRequest(Character, sys.Character)); } catch (Exception ex) { Console.WriteLine("Formed party join error {0}", ex); } }
public void FormedResponse() { try { //Open our packet data reader PacketReader reader = new PacketReader(PacketInformation.buffer); int Requestermodel = reader.Int32(); int Characterid = reader.Int32(); byte responsetype = reader.Byte(); reader.Close(); //Get player information PlayerMgr sys = Helpers.GetInformation.GetPlayer(Characterid); //If the requester is not in a party yet if (sys.Character.Network.Party == null) { //If party doesnt excist anymore or is not listed anymore if (Character.Network.Party != null) { //If not formed anymore if (!Character.Network.Party.IsFormed) { //Send cannot find party message sys.client.Send(Packet.Message(OperationCode.SERVER_PARTY_MESSAGES, Messages.UIIT_MSG_PARTYERR_CANT_FIND_PARTY)); return; } } //If party is null else { //Send cannot find party message sys.client.Send(Packet.Message(OperationCode.SERVER_PARTY_MESSAGES, Messages.UIIT_MSG_PARTYERR_CANT_FIND_PARTY)); return; } //Accept new member if (responsetype == 1) { //Check party type members allowed need message if full if (Character.Network.Party.Type == 4 && Character.Network.Party.Members.Count > 3) { //Add msg party full return; } if (Character.Network.Party.Type == 5 && Character.Network.Party.Members.Count > 7) { //Add msg party full return; } //Send packets to creator and invited member sys.client.Send(Packet.Party_Member(sys.Character.Information.UniqueID)); client.Send(Packet.PartyOwnerInformation(Character.Information.UniqueID)); //Set bools for check Character.Information.CheckParty = true; //Bool for requester sys.Character.Information.CheckParty = true; //Add member Character.Network.Party.Members.Add(sys.Character.Information.UniqueID); Character.Network.Party.MembersClient.Add(sys.client); //Send packet for each member in party foreach (int member in Character.Network.Party.Members) { if (member != 0) { PlayerMgr mainParty = Helpers.GetInformation.GetPlayer(member); //If the member is the owner if (mainParty != null) { if (mainParty.Character.Information.CharacterID == Character.Information.CharacterID) { //Just send update packet mainParty.client.Send(Packet.Party_DataMember(mainParty.Character.Network.Party)); } //For other members else { //Send member joined packet mainParty.client.Send(Packet.JoinResponseMessage(1)); //Send update packet mainParty.client.Send(Packet.Party_DataMember(Character.Network.Party)); //Set new party data mainParty.Character.Network.Party = Character.Network.Party; } } } } } //Refuse else { //If the party is a new party if (sys.Character.Network.Party.Members.Count < 1) { Character.Information.CheckParty = false; } else { sys.client.Send(Packet.Party_Member(sys.Character.Information.UniqueID)); Character.Information.CheckParty = false; } } } } catch (Exception ex) { Console.WriteLine("Formed response error {0}", ex); } }
void CharacterCreate() { //Start wrapper for catching errors try { //Check the amount of characters created (If 4 then we return). Todo: Check if any message shows up. if (DB.GetRowsCount("SELECT * FROM character WHERE account='" + Player.AccountName + "'") == 4) return; //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte tocheck = Reader.Byte(); string name = Reader.Text(); int model = Reader.Int32(); byte volume = Reader.Byte(); int[] Item = new int[4]; Item[0] = Reader.Int32(); Item[1] = Reader.Int32(); Item[2] = Reader.Int32(); Item[3] = Reader.Int32(); Reader.Close(); //Check player name #region Check Name //Check the character name before creation if (CharacterCheck(name)) { //If bad send informational packet client.Send(Packet.CharacterName(4)); //Finally return. return; } //Set and disable special characters if (name.Contains("[")) return; else if (name.Contains("GM")) return; else if (name.Contains("]")) return; else if (name.Contains("-")) return; #endregion //Begin creation for EU characters #region European characters //Check by model type to see what race we have. if (model >= 14715 && model <= 14745) { //Insert the basic information into the database DB.query("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, savearea,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','79','105','387','1000','1279','20','0000000000000000')"); //Insert reverse scroll data into the database DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','79','105','1000','22','83')"); //Set definition for the character id information Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id")); //Set default information (TODO: Check if all chars have same base). double MagDef = 3; double PhyDef = 6; double Parry = 11; double Hit = 11; double MinPhyA = 6; double MaxPhyA = 9; double MinMagA = 6; double MaxMagA = 10; //Open new framework ini reading Ini ini; //Open settings information for start items ini = new Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini"); //5 Items max for starting characters string Item1 = ini.GetValue("European.Start", "Item1", "").ToString(); string Item2 = ini.GetValue("European.Start", "Item2", "").ToString(); string Item3 = ini.GetValue("European.Start", "Item3", "").ToString(); string Item4 = ini.GetValue("European.Start", "Item4", "").ToString(); string Item5 = ini.GetValue("European.Start", "Item5", "").ToString(); //The amount related information string Amount1 = ini.GetValue("European.Start", "Amount1", "").ToString(); string Amount2 = ini.GetValue("European.Start", "Amount2", "").ToString(); string Amount3 = ini.GetValue("European.Start", "Amount3", "").ToString(); string Amount4 = ini.GetValue("European.Start", "Amount4", "").ToString(); string Amount5 = ini.GetValue("European.Start", "Amount5", "").ToString(); //Add the custom items try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0); } catch (Exception) { } //Add the base items AddItem(Item[0], 0, 1, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, Player.CreatingCharID, 0); //Set mag defense MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef; //Set phy defence PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef; //Set parry information Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry; //Set hit ratio Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating; //Set phy attack MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack; //Set mag attack MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack; //If the 3rd item is a sword or a dark staff if (Item[3] == 10730 || Item[3] == 10734) { //Add the mag def information MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef; //Add the phy def information PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef; //Add parry ration Parry += ObjData.Manager.ItemBase[251].Defans.Parry; //Add shield item AddItem(10738, 0, 7, Player.CreatingCharID, 0); } //If the 3rd item is a crossbow if (Item[3] == 10733) { //We add our base bolts 250 AddItem(10376, 250, 7, Player.CreatingCharID, 0); } //Update database information for stats DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) + "', max_phyatk='" + Math.Round(MaxPhyA) + "', min_magatk='" + Math.Round(MinMagA) + "', max_magatk='" + Math.Round(MaxMagA) + "', phydef='" + Math.Round(PhyDef) + "', magdef='" + Math.Round(PhyDef) + "', parry='" + Math.Round(Parry) + "', hit='" + Math.Round(Hit) + "' where name='" + name + "'"); //Add base mastery's for europe characters AddMastery(513, Player.CreatingCharID); //Warrior AddMastery(515, Player.CreatingCharID); //Rogue AddMastery(514, Player.CreatingCharID); //Wizard AddMastery(516, Player.CreatingCharID); //Warlock AddMastery(517, Player.CreatingCharID); //Bard AddMastery(518, Player.CreatingCharID); //Cleric client.Send(Packet.ScreenSuccess(1)); #endregion } //If the character model is an chinese character else { #region Chinese characters DB.query("INSERT INTO character (account, name, chartype, volume,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','0000000000000000')"); DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','168','79','911','1083','-32')"); Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id")); #region Item double MagDef = 3; double PhyDef = 6; double Parry = 11; double Hit = 11; double MinPhyA = 6; double MaxPhyA = 9; double MinMagA = 6; double MaxMagA = 10; CLFramework.Ini ini; ini = new CLFramework.Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini"); string Item1 = ini.GetValue("Chinese.Start", "Item1", "").ToString(); string Item2 = ini.GetValue("Chinese.Start", "Item2", "").ToString(); string Item3 = ini.GetValue("Chinese.Start", "Item3", "").ToString(); string Item4 = ini.GetValue("Chinese.Start", "Item4", "").ToString(); string Item5 = ini.GetValue("Chinese.Start", "Item5", "").ToString(); string Amount1 = ini.GetValue("Chinese.Start", "Amount1", "").ToString(); string Amount2 = ini.GetValue("Chinese.Start", "Amount2", "").ToString(); string Amount3 = ini.GetValue("Chinese.Start", "Amount3", "").ToString(); string Amount4 = ini.GetValue("Chinese.Start", "Amount4", "").ToString(); string Amount5 = ini.GetValue("Chinese.Start", "Amount5", "").ToString(); try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0); } catch (Exception) { } AddItem(Item[0], 0, 1, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, Player.CreatingCharID, 0); MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef; PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef; Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry; Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating; MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack; MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack; if (Item[3] == 3632 || Item[3] == 3633) { MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef; PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef; Parry += ObjData.Manager.ItemBase[251].Defans.Parry; AddItem(251, 0, 7, Player.CreatingCharID, 0); } if (Item[3] == 3636) { AddItem(62, 250, 7, Player.CreatingCharID, 0); } #endregion DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) + "', max_phyatk='" + Math.Round(MaxPhyA) + "', min_magatk='" + Math.Round(MinMagA) + "', max_magatk='" + Math.Round(MaxMagA) + "', phydef='" + Math.Round(PhyDef) + "', magdef='" + Math.Round(PhyDef) + "', parry='" + Math.Round(Parry) + "', hit='" + Math.Round(Hit) + "' where name='" + name + "'"); AddMastery(257, Player.CreatingCharID); //blade AddMastery(258, Player.CreatingCharID); //heuksal AddMastery(259, Player.CreatingCharID); //bow AddMastery(273, Player.CreatingCharID); //cold AddMastery(274, Player.CreatingCharID); //light AddMastery(275, Player.CreatingCharID); //fire AddMastery(276, Player.CreatingCharID); //force client.Send(Packet.ScreenSuccess(1)); #endregion } } catch (Exception ex) { Log.Exception(ex); } }
public void GuildPromote() { try { //Read client information int32 id PacketReader reader = new PacketReader(PacketInformation.buffer); int guildid = reader.Int32(); reader.Close(); //When a guild has reached its max level if (Character.Network.Guild.Level == 5) { //Send packet to client and return (Message level up max). client.Send(Packet.Message(OperationCode.SERVER_GUILD_WAIT, Messages.UIIT_MSG_ERROR_GUILD_LEVEL_UP_FULL)); return; } //Definition for gold needed int GoldRequired; //Definition for guild points needed int GuildPointRequired; //Check if player is allready in process of upgrading if (!IsUpgrading) { //Set bool to true, so we cant dupe IsUpgrading = true; //Load player guild information before we continue (Check last info). LoadPlayerGuildInfo(false); //Create switch on guildl evel switch (Character.Network.Guild.Level) { case 1: GoldRequired = 3000000; GuildPointRequired = 5400; break; case 2: GoldRequired = 9000000; GuildPointRequired = 50400; break; case 3: GoldRequired = 15000000; GuildPointRequired = 135000; break; case 4: GoldRequired = 21000000; GuildPointRequired = 378000; break; default: return; } //Set new guild level definition + 1 int NewLevel = Character.Network.Guild.Level + 1; //Set new guild storage slot amount int NewStorageSlots = Character.Network.Guild.StorageSlots + 30; //If character's gold is not enough if (Character.Information.Gold < GoldRequired) { //Send message to client client.Send(Packet.Message(OperationCode.SERVER_GUILD_PROMOTE_MSG, Messages.UIIT_MSG_ERROR_GUILD_LEVEL_UP_GOLD_DEFICIT)); return; } //Not enough guildpoints if (Character.Network.Guild.PointsTotal < GuildPointRequired) { //Send client message client.Send(Packet.Message(OperationCode.SERVER_GUILD_PROMOTE_MSG, Messages.UIIT_MSG_ERROR_GUILD_LEVEL_UP_GP_DEFICIT)); return; } //Max level if (Character.Network.Guild.Level == 5) { //Send client message client.Send(Packet.Message(OperationCode.SERVER_GUILD_PROMOTE_MSG, Messages.UIIT_MSG_ERROR_GUILD_LEVEL_UP_FULL)); return; } //If everything else is fine else //Upgrade guild initiate { //If max level return just incase. if (Character.Network.Guild.Level == 5) return; //Reduct guildpoints Character.Network.Guild.PointsTotal -= GuildPointRequired; //If the upgrade is final upgrade set points to 0 if (Character.Network.Guild.Level == 4) Character.Network.Guild.PointsTotal = 0; //Reduct gold Character.Information.Gold -= GoldRequired; //Send update information to client client.Send(Packet.InfoUpdate(1, Character.Network.Guild.PointsTotal, 0)); //Send success message to client client.Send(Packet.PromoteOrDisband(2)); //Update guild in database DB.query("UPDATE guild SET guild_level='" + NewLevel + "',guild_points='" + Character.Network.Guild.PointsTotal + "',guild_storage_slots='" + NewStorageSlots + "' WHERE guild_name='" + Character.Network.Guild.Name + "'"); //Repeat for each member in our guild foreach (int member in Character.Network.Guild.Members) { //Check if memeber is not null if (member != 0) { //Get detailed member information PlayerMgr memberinfo = Helpers.GetInformation.GetPlayerMainid(member); //Make sure the member is not null if (memberinfo != null) { //Reload information for the current guild member memberinfo.LoadPlayerGuildInfo(false); //Send guild update packet for current guild member memberinfo.client.Send(Packet.GuildUpdate(Character, 5, 0, 0, 0)); } } } //Save player's gold SaveGold(); //Send update gold packet to client client.Send(Packet.UpdateGold(Character.Information.Gold)); } } //Disable the bool so we can upgrade again IsUpgrading = false; } //If any error accures catch (Exception ex) { Log.Exception(ex); } }