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[] 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()); }
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()); }