public static byte[] StopMovement(ObjData.vektor p) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_PICKUPITEM_MOVE); Writer.DWord(p.ID); Writer.Byte(p.xSec); Writer.Byte(p.ySec); Writer.Float(p.x); Writer.Float(p.z); Writer.Float(p.y); Writer.Word(0/*p.Angle*/); // Angle return Writer.GetBytes(); }
public static byte[] SetSpeed(int id, float speed1, float speed2) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SETSPEED); Writer.DWord(id); Writer.Float(speed1); Writer.Float(speed2); 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(); }
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 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[] 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[] ObjectSpawn(WorldMgr.Items w) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); Writer.DWord(w.Model); switch (w.Type) { case 1: Writer.DWord(w.amount); Writer.DWord(w.UniqueID); Writer.Byte(w.xSec); Writer.Byte(w.ySec); Writer.Float(Formule.packetx((float)w.x, w.xSec)); Writer.Float(w.z); Writer.Float(Formule.packety((float)w.y, w.ySec)); Writer.DWord(0); Writer.Byte(w.fromType); Writer.DWord(0); break; case 2: //Weapon and armory drops Writer.Byte(w.PlusValue); Writer.DWord(w.UniqueID); Writer.Byte(w.xSec); Writer.Byte(w.ySec); Writer.Float(Formule.packetx((float)w.x, w.xSec)); Writer.Float(w.z); Writer.Float(Formule.packety((float)w.y, w.ySec)); Writer.Word(0); // Angle Writer.Bool(w.downType); if (w.downType) Writer.DWord(w.Owner); Writer.Byte(ObjData.Manager.ItemBase[w.Model].SOX); // if rare 2 not 0 Writer.Byte(w.fromType); Writer.DWord(w.fromOwner); break; case 3: //Other item types //TODO: Define more detailed drops (Quest items, Mall types etc). Writer.DWord(w.UniqueID); Writer.Byte(w.xSec); Writer.Byte(w.ySec); Writer.Float(Formule.packetx((float)w.x, w.xSec)); Writer.Float(w.z); Writer.Float(Formule.packety((float)w.y, w.ySec)); Writer.Word(0); Writer.Bool(w.downType); if (w.downType) Writer.DWord(w.Owner); Writer.Byte(0); Writer.Byte(w.fromType); Writer.DWord(w.fromOwner); break; } return Writer.GetBytes(); }
//Monster spawns public static byte[] ObjectSpawn(WorldMgr.Monsters o) { 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)); switch (o.LocalType) { case 0: Writer.Word(0); Writer.Word(1); Writer.Byte(o.xSec); Writer.Byte(o.ySec); if (!FileDB.CheckCave(o.xSec, o.ySec)) { if (o.xSec == 0) Writer.Word(0); else Writer.Word(Formule.packetx((float)(o.x + o.wx), o.xSec)); Writer.Word(o.z); if (o.ySec == 0) Writer.Word(0); else Writer.Word(Formule.packety((float)(o.y + o.wy), o.ySec)); } else { if (o.x < 0) { Writer.Word(Formule.cavepacketx((float)(o.x + o.wx))); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.cavepacketx((float)(o.x + o.wx))); } Writer.DWord(o.z); if (o.y < 0) { Writer.Word(Formule.cavepackety((float)(o.y + o.wy))); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.cavepackety((float)(o.y + o.wy))); } } Writer.Byte(1); Writer.Byte(o.Runing == true ? 2 : 0); Writer.Byte(0); Writer.Float(o.WalkingSpeed);// Walk speed Writer.Float(o.RunningSpeed);// Run speed Writer.Float(o.BerserkerSpeed);// Berserk speed Writer.Byte(0);//new ? Writer.Byte(0); Writer.Byte(2); Writer.Byte(1); Writer.Byte(5); Writer.Byte(o.Type); break; case 1: Writer.Word(o.Angle); Writer.Word(1); Writer.Byte(o.xSec); Writer.Byte(o.ySec); if (!FileDB.CheckCave(o.xSec, o.ySec)) { Writer.Word(Formule.packetx((float)(o.x + o.wx), o.xSec)); Writer.Word(o.z); Writer.Word(Formule.packety((float)(o.y + o.wy), o.ySec)); } else { if (o.x < 0) { Writer.Word(Formule.cavepacketx((float)(o.x + o.wx))); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.cavepacketx((float)(o.x + o.wx))); } Writer.DWord(o.z); if (o.y < 0) { Writer.Word(Formule.cavepackety((float)(o.y + o.wy))); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.cavepackety((float)(o.y + o.wy))); } } Writer.Byte(1); Writer.Byte(o.Runing == true ? 2 : 0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Float(o.WalkingSpeed);// Walk speed Writer.Float(o.RunningSpeed);// Run speed Writer.Float(o.BerserkerSpeed);// Berserk speed Writer.Byte(0); Writer.Byte(2); Writer.Byte(1); Writer.Byte(5); Writer.Byte(o.Type); Writer.Byte(4); break; case 2: Writer.Word(o.Angle); // Should be angle? yet not changing ingame.. Writer.Byte(0); Writer.Byte(1); Writer.Byte(0); Writer.Word(o.Angle); // Should be angle? yet not changing ingame.. Writer.Byte(1); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.DWord(0); Writer.DWord(0); Writer.Float(100); Writer.Byte(0); Writer.Byte(2); Writer.Byte(0); Writer.Byte(2); break; case 3: Writer.Word(0); Writer.Byte(1); Writer.Byte(0); Writer.Byte(0); Writer.Byte(1); Writer.DWord(0); Writer.DWord(0); Writer.Byte(0); break; case 4: /*Writer.Word(0); // Angle Writer.Byte(0); Writer.Byte(1); Writer.Byte(0); Writer.Word(0); // Angle Writer.Byte(1); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Float(o.WalkingSpeed);// Walk speed Writer.Float(o.RunningSpeed);// Run speed Writer.Float(o.BerserkerSpeed);// Berserk speed Writer.Byte(0); Writer.Byte(2); Writer.Byte(1); Writer.Byte(5); Writer.Byte(0); Writer.Byte(34); Writer.Byte(1); * */ // Thiefs and trader spawns Writer.Word(0); // Angle Writer.Word(1); Writer.Byte(o.xSec); Writer.Byte(o.ySec); if (!FileDB.CheckCave(o.xSec, o.ySec)) { Writer.Word(Formule.packetx((float)(o.x + o.wx), o.xSec)); Writer.Word(o.z); Writer.Word(Formule.packety((float)(o.y + o.wy), o.ySec)); } else { if (o.x < 0) { Writer.Word(Formule.packetx((float)(o.x + o.wx), o.xSec)); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.packetx((float)(o.x + o.wx), o.xSec)); } Writer.DWord(o.z); if (o.y < 0) { Writer.Word(Formule.packety((float)(o.y + o.wy), o.ySec)); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.packety((float)(o.y + o.wy), o.ySec)); } } Writer.Byte(1); Writer.Byte(o.Runing == true ? 2 : 0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Float(o.WalkingSpeed);// Walk speed Writer.Float(o.RunningSpeed);// Run speed Writer.Float(o.BerserkerSpeed);// Berserk speed Writer.Byte(0); Writer.Byte(2); Writer.Byte(1); Writer.Byte(5); Writer.Byte(0); Writer.Byte(34); // 227 Need to check what this is... Writer.Byte(1); break; case 5: // Static monster spawns Writer.Word(0); Writer.Word(1); Writer.Byte(o.xSec); Writer.Byte(o.ySec); if (!FileDB.CheckCave(o.xSec, o.ySec)) { Writer.Word(Formule.packetx((float)o.x, o.xSec)); Writer.Word(o.z); Writer.Word(Formule.packety((float)o.y, o.ySec)); } else { if (o.x < 0) { Writer.Word(Formule.packetx((float)o.x, o.xSec)); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.packetx((float)o.x, o.xSec)); } Writer.DWord(o.z); if (o.y < 0) { Writer.Word(Formule.packety((float)o.y, o.ySec)); Writer.Word(0xFFFF); } else { Writer.DWord(Formule.packety((float)o.y, o.ySec)); } } Writer.Byte(1); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Float(0); // Walk speed Writer.Float(0); // Run speed Writer.Float(100); // Berserk speed Writer.Byte(0); Writer.Byte(2); Writer.Byte(1); Writer.Byte(5); Writer.Byte(o.Type); Writer.Byte(0); o.LocalType = 1; break; default: break; } return Writer.GetBytes(); }
public static byte[] ObjectSpawn(WorldMgr.spez_obj so) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); Writer.DWord(0xFFFFFFFF); //Static Writer.DWord(so.spezType); //Type Writer.DWord(so.ID); //skillid Writer.DWord(so.UniqueID); //UniqueID of spawn Writer.Byte(so.xSec); //XSec Writer.Byte(so.ySec); //Ysec Writer.Float(Formule.packetx((float)so.x, so.xSec)); //X Writer.Float(so.z); //Z Writer.Float(Formule.packety((float)so.y, so.ySec)); //Y Writer.Word(0); //Angle Writer.Byte(1); //Static return Writer.GetBytes(); }
public static byte[] ObjectSpawn(WorldMgr.pet_obj o) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SOLO_SPAWN); switch (o.Named) { /////////////////////////////////////////////////////////////////////////// // Job transports /////////////////////////////////////////////////////////////////////////// case 4: Writer.DWord(o.Model); //Pet Model id Writer.DWord(o.UniqueID); //Pet Unique id Writer.Byte(o.xSec); //X sector Writer.Byte(o.ySec); //Y sector Writer.Float(Formule.packetx((float)o.x, o.xSec)); //X Writer.Float(o.z); //Z Writer.Float(Formule.packety((float)o.y, o.ySec)); //Y Writer.Word(0); //Angle Writer.Byte(1); //Walking state Writer.Byte(1); //Static Writer.Byte(o.xSec); //X sector Writer.Byte(o.ySec); //Y sector Writer.Word(0); //Static Writer.Word(0); // Writer.Word(0); // Writer.Word(1); Writer.Word(3); Writer.Byte(0); Writer.Float(o.Walk); //Object walking Writer.Float(o.Run); //Object running Writer.Float(o.Zerk); //Object zerk Writer.Word(0); // Writer.Text(o.OwnerName); Writer.Word(2); // Writer.DWord(o.OwnerID); //Owner unique id Writer.Byte(4); //Static byte 4 break; case 3: /////////////////////////////////////////////////////////////////////////// // Attack pet main packet /////////////////////////////////////////////////////////////////////////// Writer.DWord(o.Model); 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);//angle Writer.Byte(0); Writer.Byte(o.Level);//level Writer.Byte(0); Writer.Word(0);//angle Writer.Byte(1); Writer.Byte(0); Writer.Byte(0); Writer.Byte(2); Writer.Byte(0); Writer.Float(o.Walk); //Object walking Writer.Float(o.Run); //Object running Writer.Float(o.Zerk); //Object zerk Writer.Byte(0); Writer.Byte(0); if (o.Named == 1) Writer.Text(o.Petname); else Writer.Word(0); Writer.Text(o.OwnerName); Writer.Byte(0); Writer.Byte(0); Writer.DWord(o.OwnerID); Writer.Byte(1); break; case 2: /////////////////////////////////////////////////////////////////////////// // Grab pet main packet /////////////////////////////////////////////////////////////////////////// Writer.DWord(o.Model); //Pet Model id Writer.DWord(o.UniqueID); //Pet Unique id Writer.Byte(o.xSec); //X sector Writer.Byte(o.ySec); //Y sector Writer.Float(Formule.packetx((float)o.x, o.xSec)); //X Writer.Float(o.z); //Z Writer.Float(Formule.packety((float)o.y, o.ySec)); //Y Writer.Word(0xDC72); //Angle Writer.Byte(0); //Walking state Writer.Byte(1); //Static Writer.Byte(0); //Static Writer.Word(0xDC72); //Angle Writer.Byte(1); //Static Writer.Word(0); // Writer.Byte(0); Writer.Byte(0); Writer.Float(o.Walk); //Object walking Writer.Float(o.Run); //Object running Writer.Float(o.Zerk); //Object zerk Writer.Word(0); // if (o.Petname != "No name") Writer.Text(o.Petname); else Writer.Word(0); Writer.Text(o.OwnerName); //Pet owner name Writer.Byte(4); //Static byte 4? Writer.DWord(o.OwnerID); //Owner unique id Writer.Byte(1); //Static byte 1 /////////////////////////////////////////////////////////////////////////// break; default: /////////////////////////////////////////////////////////////////////////// // // Horse // /////////////////////////////////////////////////////////////////////////// Writer.DWord(o.Model); 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(0); Writer.Byte(1); Writer.Byte(0); Writer.Word(0); Writer.Byte(1); Writer.Word(0); Writer.Byte(0); Writer.Float(o.Speed1); Writer.Float(o.Speed2); Writer.Float(o.Zerk); Writer.Word(0); Writer.Byte(1); /////////////////////////////////////////////////////////////////////////// break; } return Writer.GetBytes(); }