protected void SavePlayerPosition() { //Wrap our function inside a catcher try { //Update database if (!FileDB.CheckCave(Character.Position.xSec, Character.Position.ySec)) { DB.query("update character set xsect='" + Character.Position.xSec + "', ysect='" + Character.Position.ySec + "', xpos='" + Formule.packetx(Character.Position.x, Character.Position.xSec) + "', ypos='" + Formule.packety(Character.Position.y, Character.Position.ySec) + "', zpos='" + Math.Round(Character.Position.z) + "' where id='" + Character.Information.CharacterID + "'"); } else { DB.query("update character set xsect='" + Character.Position.xSec + "', ysect='" + Character.Position.ySec + "', xpos='" + Formule.cavepacketx(Character.Position.x) + "', ypos='" + Formule.cavepackety(Character.Position.y) + "', zpos='" + Math.Round(Character.Position.z) + "' where id='" + Character.Information.CharacterID + "'"); } } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Cave movement teleport ///////////////////////////////////////////////////////////////////////////////// public void Movement_CaveTeleport()// This was changed due to going in and out of caves to change the movment patten { try { // if our destination is caveteleport foreach (ObjData.CaveTeleports r in ObjData.Manager.CaveTeleports) { if (!FileDB.CheckCave(Character.Position.xSec, Character.Position.ySec)) { if (Formule.gamedistance(Formule.packetx(Character.Position.x, Character.Position.xSec), Formule.packety(Character.Position.y, Character.Position.ySec), (float)r.x, (float)r.y) <= 10) { foreach (ObjData.cavepoint p in ObjData.Manager.cavePointBase) { if (p != null) { if (p.Name == r.name) { TeleportCave(p.Number); break; } } } break; } } else { if (Formule.gamedistance(Formule.cavepacketx(Character.Position.x), Formule.cavepackety(Character.Position.y), (float)r.x, (float)r.y) <= 10) { foreach (ObjData.cavepoint p in ObjData.Manager.cavePointBase) { if (p != null) { if (p.Name == r.name) { TeleportCave(p.Number); break; } } } break; } } } } catch (Exception ex) { Log.Exception(ex); } }
public static byte[] Movement(ObjData.vektor p) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_MOVEMENT); //Select opcode Writer.DWord(p.ID); //Player ID Writer.Bool(true); //Bool 1 Writer.Byte(p.xSec); //Player X Sector Writer.Byte(p.ySec); //Player Y Sector if (!FileDB.CheckCave(p.xSec, p.ySec)) { Writer.Word(p.x); //Player X Location Writer.Word(p.z); //Player Z Location Writer.Word(p.y); //Player Y Location } else { if (p.x < 0) { Writer.Word(p.x); Writer.Word(0xFFFF); } else { Writer.DWord(p.x); } Writer.DWord(p.z); if (p.y < 0) { Writer.Word(p.y); Writer.Word(0xFFFF); } else { Writer.DWord(p.y); } } Writer.Bool(false); /* ReSearch this is ext packets * Writer.Byte(p.xSec); //Player X Sector * Writer.Byte(p.ySec); //Player Y Sector * Writer.Word(p.x); //Player X Location * Writer.DWord(p.z); //Player Z Location * Writer.Word(p.y); *///Player Y Location return(Writer.GetBytes()); }
void UpdateXY() { //Wrap our function inside a catcher try { //Update x and y of character if (!FileDB.CheckCave(Character.Position.xSec, Character.Position.ySec)) { Character.Position.x = Formule.gamex(Character.Position.x, Character.Position.xSec); Character.Position.y = Formule.gamey(Character.Position.y, Character.Position.ySec); } else { //New cave update x y Character.Position.x = Formule.cavegamex(Character.Position.x); Character.Position.y = Formule.cavegamey(Character.Position.y); } } catch (Exception ex) { Log.Exception(ex); } }
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 byte[] ObjectSpawn(WorldMgr.Monsters o) //Monster spawns { 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()); }
void MovementNormalClicking(PacketReader Reader) { float XPosition = 0; float YPosition = 0; float ZPosition = 0; byte xsec = Reader.Byte(); byte ysec = Reader.Byte(); double Distance = 0; Character.Position.Walking = true; if (!FileDB.CheckCave(xsec, ysec)) { XPosition = Reader.Int16(); ZPosition = Reader.Int16(); YPosition = Reader.Int16(); Distance = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.gamex(XPosition, xsec), Formule.gamey(YPosition, ysec)); Character.Position.xSec = xsec; Character.Position.ySec = ysec; Character.Position.wX = Formule.gamex(XPosition, xsec) - Character.Position.x; Character.Position.wZ = ZPosition; Character.Position.wY = Formule.gamey(YPosition, ysec) - Character.Position.y; Character.Position.packetxSec = xsec; Character.Position.packetySec = ysec; Character.Position.packetX = (ushort)XPosition; Character.Position.packetZ = (ushort)ZPosition; Character.Position.packetY = (ushort)YPosition; if ((xsec != 0) && (ysec != 0)) { Send(Packet.Movement(new ObjData.vektor(Character.Information.UniqueID, XPosition, ZPosition, YPosition, xsec, ysec))); } StartMovementTimer(GetMovementTime(Distance)); } else { XPosition = Formule.cavegamex((float)Reader.Int16(), (float)Reader.Int16()); ZPosition = Formule.cavegamez((float)Reader.Int16(), (float)Reader.Int16()); YPosition = Formule.cavegamey((float)Reader.Int16(), (float)Reader.Int16()); Distance = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.cavegamex(XPosition), Formule.cavegamey(YPosition)); Character.Position.xSec = xsec; Character.Position.ySec = ysec; Character.Position.wX = Formule.cavegamex(XPosition) - Character.Position.x; Character.Position.wZ = ZPosition; Character.Position.wY = Formule.cavegamey(YPosition) - Character.Position.y; Character.Position.packetxSec = xsec; Character.Position.packetySec = ysec; Character.Position.packetX = (ushort)XPosition; Character.Position.packetZ = (ushort)ZPosition; Character.Position.packetY = (ushort)YPosition; if ((xsec != 0) && (ysec != 0)) { Send(Packet.Movement(new ObjData.vektor(Character.Information.UniqueID, XPosition, ZPosition, YPosition, xsec, ysec))); } StartMovementTimer(GetMovementTime(Distance)); } Reader.Close(); if (Character.Grabpet.Active) { Send(Packet.Movement(new ObjData.vektor(Character.Grabpet.Details.UniqueID, XPosition + Rnd.Next(10, 15), ZPosition, YPosition + Rnd.Next(10, 15), xsec, ysec))); } if (Character.Attackpet.Active) { Send(Packet.Movement(new ObjData.vektor(Character.Attackpet.Details.UniqueID, XPosition + Rnd.Next(10, 15), ZPosition, YPosition + Rnd.Next(10, 15), xsec, ysec))); } }
public void AutoRunCallBack(object e) { float NewX = x, NewY = y; double Distance = 0.0; try { if (RecordedTime <= 0 && AutoMovement && !Die) { double MaxDistance = 0.0; if (RunningSpeed <= 0 && BerserkerSpeed <= 0) { StopMovement(); StopAutoRunTimer(); return; } if (UniqueGuardMode) { MaxDistance = 15; } else { MaxDistance = 100; } double OrjDistance = Formule.gamedistance((float)x, (float)y, (float)OriginalX, (float)OriginalY); if (OrjDistance > MaxDistance) { wx = OriginalX - x; wy = OriginalY - y; xSec = (byte)((OriginalX / 192) + 135); ySec = (byte)((OriginalY / 192) + 92); if (LastState == 1 && LastState2 == 2) { ChangeState(1, 3); Send(Packet.SetSpeed(UniqueID, WalkingSpeed, RunningSpeed)); } Runing = true; WalkingTime = (OrjDistance / (WalkingSpeed * 0.0768)) * 1000.0; RecordedTime = WalkingTime; StartMovement((int)(WalkingTime * 0.0768)); Send(Packet.Movement(new ObjData.vektor(UniqueID, Formule.packetx((float)OriginalX, xSec), (float)z, Formule.packety((float)OriginalY, ySec), xSec, ySec))); } else { Helpers.Functions.aRound(ref NewX, ref NewY, 2); wx = NewX - x; wy = NewY - y; xSec = (byte)((NewX / 192) + 135); ySec = (byte)((NewY / 192) + 92); Runing = true; Distance = Formule.gamedistance((float)x, (float)y, (float)NewX, (float)NewY); if (Runing == true || WalkingSpeed != 0) { if (LastState == 1 && LastState2 == 3) { ChangeState(1, 2); Send(Packet.SetSpeed(UniqueID, WalkingSpeed, RunningSpeed)); } Runing = false; WalkingTime = (Distance / (WalkingSpeed * 0.0768)) * 1000.0; RecordedTime = WalkingTime; } else if (RunningSpeed != 0 && WalkingSpeed == 0) { if (LastState == 1 && LastState2 == 2) { ChangeState(1, 3); Send(Packet.SetSpeed(UniqueID, WalkingSpeed, RunningSpeed)); } Runing = true; WalkingTime = (Distance / (RunningSpeed * 0.0768)) * 1000.0; RecordedTime = WalkingTime; } if (!FileDB.CheckCave(xSec, ySec)) { Send(Packet.Movement(new ObjData.vektor(UniqueID, Formule.packetx((float)NewX, xSec), (float)z, Formule.packety((float)NewY, ySec), xSec, ySec))); } else { Send(Packet.Movement(new ObjData.vektor(UniqueID, Formule.cavepacketx((float)NewX), (float)z, Formule.cavepackety((float)NewY), xSec, ySec))); } CheckEveryOne(); StartMovement((int)(WalkingTime * 0.0768)); } } else { return; } } catch { StopMovement(); StopAgressiveTimer(); } }
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()); }