public static byte[] PrivateMessageCheck(WorldMgr.character c) { DB ms = new DB("SELECT * FROM message WHERE receiver='" + c.Information.Name + "'"); PacketWriter Writer = new PacketWriter(); int count = ms.Count(); Writer.Create(OperationCode.SERVER_PM_MESSAGE); Writer.Byte(1); //Static Writer.Byte(Convert.ToByte(count)); //Total count using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { string pmfrom = reader.GetString(1); string pmto = reader.GetString(2); string pmmessage = reader.GetString(3); byte pmstatus = reader.GetByte(4); DateTime pmdate = Convert.ToDateTime(reader.GetDateTime(5)); Writer.Text(pmfrom); // Message From Writer.DWord(0x8A070000); // date Writer.DWord(0xC7058401); // date Writer.Byte(pmstatus); // Status (0 = Unread) (1 = Read) } ms.Close(); } return(Writer.GetBytes()); }
public static byte[] GuildStorageGold(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_GUILD_STORAGE_GOLD); Writer.LWord(c.Network.Guild.StorageGold); return(Writer.GetBytes()); }
public static byte[] JoinFormedRequest(WorldMgr.character requesting, WorldMgr.character owner) { //Create new packet writer PacketWriter Writer = new PacketWriter(); //Add opcode for packet Writer.Create(OperationCode.SERVER_PARTY_JOIN_FORMED); //Character model information (Req). Writer.DWord(requesting.Information.Model); //Leader id Writer.DWord(requesting.Information.UniqueID); //Party id Writer.DWord(owner.Network.Party.ptid); //Static Writer.DWord(0); Writer.DWord(0); Writer.Byte(0); Writer.Byte(0xFF); //Write character unique id Writer.DWord(requesting.Information.UniqueID); //Write character name Writer.Text(requesting.Information.Name); //Write model information Writer.DWord(requesting.Information.Model); //Write level information Writer.Byte(requesting.Information.Level); //Static Writer.Byte(0xAA); //X and Y Sector Writer.Byte(requesting.Position.xSec); Writer.Byte(requesting.Position.ySec); //Static Writer.Word(0); Writer.Word(0); Writer.Word(0); Writer.Word(1); Writer.Word(1); //If character is in a guild if (requesting.Network.Guild != null) { //Write guild name Writer.Text(requesting.Network.Guild.Name); } //If character is not in a guild else { //Write word value 0 Writer.Word(0); } //Static Writer.Byte(0); Writer.DWord(0); Writer.DWord(0); //Return all bytes to send return(Writer.GetBytes()); }
public static byte[] FriendInviteTarget(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_FRIEND_INVITE_SEND); Writer.DWord(c.Information.CharacterID); Writer.DWord(c.Information.UniqueID); Writer.Text(c.Information.Name); return(Writer.GetBytes()); }
public static byte[] HonorRank(WorldMgr.character c) { DB ms = new DB("SELECT * FROM rank_honor"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); Writer.Create(OperationCode.SERVER_HONOR_RANK); Writer.Byte(1); int i = 0; Writer.Byte(Convert.ToByte(countinfo)); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { byte rankicon = reader.GetByte(1); string rankname = reader.GetString(2); byte ranklevel = reader.GetByte(3); byte ranklevelc = reader.GetByte(4); int graduatesc = reader.GetInt32(5); int rankposc = reader.GetInt32(6); Writer.DWord(i + 1); Writer.Byte(rankicon); Writer.Text(rankname); Writer.Byte(ranklevel); Writer.Byte(ranklevelc); Writer.DWord(graduatesc); //If player has no guild, we write a 0 word value if (c.Network.Guild.Name == null) { Writer.Word(0); } //If player has a guild we write the guild name. else { Writer.Text(c.Network.Guild.Name); } i++; } ms.Close(); } return(Writer.GetBytes()); }
public static byte[] PlayerStat(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_PLAYERSTAT); Writer.DWord((int)c.Stat.MinPhyAttack); Writer.DWord((int)c.Stat.MaxPhyAttack); Writer.DWord((int)c.Stat.MinMagAttack); Writer.DWord((int)c.Stat.MaxMagAttack); Writer.Word((ushort)c.Stat.PhyDef); Writer.Word((ushort)c.Stat.MagDef); Writer.Word((ushort)c.Stat.Hit); Writer.Word((ushort)c.Stat.Parry); Writer.DWord((int)c.Stat.Hp); Writer.DWord((int)c.Stat.Mp); Writer.Word((ushort)c.Stat.Strength); Writer.Word((ushort)c.Stat.Intelligence); return(Writer.GetBytes()); }
public static byte[] SpawnPortal(WorldMgr.Monsters o, WorldMgr.character c, int itemid) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); Writer.DWord(o.ID); Writer.DWord(o.UniqueID); Writer.Byte(o.xSec); Writer.Byte(o.ySec); Writer.Float(Formule.packetx((float)o.x, o.xSec)); Writer.Float(o.z); Writer.Float(Formule.packety((float)o.y, o.ySec)); Writer.Word(0); Writer.Byte(1); Writer.Byte(0); Writer.Byte(1); Writer.Byte(6); Writer.Text(c.Information.Name); Writer.DWord(itemid); Writer.Byte(1); return(Writer.GetBytes()); }
public static byte[] GuildStorageData(WorldMgr.character c) { DB getstorage = new DB("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'"); int itemcount = getstorage.Count(); PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_GUILD_STORAGE3); Writer.Byte(c.Network.Guild.StorageSlots); Writer.Byte(itemcount); if (itemcount != 0) { using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read()) { while (reader.Read()) { Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } } } getstorage.Close(); return(Writer.GetBytes()); }
public static byte[] FriendData(int target, byte type, string name, WorldMgr.character c, bool state) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_FRIEND_DATA); switch (type) { case 2: //Friend invite accepted Writer.Byte(2); Writer.DWord(target); //Id Writer.Text(c.Information.Name); //Name Writer.DWord(c.Information.Model); //Model break; case 3: //Remove friend from own list Writer.Byte(3); Writer.DWord(target); break; case 4: //Fried online / offline update Writer.Byte(4); Writer.DWord(target); Writer.Byte(state); break; case 5: //Send private message.. Writer.Byte(8); Writer.Text(name); Writer.DWord(0); Writer.DWord(0); //time info break; } return(Writer.GetBytes()); }
public static byte[] SendGuildInfo2(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_GUILD_ONLINE); Writer.DWord(c.Information.UniqueID); // Guildmaster ID Writer.DWord(c.Network.Guild.Guildid); // Guild ID Writer.Text(c.Network.Guild.Name); if (c.Network.Guild.GrantName != "") { Writer.Text(c.Network.Guild.GrantName); // Guildmaster grand name len } else { Writer.Word(0); } Writer.DWord(0); // ? Writer.DWord(0); // ? Writer.DWord(0); // ? Amount of guilds in union ? Writer.Byte(1); // ? Writer.Byte(1); return(Writer.GetBytes()); }
public static byte[] ObjectSpawn(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); /////////////////////////////////////////////////////// Character basic info #region Basic info Writer.DWord(c.Information.Model); Writer.Byte(c.Information.Volume); //Char Volume Writer.Byte(c.Information.Title); //Char Title Writer.Byte(c.Information.Pvpstate); //Pvp state if (c.Information.Pvpstate != 0) { c.Information.PvP = true; } Writer.Bool((c.Information.Level < 20 ? true : false)); //Beginners Icon Writer.Byte(c.Information.Slots); // Amount of items #endregion /////////////////////////////////////////////////////// Item info #region Item info Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 8, 0, true); Writer.Byte(5); Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 5, 1, true); Writer.Byte(0); #endregion /////////////////////////////////////////////////////// Character Location / id #region Location info / state Writer.DWord(c.Information.UniqueID); Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec)); Writer.Float(c.Position.z); Writer.Float(Formule.packety(c.Position.y, c.Position.ySec)); Writer.Word(0); //angle Writer.Bool(c.Position.Walking); Writer.Byte(1); // walk:0 run:1 ;) //This should send the location information while moving. and where we moving if (c.Position.Walking) { Writer.Byte(c.Position.packetxSec); Writer.Byte(c.Position.packetySec); if (!FileDB.CheckCave(c.Position.packetxSec, c.Position.packetySec)) { Writer.Word(c.Position.packetX); Writer.Word(c.Position.packetZ); Writer.Word(c.Position.packetY); } else { if (c.Position.packetX < 0) { Writer.Word(c.Position.packetX); Writer.Word(0xFFFF); } else { Writer.DWord(c.Position.packetX); } Writer.DWord(c.Position.packetZ); if (c.Position.packetY < 0) { Writer.Word(c.Position.packetY); Writer.Word(0xFFFF); } else { Writer.DWord(c.Position.packetY); } } /*byte[] x = BitConverter.GetBytes(c.Position.packetX); * Array.Reverse(x); * Writer.Buffer(x); * * Writer.Word(c.Position.packetZ); * * byte[] y = BitConverter.GetBytes(c.Position.packetY); * Array.Reverse(y); * Writer.Buffer(y);*/ } else { Writer.Byte(1); Writer.Word(0); //angle } Writer.Byte((byte)(c.State.LastState == 128 ? 2 : 1)); Writer.Byte(0); //Info : If a player spawns at your location and is walking it send byte 3, else 0 byte. if (c.Transport.Right) { Writer.Byte(c.Transport.Horse.Walking == true ? 3 : 0); } else { Writer.Byte(c.Position.Walking == true ? 3 : 0); } Writer.Byte((byte)(c.Information.Berserking ? 1 : 0)); Writer.Byte(0); Writer.Float(c.Speed.WalkSpeed); Writer.Float(c.Speed.RunSpeed); Writer.Float(c.Speed.BerserkSpeed); Writer.Byte(c.Action.Buff.count); for (byte b = 0; b < c.Action.Buff.SkillID.Length; b++) { if (c.Action.Buff.SkillID[b] != 0) { Writer.DWord(c.Action.Buff.SkillID[b]); Writer.DWord(c.Action.Buff.OverID[b]); } } #endregion /////////////////////////////////////////////////////// Character Job information / name #region Job information & name Writer.Text(c.Information.Name); Writer.Byte(0); if (c.Transport.Right) { Writer.Byte(1); Writer.Byte(0); Writer.DWord(c.Transport.Horse.UniqueID); } else { Writer.Byte(0); Writer.Byte(0); } Writer.Byte(0); if (c.Network.Stall != null && c.Network.Stall.ownerID == c.Information.UniqueID) { Writer.Byte(0x04); } else { Writer.Byte(0); } //Writer.Byte(0); if (c.Network.Guild.Guildid > 0) { Writer.Text(c.Network.Guild.Name); if (c.Network.Guild.GrantName != "") { Writer.DWord(0); //Icon ? Writer.Text(c.Network.Guild.GrantName); } else { Writer.DWord(0); //Icon Writer.Word(0); //No grantname } } else { Writer.Word(0); //No guild Writer.DWord(0); //No icon Writer.Word(0); //No grantname } Writer.DWord(0); // emblem (guild) Writer.DWord(0); // unique id (union) Writer.DWord(0); //emblem (union) Writer.Byte(0); // flag (guild_war) Writer.Byte(0); // flag (fortress_rank) if (c.Network.Stall != null && c.Network.Stall.ownerID == c.Information.UniqueID) { Writer.Text3(c.Network.Stall.StallName); Writer.DWord(c.Information.StallModel); } Writer.Byte(0); #endregion /////////////////////////////////////////////////////// Pvp state #region pvpstate if (c.Information.Pvpstate > 0 || c.Information.Murderer) { Writer.Byte(0x22); } else { Writer.Byte(0xFF); } #endregion Writer.Byte(4); return(Writer.GetBytes()); }
public static byte[] ObjectSpawnJob(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); /////////////////////////////////////////////////////// Character basic info #region Basic info Writer.DWord(c.Information.Model); Writer.Byte(c.Information.Volume); //Char Volume Writer.Byte(c.Information.Title); //Char Title Writer.Byte(c.Information.Pvpstate); //Pvp state if (c.Information.Pvpstate != 0) { c.Information.PvP = true; } Writer.Bool((c.Information.Level < 20 ? true : false)); //Beginners Icon Writer.Byte(c.Information.Slots); // Amount of items #endregion /////////////////////////////////////////////////////// Item info #region Item info Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 8, 0, true); Writer.Byte(5); Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 5, 1, true); Writer.Byte(0); #endregion /////////////////////////////////////////////////////// Character Location / id #region Location info / state Writer.DWord(c.Information.UniqueID); Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec)); Writer.Float(c.Position.z); Writer.Float(Formule.packety(c.Position.y, c.Position.ySec)); Writer.Word(0); //angle Writer.Bool(c.Position.Walking); Writer.Byte(1); // walk:0 run:1 ;) if (c.Position.Walking) { Writer.Byte(c.Position.packetxSec); Writer.Byte(c.Position.packetySec); if (!FileDB.CheckCave(c.Position.packetxSec, c.Position.packetySec)) { Writer.Word(c.Position.packetX); Writer.Word(c.Position.packetZ); Writer.Word(c.Position.packetY); } else { if (c.Position.packetX < 0) { Writer.Word(c.Position.packetX); Writer.Word(0xFFFF); } else { Writer.DWord(c.Position.packetX); } Writer.DWord(c.Position.packetZ); if (c.Position.packetY < 0) { Writer.Word(c.Position.packetY); Writer.Word(0xFFFF); } else { Writer.DWord(c.Position.packetY); } } } else { Writer.Byte(1); Writer.Word(0); //angle } Writer.Byte((byte)(c.State.LastState == 128 ? 2 : 1)); Writer.Byte(0); Writer.Byte(3); Writer.Byte((byte)(c.Information.Berserking ? 1 : 0)); Writer.Float(c.Speed.WalkSpeed); Writer.Float(c.Speed.RunSpeed); Writer.Float(c.Speed.BerserkSpeed); Writer.Byte(c.Action.Buff.count); for (byte b = 0; b < c.Action.Buff.SkillID.Length; b++) { if (c.Action.Buff.SkillID[b] != 0) { Writer.DWord(c.Action.Buff.SkillID[b]); Writer.DWord(c.Action.Buff.OverID[b]); } } #endregion /////////////////////////////////////////////////////// Character Job information / name #region Job information & name Writer.Text(c.Job.Jobname); Writer.Byte(1); Writer.Byte(c.Job.level); //Level job Writer.Byte(c.Information.Level); //Level char Writer.Byte(0); if (c.Transport.Right) { Writer.Byte(1); Writer.Byte(0); Writer.DWord(c.Transport.Horse.UniqueID); } else { Writer.Byte(0); Writer.Byte(0); } Writer.Byte(0); Writer.Byte(0); if (c.Network.Guild.Guildid > 0) { Writer.Text(c.Network.Guild.Name); } else { Writer.Word(0); //No guild } Writer.Byte(0); Writer.Byte(0xFF); Writer.Byte(4); #endregion return(Writer.GetBytes()); }
public static WorldMgr.character._usingSkill Info(int SkillID, WorldMgr.character Character) { //Create new global information WorldMgr.character._usingSkill info = new WorldMgr.character._usingSkill(); //Wrap our function inside a catcher try { //Set default skill information info.MainSkill = SkillID; info.SkillID = new int[10]; info.FoundID = new int[10]; info.TargetType = new bool[10]; info.NumberOfAttack = NumberAttack(SkillID, ref info.SkillID); info.Targethits = 1; info.Distance = Convert.ToByte(ObjData.Manager.SkillBase[SkillID].Distance); info.Tdistance = 0; info.canUse = true; //Switch on skills series switch (ObjData.Manager.SkillBase[SkillID].Series) { case "SKILL_EU_ROG_TRANSFORMA_MASK_A": break; #region Bicheon #region Smashing Series case "SKILL_CH_SWORD_SMASH_A": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_SMASH_B": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_SMASH_C": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_SMASH_D": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_SMASH_E": info.Instant = 0; info.P_M = false; break; #endregion #region Chain Sword Attack Series case "SKILL_CH_SWORD_CHAIN_A": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_B": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_C": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_D": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_E": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_F": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SWORD_CHAIN_G": info.Instant = 0; info.P_M = false; break; #endregion #region Blade Force Series case "SKILL_CH_SWORD_GEOMGI_A": info.Instant = 0; info.Distance = 4; info.P_M = false; break; case "SKILL_CH_SWORD_GEOMGI_B": info.Instant = 0; info.Distance = 4; info.P_M = false; break; case "SKILL_CH_SWORD_GEOMGI_C": info.Instant = 0; info.Distance = 4; info.P_M = false; break; case "SKILL_CH_SWORD_GEOMGI_D": info.Instant = 0; info.Distance = 4; info.P_M = false; break; case "SKILL_CH_SWORD_GEOMGI_E": info.Instant = 0; info.Distance = 4; info.P_M = false; break; #endregion #region Hidden Blade Series case "SKILL_CH_SWORD_KNOCKDOWN_A": info.Instant = 0; info.P_M = false; info.OzelEffect = 4; break; case "SKILL_CH_SWORD_KNOCKDOWN_B": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 2; info.OzelEffect = 4; break; case "SKILL_CH_SWORD_KNOCKDOWN_C": info.Instant = 0; info.P_M = false; info.OzelEffect = 4; break; case "SKILL_CH_SWORD_KNOCKDOWN_D": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 3; info.OzelEffect = 4; break; #endregion #region Killing Heaven Blade Series case "SKILL_CH_SWORD_DOWNATTACK_A": info.Instant = 0; info.P_M = false; info.OzelEffect = 5; break; case "SKILL_CH_SWORD_DOWNATTACK_B": info.Instant = 0; info.P_M = false; info.OzelEffect = 5; break; case "SKILL_CH_SWORD_DOWNATTACK_C": info.Instant = 0; info.P_M = false; info.OzelEffect = 5; break; case "SKILL_CH_SWORD_DOWNATTACK_D": info.Instant = 0; info.P_M = false; info.OzelEffect = 5; break; #endregion #region Sword Dance Series case "SKILL_CH_SWORD_SPECIAL_A": info.Instant = 0; info.Distance = 4; info.P_M = false; info.Targethits = 3; info.Tdistance = 7; break; case "SKILL_CH_SWORD_SPECIAL_B": info.Instant = 0; info.Distance = 4; info.P_M = false; info.Targethits = 3; info.Tdistance = 15; break; case "SKILL_CH_SWORD_SPECIAL_C": info.Instant = 0; info.Distance = 4; info.P_M = false; info.Targethits = 3; info.Tdistance = 15; break; case "SKILL_CH_SWORD_SPECIAL_D": info.Instant = 0; info.Distance = 4; info.P_M = false; info.Targethits = 4; info.Tdistance = 15; break; #endregion #endregion #region Heuksal #region Annihilating Blade Series case "SKILL_CH_SPEAR_PIERCE_A": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_PIERCE_B": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_PIERCE_C": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_PIERCE_D": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_PIERCE_E": info.Instant = 0; info.P_M = false; break; #endregion #region Heuksal Spear Series case "SKILL_CH_SPEAR_FRONTAREA_A": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 1; break; case "SKILL_CH_SPEAR_FRONTAREA_B": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 1; break; case "SKILL_CH_SPEAR_FRONTAREA_C": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 1; break; case "SKILL_CH_SPEAR_FRONTAREA_D": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 2; break; case "SKILL_CH_SPEAR_FRONTAREA_E": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 2; break; #endregion #region Soul Departs Spear Series case "SKILL_CH_SPEAR_STUN_A": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_STUN_B": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_STUN_C": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_STUN_D": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_STUN_E": info.Instant = 0; info.P_M = false; break; #endregion #region Ghost Spear Attack Series case "SKILL_CH_SPEAR_ROUNDAREA_A": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 2; break; case "SKILL_CH_SPEAR_ROUNDAREA_B": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 3; break; case "SKILL_CH_SPEAR_ROUNDAREA_C": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 4; break; case "SKILL_CH_SPEAR_ROUNDAREA_D": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 5; break; #endregion #region Chain Spear Attack Series case "SKILL_CH_SPEAR_CHAIN_A": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_CHAIN_B": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_CHAIN_C": info.Instant = 0; info.P_M = false; info.Targethits = 3; info.Tdistance = 2; break; case "SKILL_CH_SPEAR_CHAIN_D": info.Instant = 0; info.P_M = false; break; case "SKILL_CH_SPEAR_CHAIN_E": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 3; break; case "SKILL_CH_SPEAR_CHAIN_F": info.Instant = 0; info.P_M = false; info.Targethits = 5; info.Tdistance = 3; break; #endregion #region Flying Dragon Spear Series case "SKILL_CH_SPEAR_SHOOT_A": info.Instant = 0; info.Distance = 6; info.P_M = false; break; case "SKILL_CH_SPEAR_SHOOT_B": info.Instant = 0; info.Distance = 6; info.P_M = false; break; case "SKILL_CH_SPEAR_SHOOT_C": info.Instant = 0; info.Distance = 6; info.P_M = false; break; case "SKILL_CH_SPEAR_SHOOT_D": info.Instant = 0; info.Distance = 6; info.P_M = false; break; #endregion #endregion #region Pacheon #region Anti Devil Bow Series case "SKILL_CH_BOW_CRITICAL_A": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_CRITICAL_B": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_CRITICAL_C": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_CRITICAL_D": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_CRITICAL_E": info.Instant = 2; info.Distance = 7; info.P_M = false; break; #endregion #region Arrow Combo Attack Series case "SKILL_CH_BOW_CHAIN_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.Distance = 7; info.P_M = false; info.OzelEffect = 5; break; case "SKILL_CH_BOW_CHAIN_B": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.Distance = 7; info.OzelEffect = 5; info.P_M = false; break; case "SKILL_CH_BOW_CHAIN_C": info.NumberOfAttack = 4; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.Instant = 0; info.Distance = 7; info.OzelEffect = 5; info.P_M = false; break; case "SKILL_CH_BOW_CHAIN_D": info.NumberOfAttack = 5; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.Instant = 0; info.Distance = 7; info.OzelEffect = 5; info.P_M = false; break; case "SKILL_CH_BOW_CHAIN_E": info.NumberOfAttack = 6; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.SkillID[6] = SkillID; info.Instant = 0; info.Distance = 7; info.OzelEffect = 5; info.P_M = false; break; #endregion #region Autumn Wind Arrow Series case "SKILL_CH_BOW_PIERCE_A": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_PIERCE_B": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_PIERCE_C": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_PIERCE_D": info.Instant = 2; info.Distance = 7; info.P_M = false; break; #endregion #region Explosion Arrow Series case "SKILL_CH_BOW_AREA_A": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 4; info.Tdistance = 4; break; case "SKILL_CH_BOW_AREA_B": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 4; info.Tdistance = 4; break; case "SKILL_CH_BOW_AREA_C": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 4; info.Tdistance = 4; break; case "SKILL_CH_BOW_AREA_D": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 4; info.Tdistance = 5; break; #endregion #region Strong Bow Series case "SKILL_CH_BOW_POWER_A": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_POWER_B": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_POWER_C": info.Instant = 2; info.Distance = 7; info.P_M = false; break; case "SKILL_CH_BOW_POWER_D": info.Instant = 2; info.Distance = 7; info.P_M = false; break; #endregion #region Mind Bow Series case "SKILL_CH_BOW_SPECIAL_A": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 2; info.Tdistance = 20; break; case "SKILL_CH_BOW_SPECIAL_B": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 3; info.Tdistance = 22; break; case "SKILL_CH_BOW_SPECIAL_C": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 4; info.Tdistance = 23; break; case "SKILL_CH_BOW_SPECIAL_D": info.Instant = 2; info.Distance = 7; info.P_M = false; info.Targethits = 5; info.Tdistance = 24; break; #endregion #endregion #region Cold #region Snow Storm Series case "SKILL_CH_COLD_GIGONGSUL_A": info.Instant = 2; info.Distance = 5; info.P_M = true; break; case "SKILL_CH_COLD_GIGONGSUL_B": info.Instant = 2; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 6; break; case "SKILL_CH_COLD_GIGONGSUL_C": info.Instant = 2; info.Distance = 5; info.P_M = true; break; case "SKILL_CH_COLD_GIGONGSUL_D": info.Instant = 2; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 7; break; #endregion #endregion #region Light #region Lion Shout Series case "SKILL_CH_LIGHTNING_CHUNDUNG_A": case "SKILL_CH_LIGHTNING_CHUNDUNG_B": case "SKILL_CH_LIGHTNING_CHUNDUNG_C": case "SKILL_CH_LIGHTNING_CHUNDUNG_D": case "SKILL_CH_LIGHTNING_CHUNDUNG_E": info.Instant = 0; info.Distance = 6; info.P_M = true; info.Targethits = 3; info.Tdistance = 2; break; #endregion #region Thunderbolt Force Series case "SKILL_CH_LIGHTNING_STORM_A": case "SKILL_CH_LIGHTNING_STORM_B": case "SKILL_CH_LIGHTNING_STORM_C": case "SKILL_CH_LIGHTNING_STORM_D": info.Instant = 2; info.Distance = 6; info.P_M = true; info.Targethits = 3; info.Tdistance = 10; break; #endregion #endregion #region Fire #region Flame Wave Series case "SKILL_CH_FIRE_GIGONGSUL_A": case "SKILL_CH_FIRE_GIGONGSUL_B": case "SKILL_CH_FIRE_GIGONGSUL_D": case "SKILL_CH_FIRE_GIGONGSUL_E": info.Instant = 2; info.Distance = 6; info.P_M = true; break; case "SKILL_CH_FIRE_GIGONGSUL_F": case "SKILL_CH_FIRE_GIGONGSUL_C": info.Instant = 2; info.Distance = 6; info.P_M = true; info.Targethits = 3; info.Tdistance = 6; break; #endregion #endregion #region Force case "SKILL_CH_WATER_CURE_A": case "SKILL_CH_WATER_CURE_B": case "SKILL_CH_WATER_CURE_C": case "SKILL_CH_WATER_CURE_D": case "SKILL_CH_WATER_CURE_E": case "SKILL_CH_WATER_CURE_F": case "SKILL_CH_WATER_HEAL_A": case "SKILL_CH_WATER_HEAL_B": case "SKILL_CH_WATER_HEAL_C": case "SKILL_CH_WATER_HEAL_D": case "SKILL_CH_WATER_HEAL_E": case "SKILL_CH_WATER_HEAL_F": if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr") { info.canUse = false; } break; case "SKILL_CH_WATER_CANCEL_A": case "SKILL_CH_WATER_CANCEL_B": case "SKILL_CH_WATER_CANCEL_C": case "SKILL_CH_WATER_CANCEL_D": case "SKILL_CH_WATER_CANCEL_E": case "SKILL_CH_WATER_CANCEL_F": case "SKILL_CH_WATER_CANCEL_G": case "SKILL_CH_WATER_CANCEL_H": if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr") { info.canUse = false; } break; case "SKILL_CH_WATER_RESURRECTION_A": case "SKILL_CH_WATER_RESURRECTION_B": case "SKILL_CH_WATER_RESURRECTION_C": case "SKILL_CH_WATER_RESURRECTION_D": case "SKILL_CH_WATER_RESURRECTION_E": if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr") { info.canUse = false; } break; #endregion #region Europe #region Europe Wizard #region Earth case "SKILL_EU_WIZARD_EARTHA_POINT_A": info.Instant = 1; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_EARTHA_POINT_B": info.Instant = 1; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_EARTHA_AREA_A": info.Instant = 1; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_EARTHA_AREA_B": info.Instant = 1; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; #endregion #region Cold case "SKILL_EU_WIZARD_COLDA_POINT_A": info.Instant = 1; info.Distance = 5; info.P_M = true; break; case "SKILL_EU_WIZARD_COLDA_POINT_B": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 1; info.Distance = 5; info.P_M = true; break; case "SKILL_EU_WIZARD_COLDA_AREA_A": info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_COLDA_AREA_B": info.Instant = 1; info.Distance = 5; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; #endregion #region Fire case "SKILL_EU_WIZARD_FIREA_POINT_A": info.Instant = 1; info.Distance = 15; info.P_M = true; break; case "SKILL_EU_WIZARD_FIREA_SPRAY_A": info.NumberOfAttack = 7; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.SkillID[6] = SkillID; info.SkillID[7] = SkillID; info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 3; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_FIREA_POINT_B": info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 3; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_FIREA_SPRAY_B": info.NumberOfAttack = 7; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.SkillID[6] = SkillID; info.SkillID[7] = SkillID; info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 3; info.Tdistance = 10; break; #endregion #region Light case "SKILL_EU_WIZARD_PSYCHICA_LIGHT_A": info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 2; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_PSYCHICA_AREA_A": info.NumberOfAttack = 6; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.SkillID[6] = SkillID; info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_PSYCHICA_LIGHT_B": info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 3; info.Tdistance = 10; break; case "SKILL_EU_WIZARD_PSYCHICA_AREA_B": info.NumberOfAttack = 6; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.SkillID[6] = SkillID; info.Instant = 1; info.Distance = 15; info.P_M = true; info.Targethits = 5; info.Tdistance = 10; break; #endregion #endregion #region Europe Warrior #region Axe case "SKILL_EU_WARRIOR_DUALA_CROSS_A": info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_TWIST_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_STUN_A": info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_COUNTER_A": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_WHIRLWIND_A": info.NumberOfAttack = 4; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_TWIST_B": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_COUNTER_B": info.NumberOfAttack = 4; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_DUALA_WHIRLWIND_B": info.NumberOfAttack = 5; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.Instant = 0; info.Targethits = 3; info.P_M = false; break; #endregion #region Two-Handed case "SKILL_EU_WARRIOR_TWOHANDA_DASH_A": info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_TWOHANDA_RISING_A": info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_TWOHANDA_CHARGE_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_TWOHANDA_CRY_A": info.Targethits = 3; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_TWOHANDA_CHARGE_B": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_TWOHANDA_CRY_B": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; #endregion #region One-Handed case "SKILL_EU_WARRIOR_ONEHANDA_STRIKE_A": info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_SHIELD_A": info.Instant = 0; info.Targethits = 3; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_PIERCE_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_CRITICAL_A": info.Instant = 0; info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_SHIELD_B": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Targethits = 3; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_PIERCE_B": info.NumberOfAttack = 4; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_WARRIOR_ONEHANDA_CRITICAL_B": info.NumberOfAttack = 4; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.Instant = 0; info.P_M = false; break; #endregion #region Warrior Others case "SKILL_EU_WARRIOR_FRENZYA_TOUNT_A": info.Instant = 0; info.P_M = false; info.Distance = 15; info.Targethits = 3; break; case "SKILL_EU_WARRIOR_FRENZYA_TOUNT_SPRINT_A": info.Instant = 0; info.P_M = false; info.Distance = 15; break; #endregion #endregion #region Europe Rogue #region Rogue case "SKILL_EU_ROG_BOWA_FAST_A": info.Instant = 0; break; case "SKILL_EU_ROG_BOWA_FAST_B": info.Instant = 0; break; case "SKILL_EU_ROG_BOWA_POWER_A": case "SKILL_EU_ROG_BOWA_POWER_B": case "SKILL_EU_ROG_BOWA_RANGE_A": case "SKILL_EU_ROG_BOWA_RANGE_B": case "SKILL_EU_ROG_BOWA_KNOCK_A": case "SKILL_EU_ROG_BOWA_KNOCK_B": info.Instant = 1; break; #endregion #region Dagger case "SKILL_EU_ROG_DAGGERA_CHAIN_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_DAGGERA_WOUND_A": info.NumberOfAttack = 2; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_DAGGERA_SCREW_A": info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_DAGGERA_SLASH_A": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_STEALTHA_ATTACK_A": info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_DAGGERA_WOUND_B": info.NumberOfAttack = 3; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.Instant = 0; info.P_M = false; break; case "SKILL_EU_ROG_DAGGERA_SLASH_B": info.NumberOfAttack = 5; info.SkillID[1] = SkillID; info.SkillID[2] = SkillID; info.SkillID[3] = SkillID; info.SkillID[4] = SkillID; info.SkillID[5] = SkillID; info.Instant = 0; info.P_M = false; break; #endregion #endregion #endregion default: //Set default for skills that havent been added info.Targethits = info.NumberOfAttack; info.Tdistance = 0; info.Instant = 2; info.P_M = false; info.canUse = true; //Write info if skill not added Log.Exception("Skill System Not Found Number of attacks : " + info.NumberOfAttack + " Skillname: " + ObjData.Manager.SkillBase[SkillID].Series); break; } //Return information return(info); } catch (Exception ex) { Log.Exception(ex); } return(info); }
public static byte[] GuildUpdate(WorldMgr.character c, byte type, int memberid, int permissions, int donatedgp) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_GUILD_UPDATE); switch (type) { case 1: //Invited user to guild Writer.Byte(2); Writer.DWord(c.Information.CharacterID); Writer.Text(c.Information.Name); Writer.Byte(0x0A); //Check Writer.Byte(c.Information.Level); Writer.DWord(0); //Permissions below Writer.DWord(0); Writer.DWord(0); Writer.DWord(0); Writer.DWord(0); Writer.Word(0); Writer.DWord(c.Information.Model); //Character Model For Icon In Guild Writer.Byte(0); Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); Writer.DWord(0); Writer.DWord(0); Writer.Byte(1); break; case 2: //Disband guild Writer.Byte(1); break; case 3: //Transfer Leadership Writer.Byte(0x16); Writer.Byte(2); Writer.Byte(0x54); Writer.DWord(memberid); Writer.Byte(0); Writer.DWord(0xFFFFFFFF); Writer.Byte(1); Writer.DWord(c.Information.CharacterID); Writer.Byte(0x0A); Writer.DWord(0); Writer.Byte(0); break; case 4: //Change permissions Writer.Byte(0x16); Writer.Byte(1); Writer.Byte(0x10); Writer.DWord(c.Information.CharacterID); Writer.DWord(permissions); break; case 5: //Guild upgrade Writer.Byte(5); Writer.Byte(0x0C); //Members allowed? 12 Writer.Byte(c.Network.Guild.Level); Writer.DWord(c.Network.Guild.PointsTotal); break; //Invite user online case 6: //Static byte 6 Writer.Byte(6); //Write member id Writer.DWord(c.Information.CharacterID); //Static byte 2 Writer.Byte(2); //Online byte (If online byte = 0, If offline byte = 1). Writer.Byte(Convert.ToBoolean(c.Information.Online) ? 0 : 1); break; case 7: //User online / offline Writer.Byte(3); Writer.DWord(c.Information.CharacterID); Writer.Byte(2); break; case 8: //Update player level Writer.Byte(6); Writer.DWord(c.Information.CharacterID); Writer.Byte(1); Writer.Byte(c.Information.Level); break; case 9: //Update gp information guild Writer.Byte(6); Writer.DWord(c.Information.CharacterID); Writer.Byte(8); Writer.DWord(c.Network.Guild.DonateGP); break; case 10: //Update user location Writer.Byte(6); Writer.DWord(c.Information.CharacterID); Writer.Byte(0x80); //need to check Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); break; case 11: //Guild message update Writer.Byte(0x05); Writer.Byte(0x10); Writer.Text(c.Network.Guild.NewsTitle); Writer.Text(c.Network.Guild.NewsMessage); break; case 12: //Leave guild Writer.Byte(3); Writer.DWord(c.Information.CharacterID); Writer.Byte(1); break; case 13: //Donated gp #1 Writer.Byte(5); Writer.Byte(8); Writer.DWord(donatedgp); break; case 14: //Union invite send Writer.Byte(c.Network.Guild.TotalMembers); Writer.DWord(c.Network.Guild.Guildid); Writer.Text(c.Network.Guild.Name); Writer.Byte(c.Network.Guild.Level); Writer.Text(c.Information.Name); Writer.DWord(c.Information.Model); Writer.Byte(0x11); //?? break; } return(Writer.GetBytes()); }
public static byte[] SendFriendList(byte count, WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SEND_FRIEND_LIST); //Groups DB ms = new DB("SELECT * FROM friends_groups WHERE playerid='" + c.Information.CharacterID + "'"); int groupcount = ms.Count(); groupcount = groupcount + 1; Writer.Byte((byte)groupcount); Writer.Word(0); Writer.Text("NonClassified"); int groupid = 0; using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { string groupname = reader.GetString(2); groupid = groupid + 1; Writer.Word((short)groupid); Writer.Text(groupname); } } //Friends Writer.Byte(count); ms = new DB("SELECT * FROM friends WHERE owner='" + c.Information.CharacterID + "'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { int model = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype")); int status = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online")); int charid = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id")); string charname = DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "name"); string groupname = reader.GetString(4); Writer.DWord(charid); // Friend CharID Writer.Text(charname); // Friend Name Writer.DWord(model); // Friend Model Type if (groupname == "none") { Writer.Word(0); } else { Writer.Word(groupid); } if (status != 0) { Writer.Byte(0); // Friend is online } else { Writer.Byte(1); // Inverted, Friend is offline } } reader.Close(); } ms.Close(); return(Writer.GetBytes()); }
public static byte[] CharacterDataLoad(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_PLAYERDATA); /////////////////////////////////////////////////////// Character basic info #region Basic info Writer.DWord(c.Ids.GetLoginID); Writer.DWord(c.Information.Model); Writer.Byte(c.Information.Volume); Writer.Byte(c.Information.Level); Writer.Byte(c.Information.Level); Writer.LWord(c.Information.XP); Writer.DWord(c.Information.SpBar); Writer.LWord(c.Information.Gold); Writer.DWord(c.Information.SkillPoint); Writer.Word(c.Information.Attributes); Writer.Byte(c.Information.BerserkBar); Writer.DWord(988); Writer.DWord(c.Stat.SecondHp); Writer.DWord(c.Stat.SecondMP); Writer.Bool(c.Information.Level < 20 ? true : false); #endregion /////////////////////////////////////////////////////// Character Player Kill Info #region Pk information //DB perfection reading with multiple data adapters... while this one is open i can still read anything else from the database //With no speed reduction... DB checkpk = new DB("SELECT * FROM character WHERE name ='" + c.Information.Name + "'"); using (System.Data.SqlClient.SqlDataReader getinfo = checkpk.Read()) { while (getinfo.Read()) { byte dailypk = getinfo.GetByte(48); byte pklevel = getinfo.GetByte(49); byte murderlevel = getinfo.GetByte(50); Writer.Byte(dailypk); Writer.Word(pklevel); Writer.DWord(murderlevel); if (murderlevel != 0) { c.Information.Murderer = true; } } } #endregion /////////////////////////////////////////////////////// Character Title #region Title Writer.Byte(c.Information.Title); #endregion /////////////////////////////////////////////////////// Character Pvpstate #region Pvp Writer.Byte(c.Information.Pvpstate); if (c.Information.Pvpstate > 0) { c.Information.PvP = true; } #endregion /////////////////////////////////////////////////////// Character Items #region Item Writer.Byte(c.Information.Slots); DB ms = new DB("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='0' AND storagetype='0'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader msreader = ms.Read()) { while (msreader.Read()) { short amount = msreader.GetInt16(6); if (amount < 1) { amount = 1; } DB.query("UPDATE char_items SET quantity='" + amount + "' WHERE owner='" + c.Information.CharacterID + "' AND itemid='" + msreader.GetInt32(2) + "' AND id='" + msreader.GetInt32(0) + "' AND storagetype='0'"); if (msreader.GetByte(5) == 6) { c.Information.Item.wID = Convert.ToInt32(msreader.GetInt32(2)); } if (msreader.GetByte(5) == 7) { c.Information.Item.sID = msreader.GetInt32(2); c.Information.Item.sAmount = msreader.GetInt16(6); } Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), amount, msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30)); } } ms.Close(); //Avatar Writer.Byte(5); ms = new DB("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='1' AND storagetype='0'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader msreader = ms.Read()) { while (msreader.Read()) { Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), msreader.GetInt16(6), msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30)); } } ms.Close(); Writer.Byte(0); // job mastery Writer.Byte(0x0B); Writer.Byte(0); Writer.Byte(0); #endregion /////////////////////////////////////////////////////// Mastery #region Mastery if (c.Information.Model <= 12000) { for (byte i = 1; i <= 7; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Mastery[i]); Writer.Byte(c.Stat.Skill.Mastery_Level[i]); } } else { if (c.Information.Model >= 14000) { for (byte i = 1; i < 7; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Mastery[i]); Writer.Byte(c.Stat.Skill.Mastery_Level[i]); } } } #endregion /////////////////////////////////////////////////////// Skills #region Skill Writer.Byte(2); Writer.Byte(0); for (int i = 1; i <= c.Stat.Skill.AmountSkill; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Skill[i]); Writer.Byte(1); } Writer.Byte(2); #endregion /////////////////////////////////////////////////////// Quests #region Quest Writer.Word(1); // how many Quest ids completed/aborted Writer.DWord(1); // Quest id Writer.Byte(0); //number of Quests that are live #endregion Writer.Byte(0); //? for now /////////////////////////////////////////////////////// Talisman #region Talisman Writer.DWord(1); //new Writer.DWord(1); //new Writer.DWord(0); //? for now Writer.DWord(0x0C); //new #endregion /////////////////////////////////////////////////////// Position + id + speed #region Character id / Position / Speed Writer.DWord(c.Information.UniqueID); Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); if (!FileDB.CheckCave(c.Position.xSec, c.Position.ySec)) { Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec)); Writer.Float(c.Position.z); Writer.Float(Formule.packety(c.Position.y, c.Position.ySec)); } else { Writer.Float(Formule.cavepacketx(c.Position.x)); // Added for cave Coords Writer.Float(c.Position.z); Writer.Float(Formule.cavepackety(c.Position.y)); // Added for cave Coords } Writer.Word(0); // Angle Writer.Byte(0); Writer.Byte(1); Writer.Byte(0); Writer.Word(0); // Angle Writer.Word(0); Writer.Byte(0); Writer.Bool(false); //berserk Writer.Byte(0); //new ? Writer.Float(c.Speed.WalkSpeed); Writer.Float(c.Speed.RunSpeed); Writer.Float(c.Speed.BerserkSpeed); #endregion /////////////////////////////////////////////////////// Premium Tickets #region Premium ticket Writer.Byte(0); //ITEM_MALL_GOLD_TIME_SERVICE_TICKET_4W #endregion /////////////////////////////////////////////////////// GM Check + Name #region GM Check + Name Writer.Text(c.Information.Name); #endregion /////////////////////////////////////////////////////// Character jobs #region Character Job / hunter thief trader ( old job things ) //Writer info with job name when on job /*if (c.Job.state == 1 && c.Job.Jobname != "0") * { * Writer.Text(c.Job.Jobname); * Writer.Byte(3); * Writer.Byte(1); * Writer.DWord(0); * Writer.DWord(0); * Writer.DWord(0); * Writer.Byte(0); * Writer.Byte(0); * Writer.Byte(0); * } * //Write basic info noname * if (c.Job.Jobname == "0") * { * Writer.Word(0); * Writer.Byte(3); * Writer.Byte(1); * Writer.DWord(0); * Writer.DWord(0); * Writer.DWord(0); * Writer.Byte(0); * Writer.Byte(0); * Writer.Byte(0); * } * //Write no info * else * { * Writer.Word(0); * Writer.Byte(0); * Writer.Byte(1); * Writer.DWord(0); * Writer.DWord(0); * Writer.DWord(0); * Writer.Byte(0); * Writer.Byte(0); * Writer.Byte(0); * }*/ #endregion #region New job system if (c.Job.state == 1) { Writer.Text(c.Job.Jobname); Writer.Byte(1); Writer.Byte(c.Job.level); //Level job Writer.Byte(c.Information.Level); //Level char Writer.Byte(1); // job level? myb Writer.LWord(0); // job exp probably y Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } else { Writer.Word(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(2); // job type Writer.Byte(1); // job level? myb Writer.LWord(0); // job exp probably y Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } #endregion /////////////////////////////////////////////////////// Pvp / Pk State #region Pvp / Pk State if (c.Information.Pvpstate == 1 || c.Information.Murderer) { Writer.Byte(0x22); } else if (c.Information.Pvpstate == 0 || !c.Information.Murderer) { Writer.Byte(0xFF); } #endregion /////////////////////////////////////////////////////// Guide Data #region Guide Data this data stacks on itself so if guide id is 0400000000000000 and next guide is 0300000000000000 the data to send is 0700000000000000 for (int i = 0; i < 8; ++i) //Main Guide Packet Info { Writer.Byte(c.Guideinfo.G1[i]); //Reads From Int Array } #endregion /////////////////////////////////////////////////////// Account / Gm Check #region Account ID + Gm Check Writer.DWord(c.Account.ID); Writer.Byte(c.Information.GM); #endregion /////////////////////////////////////////////////////// Quickbar + Autopotion #region Bar information Writer.Byte(7); PlayerQuickBar(Writer, c.Information.CharacterID); PlayerAutoPot(Writer, c.Information.CharacterID); #endregion /////////////////////////////////////////////////////// Academy #region Academy Writer.Byte(0); // number of player in academy /* // if we have players there * Writer.Byte(1); * Writer.Text("asd"); */ Writer.Byte(0);//added byte today for 1.310 Writer.Byte(0); Writer.Word(1); Writer.Word(1); Writer.Byte(0); Writer.Byte(1); #endregion return(Writer.GetBytes()); }