예제 #1
0
        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();
            }
        }
예제 #2
0
        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));*/
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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;
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }