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 == 0) { //Send succes packet client.Send(Packet.ConnectSuccess()); } //If the login is wrong else { //Disconnect the user client.Disconnect(PacketInformation.Client); } } catch (Exception ex) { Console.WriteLine("Client connect error {0}", ex); Systems.Debugger.Write(ex); } }
//Void character delete void CharacterDelete() { //Wrap our function in a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Skip one not used byte Reader.Skip(1); //Get character name information string CharacterName = Reader.Text(); //Close packet reader Reader.Close(); //Update and set time + deletion state into the database MsSQL.InsertData("UPDATE character SET deletedtime=dateadd(dd,7,getdate()),deleted='1' WHERE name='" + CharacterName + "'"); //Send visual state of character on screen sit down client.Send(Packet.ScreenSuccess(3)); } //Catch bad exception errors catch (Exception ex) { //Write information to the console Console.WriteLine("Character deletion error {0}", ex); //Write information to debug logger Systems.Debugger.Write(ex); } }
void CharacterRestore() { //Wrap our function in a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Skip one byte Reader.Skip(1); //Read charactername to be restored string CharacterName = Reader.Text(); Reader.Close(); //Update database information set deleted state to 0 MsSQL.InsertData("UPDATE character SET deleted='0' WHERE name='" + CharacterName + "'"); //Send state packet to client character standing up client.Send(Packet.ScreenSuccess(5)); } //Catch bad exception errors catch (Exception ex) { //Write information to the console Console.WriteLine("Character restore error {0}", ex); //Write information to the debug log Systems.Debugger.Write(ex); } }
//This is for checking the new character name public void CharacterCheck(byte[] buff) { //Wrap our function into a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(buff); //Ignore first byte Reader.Skip(1); //Read character name string Charactername = Reader.Text(); //Close packet reader Reader.Close(); //If Character name is in use if (CharacterCheck(Charactername)) //Send in use packet client.Send(Packet.CharacterName(4)); //If character name is ok else //Send succes packet client.Send(Packet.ScreenSuccess(4)); } catch (Exception ex) { //Write any error to debog log Systems.Debugger.Write(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); } }
public void CharacterCheck(byte[] buff) { try { PacketReader Reader = new PacketReader(buff); 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) { Console.WriteLine("CharacterCheck()"); deBug.Write(ex); Console.WriteLine(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Item Switch ///////////////////////////////////////////////////////////////////////////////// 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) { Console.WriteLine("Item Switch Error {0}", ex); } #endregion }
///////////////////////////////////////////////////////////////////////////////// // Friend groups ///////////////////////////////////////////////////////////////////////////////// void FriendGroup(string type) { try { //We use string type for switch statement. switch (type) { //Add new group case "ADD": //First check if the user has friends int friendcount = MsSQL.GetRowsCount("SELECT * FROM FRIENDS WHERE owner='" + Character.Information.CharacterID + "'"); //If the user has no friends return if (friendcount == 0) return; //Create our packet reader PacketReader reader = new PacketReader(PacketInformation.buffer); //Start reading information string groupname = reader.Text(); //Close the reader reader.Close(); //Update database information MsSQL.InsertData("INSERT INTO friends_groups (playerid,groupname) VALUES ('" + Character.Information.CharacterID + "','" + groupname + "')"); //Get group id from count short groupid = GetGroupId(Character.Information.CharacterID); //Send packet to client client.Send(Packet.FriendGroupManage("ADD", groupname, groupid, 0)); break; //Remove group case "REMOVE": //Create our packet reader reader = new PacketReader(PacketInformation.buffer); //Start reading information groupid = reader.Int16(); //Close the reader reader.Close(); //Get group name string groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid); //Update database information MsSQL.InsertData("DELETE FROM friends_groups WHERE groupname='" + groupnameinfo + "'"); //Send packet to client client.Send(Packet.FriendGroupManage("REMOVE", groupnameinfo, groupid, 0)); break; //Move to group case "MOVE": //Create our packet reader reader = new PacketReader(PacketInformation.buffer); //Start reading information int targetid = reader.Int32(); groupid = reader.Int16(); //Close the reader reader.Close(); //Get groupname groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid); //Update database information MsSQL.UpdateData("UPDATE friends SET group_name='" + groupnameinfo + "' WHERE owner='" + Character.Information.CharacterID + "' AND friend_name='" + targetid + "'"); //Send packet to client client.Send(Packet.FriendGroupManage("MOVE", groupnameinfo, groupid, targetid)); break; } } catch (Exception ex) { Systems.Debugger.Write(ex); } }
void Chat() { /* * We use for each now, to make sure there wont be any issues * Incase the list we send the packet to can have none connected clients. * To prevent bugging of chat we repeat and check each client before sending. */ try { //Set our list of ranged players List<int> Rangedplayers = Character.Spawn; //Create new packet reader for reading packet data PacketReader Reader = new PacketReader(PacketInformation.buffer); //Chat type byte (for our switch case). byte chatType = Reader.Byte(); //Byte chat index byte chatIndex = Reader.Byte(); //Link count byte byte linkCount = Reader.Byte(); //Create switch to switch on type of chat (normal party etc). switch (chatType) { //--------------------------------- [Normal chat] ---------------------------------// case 1: //Read written text from packet data string Text = Reader.Text3(); //Close packet reader Reader.Close(); // .additem 111 12 if (Character.Information.GM == 1 && Text[0] == '.') { gmCommands(Text); } //Repeat for each in range player foreach (int member in Rangedplayers) { //Make sure the member is not null if (member != 0) { //Make sure its not sending to our client if (member != Character.Information.UniqueID) { //Get member detail Systems memberinfo = GetPlayer(member); //Send packet to the in range player memberinfo.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null)); } } } //Send chatindex packet to ourselfs client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; //--------------------------------- [Normal chat pink] ---------------------------------// case 3: //Check if our character has gm rights or not if (Character.Information.GM == 1) { //Read packet information (text typed). Text = Reader.Text3(); //Close packet reader Reader.Close(); //Repeat for each player in our range list foreach (int member in Rangedplayers) { //Check if the member is not null if (member != 0) { //Make sure its not sending to our own client if (member != Character.Information.UniqueID) { //Get member detail Systems memberinfo = GetPlayer(member); //Send packet to the member memberinfo.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null)); } } } //Send chat index to our client client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; } //If character tried to use pink chat but isnt a gm else { //We ban the player for hacking attempt. Disconnect("ban"); } break; //--------------------------------- [Private chat] ---------------------------------// case 2: //Read from packet data who we are sending the message to string Target = Reader.Text(); //Get information from the given player we send to Systems Targetplayer = GetPlayerName(Target); //Make sure the player sending to is not null if (Targetplayer != null) { //Make sure the player is ingame (Not teleporting or such). if (Targetplayer.Character.InGame) { //Read the message from the packet data Text = Reader.Text3(); //Close the packet reader Reader.Close(); //Send packet to our target Targetplayer.client.Send(Packet.ChatPacket(chatType, 0, Text, this.Character.Information.Name)); //Send chatindex packet to ourselfs client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); } } break; //--------------------------------- [Party chat] ---------------------------------// case 4: //Make sure the player is in a party if (Character.Network.Party != null) { //Read the text the player has typed from packet data Text = Reader.Text3(); //Close packet reader Reader.Close(); //Repeat for each member in the party member list foreach (int member in Character.Network.Party.Members) { //Make sure the member isnt null (0) if (member != 0) { //Get detailed info for the player Systems memberinfo = GetPlayer(member); //Send packet information to the member for chat memberinfo.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, this.Character.Information.Name)); } } //Finally send chatindex packet to ourselfs client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); } break; //--------------------------------- [Guild chat] ---------------------------------// case 5: //Read message beeing send from packet data Text = Reader.Text3(); //Close packet reader Reader.Close(); //Repeat for each member in the guild member list foreach (int member in Character.Network.Guild.Members) { //Make sure the member is not null (0) if (member != 0) { //Get guild member detailed information Systems Guildmember = GetPlayerMainid(member); //Again check if the guild member is not null if (Guildmember != null) { //Send chat packet to the member Guildmember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, this.Character.Information.Name)); } } } //Send chat index packet to our client client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; //--------------------------------- [Global chat] ---------------------------------// case 6: //Get sender name from packet data string Sender = Reader.Text(); //Get message from packet data Text = Reader.Text3(); //Send to every client connected and logged in SendAll(Packet.ChatPacket(chatType, Character.Information.UniqueID, " " + Text, Sender)); break; //--------------------------------- [Notice chat] ---------------------------------// case 7: //Make sure the character sending is a gm if (Character.Information.GM == 1) { //Get message from packet data Text = Reader.Text3(); //Close packet reader Reader.Close(); //Send to everyone ingame (using void sendnoticecon). SendAll(sendnoticecon(chatType, Character.Information.UniqueID, Text, null)); } //If the character is not a gm else { //Disconnect and ban the player for hack attempt Disconnect("ban"); } break; //--------------------------------- [Stall chat] ---------------------------------// case 9: //Read message from packet data Text = Reader.Text3(); //Close packet reader Reader.Close(); //Repeat for each member in the stall foreach (int stallmember in Character.Network.Stall.Members) { //Make sure the stall member isnt null 0 if (stallmember != 0) { //Get stall member details Systems member = GetPlayer(stallmember); //Make sure the member isnt null if (member != null) { //Send chat packet to the member member.client.Send(Packet.ChatPacket(chatType, Character.Network.Stall.ownerID, Text, this.Character.Information.Name)); } } } //Send chat index to ourselfs client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; //--------------------------------- [Academy chat] ---------------------------------// case 10: //Todo academy system then chat. break; //--------------------------------- [Union chat] ---------------------------------// case 11: //Read message from packet data Text = Reader.Text3(); //Close packet reader Reader.Close(); //If the character has no union if (!Character.Network.Guild.UnionActive) //Return return; //Else for each member in the union foreach (int member in Character.Network.Guild.UnionMembers) { //Make sure the union member is not null 0 if (member != 0) { //Get member detailed information Systems tomember = GetPlayerMainid(member); //Make sure the member is not null if (tomember != null) { //Make sure the member isnt ourself if(tomember.Character.Information.CharacterID != Character.Information.CharacterID) { //Send packet to the union member tomember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name)); } } } } //Repeat for each member in the guild foreach (int member in Character.Network.Guild.Members) { //Make sure the member isnt null 0 if (member != 0) { //Get member detailed information Systems tomember = GetPlayerMainid(member); //Make sure the member isnt null if (tomember != null) { //Make sure the member isnt ourself if (tomember.Character.Information.CharacterID != Character.Information.CharacterID) { //Send packet to the member tomember.Character.Network.Guild.SingleSend = false; } } } } //Finally send chat index packet to ourself client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; } } //If an exception error happens catch (Exception errorinformation) { //Write the information to the console Console.WriteLine("Chat error {0}", errorinformation); //Write the information to the log system Systems.Debugger.Write(errorinformation); } }
public void IngameLogin() { //Wrap our function inside a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read character name from packet string CharacterName = Reader.Text(); //Close reader Reader.Close(); //Anti hack checking sql query Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + CharacterName + "'"); //Check if the player account and character belongs together (count row). int checkinfo = ms.Count(); //If there's no result if (checkinfo == 0) { //Optional ban user here for hacking. //Disconnect the user if hack attempt client.Disconnect(this.client.clientSocket); return; } //If there's a result we continue loading else { //Create new character definition details Character = new character(); //Set character name Character.Information.Name = CharacterName; //Set player id Character.Account.ID = Player.ID; //Load player data PlayerDataLoad(); //Load job data LoadJobData(); //Check same character checkSameChar(CharacterName, Character.Information.UniqueID); //Check character stats CheckCharStats(Character); //Lock while we add new client lock (Systems.clients) { //Add new client Systems.clients.Add(this); } //Send login screen packet client.Send(Packet.LoginScreen()); //Send player data load start packet client.Send(Packet.StartPlayerLoad()); //Send player data load data client.Send(Packet.Load(Character)); //Send end load for player data client.Send(Packet.EndPlayerLoad()); //Update online status in database MsSQL.UpdateData("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'"); //Set PVP State MsSQL.UpdateData("UPDATE character SET Pvpstate='0' WHERE id='" + Character.Information.CharacterID + "'"); //Update server information (Players online). UpdateServerInfo(); //Open our timers for spawn checks etc. OpenTimer(); //Load blue data for character LoadBlues(Character); //Create new list for equiped items List<Global.slotItem> EquipedItems = new List<Global.slotItem>(); //For each equiped item under slot 13 for (byte q = 0; q < 13; q++) { //Add items to the list EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0)); } //Load blues for each item foreach (Global.slotItem sitem in EquipedItems) { //Check if the dictionary contains our blue id on item if (Data.ItemBlue.ContainsKey(sitem.dbID)) { //If exists, load blue for the item LoadBluesid(sitem.dbID); //If blue amount is not 0 if (Data.ItemBlue[sitem.dbID].totalblue != 0) //Add blue to stats and information AddRemoveBlues(this, sitem, true); } } //Default luck (Will be based on tickets increasment etc. this.Character.Blues.Luck = 100; } } //Catch bad exception errors catch (Exception ex) { //Write to debug log Systems.Debugger.Write(ex); } }
//Void creation for characters void CharacterCreate() { //Start wrapper for catching errors try { //Check the amount of characters created (If 4 then we return). if (MsSQL.GetRowsCount("SELECT * FROM character WHERE account='" + Player.AccountName + "'") == 4) return; //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Need to be checked byte tocheck = Reader.Byte(); //String character name string NewCharacterName = Reader.Text(); //Integer for character model int NewCharacterModel = Reader.Int32(); //Byte for character volume byte NewCharacterVolume = Reader.Byte(); //Set new integer for item creation [4] total int[] Item = new int[4]; //Item id one integer Item[0] = Reader.Int32(); //Item id two integer Item[1] = Reader.Int32(); //Item id three integer Item[2] = Reader.Int32(); //Item id four integer Item[3] = Reader.Int32(); //Close packet reader Reader.Close(); //Set default character stats double MagicalDefense = 3; double PhysicalDefense = 6; double ParryRatio = 11; double HitRatio = 11; double MinimalPhysicalAttack = 6; double MaxPhysicalAttack = 9; double MinimalMagicalAttack = 6; double MaxMagicalAttack = 10; //Set mag defense MagicalDefense += Data.ItemBase[Item[0]].Defans.MinMagDef; MagicalDefense += Data.ItemBase[Item[1]].Defans.MinMagDef; MagicalDefense += Data.ItemBase[Item[2]].Defans.MinMagDef; //Set phy defence PhysicalDefense += Data.ItemBase[Item[0]].Defans.MinPhyDef; PhysicalDefense += Data.ItemBase[Item[1]].Defans.MinPhyDef; PhysicalDefense += Data.ItemBase[Item[2]].Defans.MinPhyDef; //Set parry information ParryRatio += Data.ItemBase[Item[0]].Defans.Parry; ParryRatio += Data.ItemBase[Item[1]].Defans.Parry; ParryRatio += Data.ItemBase[Item[2]].Defans.Parry; //Set hit ratio HitRatio += Data.ItemBase[Item[3]].Attack.MinAttackRating; //Set phy attack MinimalPhysicalAttack += Data.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhysicalAttack += Data.ItemBase[Item[3]].Attack.Min_HPhyAttack; //Set mag attack MinimalMagicalAttack += Data.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagicalAttack += Data.ItemBase[Item[3]].Attack.Min_HMagAttack; //Set bool for european or chinese characters if (NewCharacterModel >= 14715 && NewCharacterModel <= 14745) European = true; //Replace any bad character from the name like [ , ] etc. NewCharacterName = Removebadchars(NewCharacterName); //Check the character name before creation if (CharacterCheck(NewCharacterName)) { //If bad send informational packet client.Send(Packet.CharacterName(4)); //Finally return. return; } //Random x y z output int random = rnd.Next(1, 3); //If player is creating a european character if (European) { //Set random start location for european if (random == 1) { randomx = 1030; randomz = 80; randomy = 512; } if (random == 2) { randomx = 889; randomz = 83; randomy = 1104; } if (random == 3) { randomx = 453; randomz = 80; randomy = 1249; } //Insert the basic information into the database MsSQL.InsertData("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, GuideData) VALUES ('" + Player.AccountName + "','" + NewCharacterName + "', '" + NewCharacterModel + "', '" + NewCharacterVolume + "','79','105','" + randomx + "','" + randomz + "','" + randomy + "','0000000000000000')"); //Insert reverse scroll data into the database MsSQL.InsertData("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + NewCharacterName + "','79','105','"+randomx+"','"+randomy+"','"+randomz+"')"); //Set definition for the character id information Player.CreatingCharID = MsSQL.GetDataInt("Select * from character Where name='" + NewCharacterName + "'", "id"); //If the 3rd item is a sword or a dark staff if (Item[3] == 10730 || Item[3] == 10734) { //Add the mag def information MagicalDefense += Data.ItemBase[251].Defans.MinMagDef; //Add the phy def information PhysicalDefense += Data.ItemBase[251].Defans.MinPhyDef; //Add parry ration ParryRatio += Data.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); } //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 } //If the character model is an chinese character else { //Set random start location for chinese if (random == 1) { randomx = 1030; randomz = 80; randomy = 512; randomysec = 97; } if (random == 2) { randomx = 959; randomz = 20; randomy = 421; randomysec = 98; } if (random == 3) { randomx = 964; randomz = 0; randomy = 235; randomysec = 97; } //Add character default information into the database MsSQL.InsertData("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, GuideData) VALUES ('" + Player.AccountName + "','" + NewCharacterName + "', '" + NewCharacterModel + "', '" + NewCharacterVolume + "','168','" + randomysec + "','"+ randomx +"','"+ randomz +"','"+ randomy +"','0000000000000000')"); //Add character reverse scroll information into the database MsSQL.InsertData("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + NewCharacterName + "','168','"+randomysec+"','"+randomx+"','"+randomy+"','"+randomz+"')"); //Get new character id Player.CreatingCharID = MsSQL.GetDataInt("Select * from character Where name='" + NewCharacterName + "'", "id"); //If the item chosen is a blade or sword if (Item[3] == 3632 || Item[3] == 3633) { //Set magical defense for shield MagicalDefense += Data.ItemBase[251].Defans.MinMagDef; //Set physical defense for shield PhysicalDefense += Data.ItemBase[251].Defans.MinPhyDef; //Set parry ratio for shield ParryRatio += Data.ItemBase[251].Defans.Parry; //Add the shield to the character AddItem(251, 0, 7, Player.CreatingCharID, 0); } //If the item is a bow if (Item[3] == 3636) { //Add 250 arrows to the new character AddItem(62, 250, 7, Player.CreatingCharID, 0); } 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 } //Add job mastery same for both races AddMastery(1000, Player.CreatingCharID); //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); //Open settings information for start items ini = new Framework.Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini"); try { //European start items custom 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(); //Chinese start items cusom string Item6 = ini.GetValue("Chinese.Start", "Item1", "").ToString(); string Item7 = ini.GetValue("Chinese.Start", "Item2", "").ToString(); string Item8 = ini.GetValue("Chinese.Start", "Item3", "").ToString(); string Item9 = ini.GetValue("Chinese.Start", "Item4", "").ToString(); string Item10 = ini.GetValue("Chinese.Start", "Item5", "").ToString(); //The amount related information for european items custom 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(); //The amount related information for chinese items custom string Amount6 = ini.GetValue("Chinese.Start", "Amount1", "").ToString(); string Amount7 = ini.GetValue("Chinese.Start", "Amount2", "").ToString(); string Amount8 = ini.GetValue("Chinese.Start", "Amount3", "").ToString(); string Amount9 = ini.GetValue("Chinese.Start", "Amount4", "").ToString(); string Amount10 = ini.GetValue("Chinese.Start", "Amount5", "").ToString(); //Add the custom items (European) 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); //Add the custom items (Chinese) AddItem(Convert.ToInt32(Item6), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item7), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item8), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item9), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item10), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0); } catch (Exception) { } //Update database information for stats MsSQL.UpdateData("update character set min_phyatk='" + (int)Math.Round(MinimalPhysicalAttack) + "', max_phyatk='" + Math.Round(MaxPhysicalAttack) + "', min_magatk='" + Math.Round(MinimalMagicalAttack) + "', max_magatk='" + Math.Round(MaxMagicalAttack) + "', phydef='" + Math.Round(PhysicalDefense) + "', magdef='" + Math.Round(PhysicalDefense) + "', parry='" + Math.Round(ParryRatio) + "', hit='" + Math.Round(HitRatio) + "' where name='" + NewCharacterName + "'"); //Send information to the console Console.WriteLine("Character: " + NewCharacterName + " has been created"); //Send packet success to the client client.Send(Packet.ScreenSuccess(1)); } //If a error happens just catch it. catch (Exception ex) { Console.WriteLine(ex); } }
void CharacterCreate() { try { //Define amount of characters allowed! if (MsSQL.GetRowsCount("SELECT * FROM character WHERE account='" + Player.AccountName + "'") == 4) return; PacketReader Reader = new PacketReader(PacketInformation.buffer); 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(); #region Check Name if (CharacterCheck(name)) { client.Send(Packet.CharacterName(4)); return; } if (name.Contains("[")) return; if (name.Contains("GM")) return; if (name.Contains("]")) return; if (name.Contains("_")) return; if (name.Contains("-")) return; #endregion //#################################################################### European models begin if (model >= 14715 && model <= 14745) { MsSQL.InsertData("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, savearea,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','79','105','1000','1000','83','20','0000000000000000')"); MsSQL.InsertData("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','79','105','1000','22','83')"); Player.CreatingCharID = MsSQL.GetDataInt("Select * from character Where name='" + name + "'", "id"); double MagDef = 3; double PhyDef = 6; double Parry = 11; double Hit = 11; double MinPhyA = 6; double MaxPhyA = 9; double MinMagA = 6; double MaxMagA = 10; Framework.Ini ini; ini = new Framework.Ini(Environment.CurrentDirectory + @"\Settings\Settings_Custom.ini"); string Item1 = ini.GetValue("START ITEMS EUROPE", "Item001").ToString(); string Item2 = ini.GetValue("START ITEMS EUROPE", "Item002").ToString(); string Item3 = ini.GetValue("START ITEMS EUROPE", "Item003").ToString(); string Item4 = ini.GetValue("START ITEMS EUROPE", "Item004").ToString(); string Item5 = ini.GetValue("START ITEMS EUROPE", "Item005").ToString(); string Amount1 = ini.GetValue("START ITEMS EUROPE", "Amount001").ToString(); string Amount2 = ini.GetValue("START ITEMS EUROPE", "Amount002").ToString(); string Amount3 = ini.GetValue("START ITEMS EUROPE", "Amount003").ToString(); string Amount4 = ini.GetValue("START ITEMS EUROPE", "Amount004").ToString(); string Amount5 = ini.GetValue("START ITEMS EUROPE", "Amount005").ToString(); try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, 1, Player.CreatingCharID, 0); } catch (Exception) { } AddItem(Item[0], 0, 1, 0, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, 0, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, 0, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, 0, Player.CreatingCharID, 0); MagDef += Data.ItemBase[Item[0]].Defans.MinMagDef; MagDef += Data.ItemBase[Item[1]].Defans.MinMagDef; MagDef += Data.ItemBase[Item[2]].Defans.MinMagDef; PhyDef += Data.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += Data.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += Data.ItemBase[Item[2]].Defans.MinPhyDef; Parry += Data.ItemBase[Item[0]].Defans.Parry; Parry += Data.ItemBase[Item[1]].Defans.Parry; Parry += Data.ItemBase[Item[2]].Defans.Parry; Hit += Data.ItemBase[Item[3]].Attack.MinAttackRating; MinPhyA += Data.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += Data.ItemBase[Item[3]].Attack.Min_HPhyAttack; MinMagA += Data.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += Data.ItemBase[Item[3]].Attack.Min_HMagAttack; if (Item[3] == 10730 || Item[3] == 10734) { MagDef += Data.ItemBase[251].Defans.MinMagDef; PhyDef += Data.ItemBase[251].Defans.MinPhyDef; Parry += Data.ItemBase[251].Defans.Parry; AddItem(10738, 0, 7, 0, Player.CreatingCharID, 0); } if (Item[3] == 10733) { AddItem(10376, 250, 7, 1, Player.CreatingCharID, 0); } MsSQL.UpdateData("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(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 Console.WriteLine("@Gameserver: Character: " + name + " Has been created"); client.Send(Packet.ScreenSuccess(1)); } else { #region Check Name if (CharacterCheck(name)) { client.Send(Packet.CharacterName(4)); return; } #endregion //#################################################################### Chinese models begin MsSQL.InsertData("INSERT INTO character (account, name, chartype, volume,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','0000000000000000')"); MsSQL.InsertData("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','168','79','911','1083','-32')"); Player.CreatingCharID = MsSQL.GetDataInt("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; Framework.Ini ini; ini = new Framework.Ini(Environment.CurrentDirectory + @"\Settings\Settings_Custom.ini"); string Item1 = ini.GetValue("START ITEMS CHINESE", "Item001").ToString(); string Item2 = ini.GetValue("START ITEMS CHINESE", "Item002").ToString(); string Item3 = ini.GetValue("START ITEMS CHINESE", "Item003").ToString(); string Item4 = ini.GetValue("START ITEMS CHINESE", "Item004").ToString(); string Item5 = ini.GetValue("START ITEMS CHINESE", "Item005").ToString(); string Amount1 = ini.GetValue("START ITEMS CHINESE", "Amount001").ToString(); string Amount2 = ini.GetValue("START ITEMS CHINESE", "Amount002").ToString(); string Amount3 = ini.GetValue("START ITEMS CHINESE", "Amount003").ToString(); string Amount4 = ini.GetValue("START ITEMS CHINESE", "Amount004").ToString(); string Amount5 = ini.GetValue("START ITEMS CHINESE", "Amount005").ToString(); try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, 1, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, 1, Player.CreatingCharID, 0); } catch (Exception) { } AddItem(Item[0], 0, 1, 0, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, 0, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, 0, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, 0, Player.CreatingCharID, 0); MagDef += Data.ItemBase[Item[0]].Defans.MinMagDef; MagDef += Data.ItemBase[Item[1]].Defans.MinMagDef; MagDef += Data.ItemBase[Item[2]].Defans.MinMagDef; PhyDef += Data.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += Data.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += Data.ItemBase[Item[2]].Defans.MinPhyDef; Parry += Data.ItemBase[Item[0]].Defans.Parry; Parry += Data.ItemBase[Item[1]].Defans.Parry; Parry += Data.ItemBase[Item[2]].Defans.Parry; Hit += Data.ItemBase[Item[3]].Attack.MinAttackRating; MinPhyA += Data.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += Data.ItemBase[Item[3]].Attack.Min_HPhyAttack; MinMagA += Data.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += Data.ItemBase[Item[3]].Attack.Min_HMagAttack; if (Item[3] == 3632 || Item[3] == 3633) { MagDef += Data.ItemBase[251].Defans.MinMagDef; PhyDef += Data.ItemBase[251].Defans.MinPhyDef; Parry += Data.ItemBase[251].Defans.Parry; AddItem(251, 0, 7, 0, Player.CreatingCharID, 0); } if (Item[3] == 3636) { AddItem(62, 250, 7, 1, Player.CreatingCharID, 0); } #endregion MsSQL.UpdateData("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 Console.WriteLine("@Gameserver: Character: " + name + " Has been created"); client.Send(Packet.ScreenSuccess(1)); } } catch (Exception ex) { Console.WriteLine("CharacterCreate()"); deBug.Write(ex); Console.WriteLine(ex); } }
public void LoginScreen() { try { PacketReader Reader = new PacketReader(PacketInformation.buffer); string name = Reader.Text(); Reader.Close(); #region Check name before entering (exploit) Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + name + "'"); int checkinfo = ms.Count(); if (checkinfo == 0) { return; } #endregion else { Character = new character(); Character.Information.Name = name; Character.Account.ID = Player.ID; PlayerDataLoad(); LoadJobData(); checkSameChar(name, Character.Information.UniqueID); CheckCharStats(Character); clients.Add(this); client.Send(Packet.LoginScreen()); client.Send(Packet.StartPlayerLoad()); client.Send(Packet.Load(Character)); client.Send(Packet.EndPlayerLoad()); client.Send(Packet.PlayerUnknowPack(Character.Information.UniqueID)); client.Send(Packet.UnknownPacket()); OpenTimer(); } } catch (Exception ex) { Console.WriteLine("Error login by: {0}",Character.Information.Name); deBug.Write(ex); Console.WriteLine(ex); } }
void CharacterRestore() { try { PacketReader Reader = new PacketReader(PacketInformation.buffer); Reader.Byte(); string name = Reader.Text(); Reader.Close(); MsSQL.InsertData("UPDATE character SET deletedtime=0 WHERE name='" + name + "'"); client.Send(Packet.ScreenSuccess(5)); } catch (Exception ex) { Console.WriteLine("CharacterRestore()"); deBug.Write(ex); Console.WriteLine(ex); //Write source of the error } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Gm Command Base /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void GM() { if (Character.Information.GM == 1) { PacketReader Reader = new PacketReader(PacketInformation.buffer); short gType = Reader.Int16(); //Console.WriteLine("GM Command {0} used by:{1} ",gType, Character.Information.Name); switch (gType) { case 0: // Command /playercount break; case 1: // Command /finduser break; case 2: // Command / MsgClear break; case 3: GM_TOTOWN(Reader.Text()); break; case 4: // Command /Getpos break; case 5: // Command /stat break; case 6: GM_LOADMONSTER(Reader.Int32(), Reader.Byte(), Reader.Byte()); break; case 7: GM_MAKEITEM(Reader.Int32(), Reader.Byte()); break; case 8: GM_GOUSER(Reader.Text()); break; case 12: // Command /zoe GM_ZOE(Reader.Int32(), Reader.Byte()); break; case 13: GM_BAN(Reader.Text()); break; case 14: GM_INVISIBLE(); break; case 15: GM_INVINCIBLE(); break; case 16: if (PacketInformation.buffer.Length > 4) GM_WP(Reader.Byte(), Reader.Byte(), Reader.Single(), Reader.Single(), Reader.Single()); break; case 17: GM_RECALLUSER(Reader.Text()); break; case 19: // Command /instance case 20: GM_MOBKILL(Reader.Int32(), Reader.UInt16()); break; case 23: GM_BLOCKLOGOUT(Reader.Text(), Reader.Byte()); break; case 26: GM_LIENAME(Reader.Text()); break; case 27: //initq GM_SKILL(); break; case 42: GM_SPAWN_UNIQUE(); break; case 49: GM_CLEARINVEN(); break; case 50: // Command /barena break; case 25: // Command /fakename // Used for transforming now GM_TRANSFORM(Reader.Text()); break; case 99: // Command /power %d case 100: // Command /timeoff break; case 101: // Command /timeon break; case 102: // Command /time %d break; case 103: // Command /day break; case 104: // Command /night break; case 105: // Command /rain %d int type = 2; GM_WEATHER(Reader.Int32(),type); break; case 106: // Command /snow %d type = 3; GM_WEATHER(Reader.Int32(),type); break; case 107: // Command /clear type = 1; GM_WEATHER(Reader.Int32(),type); break; case 108: // Command /+ break; case 109: // Command /- break; case 110: // Command /zoom break; case 111: // Command /fast break; case 112: // Command /showme break; case 113: // Command /hideme break; case 114: // Command /camera break; case 115: // Command /uioff break; case 116: // Command /uion break; case 117: // Command /frame break; case 118: // Command /colon break; case 119: // Command /coloff break; case 130: // Command /cwclear break; case 131: // Command /cwpop break; case 132: // Command /cwgo break; case 133: // Command /cwstop break; case 134: // Command /cwsave break; case 135: // Command /ms break; case 136: // Command /cs %d break; case 137: // Command /id break; case 150: // Command /wire break; case 151: // Command /ground break; case 152: // Command /sky break; case 153: // Command /mobj break; case 154: // Command /char break; case 155: // Command /lod break; case 400: // Command /Item %d break; case 500: // Command /setfov %d break; case 600: // Command /setspeed %d break; case 601: // Command /equip %d break; case 602: // Command /makeobj %d break; case 603: // Command /snd %s break; default: Console.WriteLine("Non Coded Gm Command: " + gType); Print.Format(Decode.StringToPack(PacketInformation.buffer)); break; } Reader.Close(); } else { lock (Systems.clients) { foreach (Systems sys in Systems.clients) { try { if (sys.Character.Information.Name == Character.Information.Name) { sys.client.Send(Packet.ChatPacket(7, Character.Information.UniqueID, "from GM:You are banned.", null)); sys.Disconnect("ban"); Console.WriteLine("Autobanned user: "******" Due to hacking"); return; } } catch (Exception ex) { Console.WriteLine("Commands error: " + ex); } } } } }