public static void F_UPDATE_SIEGE_LOOK_AT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } var siegeOid = packet.GetUint16R(); var heading = packet.GetUint16R(); var siege = (Creature)cclient.Plr.Region.GetObject(siegeOid); if (siege != null && siege.Heading != heading) { siege.Heading = heading; siege.SendState(); } }
static public void F_PLAYER_STATE2(Connection conn, PacketIn packet) { Log.DumpHex(packet.ToArray()); UInt16 unk1 = packet.GetUint16(); byte Type = packet.GetUint8(); byte MoveingState = packet.GetUint8(); // ground, jumpstart,jumpend,inair byte unk2 = packet.GetUint8(); byte Strafe = packet.GetUint8(); UInt16 Heading = packet.GetUint16R(); UInt16 X = packet.GetUint16R(); UInt16 Y = packet.GetUint16R(); byte Unk1 = packet.GetUint8(); UInt16 Z = packet.GetUint16R(); X /= 2; Y /= 2; Z /= 4; if (packet.Size < 10) { Log.Debug("Player: state refresh"); } else { if (Type == (byte)MovementTypes.NotMoving) { // player not moving or has stopped in position Log.Debug("Player: not moving or has stopped in position " + Type); } else if (Type == (byte)MovementTypes.GroundForward) { // player is moving forward Log.Debug("Player: moving forward " + Type); } else if (Type == (byte)MovementTypes.GroundBackward) { // player is moving backward Log.Debug("Player: moving backward " + Type); } else if (Type == (byte)MovementTypes.FlyModeForward) { // player is using fly mode Log.Debug("Player: flying forward " + Type); } else if (Type == (byte)MovementTypes.FlyModeBackward) { // player is using fly mode Log.Debug("Player: flying backward " + Type); } GetPosition(X, Y, Z); } /*try * { * long Pos = packet.Position; * * PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_STATE2); * Out.Write(packet.ToArray(), (int)packet.Position, (int)packet.Size); * Out.WriteByte(0); * // Plr.DispatchPacket(Out, false); * * packet.Position = Pos; * } * catch (Exception e) * { * Log.Error("F_PLAYER_STATE2", e.ToString()); * } * * if (packet.Size < 18) * { * Log.Debug("Player: not moving"); * Log.DumpHex(packet.ToArray()); * return; * } * * UInt16 Key = packet.GetUint16(); * * byte MoveByte = packet.GetUint8(); * byte UnkByte = packet.GetUint8(); * byte CombatByte = packet.GetUint8(); * byte RotateByte = packet.GetUint8(); * * UInt16 Heading = packet.GetUint16R(); * UInt16 X = packet.GetUint16R(); * UInt16 Y = packet.GetUint16R(); * byte Unk1 = packet.GetUint8(); * UInt16 Z = packet.GetUint16R(); * byte Unk2 = packet.GetUint8(); * Log.Debug(string.Format("Player: X={0} Y={1} Z={2}",X,Y,Z));*/ }
public static void F_HELP_DATA(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying() || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; GameData.HelpType Type = (GameData.HelpType)packet.GetUint8(); switch (Type) { case GameData.HelpType.HELPTYPE_CREATE_APPEAL_VIOLATION_REPORT: // Violation Report case GameData.HelpType.HELPTYPE_CREATE_APPEAL_NAMING_VIOLATION: // Name Violation case GameData.HelpType.HELPTYPE_CREATE_APPEAL_GOLD_SELLER: // Gold Seller { GameData.AppealTopic Category = (GameData.AppealTopic)packet.GetUint8(); ushort ReportTypeSize = packet.GetUint16R(); packet.Skip(2); string ReportType = ""; if (ReportTypeSize > 0) { ReportType = packet.GetString(ReportTypeSize - 1); } packet.Skip(1); ushort MessageSize = packet.GetUint16R(); packet.Skip(2); string Message = ""; if (MessageSize > 0) { Message = packet.GetString(MessageSize - 1); } packet.Skip(1); ushort NameSize = packet.GetUint16R(); packet.Skip(2); string Name = packet.GetString(NameSize - 1); Bug_report report = new Bug_report(); report.Time = (uint)TCPManager.GetTimeStamp(); report.AccountId = (uint)Plr.Client._Account.AccountId; report.CharacterId = Plr.CharacterId; //fix for when someone right clicks chat to report or report spam on mails, because mythic thought it was good to classify these as goldsellers... if (Message.StartsWith("[") || Message.StartsWith($"\n[") || Message.StartsWith($"\n [")) { report.Type = 2; // Violation report report.Category = 4; //Violation report report.ReportType = "General"; //General subcategory of violation report } else { report.Type = (byte)Type; report.Category = (byte)Category; report.ReportType = ReportType; } if (Message.Contains(";")) { Message = Message.Replace(';', ':'); } if (Message.Contains("^")) { Message = Message.Replace('^', ' '); } report.Message = Message; report.ZoneId = Plr.Zone.Info.ZoneId; report.X = (ushort)(Plr.X / 64); report.Y = (ushort)(Plr.Y / 64); report.Assigned = "nobody"; report.Fields.Add(new KeyValuePair <uint, string>(0, Name.Replace("|", "").Replace(":", ""))); //lets not allow players to report server automated mails if (Message.Contains("[Mail Subject]: Public Quest Loot [Mail Message Body]: You won a Public Quest Loot Bag") || Message.Contains("[Mail Subject]: Medallion Reward [Mail Message Body]: You've received a medallion reward for your realm's victory in a recent battle in which you were a participant.") || Message.Contains(" [Mail Message Body]: Your mail expired and has been returned to you.")) { Plr.SendClientMessage("This is a server generated mail, this ticket will be discarded.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); break; } CharMgr.Database.AddObject(report); lock (CharMgr._report) CharMgr._report.Add(report); Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_MISC, GameData.Localized_text.TEXT_COPTER_GENERAL_FEEDBACK_SENT); foreach (Player plr in GmMgr.GmList) { plr.SendClientMessage("NEW_TICKET", ChatLogFilters.CHATLOGFILTERS_CHANNEL_9); } } break; case GameData.HelpType.HELPTYPE_CREATE_APPEAL_NON_VALIDATED: // CSR Appeal { GameData.AppealTopic Category = (GameData.AppealTopic)packet.GetUint8(); ushort MessageSize = packet.GetUint16R(); packet.Skip(2); string Message = ""; if (MessageSize > 0) { Message = packet.GetString(MessageSize - 1); } packet.Skip(1); byte FieldsCount = packet.GetUint8(); Bug_report report = new Bug_report(); report.Time = (uint)TCPManager.GetTimeStamp(); report.AccountId = (uint)Plr.Client._Account.AccountId; report.CharacterId = Plr.CharacterId; report.Type = (byte)Type; report.Category = (byte)Category; if (Message.Contains(";")) { Message = Message.Replace(';', ':'); } if (Message.Contains("^")) { Message = Message.Replace('^', ' '); } report.Message = Message; report.ZoneId = Plr.Zone.Info.ZoneId; report.X = (ushort)(Plr.X / 64); report.Y = (ushort)(Plr.Y / 64); report.Assigned = "nobody"; for (int i = 0; i < FieldsCount; i++) { GameData.HelpField FieldType = (GameData.HelpField)packet.GetUint8(); ushort FieldSize = packet.GetUint16R(); packet.Skip(2); string Field = packet.GetString(FieldSize - 1); packet.Skip(1); report.Fields.Add(new KeyValuePair <uint, string>((byte)FieldType, Field.Replace("|", "").Replace(":", ""))); } CharMgr.Database.AddObject(report); lock (CharMgr._report) CharMgr._report.Add(report); Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_MISC, GameData.Localized_text.TEXT_COPTER_GENERAL_FEEDBACK_SENT); foreach (Player plr in GmMgr.GmList) { plr.SendClientMessage("NEW_TICKET", ChatLogFilters.CHATLOGFILTERS_CHANNEL_9); } } break; case GameData.HelpType.HELPTYPE_CREATE_BUG_REPORT: // Bug Report case GameData.HelpType.HELPTYPE_CREATE_FEEDBACK: // Feedback { byte Category = packet.GetUint8(); ushort MessageSize = packet.GetUint16R(); packet.Skip(2); string Message = ""; if (MessageSize > 0) { Message = packet.GetString(MessageSize - 1); } Bug_report report = new Bug_report(); report.Time = (uint)TCPManager.GetTimeStamp(); report.AccountId = (uint)Plr.Client._Account.AccountId; report.CharacterId = Plr.CharacterId; report.Type = (byte)Type; report.Category = Category; if (Message.Contains(";")) { Message = Message.Replace(';', ':'); } if (Message.Contains("^")) { Message = Message.Replace('^', ' '); } report.Message = Message; report.ZoneId = Plr.Zone.Info.ZoneId; report.X = (ushort)(Plr.X / 64); report.Y = (ushort)(Plr.Y / 64); report.Assigned = "nobody"; CharMgr.Database.AddObject(report); lock (CharMgr._report) CharMgr._report.Add(report); Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_COPTER_GENERAL_FEEDBACK_SENT); foreach (Player plr in GmMgr.GmList) { plr.SendClientMessage("NEW_TICKET", ChatLogFilters.CHATLOGFILTERS_CHANNEL_9); } } break; } }
static public void F_PLAYER_STATE2(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; try { long Pos = packet.Position; PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_STATE2); Out.Write(packet.ToArray(), (int)packet.Position, (int)packet.Size); Out.WriteByte(0); Plr.DispatchPacket(Out, false); packet.Position = Pos; } catch (Exception e) { Log.Error("F_PLAYER_STATE2", e.ToString()); } if (packet.Size < 18) { Plr.IsMoving = false; return; } UInt16 Key = packet.GetUint16(); byte MoveByte = packet.GetUint8(); byte UnkByte = packet.GetUint8(); byte CombatByte = packet.GetUint8(); byte RotateByte = packet.GetUint8(); UInt16 Heading = packet.GetUint16R(); UInt16 X = packet.GetUint16R(); UInt16 Y = packet.GetUint16R(); byte Unk1 = packet.GetUint8(); UInt16 Z = packet.GetUint16R(); byte Unk2 = packet.GetUint8(); Heading /= 8; X /= 2; Y /= 2; Z /= 2; if (CombatByte >= 50 && CombatByte < 0x92 || CombatByte == 0xDF) { if (Plr.LastCX != 0 && Plr.LastCY != 0) { if (Plr.LastCX > 12288 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (X > 12288 && Plr.LastCX < 4096) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastCY > 24576 && Y < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Y > 24576 && Plr.LastCY < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastCX = X; Plr.LastCY = Y; X = Plr.Zone.CalculCombat(X, Plr.XOffset, true); Y = Plr.Zone.CalculCombat(Y, Plr.YOffset, false); Heading /= 2; Z += 32768; Z /= 4; } else { if (Plr.LastX != 0 && Plr.LastY != 0) { if (Plr.LastX > 24576 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (Plr.LastX < 4096 && X > 24576) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastY > 24576 && Y < 4096) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Plr.LastY < 4096 && Y > 24576) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastX = X; Plr.LastY = Y; X = Plr.Zone.CalculPin(X, Plr.XOffset, true); Y = Plr.Zone.CalculPin(Y, Plr.YOffset, false); } Plr.SetPosition(X, Y, Z, Heading); }
public static void F_GUILD_COMMAND(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying() || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; packet.Skip(2); UInt16 Target = packet.GetUint16(); // ? uint CharacterId = packet.GetUint32(); byte State = packet.GetUint8(); //Log.Info("state ",""+State); switch (State) { case 1: // Accepted Invite { if (Plr.GldInterface.invitedTo == null) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILD_INVITE_ERR_NOINVITE); return; } Plr.GldInterface.Guild = Plr.GldInterface.invitedTo; Plr.GldInterface.invitedTo = null; Plr.GldInterface.Guild.JoinGuild(Plr); } break; case 2: // Declined Invite { Plr.GldInterface.invitedTo = null; } break; case 3: // Leave Guild { if (!Plr.GldInterface.IsInGuild()) { return; } if (Plr.GldInterface.Guild.Info.LeaderId == Plr.CharacterId) { // wrong message Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_ALLIANCE_INVITE_ERROR); return; } Guild_member GldMem = Plr.GldInterface.Guild.Info.Members[Plr.CharacterId]; Plr.GldInterface.Guild.LeaveGuild(GldMem, false); } break; case 5: // Promote { if (!Plr.GldInterface.IsInGuild()) { return; } Plr.GldInterface.Guild.PromoteMember(Plr, CharacterId); } break; case 6: // Demote { if (!Plr.GldInterface.IsInGuild()) { return; } Plr.GldInterface.Guild.DemoteMember(Plr, CharacterId); } break; case 7: // Assign as leader { if (!Plr.GldInterface.IsInGuild()) { return; } Plr.GldInterface.Guild.AssignLeader(Plr, CharacterId); } break; case 9: // Guild NPC { PacketOut Out = new PacketOut((byte)Opcodes.F_INTERACT_RESPONSE, 4); Out.WriteByte(0x0e); Out.WriteByte(1); Out.WriteByte(1); Out.WriteByte(0); Plr.SendPacket(Out); Log.Info("GUILd", "CREATE"); } break; case 10: // Create guild { packet.Skip(1); String name = packet.GetStringToZero(); if (Plr.GldInterface.IsInGuild()) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_INVALIDREQ_GUILDED); } else if (Guild.GetGuild(name) != null) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_BAD_NAME); } else if (Plr.GmLevel > 0) { new GuildInvitation(Plr, name); } else if (Plr.WorldGroup == null) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_INVALIDREQ_NOTGROUPED); } else if (Plr.WorldGroup.GetLeader() != Plr) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_INVALIDREQ_NOTLEADER); } else if (!Plr.WorldGroup.HasMaxMembers) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_INVALIDREQ_NUMPLAYERS); } else { foreach (Player groupMember in Plr.WorldGroup.GetPlayerList()) { if (groupMember.GldInterface.IsInGuild()) { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILDNPC_INVALIDREQ_GUILDED); return; } } new GuildInvitation(Plr, name); } } break; case 16: // Accepted Alliance Invite { if (Plr.GldInterface.AllianceinvitedTo > 0) // alli invite { Plr.GldInterface.Guild.JoinAlliance(Plr.GldInterface.AllianceinvitedTo); Plr.GldInterface.AllianceinvitedTo = 0; } else if (Plr.GldInterface.AllianceFormGuildId > 0) // alli form { Plr.GldInterface.Guild.FormAlliance(Plr.GldInterface.AllianceFormName, Plr.GldInterface.AllianceFormGuildId); Plr.GldInterface.AllianceFormGuildId = 0; Plr.GldInterface.AllianceFormName = ""; } else { Plr.SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_GUILD_INVITE_ERR_NOINVITE); return; } } break; case 17: // Declined Alliance Invite { //CharMgr.GetCharacter().SendLocalizeString("", ChatLogFilters.CHATLOGFILTERS_SAY, GameData.Localized_text.TEXT_ALLIANCE_INVITE_DECLINED); Plr.GldInterface.AllianceinvitedTo = 0; } break; case 21: // buy tactic { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(1); string spell = packet.GetStringToZero(); Plr.GldInterface.Guild.TrainGuildTactics((byte)CharacterId, ushort.Parse(spell)); } break; case 22: // calendar create { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(156); UInt32 begin = packet.GetUint32(); UInt32 end = packet.GetUint32(); String name = packet.GetPascalString(); String description = packet.GetPascalString(); byte alliance = packet.GetUint8(); byte locked = packet.GetUint8(); Plr.GldInterface.Guild.CreateEvent(Plr.GetPlayer().CharacterId, begin, end, name, description, alliance, locked); } break; case 23: // calendar save { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); UInt32 begin = packet.GetUint32(); UInt32 end = packet.GetUint32(); String name = packet.GetPascalString(); String description = packet.GetPascalString(); byte alliance = packet.GetUint8(); byte locked = packet.GetUint8(); Plr.GldInterface.Guild.EventEdit(Plr, eventid, guildid, begin, end, name, description, alliance, locked); } break; case 24: // calendar delete { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); Plr.GldInterface.Guild.DeleteEvent(Plr, eventid, guildid); } break; case 25: // calendar signup { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); Plr.GldInterface.Guild.EventSignup(Plr, eventid, guildid); } break; case 26: // calendar signup cancel { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); Plr.GldInterface.Guild.EventSignupCancel(Plr, eventid, guildid); } break; case 27: // calendar signup kick { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); uint characterid = packet.GetUint32R(); Plr.GldInterface.Guild.EventSignupKick(Plr, eventid, guildid, characterid); } break; case 28: // calendar signup approved { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(151); byte eventid = packet.GetUint8(); uint guildid = packet.GetUint32R(); uint charid = packet.GetUint32R(); Plr.GldInterface.Guild.EventSignupApproved(Plr, eventid, guildid, charid); } break; case 29: // banner save { packet.Skip(151); byte banner = packet.GetUint8(); byte post = packet.GetUint8(); packet.Skip(1); ushort spell1 = packet.GetUint16R(); packet.Skip(2); ushort spell2 = packet.GetUint16R(); packet.Skip(2); ushort spell3 = packet.GetUint16R(); Plr.GldInterface.Guild.SaveBanner((byte)(banner - 1), post, spell1, spell2, spell3); } break; case 30: // reserve banner { packet.Skip(151); ushort emblem = packet.GetUint16R(); ushort pattern = packet.GetUint16R(); byte color1 = packet.GetUint8(); byte color2 = packet.GetUint8(); byte shape = packet.GetUint8(); Plr.GldInterface.Guild.ReserveBanner(Plr, emblem, pattern, color1, color2, shape); } break; case 37: //close guild vault { Plr.GldInterface.Guild.GuildVaultClosed(Plr); } break; case 38: // Drop item to guild vault { packet.Skip(151); byte sourceVault = packet.GetUint8(); // will be > 0 if item transfer from player to vault ushort itemSlot = packet.GetUint16R(); packet.Skip(2); byte destVault = packet.GetUint8(); ushort slot = packet.GetUint16R(); //Log.Info("slot", "" + slot + " vault " + Vault+" unk:"+Itemslot); if (sourceVault != 0 && destVault != 0) { Plr.GldInterface.Guild.MoveVaultItem(Plr, sourceVault, itemSlot, destVault, slot); } else if (sourceVault == 0) { Plr.GldInterface.Guild.DepositVaultItem(Plr, destVault, slot, itemSlot); } else { Plr.GldInterface.Guild.WithdrawVaultItem(Plr, sourceVault, itemSlot, slot); } } break; case 39: // Deposit money to guild vault { packet.Skip(151); uint Money = packet.GetUint32R(); Plr.GldInterface.Guild.DepositMoney(Plr, Money); } break; case 40: // Withdraw money to guild vault { packet.Skip(151); uint Money = packet.GetUint32R(); Plr.GldInterface.Guild.WithdrawMoney(Plr, Money); } break; case 41: // Lock item in guild vault { packet.Skip(151); byte Vault = packet.GetUint8(); byte slot = packet.GetUint8(); // Log.Info("slot", "" + slot + " vault " + Vault); Plr.GldInterface.Guild.LockVaultItem(Plr, Vault, slot, 0); } break; case 42: // cancel guild vault item move { packet.Skip(151); byte Vault = packet.GetUint8(); byte slot = packet.GetUint8(); // Log.Info("slot", "" + slot + " vault " + Vault); Plr.GldInterface.Guild.ReleaseVaultItemLock(Plr, Vault, slot); } break; case 46: // Update recruit page save { if (!Plr.GldInterface.IsInGuild()) { return; } packet.Skip(152); String BriefDescription = packet.GetPascalString(); //might be ushort for size String Summary = packet.GetString(packet.GetUint16()); byte PlayStyle = packet.GetUint8(); byte Atmosphere = packet.GetUint8(); uint CareersNeeded = packet.GetUint32(); packet.Skip(3); byte RanksNeeded = packet.GetUint8(); packet.Skip(3); byte Interests = packet.GetUint8(); packet.Skip(3); byte ActivelyRecruiting = packet.GetUint8(); //packet.Skip(6); Plr.GldInterface.Guild.SetRecruitmentInfo(BriefDescription, Summary, PlayStyle, Atmosphere, CareersNeeded, RanksNeeded, Interests, ActivelyRecruiting); } break; case 47: // Search guilds { packet.Skip(151); byte Style = packet.GetUint8(); byte Atmosphere = packet.GetUint8(); packet.Skip(7); byte MyLevelCareer = packet.GetUint8(); packet.Skip(2); ushort Pop = packet.GetUint16(); packet.Skip(3); byte Online = packet.GetUint8(); packet.Skip(3); byte Rank = packet.GetUint8(); Plr.GldInterface.SendGuilds(Guild.GetGuilds(Plr.Realm, Style, Atmosphere, MyLevelCareer, Plr.Level, Plr.Info.Career, Pop, Online, Rank)); } break; case 52: // guild tactic respec { Plr.GldInterface.Guild.GuildsTacticRespec(Plr); } break; case 53: // Buy Guild Vault Slot { packet.Skip(151); byte Vault = packet.GetUint8(); uint Money = packet.GetUint32R(); // Log.Info("", "vault " + Vault+" prize"+Money); Plr.GldInterface.Guild.BuyVaultSlot(Plr, Vault, Money); } break; } }
static public void F_PLAYER_STATE2(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; long Pos = packet.Position; PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_STATE2); Out.Write(packet.ToArray(), (int)packet.Position, (int)packet.Size); Out.WriteByte(0); Plr.DispatchPacket(Out, false); packet.Position = Pos; UInt16 Key = packet.GetUint16(); byte Type = packet.GetUint8(); byte MoveingState = packet.GetUint8(); byte CombatByte = packet.GetUint8(); byte Strafe = packet.GetUint8(); UInt16 Heading = packet.GetUint16R(); UInt16 X = packet.GetUint16R(); UInt16 Y = packet.GetUint16R(); byte Unk1 = packet.GetUint8(); UInt16 Z = packet.GetUint16R(); byte zmod = packet.GetUint8(); //Log.Success("zMod ",""+zmod); // zmod is somewhat strange what i found out so far // z mod is 255 while standing // z mod is 0 while running and z is below 65535 // z mod is 1 while running and z is above 65535 // z mod can be 113 / 97 / 115 / 99 while running and z is below 65535 and enemy in target // z mod is 99 / 100 / 116 while running and z is above 65535 and enemy in target // z mod is 4 while running in water // z mod is 68 while swimming in water // z mod is ticking with 255 7 times then 68 while standing in deep water // z mod is 12 while running in water (that should lower your health / kill you and reduce movement speed) // z mod is ticking with 255 7 times then 12 while standing in lava if (packet.Size < 10) { return; } int z_temp = Z; Heading /= 8; X /= 2; Y /= 2; // z update if z is higher then 65535 if (zmod != 0 && zmod != 97 && zmod != 113 && zmod != 99 && zmod != 115) { z_temp += 65535; } if (Type != (byte)MovementTypes.NotMoving) { Plr.IsMoving = true; } else { Plr.IsMoving = false; } //Log.Success("Movement Before ", X + "," + Y + "," + Z); if (CombatByte >= 50 && CombatByte < 0x92 || CombatByte == 0xDF) { if (Plr.LastCX != 0 && Plr.LastCY != 0) { if (Plr.LastCX > 12288 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (X > 12288 && Plr.LastCX < 4096) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastCY > 24576 && Y < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Y > 24576 && Plr.LastCY < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastCX = X; Plr.LastCY = Y; X = Plr.Zone.CalculCombat(X, Plr.XOffset, true); Y = Plr.Zone.CalculCombat(Y, Plr.YOffset, false); Heading /= 2; z_temp /= 16; // combat offset z if (Plr._ZoneMgr.ZoneId == 161 || Plr._ZoneMgr.ZoneId == 162) { z_temp += 12288; } else { z_temp += 4096; } } else { if (Plr.LastX != 0 && Plr.LastY != 0) { if (Plr.LastX > 24576 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (Plr.LastX < 4096 && X > 24576) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastY > 24576 && Y < 4096) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Plr.LastY < 4096 && Y > 24576) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastX = X; Plr.LastY = Y; X = Plr.Zone.CalculPin(X, Plr.XOffset, true); Y = Plr.Zone.CalculPin(Y, Plr.YOffset, false); z_temp /= 4; } // if (Plr.IsInWorld() && Plr.Zone.ZoneId == 161) // Z += 16384; //Log.Success("Movement after", "X=" + X + ",Y=" + Y + ",Z=" + Z + ",ztemp = " + z_temp + "," + Type + "," + Unk1 + "," + CombatByte); Plr.SetPosition(X, Y, (ushort)z_temp, Heading); }
static public void F_PLAYER_STATE2(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; long Pos = packet.Position; PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_STATE2); Out.Write(packet.ToArray(), (int)packet.Position, (int)packet.Size); Out.WriteByte(0); Plr.DispatchPacket(Out, false); packet.Position = Pos; UInt16 Key = packet.GetUint16(); byte Type = packet.GetUint8(); byte MoveingState = packet.GetUint8(); byte CombatByte = packet.GetUint8(); byte Strafe = packet.GetUint8(); UInt16 Heading = packet.GetUint16R(); UInt16 X = packet.GetUint16R(); UInt16 Y = packet.GetUint16R(); byte Unk1 = packet.GetUint8(); UInt16 Z = packet.GetUint16R(); if (packet.Size < 10) { return; } Heading /= 8; X /= 2; Y /= 2; Z /= 2; if (Type != (byte)MovementTypes.NotMoving) { Plr.IsMoving = true; } else { Plr.IsMoving = false; } //Log.Success("Movement Before ", X + "," + Y + "," + Z); if (CombatByte >= 50 && CombatByte < 0x92 || CombatByte == 0xDF) { if (Plr.LastCX != 0 && Plr.LastCY != 0) { if (Plr.LastCX > 12288 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (X > 12288 && Plr.LastCX < 4096) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastCY > 24576 && Y < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Y > 24576 && Plr.LastCY < 8192) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastCX = X; Plr.LastCY = Y; X = Plr.Zone.CalculCombat(X, Plr.XOffset, true); Y = Plr.Zone.CalculCombat(Y, Plr.YOffset, false); Heading /= 2; Z += 32768; Z /= 4; Z /= 2; } else { if (Plr.LastX != 0 && Plr.LastY != 0) { if (Plr.LastX > 24576 && X < 4096) { Plr.SetOffset((ushort)(Plr.XOffset + 1), Plr.YOffset); } else if (Plr.LastX < 4096 && X > 24576) { Plr.SetOffset((ushort)(Plr.XOffset - 1), Plr.YOffset); } if (Plr.LastY > 24576 && Y < 4096) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset + 1)); } else if (Plr.LastY < 4096 && Y > 24576) { Plr.SetOffset(Plr.XOffset, (ushort)(Plr.YOffset - 1)); } } Plr.LastX = X; Plr.LastY = Y; X = Plr.Zone.CalculPin(X, Plr.XOffset, true); Y = Plr.Zone.CalculPin(Y, Plr.YOffset, false); Z /= 2; } if (Plr.IsInWorld() && Plr.Zone.ZoneId == 161) { Z += 16384; } //Log.Success("Movement after", "X=" + X + ",Y=" + Y + ",Z=" + Z + "," + Type + "," + Unk1 + "," + CombatByte); Plr.SetPosition(X, Y, Z, Heading); }