Esempio n. 1
0
        // Team Request Reply : CharAction 23

        public void TeamRequestReplyCharacterAction23(Client sendingPlayer, Identity recievingPlayer)
        {
            // Accept Team Request CharAction Hex:23
            PacketWriter pktCharAction23 = new PacketWriter();

            pktCharAction23.PushByte(0xDF);
            pktCharAction23.PushByte(0xDF);                                  // Header
            pktCharAction23.PushShort(0xA);                                  // Packet Type
            pktCharAction23.PushShort(1);                                    // Unknown 1
            pktCharAction23.PushShort(0);                                    // Legnth
            pktCharAction23.PushInt(3086);                                   // Sender
            pktCharAction23.PushInt(sendingPlayer.Character.Id);             // Reciever
            pktCharAction23.PushInt(0x5e477770);                             // Packet ID
            pktCharAction23.PushIdentity(50000, sendingPlayer.Character.Id); // TYPE / ID
            pktCharAction23.PushByte(0);
            pktCharAction23.PushInt(0x23);                                   // Action ID
            pktCharAction23.PushInt(0);
            pktCharAction23.PushInt(50000);
            pktCharAction23.PushInt(sendingPlayer.Character.Id);
            pktCharAction23.PushInt(0xDEA9);    // Team Window Information ??
            pktCharAction23.PushInt(0x2EA0022); // Team ID Variable Goes Here
            pktCharAction23.PushShort(0);
            byte[] packet = pktCharAction23.Finish();

            // IF Statement Determining Destination Client to Send Packet To

            Client receiver = FindClient.FindClientById(sendingPlayer.Character.Id);

            if (receiver != null)
            {
                receiver.SendCompressed(packet);
            }
        }
Esempio n. 2
0
        // Team Request Reply : CharAction 15

        public void TeamRequestReply(Client sendingPlayer, Identity recievingPlayer)
        {
            // Accept Team Request CharAction Hex:15
            PacketWriter pktCharAction15 = new PacketWriter();

            pktCharAction15.PushByte(0xDF);
            pktCharAction15.PushByte(0xDF);                                  // Header
            pktCharAction15.PushShort(0xA);                                  // Packet Type
            pktCharAction15.PushShort(1);                                    // Unknown 1
            pktCharAction15.PushShort(0);                                    // Legnth
            pktCharAction15.PushInt(3086);                                   // Sender
            pktCharAction15.PushInt(sendingPlayer.Character.Id);             // Reciever
            pktCharAction15.PushInt(0x5e477770);                             // Packet ID
            pktCharAction15.PushIdentity(50000, sendingPlayer.Character.Id); // TYPE / ID
            pktCharAction15.PushByte(0);
            pktCharAction15.PushInt(0x15);                                   // Action ID
            pktCharAction15.PushInt(0);
            pktCharAction15.PushInt(0);
            pktCharAction15.PushInt(0);
            pktCharAction15.PushInt(0);
            pktCharAction15.PushInt(0x11); // ??
            pktCharAction15.PushShort(0);
            byte[] characterAction15Packet = pktCharAction15.Finish();

            // IF Statement Determining Destination Client to Send Packet To

            Client receiver = FindClient.FindClientById(sendingPlayer.Character.Id);

            if (receiver != null)
            {
                receiver.SendCompressed(characterAction15Packet);
            }
        }
Esempio n. 3
0
        public void SendTeamRequest(Client sendingPlayer, Identity recievingPlayer)
        {
            if (sendingPlayer.Character.Id != recievingPlayer.Instance)
            {
                // Send Team Request To Other Player

                PacketWriter pktTeamRequest = new PacketWriter();
                pktTeamRequest.PushByte(0xDF);
                pktTeamRequest.PushByte(0xDF);                    // Header
                pktTeamRequest.PushShort(0xA);                    // Packet Type
                pktTeamRequest.PushShort(1);                      // Unknown 1
                pktTeamRequest.PushShort(0);                      // Legnth
                pktTeamRequest.PushInt(3086);                     // Sender
                pktTeamRequest.PushInt(recievingPlayer.Instance); // Reciever
                pktTeamRequest.PushInt(0x5e477770);               // Packet ID
                pktTeamRequest.PushIdentity(recievingPlayer);     // TYPE / ID
                pktTeamRequest.PushInt(0);
                pktTeamRequest.PushByte(0x1A);                    // Action ID
                pktTeamRequest.PushInt(0);
                pktTeamRequest.PushInt(recievingPlayer.Type);
                pktTeamRequest.PushInt(sendingPlayer.Character.Id);
                pktTeamRequest.PushInt(0);
                pktTeamRequest.PushInt(1);
                pktTeamRequest.PushShort(0);

                byte[] teamRequestPacket = pktTeamRequest.Finish();
                Client receiver          = FindClient.FindClientById(recievingPlayer.Instance);
                if (receiver != null)
                {
                    receiver.SendCompressed(teamRequestPacket);
                }
            }
        }
Esempio n. 4
0
        public static void Read(byte[] packet, Client client)
        {
            PacketReader packetReader = new PacketReader(packet);

            Header header = packetReader.PopHeader();

            packetReader.PopByte();
            packetReader.PopShort();
            Identity identity = packetReader.PopIdentity();

            NonPlayerCharacterClass npc =
                (NonPlayerCharacterClass)FindDynel.FindDynelById(identity.Type, identity.Instance);
            Character character = FindClient.FindClientById(header.Sender).Character;

            packetReader.PopInt();
            packetReader.PopInt();
            packetReader.PopInt();
            int container = packetReader.PopInt();
            int place     = packetReader.PopInt();

            InventoryEntries ie  = character.GetInventoryAt(place);
            AOItem           aoi = ie.Item.ShallowCopy();

            character.Inventory.Remove(ie); // Silent remove, no message given to client. Client handles this on its own
            npc.KnuBotTrade(character, aoi);
        }
Esempio n. 5
0
        public override void ExecuteCommand(Client client, Identity target, string[] args)
        {
            List <Type> check = new List <Type>();

            check.Add(typeof(float));
            check.Add(typeof(float));
            check.Add(typeof(int));

            AOCoord coord = new AOCoord();
            int     pf    = client.Character.PlayField;

            if (CheckArgumentHelper(check, args))
            {
                coord = new AOCoord(
                    float.Parse(args[1], NumberStyles.Any, CultureInfo.InvariantCulture),
                    client.Character.Coordinates.y,
                    float.Parse(args[2], NumberStyles.Any, CultureInfo.InvariantCulture));
                pf = int.Parse(args[3]);
            }

            check.Clear();
            check.Add(typeof(float));
            check.Add(typeof(float));
            check.Add(typeof(string));
            check.Add(typeof(float));
            check.Add(typeof(int));

            if (CheckArgumentHelper(check, args))
            {
                coord = new AOCoord(
                    float.Parse(args[1], NumberStyles.Any, CultureInfo.InvariantCulture),
                    float.Parse(args[4], NumberStyles.Any, CultureInfo.InvariantCulture),
                    float.Parse(args[2], NumberStyles.Any, CultureInfo.InvariantCulture));
                pf = int.Parse(args[5]);
            }

            if (!Playfields.ValidPlayfield(pf))
            {
                client.SendFeedback(110, 188845972);
                return;
            }

            Client mClient = null;

            if ((mClient = FindClient.FindClientById(target.Instance)) == null)
            {
                client.SendChatText("Target not found");
                return;
            }

            mClient.Teleport(coord, mClient.Character.Heading, pf);
        }
Esempio n. 6
0
        public static void Read(byte[] packet)
        {
            PacketReader packetReader = new PacketReader(packet);

            Header header = packetReader.PopHeader();

            packetReader.PopByte();
            packetReader.PopShort();
            int type     = packetReader.PopInt();
            int instance = packetReader.PopInt();
            NonPlayerCharacterClass npc = (NonPlayerCharacterClass)FindDynel.FindDynelById(type, instance);
            Character character         = FindClient.FindClientById(header.Sender).Character;

            character.KnuBotTarget = npc;
        }
Esempio n. 7
0
        // Team Reply Packet 28784248 : TeamMemberInfo + health and nano?????

        public void TeamReplyPacketTeamMemberInfo(int destinationClient, Client sendingPlayer, Identity recievingPlayer)
        {
            PacketWriter packetWriter = new PacketWriter();

            packetWriter.PushByte(0xDF);
            packetWriter.PushByte(0xDF); // Header
            packetWriter.PushShort(0xA); // Packet Type
            packetWriter.PushShort(1);   // Unknown 1
            packetWriter.PushShort(0);   // Legnth
            packetWriter.PushInt(3086);  // Sender

            switch (destinationClient)
            {
            case 0:
                packetWriter.PushInt(sendingPlayer.Character.Id);             // Reciever
                packetWriter.PushInt(0x46312D2E);                             // Packet ID
                packetWriter.PushIdentity(50000, sendingPlayer.Character.Id); // TYPE / ID
                packetWriter.PushInt(0);
                packetWriter.PushIdentity(50000, sendingPlayer.Character.Id); // Team Member Information
                packetWriter.PushInt(0x05F4);                                 // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x05F4);                                 // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x02F4);                                 // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x02F4);                                 // HP/NANO?? Actual/MAX???
                packetWriter.PushShort(0);
                byte[] packet   = packetWriter.Finish();
                Client receiver = FindClient.FindClientById(recievingPlayer.Instance);
                if (receiver != null)
                {
                    receiver.SendCompressed(packet);
                }
                break;

            case 1:
                packetWriter.PushInt(recievingPlayer.Instance);             // Reciever
                packetWriter.PushInt(0x46312D2E);                           // Packet ID
                packetWriter.PushIdentity(50000, recievingPlayer.Instance); // TYPE / ID
                packetWriter.PushInt(0);
                packetWriter.PushIdentity(50000, recievingPlayer.Instance); // Team Member Information
                packetWriter.PushInt(0x05F4);                               // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x05F4);                               // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x02F4);                               // HP/NANO?? Actual/MAX???
                packetWriter.PushInt(0x02F4);                               // HP/NANO?? Actual/MAX???
                packetWriter.PushShort(0);
                byte[] packet2 = packetWriter.Finish();
                sendingPlayer.SendCompressed(packet2);
                break;
            }
        }
Esempio n. 8
0
        public override void ExecuteCommand(Client client, Identity target, string[] args)
        {
            Client mClient = null;

            if (target.Type != 50000)
            {
                client.SendChatText("Target must be player");
                return;
            }
            if ((mClient = FindClient.FindClientById(target.Instance)) != null)
            {
                mClient.Character.LastName  = "";
                mClient.Character.FirstName = "";
                mClient.Character.WriteNames();
                client.SendChatText(mClient.Character.Name + "'s names have been reset.");
            }
        }
Esempio n. 9
0
        public static void Read(byte[] packet, Client client)
        {
            PacketReader packetReader = new PacketReader(packet);

            Header header = packetReader.PopHeader();

            packetReader.PopByte();
            packetReader.PopShort();
            int type     = packetReader.PopInt();
            int instance = packetReader.PopInt();
            NonPlayerCharacterClass npc = (NonPlayerCharacterClass)FindDynel.FindDynelById(type, instance);
            Character ch = FindClient.FindClientById(header.Sender).Character;

            if (npc != null)
            {
                npc.KnuBotFinishTrade(ch, packetReader.PopInt());
            }
        }
Esempio n. 10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="client"></param>
        public static void Read(byte[] packet, Client client)
        {
            PacketReader reader = new PacketReader(packet);

            Header header = reader.PopHeader();

            reader.PopByte();
            byte     cmd     = reader.PopByte();
            Identity target  = reader.PopIdentity();
            int      unknown = reader.PopInt();
            string   cmdStr  = "";
            byte     CmdByte = 0;

            #region cmd args
            switch (cmd)
            {
            case 1:
            case 7:
            case 9:
            case 13:
            case 17:
            case 19:
            case 20:
            case 21:
            case 23:
            case 24:
            case 25:
            case 26:
            case 27:
            case 28:
                short cmdStrLen = reader.PopShort();
                cmdStr = reader.PopString(cmdStrLen);
                break;

            case 10:
                CmdByte = reader.PopByte();
                break;

            default:
                break;
            }
            reader.Finish();
            #endregion

            SqlWrapper ms = new SqlWrapper();
            DataTable  dt;

            #region cmd handlers
            switch (cmd)
            {
                #region /org create <name>
            case 1:
            {
                // org create

                /* client wants to create organization
                 * name of org is CmdStr
                 */

                string sqlQuery  = "SELECT * FROM organizations WHERE Name='" + cmdStr + "'";
                string guildName = null;
                uint   orgID     = 0;
                dt = ms.ReadDatatable(sqlQuery);
                if (dt.Rows.Count > 0)
                {
                    guildName = (string)dt.Rows[0]["Name"];
                }

                if (guildName == null)
                {
                    client.SendChatText("You have created the guild: " + cmdStr);

                    string currentDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    string sqlQuery2   =
                        "INSERT INTO organizations (Name, creation, LeaderID, GovernmentForm) VALUES ('"
                        + cmdStr + "', '" + currentDate + "', '" + client.Character.Id + "', '0')";
                    ms.SqlInsert(sqlQuery2);
                    string sqlQuery3 = "SELECT * FROM organizations WHERE Name='" + cmdStr + "'";
                    dt = ms.ReadDatatable(sqlQuery3);
                    if (dt.Rows.Count > 0)
                    {
                        orgID = (UInt32)dt.Rows[0]["ID"];
                    }

                    // Make sure the order of these next two lines is not swapped -NV
                    client.Character.Stats.ClanLevel.Set(0);
                    client.Character.OrgId = orgID;
                    break;
                }
                else
                {
                    client.SendChatText("This guild already <font color=#DC143C>exists</font>");
                    break;
                }
            }
                #endregion

                #region /org ranks
            case 2:
                // org ranks
                //Displays Org Rank Structure.
                /* Select governingform from DB, Roll through display from GovForm */
                if (client.Character.OrgId == 0)
                {
                    client.SendChatText("You're not in an organization!");
                    break;
                }
                string ranksSql      = "SELECT GovernmentForm FROM organizations WHERE ID = " + client.Character.OrgId;
                int    governingForm = -1;
                dt = ms.ReadDatatable(ranksSql);
                if (dt.Rows.Count > 0)
                {
                    governingForm = (Int32)dt.Rows[0]["GovernmentForm"];
                }
                client.SendChatText("Current Rank Structure: " + GetRankList(governingForm));
                break;
                #endregion

                #region /org contract
            case 3:
                // org contract
                break;
                #endregion

                #region unknown org command 4
            case 4:
                Console.WriteLine("Case 4 Started");
                break;
                #endregion

                #region /org info
            case 5:
            {
                Client tPlayer = null;
                if ((tPlayer = FindClient.FindClientById(target.Instance)) != null)
                {
                    string orgDescription = "", orgObjective = "", orgHistory = "", orgLeaderName = "";
                    int    orgGoverningForm = 0, orgLeaderID = 0;
                    dt = ms.ReadDatatable("SELECT * FROM organizations WHERE ID=" + tPlayer.Character.OrgId);

                    if (dt.Rows.Count > 0)
                    {
                        orgDescription   = (string)dt.Rows[0]["Description"];
                        orgObjective     = (string)dt.Rows[0]["Objective"];
                        orgHistory       = (string)dt.Rows[0]["History"];
                        orgGoverningForm = (Int32)dt.Rows[0]["GovernmentForm"];
                        orgLeaderID      = (Int32)dt.Rows[0]["LeaderID"];
                    }

                    dt = ms.ReadDatatable("SELECT Name FROM characters WHERE ID=" + orgLeaderID);
                    if (dt.Rows.Count > 0)
                    {
                        orgLeaderName = (string)dt.Rows[0][0];
                    }

                    string textGovForm = null;
                    if (orgGoverningForm == 0)
                    {
                        textGovForm = "Department";
                    }
                    else if (orgGoverningForm == 1)
                    {
                        textGovForm = "Faction";
                    }
                    else if (orgGoverningForm == 2)
                    {
                        textGovForm = "Republic";
                    }
                    else if (orgGoverningForm == 3)
                    {
                        textGovForm = "Monarchy";
                    }
                    else if (orgGoverningForm == 4)
                    {
                        textGovForm = "Anarchism";
                    }
                    else if (orgGoverningForm == 5)
                    {
                        textGovForm = "Feudalism";
                    }
                    else
                    {
                        textGovForm = "Department";
                    }
                    string       orgRank      = GetRank(orgGoverningForm, tPlayer.Character.Stats.ClanLevel.StatBaseValue);
                    PacketWriter packetWriter = new PacketWriter();
                    packetWriter.PushBytes(new byte[] { 0xDF, 0xDF });
                    packetWriter.PushShort(10);
                    packetWriter.PushShort(1);
                    packetWriter.PushShort(0);
                    packetWriter.PushInt(3086);
                    packetWriter.PushInt(client.Character.Id);
                    packetWriter.PushInt(0x64582A07);
                    packetWriter.PushIdentity(50000, tPlayer.Character.Id);
                    packetWriter.PushByte(0);
                    packetWriter.PushByte(2);         // OrgServer case 0x02 (Org Info)
                    packetWriter.PushInt(0);
                    packetWriter.PushInt(0);
                    packetWriter.PushInt(0xDEAA);                   // Type (org)
                    packetWriter.PushUInt(tPlayer.Character.OrgId); // org ID
                    packetWriter.PushShort((short)tPlayer.Character.OrgName.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(tPlayer.Character.OrgName));
                    packetWriter.PushShort((short)orgDescription.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(orgDescription));
                    packetWriter.PushShort((short)orgObjective.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(orgObjective));
                    packetWriter.PushShort((short)orgHistory.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(orgHistory));
                    packetWriter.PushShort((short)textGovForm.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(textGovForm));
                    packetWriter.PushShort((short)orgLeaderName.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(orgLeaderName));
                    packetWriter.PushShort((short)orgRank.Length);
                    packetWriter.PushBytes(Encoding.ASCII.GetBytes(orgRank));
                    packetWriter.Push3F1Count(0);
                    byte[] reply = packetWriter.Finish();

                    client.SendCompressed(reply);
                }
            }
            break;
                #endregion

                #region /org disband
            case 6:
                break;
                #endregion

                #region /org startvote <text> <duration> <entries>
            case 7:
                // org startvote <"text"> <duration(minutes)> <entries>
                // arguments (<text> <duration> and <entries>) are in CmdStr
                break;
                #endregion

                #region /org vote info
            case 8:
                // org vote info
                break;
                #endregion

                #region /org vote <entry>
            case 9:
                // <entry> is CmdStr
                break;
                #endregion

                #region /org promote
            case 10:
            {
                // some arg in CmdByte. No idea what it is

                //create the target namespace t_promote
                Client toPromote     = null;
                string promoteSql    = "";
                int    targetOldRank = -1;
                int    targetNewRank = -1;
                int    newPresRank   = -1;
                int    oldPresRank   = 0;
                if ((toPromote = FindClient.FindClientById(target.Instance)) != null)
                {
                    //First we check if target is in the same org as you
                    if (toPromote.Character.OrgId != client.Character.OrgId)
                    {
                        //not in same org
                        client.SendChatText("Target is not in your organization!");
                        break;
                    }
                    //Target is in same org, are you eligible to promote?  Promoter Rank has to be TargetRank-2 or == 0
                    if ((client.Character.Stats.ClanLevel.Value
                         == (toPromote.Character.Stats.ClanLevel.Value - 2)) ||
                        (client.Character.Stats.ClanLevel.Value == 0))
                    {
                        //Promoter is eligible. Start the process

                        //First we get the details about the org itself
                        promoteSql = "SELECT * FROM organizations WHERE ID = " + client.Character.OrgId;
                        dt         = ms.ReadDatatable(promoteSql);

                        int    promoteGovForm  = -1;
                        string promotedToRank  = "";
                        string demotedFromRank = "";

                        if (dt.Rows.Count > 0)
                        {
                            promoteGovForm = (Int32)dt.Rows[0]["GovernmentForm"];
                        }

                        //Check if new rank == 0, if so, demote promoter
                        if ((targetOldRank - 1) == 0)
                        {
                            /* This is a bit more complex.  Here we need to promote new president first
                             * then we go about demoting old president
                             * finally we set the new leader in Sql
                             * Reset OrgName to set changes
                             */

                            // Set new President's Rank
                            targetOldRank  = toPromote.Character.Stats.ClanLevel.Value;
                            targetNewRank  = targetOldRank - 1;
                            promotedToRank = GetRank(promoteGovForm, (uint)targetNewRank);
                            toPromote.Character.Stats.ClanLevel.Set(targetNewRank);
                            // Demote the old president
                            oldPresRank     = client.Character.Stats.ClanLevel.Value;
                            newPresRank     = oldPresRank + 1;
                            demotedFromRank = GetRank(promoteGovForm, (uint)newPresRank);
                            client.Character.Stats.ClanLevel.Set(newPresRank);
                            //Change the leader id in Sql
                            string newLeadSql = "UPDATE organizations SET LeaderID = " + toPromote.Character.Id
                                                + " WHERE ID = " + toPromote.Character.OrgId;
                            ms.SqlUpdate(newLeadSql);
                            client.SendChatText(
                                "You've passed leadership of the organization to: " + toPromote.Character.Name);
                            toPromote.SendChatText(
                                "You've been promoted to the rank of " + promotedToRank + " by "
                                + client.Character.Name);
                            break;
                        }
                        else
                        {
                            //Just Promote
                            targetOldRank  = toPromote.Character.Stats.ClanLevel.Value;
                            targetNewRank  = targetOldRank - 1;
                            promotedToRank = GetRank(promoteGovForm, (uint)targetNewRank);
                            toPromote.Character.Stats.ClanLevel.Set(targetNewRank);
                            client.SendChatText(
                                "You've promoted " + toPromote.Character.Name + " to " + promotedToRank);
                            toPromote.SendChatText(
                                "You've been promoted to the rank of " + promotedToRank + " by "
                                + client.Character.Name);
                        }
                    }
                    else
                    {
                        //Promoter not eligible to promote
                        client.SendChatText(
                            "Your Rank is not high enough to promote " + toPromote.Character.Name);
                        break;
                    }
                }
                break;
            }
                #endregion

                #region /org demote
            case 11:
                // demote target player
                //create the target namespace t_demote
                Client toDemote        = null;
                string demoteSql       = "";
                int    targetCurRank   = -1;
                int    targetNewerRank = -1;
                if ((toDemote = FindClient.FindClientById(target.Instance)) != null)
                {
                    //First we check if target is in the same org as you
                    if (toDemote.Character.OrgId != client.Character.OrgId)
                    {
                        //not in same org
                        client.SendChatText("Target is not in your organization!");
                        break;
                    }
                    //Target is in same org, are you eligible to demote?  Promoter Rank has to be TargetRank-2 or == 0
                    if ((client.Character.Stats.GMLevel.Value == (toDemote.Character.Stats.ClanLevel.Value - 2)) ||
                        (client.Character.Stats.ClanLevel.Value == 0))
                    {
                        //Promoter is eligible. Start the process

                        //First we get the details about the org itself
                        demoteSql = "SELECT GovernmentForm FROM organizations WHERE ID = " + client.Character.OrgId;
                        dt        = ms.ReadDatatable(demoteSql);
                        int    demoteGovForm = -1;
                        string demotedToRank = "";
                        if (dt.Rows.Count > 0)
                        {
                            demoteGovForm = (Int32)dt.Rows[0]["GovernmentForm"];
                        }

                        //Check whether new rank would be lower than lowest for current govform
                        if ((targetCurRank + 1) > GetLowestRank(demoteGovForm))
                        {
                            client.SendChatText("You can't demote character any lower!");
                            break;
                        }
                        targetCurRank   = toDemote.Character.Stats.GMLevel.Value;
                        targetNewerRank = targetCurRank + 1;
                        demotedToRank   = GetRank(demoteGovForm, (uint)targetNewerRank);
                        toDemote.Character.Stats.ClanLevel.Set(targetNewerRank);
                        client.SendChatText("You've demoted " + toDemote.Character.Name + " to " + demotedToRank);
                        toDemote.SendChatText(
                            "You've been demoted to the rank of " + demotedToRank + " by " + client.Character.Name);
                        break;
                    }
                    else
                    {
                        //Promoter not eligible to promote
                        client.SendChatText("Your Rank is not high enough to demote " + toDemote.Character.Name);
                        break;
                    }
                }
                break;
                #endregion

                #region unknown org command 12
            case 12:
                Console.WriteLine("Case 12 Started");
                break;
                #endregion

                #region /org kick <name>
            case 13:
                // kick <name> from org
                // <name> is CmdStr

                //create the t_player Client namespace, using CmdStr to find character id, in replacement of target.Instance
                uint   kickedFrom = client.Character.OrgId;
                string kickeeSql  = "SELECT * FROM characters WHERE Name = '" + cmdStr + "'";
                int    kickeeId   = 0;
                dt = ms.ReadDatatable(kickeeSql);
                if (dt.Rows.Count > 0)
                {
                    kickeeId = (Int32)dt.Rows[0]["ID"];
                }

                Client targetPlayer = null;
                if ((targetPlayer = FindClient.FindClientById(kickeeId)) != null)
                {
                    //Check if CmdStr is actually part of the org
                    uint kickeeOrgId = targetPlayer.Character.OrgId;
                    if (kickeeOrgId != client.Character.OrgId)
                    {
                        //Not part of Org. break out.
                        client.SendChatText(cmdStr + "is not a member of your organization!");
                        break;
                    }

                    //They are part of the org, so begin the processing...
                    //First we check if the player is online...
                    string onlineSql = "SELECT online FROM characters WHERE ID = " + client.Character.Id;
                    dt = ms.ReadDatatable(onlineSql);
                    int onlineStatus = 0;
                    if (dt.Rows.Count > 0)
                    {
                        onlineStatus = (Int32)dt.Rows[0][0];
                    }

                    if (onlineStatus == 0)
                    {
                        //Player isn't online. Org Kicks are processed in a different method
                        // TODO: Offline Org KICK
                        break;
                    }

                    //Player is online. Start the kick.
                    targetPlayer.Character.Stats.ClanLevel.Set(0);
                    targetPlayer.Character.OrgId = 0;
                    string kickedFromSql = "SELECT Name FROM organizations WHERE ID = " + client.Character.OrgId;
                    dt = ms.ReadDatatable(kickedFromSql);
                    string kickedFromName = "";
                    if (dt.Rows.Count > 0)
                    {
                        kickedFromName = (string)dt.Rows[0][0];
                    }
                    targetPlayer.SendChatText("You've been kicked from the organization " + kickedFromName);
                }
                // TODO: Offline Org KICK
                break;
                #endregion

                #region /org invite
            case 14:
            {
                Client tPlayer = null;
                if ((tPlayer = FindClient.FindClientById(target.Instance)) != null)
                {
                    PacketWriter writer = new PacketWriter();
                    writer.PushBytes(new byte[] { 0xDF, 0xDF });
                    writer.PushShort(10);
                    writer.PushShort(1);
                    writer.PushShort(0);
                    writer.PushInt(3086);                             //Sender
                    writer.PushInt(tPlayer.Character.Id);             //Receiver
                    writer.PushInt(0x64582A07);                       //Packet ID
                    writer.PushIdentity(50000, tPlayer.Character.Id); //Target Identity
                    writer.PushByte(0);
                    writer.PushByte(5);                               //OrgServer Case 0x05 (Invite)
                    writer.PushInt(0);
                    writer.PushInt(0);
                    writer.PushIdentity(0xDEAA, (int)client.Character.OrgId);         // Type (org)
                    writer.PushShort((short)client.Character.OrgName.Length);
                    writer.PushBytes(Encoding.ASCII.GetBytes(client.Character.OrgName));
                    writer.PushInt(0);
                    byte[] reply = writer.Finish();

                    tPlayer.SendCompressed(reply);
                }
            }
            break;
                #endregion

                #region Org Join
            case 15:
            {
                //target.Instance holds the OrgID of the Org wishing to be joined.
                int    orgIdtoJoin = target.Instance;
                string JoinSql     = "SELECT * FROM organizations WHERE ID = '" + orgIdtoJoin + "' LIMIT 1";
                int    gov_form    = 0;
                dt = ms.ReadDatatable(JoinSql);
                if (dt.Rows.Count > 0)
                {
                    gov_form = (Int32)dt.Rows[0]["GovernmentForm"];
                }

                // Make sure the order of these next two lines is not swapped -NV
                client.Character.Stats.ClanLevel.Set(GetLowestRank(gov_form));
                client.Character.OrgId = (uint)orgIdtoJoin;
            }
            break;
                #endregion

                #region /org leave
            case 16:
                // org leave
                // TODO: Disband org if it was leader that left org. -Suiv-
                // I don't think a Disband happens if leader leaves. I don't think leader -can- leave without passing lead to another
                // Something worth testing on Testlive perhaps ~Chaz
                // Just because something happens on TL, doesnt mean its a good idea. Really tbh id prefer it if you had to explicitly type /org disband to disband rather than /org leave doing it... -NV
                // Agreeing with NV.  Org Leader can't leave without passing lead on.  org disband requires /org disband to specifically be issued, with a Yes/No box.
                string LeaveSql    = "SELECT * FROM organizations WHERE ID = " + client.Character.OrgId;
                int    govern_form = 0;
                dt = ms.ReadDatatable(LeaveSql);
                if (dt.Rows.Count > 0)
                {
                    govern_form = (Int32)dt.Rows[0]["GovernmentForm"];
                }

                if ((client.Character.Stats.ClanLevel.Value == 0) && (govern_form != 4))
                {
                    client.SendChatText(
                        "Organization Leader cannot leave organization without Disbanding or Passing Leadership!");
                }
                else
                {
                    client.Character.OrgId = 0;
                    client.SendChatText("You left the guild");
                }
                break;
                #endregion

                #region /org tax | /org tax <tax>
            case 17:
                // gets or sets org tax
                // <tax> is CmdStr
                // if no <tax>, then just send chat text with current tax info

                if (cmdStr == null)
                {
                    client.SendChatText("The current organization tax rate is: ");
                    break;
                }
                else
                {
                    break;
                }
                #endregion

                #region /org bank
            case 18:
            {
                // org bank
                dt = ms.ReadDatatable("SELECT * FROM organizations WHERE ID=" + client.Character.OrgId);
                if (dt.Rows.Count > 0)
                {
                    UInt64 bank_credits = (UInt64)dt.Rows[0]["Bank"];
                    client.SendChatText("Your bank has " + bank_credits + " credits in its account");
                }
            }
            break;
                #endregion

                #region /org bank add <cash>
            case 19:
            {
                if (client.Character.OrgId == 0)
                {
                    client.SendChatText("You are not in an organisation.");

                    break;
                }

                // org bank add <cash>
                int minuscredits_fromplayer = Convert.ToInt32(cmdStr);
                int characters_credits      = client.Character.Stats.Cash.Value;

                if (characters_credits < minuscredits_fromplayer)
                {
                    client.SendChatText("You do not have enough Credits");
                }
                else
                {
                    int total_Creditsspent = characters_credits - minuscredits_fromplayer;
                    client.Character.Stats.Cash.Set(total_Creditsspent);

                    ms.SqlUpdate(
                        "UPDATE `organizations` SET `Bank` = `Bank` + " + minuscredits_fromplayer
                        + " WHERE `ID` = " + client.Character.OrgId);
                    client.SendChatText("You have donated " + minuscredits_fromplayer + " to the organization");
                }
            }

            break;
                #endregion

                #region /org bank remove <cash>
            case 20:
                // org bank remove <cash>
                // <cash> is CmdStr
                // player wants to take credits from org bank
                // only leader can do that
                if ((client.Character.Stats.ClanLevel.Value != 0) || (client.Character.OrgId == 0))
                {
                    client.SendChatText("You're not the leader of an Organization");
                    break;
                }
                int  removeCredits = Convert.ToInt32(cmdStr);
                long orgBank       = 0;
                dt = ms.ReadDatatable("SELECT Bank FROM organizations WHERE ID = " + client.Character.OrgId);
                if (dt.Rows.Count > 0)
                {
                    orgBank = (Int64)dt.Rows[0][0];
                }
                if (removeCredits > orgBank)
                {
                    client.SendChatText("Not enough credits in Organization Bank!");
                    break;
                }
                else
                {
                    long neworgbank    = orgBank - removeCredits;
                    int  existingcreds = 0;
                    existingcreds = client.Character.Stats.Cash.Value;
                    int newcreds = existingcreds + removeCredits;
                    ms.SqlUpdate(
                        "UPDATE organizations SET Bank = " + neworgbank + " WHERE ID = " + client.Character.OrgId);
                    client.Character.Stats.Cash.Set(newcreds);
                    client.SendChatText("You've removed " + removeCredits + " credits from the organization bank");
                }
                break;
                #endregion

                #region /org bank paymembers <cash>
            case 21:
                // <cash> is CmdStr
                // give <cash> credits to every org member
                // credits are taken from org bank
                // only leader can do it
                break;
                #endregion

                #region /org debt
            case 22:
                // send player text about how big is his/her tax debt to org
                break;
                #endregion

                #region /org history <text>
            case 23:
            {
                if (client.Character.Stats.ClanLevel.Value == 0)
                {
                    // org history <history text>
                    ms.SqlUpdate(
                        "UPDATE organizations SET history = '" + cmdStr + "' WHERE ID = '"
                        + client.Character.OrgId + "'");
                    client.SendChatText("History Updated");
                }
                else
                {
                    client.SendChatText("You must be the Organization Leader to perform this command!");
                }
            }
            break;
                #endregion

                #region /org objective <text>
            case 24:
            {
                if (client.Character.Stats.ClanLevel.Value == 0)
                {
                    // org objective <objective text>
                    ms.SqlUpdate(
                        "UPDATE organizations SET objective = '" + cmdStr + "' WHERE ID = '"
                        + client.Character.OrgId + "'");
                    client.SendChatText("Objective Updated");
                }
                else
                {
                    client.SendChatText("You must be the Organization Leader to perform this command!");
                }
            }
            break;
                #endregion

                #region /org description <text>
            case 25:
            {
                if (client.Character.Stats.ClanLevel.Value == 0)
                {
                    // org description <description text>
                    ms.SqlUpdate(
                        "UPDATE organizations SET description = '" + cmdStr + "' WHERE ID = '"
                        + client.Character.OrgId + "'");
                    client.SendChatText("Description Updated");
                }
                else
                {
                    client.SendChatText("You must be the Organization Leader to perform this command!");
                }
            }
            break;
                #endregion

                #region /org name <text>
            case 26:
            {
                // org name <name>

                /* Renames Organization
                 * Checks for Existing Orgs with similar name to stop crash
                 * Chaz
                 */
                if (client.Character.Stats.ClanLevel.Value == 0)
                {
                    string SqlQuery26 = "SELECT * FROM organizations WHERE Name LIKE '" + cmdStr + "' LIMIT 1";
                    string CurrentOrg = null;
                    dt = ms.ReadDatatable(SqlQuery26);
                    if (dt.Rows.Count > 0)
                    {
                        CurrentOrg = (string)dt.Rows[0]["Name"];
                    }

                    if (CurrentOrg == null)
                    {
                        string SqlQuery27 = "UPDATE organizations SET Name = '" + cmdStr + "' WHERE ID = '"
                                            + client.Character.OrgId + "'";
                        ms.SqlUpdate(SqlQuery27);
                        client.SendChatText("Organization Name Changed to: " + cmdStr);

                        // Forces reloading of org name and the like
                        // XXXX TODO: Make it reload for all other members in the org
                        client.Character.OrgId = client.Character.OrgId;
                        break;
                    }
                    else
                    {
                        client.SendChatText("An Organization already exists with that name");
                        break;
                    }
                }
                else
                {
                    client.SendChatText("You must be the organization leader to perform this command!");
                }
                break;
            }
                #endregion

                #region /org governingform <text>
            case 27:
            {
                // org governingform <form>

                /* Current Governing Forms:
                 * Department, Faction, Republic, Monarchy, Anarchism, Feudalism
                 */
                //Check on whether your President or not
                if (client.Character.Stats.ClanLevel.Value == 0)
                {
                    //first we drop the case on the input, just to be sure.
                    Int32 GovFormNum = -1;
                    if (cmdStr == null)
                    {
                        //list gov forms
                        client.SendChatText(
                            "List of Accepted Governing Forms is: department, faction, republic, monarchy, anarchism, feudalism");
                        break;
                    }
                    //was correct input passed?
                    switch (cmdStr.ToLower())
                    {
                    case "department":
                        GovFormNum = 0;
                        break;

                    case "faction":
                        GovFormNum = 1;
                        break;

                    case "republic":
                        GovFormNum = 2;
                        break;

                    case "monarchy":
                        GovFormNum = 3;
                        break;

                    case "anarchism":
                        GovFormNum = 4;
                        break;

                    case "feudalism":
                        GovFormNum = 5;
                        break;

                    default:
                        client.SendChatText(cmdStr + " Is an invalid Governing Form!");
                        client.SendChatText(
                            "Accepted Governing Forms are: department, faction, republic, monarchy, anarchism, feudalism");
                        break;
                    }
                    if (GovFormNum != -1)
                    {
                        ms.SqlUpdate(
                            "UPDATE organizations SET GovernmentForm = '" + GovFormNum + "' WHERE ID = '"
                            + client.Character.OrgId + "'");
                        foreach (int currentCharId in OrgMisc.GetOrgMembers(client.Character.OrgId, true))
                        {
                            client.Character.Stats.ClanLevel.Set(GetLowestRank(GovFormNum));
                        }
                        client.SendChatText("Governing Form is now: " + cmdStr);
                        break;
                    }
                }
                else
                {
                    //Haha! You're not the org leader!
                    client.SendChatText("You must be the Org Leader to perform this command");
                    break;
                }
            }
            break;
                #endregion

                #region /org stopvote <text>
            case 28:
                // <text> is CmdStr
                break;
                #endregion

                #region unknown command
            default:
                break;
                #endregion
            }
            #endregion

            reader.Finish();
        }
Esempio n. 11
0
        public static void Read(byte[] packet, Client client)
        {
            SqlWrapper mys = new SqlWrapper();

            // Packet Reader Unknown Values are Returning 0 Integers, Unable to Store Needed Packet data To Reply.

            #region PacketReader
            PacketReader packetReader = new PacketReader(packet);
            Header       m_header     = packetReader.PopHeader();   // 0 - 28
            byte         unknown      = packetReader.PopByte();     // 29
            int          actionNum    = packetReader.PopInt();      // 30 - 33
            int          unknown1     = packetReader.PopInt();      // 34 - 37
            Identity     m_ident      = packetReader.PopIdentity(); // 38 - 35
            int          unknown2     = packetReader.PopInt();      // 36 - 39
            int          unknown3     = packetReader.PopInt();      // 40 - 43
            short        unknown4     = packetReader.PopShort();    // 44 - 45
            #endregion

            switch (actionNum)
            {
                #region Cast nano
            case 19:     // Cast nano
            {
                // CastNanoSpell
                PacketWriter castNanoSpell = new PacketWriter();
                castNanoSpell.PushByte(0xDF);
                castNanoSpell.PushByte(0xDF);
                castNanoSpell.PushShort(10);
                castNanoSpell.PushShort(1);
                castNanoSpell.PushShort(0);
                castNanoSpell.PushInt(3086);
                castNanoSpell.PushInt(client.Character.Id);
                castNanoSpell.PushInt(0x25314D6D);
                castNanoSpell.PushIdentity(50000, client.Character.Id);
                castNanoSpell.PushByte(0);
                castNanoSpell.PushInt(unknown3);                        // Nano ID
                castNanoSpell.PushIdentity(m_ident);                    // Target
                castNanoSpell.PushInt(0);
                castNanoSpell.PushIdentity(50000, client.Character.Id); // Caster
                byte[] castNanoSpellA = castNanoSpell.Finish();
                Announce.Playfield(client.Character.PlayField, castNanoSpellA);

                // CharacterAction 107
                PacketWriter characterAction107 = new PacketWriter();
                characterAction107.PushByte(0xDF);
                characterAction107.PushByte(0xDF);
                characterAction107.PushShort(10);
                characterAction107.PushShort(1);
                characterAction107.PushShort(0);
                characterAction107.PushInt(3086);
                characterAction107.PushInt(client.Character.Id);
                characterAction107.PushInt(0x5E477770);
                characterAction107.PushIdentity(50000, client.Character.Id);
                characterAction107.PushByte(0);
                characterAction107.PushInt(107);
                characterAction107.PushInt(0);
                characterAction107.PushInt(0);
                characterAction107.PushInt(0);
                characterAction107.PushInt(1);
                characterAction107.PushInt(unknown3);
                characterAction107.PushShort(0);
                byte[] characterAction107A = characterAction107.Finish();
                Announce.Playfield(client.Character.PlayField, characterAction107A);

                // CharacterAction 98
                PacketWriter characterAction98 = new PacketWriter();
                characterAction98.PushByte(0xDF);
                characterAction98.PushByte(0xDF);
                characterAction98.PushShort(10);
                characterAction98.PushShort(1);
                characterAction98.PushShort(0);
                characterAction98.PushInt(3086);
                characterAction98.PushInt(client.Character.Id);
                characterAction98.PushInt(0x5E477770);
                characterAction98.PushIdentity(m_ident);
                characterAction98.PushByte(0);
                characterAction98.PushInt(98);
                characterAction98.PushInt(0);
                characterAction98.PushInt(0xCF1B);
                characterAction98.PushInt(unknown3);
                characterAction98.PushInt(client.Character.Id);
                characterAction98.PushInt(0x249F0);         // duration?
                characterAction98.PushShort(0);
                byte[] characterAction98A = characterAction98.Finish();
                Announce.Playfield(client.Character.PlayField, characterAction98A);
            }
            break;
                #endregion

                #region search

            /* this is here to prevent server crash that is caused by
             * search action if server doesn't reply if something is
             * found or not */
            case 66:     // If action == search
            {
                /* Msg 110:136744723 = "No hidden objects found." */
                client.SendFeedback(110, 136744723);
            }
            break;
                #endregion

                #region info
            case 105:     // If action == Info Request
            {
                Client tPlayer = null;
                if ((tPlayer = FindClient.FindClientById(m_ident.Instance)) != null)
                {
                    #region Titles
                    uint   LegacyScore = tPlayer.Character.Stats.PvpRating.StatBaseValue;
                    string LegacyTitle = null;
                    if (LegacyScore < 1400)
                    {
                        LegacyTitle = "";
                    }
                    else if (LegacyScore < 1500)
                    {
                        LegacyTitle = "Freshman";
                    }
                    else if (LegacyScore < 1600)
                    {
                        LegacyTitle = "Rookie";
                    }
                    else if (LegacyScore < 1700)
                    {
                        LegacyTitle = "Apprentice";
                    }
                    else if (LegacyScore < 1800)
                    {
                        LegacyTitle = "Novice";
                    }
                    else if (LegacyScore < 1900)
                    {
                        LegacyTitle = "Neophyte";
                    }
                    else if (LegacyScore < 2000)
                    {
                        LegacyTitle = "Experienced";
                    }
                    else if (LegacyScore < 2100)
                    {
                        LegacyTitle = "Expert";
                    }
                    else if (LegacyScore < 2300)
                    {
                        LegacyTitle = "Master";
                    }
                    else if (LegacyScore < 2500)
                    {
                        LegacyTitle = "Champion";
                    }
                    else
                    {
                        LegacyTitle = "Grand Master";
                    }
                    #endregion

                    int        orgGoverningForm = 0;
                    SqlWrapper ms = new SqlWrapper();
                    DataTable  dt =
                        ms.ReadDatatable(
                            "SELECT `GovernmentForm` FROM organizations WHERE ID=" + tPlayer.Character.OrgId);

                    if (dt.Rows.Count > 0)
                    {
                        orgGoverningForm = (Int32)dt.Rows[0][0];
                    }

                    string orgRank = OrgClient.GetRank(
                        orgGoverningForm, tPlayer.Character.Stats.ClanLevel.StatBaseValue);
                    // Uses methods in ZoneEngine\PacketHandlers\OrgClient.cs

                    /* Known packetFlags--
                     * 0x40 - No org | 0x41 - Org | 0x43 - Org and towers | 0x47 - Org, towers, player has personal towers | 0x50 - No pvp data shown
                     * Bitflags--
                     * Bit0 = hasOrg, Bit1 = orgTowers, Bit2 = personalTowers, Bit3 = (Int32) time until supression changes (Byte) type of supression level?, Bit4 = noPvpDataShown, Bit5 = hasFaction, Bit6 = ?, Bit 7 = null.
                     */
                    byte packetFlags = 0x40;         // Player has no Org
                    if (tPlayer.Character.OrgId != 0)
                    {
                        packetFlags = 0x41;         // Player has Org, no towers
                    }
                    PacketWriter infoPacket = new PacketWriter();

                    // Start packet header
                    infoPacket.PushByte(0xDF);
                    infoPacket.PushByte(0xDF);
                    infoPacket.PushShort(10);
                    infoPacket.PushShort(1);
                    infoPacket.PushShort(0);
                    infoPacket.PushInt(3086);                             // sender (server ID)
                    infoPacket.PushInt(client.Character.Id);              // receiver
                    infoPacket.PushInt(0x4D38242E);                       // packet ID
                    infoPacket.PushIdentity(50000, tPlayer.Character.Id); // affected identity
                    infoPacket.PushByte(0);                               // ?
                    // End packet header

                    infoPacket.PushByte(packetFlags);                                    // Based on flags above
                    infoPacket.PushByte(1);                                              // esi_001?
                    infoPacket.PushByte((byte)tPlayer.Character.Stats.Profession.Value); // Profession
                    infoPacket.PushByte((byte)tPlayer.Character.Stats.Level.Value);      // Level
                    infoPacket.PushByte((byte)tPlayer.Character.Stats.TitleLevel.Value); // Titlelevel
                    infoPacket.PushByte((byte)tPlayer.Character.Stats.VisualProfession.Value);
                    // Visual Profession
                    infoPacket.PushShort(0);                                   // Side XP Bonus
                    infoPacket.PushUInt(tPlayer.Character.Stats.Health.Value); // Current Health (Health)
                    infoPacket.PushUInt(tPlayer.Character.Stats.Life.Value);   // Max Health (Life)
                    infoPacket.PushInt(0);                                     // BreedHostility?
                    infoPacket.PushUInt(tPlayer.Character.OrgId);              // org ID
                    infoPacket.PushShort((short)tPlayer.Character.FirstName.Length);
                    infoPacket.PushBytes(Encoding.ASCII.GetBytes(tPlayer.Character.FirstName));
                    infoPacket.PushShort((short)tPlayer.Character.LastName.Length);
                    infoPacket.PushBytes(Encoding.ASCII.GetBytes(tPlayer.Character.LastName));
                    infoPacket.PushShort((short)LegacyTitle.Length);
                    infoPacket.PushBytes(Encoding.ASCII.GetBytes(LegacyTitle));
                    infoPacket.PushShort(0);         // Title 2

                    // If receiver is in the same org as affected identity, whom is not orgless, send org rank and city playfield
                    if ((client.Character.OrgId == tPlayer.Character.OrgId) && (tPlayer.Character.OrgId != 0))
                    {
                        infoPacket.PushShort((short)orgRank.Length);
                        infoPacket.PushBytes(Encoding.ASCII.GetBytes(orgRank));
                        infoPacket.PushInt(0);
                        //infoPacket.PushIdentity(0, 0); // City (50201, Playfield) // Pushed 1 zero to much and screwed info for characters in orgs, but I´ll leave it for later just incase.
                    }

                    infoPacket.PushUInt(tPlayer.Character.Stats.InvadersKilled.Value);     // Invaders Killed
                    infoPacket.PushUInt(tPlayer.Character.Stats.KilledByInvaders.Value);   // Killed by Invaders
                    infoPacket.PushUInt(tPlayer.Character.Stats.AlienLevel.Value);         // Alien Level
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpDuelKills.Value);       // Pvp Duel Kills
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpDuelDeaths.Value);      // Pvp Duel Deaths
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpProfessionDuelDeaths.Value);
                    // Pvp Profession Duel Kills
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpRankedSoloKills.Value);   // Pvp Solo Kills
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpRankedSoloDeaths.Value);  // Pvp Team Kills
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpSoloScore.Value);         // Pvp Solo Score
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpTeamScore.Value);         // Pvp Team Score
                    infoPacket.PushUInt(tPlayer.Character.Stats.PvpDuelScore.Value);         // Pvp Duel Score

                    byte[] infoPacketA = infoPacket.Finish();
                    client.SendCompressed(infoPacketA);
                }
                else
                {
                    NonPlayerCharacterClass npc =
                        (NonPlayerCharacterClass)FindDynel.FindDynelById(m_ident.Type, m_ident.Instance);
                    if (npc != null)
                    {
                        PacketWriter infoPacket = new PacketWriter();

                        // Start packet header
                        infoPacket.PushByte(0xDF);
                        infoPacket.PushByte(0xDF);
                        infoPacket.PushShort(10);
                        infoPacket.PushShort(1);
                        infoPacket.PushShort(0);
                        infoPacket.PushInt(3086);                // sender (server ID)
                        infoPacket.PushInt(client.Character.Id); // receiver
                        infoPacket.PushInt(0x4D38242E);          // packet ID
                        infoPacket.PushIdentity(50000, npc.Id);  // affected identity
                        infoPacket.PushByte(0);                  // ?
                        // End packet header

                        infoPacket.PushByte(0x50);                                   // npc's just have 0x50
                        infoPacket.PushByte(1);                                      // esi_001?
                        infoPacket.PushByte((byte)npc.Stats.Profession.Value);       // Profession
                        infoPacket.PushByte((byte)npc.Stats.Level.Value);            // Level
                        infoPacket.PushByte((byte)npc.Stats.TitleLevel.Value);       // Titlelevel
                        infoPacket.PushByte((byte)npc.Stats.VisualProfession.Value); // Visual Profession

                        infoPacket.PushShort(0);                                     // no idea for npc's
                        infoPacket.PushUInt(npc.Stats.Health.Value);                 // Current Health (Health)
                        infoPacket.PushUInt(npc.Stats.Life.Value);                   // Max Health (Life)
                        infoPacket.PushInt(0);                                       // BreedHostility?
                        infoPacket.PushUInt(0);                                      // org ID
                        infoPacket.PushShort(0);
                        infoPacket.PushShort(0);
                        infoPacket.PushShort(0);
                        infoPacket.PushShort(0);
                        infoPacket.PushInt(0x499602d2);
                        infoPacket.PushInt(0x499602d2);
                        infoPacket.PushInt(0x499602d2);
                        byte[] infoPacketA = infoPacket.Finish();
                        client.SendCompressed(infoPacketA);
                    }
                }
            }
            break;
                #endregion

                #region logout
            case 120:     // If action == Logout
            {
                //Start 30 second logout timer if client is not a GM (statid 215)
                if (client.Character.Stats.GMLevel.Value == 0)
                {
                    client.startLogoutTimer();
                }
                else         // If client is a GM, disconnect without timer
                {
                    client.Server.DisconnectClient(client);
                }
            }
            break;

            case 121:     // If action == Stop Logout
            {
                //Stop current logout timer and send stop logout packet
                client.Character.UpdateMoveType((byte)client.Character.PreviousMoveMode);
                client.CancelLogOut();
            }
            break;
                #endregion

                #region stand
            case 87:     // If action == Stand
            {
                client.Character.UpdateMoveType(37);
                //Send stand up packet, and cancel timer/send stop logout packet if timer is enabled
                client.StandCancelLogout();
            }
            break;
                #endregion

                #region Team
            case 22:     //Kick Team Member
            {
            }
            break;

            case 24:     //Leave Team
            {
                TeamClass team = new TeamClass();
                team.LeaveTeam(client);
            }
            break;

            case 25:     //Transfer Team Leadership
            {
            }
            break;

            case 26:     //Team Join Request
            {
                // Send Team Invite Request To Target Player

                TeamClass team = new TeamClass();
                team.SendTeamRequest(client, m_ident);
            }
            break;

            case 28:     //Request Reply
            {
                // Check if positive or negative response

                // if positive

                TeamClass team   = new TeamClass();
                uint      teamID = TeamClass.GenerateNewTeamId(client, m_ident);

                // Destination Client 0 = Sender, 1 = Reciever

                // Reciever Packets
                ///////////////////

                // CharAction 15
                team.TeamRequestReply(client, m_ident);
                // CharAction 23
                team.TeamRequestReplyCharacterAction23(client, m_ident);

                // TeamMember Packet
                team.TeamReplyPacketTeamMember(1, client, m_ident, "Member1");
                // TeamMemberInfo Packet
                team.TeamReplyPacketTeamMemberInfo(1, client, m_ident);
                // TeamMember Packet
                team.TeamReplyPacketTeamMember(1, client, m_ident, "Member2");

                // Sender Packets
                /////////////////

                // TeamMember Packet
                team.TeamReplyPacketTeamMember(0, client, m_ident, "Member1");
                // TeamMemberInfo Packet
                team.TeamReplyPacketTeamMemberInfo(0, client, m_ident);
                // TeamMember Packet
                team.TeamReplyPacketTeamMember(0, client, m_ident, "Member2");
            }
            break;
                #endregion

                #region Delete Item
            case 0x70:
                mys.SqlDelete(
                    "DELETE FROM " + client.Character.GetSqlTablefromDynelType() + "inventory WHERE placement="
                    + m_ident.Instance.ToString() + " AND container=" + m_ident.Type.ToString());
                InventoryEntries i_del = client.Character.GetInventoryAt(m_ident.Instance);
                client.Character.Inventory.Remove(i_del);
                byte[] action2 = new byte[0x37];
                Array.Copy(packet, action2, 0x37);
                action2[8]  = 0x00;
                action2[9]  = 0x00;
                action2[10] = 0x0C;
                action2[11] = 0x0E;
                client.SendCompressed(action2);
                break;
                #endregion

                #region Split item
            case 0x34:
                int nextid         = client.Character.GetNextFreeInventory(m_ident.Type);
                InventoryEntries i = client.Character.GetInventoryAt(m_ident.Instance);
                i.Item.MultipleCount -= unknown3;
                InventoryEntries i2 = new InventoryEntries();
                i2.Item = i.Item.ShallowCopy();
                i2.Item.MultipleCount = unknown3;
                i2.Placement          = nextid;
                client.Character.Inventory.Add(i2);
                client.Character.WriteInventoryToSql();
                break;
                #endregion

                #region Join item
            case 0x35:
                InventoryEntries j1 = client.Character.GetInventoryAt(m_ident.Instance);
                InventoryEntries j2 = client.Character.GetInventoryAt(unknown3);
                j1.Item.MultipleCount += j2.Item.MultipleCount;
                client.Character.Inventory.Remove(j2);
                client.Character.WriteInventoryToSql();

                byte[] joined = new byte[0x37];
                Array.Copy(packet, joined, 0x37);
                joined[8]  = 0x00;
                joined[9]  = 0x00;
                joined[10] = 0x0C;
                joined[11] = 0x0E;
                client.SendCompressed(joined);
                break;
                #endregion

                #region Sneak Action
            // ###################################################################################
            // Spandexpants: This is all i have done so far as to make sneak turn on and off,
            // currently i cannot find a missing packet or link which tells the server the player
            // has stopped sneaking, hidden packet or something, will come back to later.
            // ###################################################################################

            // Sneak Packet Received

            case 163:
            {
                PacketWriter Sneak = new PacketWriter();
                // TODO: IF SNEAKING IS ALLOWED RUN THIS CODE.
                // Send Action 162 : Enable Sneak
                Sneak.PushByte(0xDF);
                Sneak.PushByte(0xDF);
                Sneak.PushShort(0xA);
                Sneak.PushShort(1);
                Sneak.PushShort(0);
                Sneak.PushInt(3086);                            // Send
                Sneak.PushInt(client.Character.Id);             // Reciever
                Sneak.PushInt(0x5e477770);                      // Packet ID
                Sneak.PushIdentity(50000, client.Character.Id); // TYPE / ID
                Sneak.PushInt(0);
                Sneak.PushByte(0xA2);                           // Action ID
                Sneak.PushInt(0);
                Sneak.PushInt(0);
                Sneak.PushInt(0);
                Sneak.PushInt(0);
                Sneak.PushInt(0);
                Sneak.PushShort(0);
                byte[] sneakpacket = Sneak.Finish();
                client.SendCompressed(sneakpacket);
                // End of Enable sneak
                // TODO: IF SNEAKING IS NOT ALLOWED SEND REJECTION PACKET
            }
            break;
                #endregion

                #region Use Item on Item
            case 81:
            {
                Identity item1 = new Identity();
                Identity item2 = new Identity();

                item1.Type     = m_ident.Type;
                item1.Instance = m_ident.Instance;

                item2.Type     = unknown2;
                item2.Instance = unknown3;

                Tradeskill cts = new Tradeskill(client, item1.Instance, item2.Instance);
                cts.ClickBuild();
                break;
            }
                #endregion

                #region Change Visual Flag
            case 166:
            {
                client.Character.Stats.VisualFlags.Set(unknown3);
                // client.SendChatText("Setting Visual Flag to "+unknown3.ToString());
                AppearanceUpdate.AnnounceAppearanceUpdate(client.Character);
                break;
            }
                #endregion

                #region Tradeskill Source Changed
            case 0xdc:
                TradeSkillReceiver.TradeSkillSourceChanged(client, unknown2, unknown3);
                break;
                #endregion

                #region Tradeskill Target Changed
            case 0xdd:
                TradeSkillReceiver.TradeSkillTargetChanged(client, unknown2, unknown3);
                break;
                #endregion

                #region Tradeskill Build Pressed
            case 0xde:
                TradeSkillReceiver.TradeSkillBuildPressed(client, m_ident.Instance);
                break;
                #endregion

                #region default
            default:
            {
                byte[] action = new byte[0x37];
                Array.Copy(packet, action, 0x37);
                action[8]  = 0x00;
                action[9]  = 0x00;
                action[10] = 0x0C;
                action[11] = 0x0E;
                Announce.Playfield(client.Character.PlayField, action);
            }
            break;
                #endregion
            }
            packetReader.Finish();
        }
Esempio n. 12
0
        // Team Reply Packet 46312D2E : TeamMember

        public void TeamReplyPacketTeamMember(
            int destinationClient, Client sendingPlayer, Identity recievingPlayer, string charName)
        {
            PacketWriter packetWriter = new PacketWriter();

            packetWriter.PushByte(0xDF);
            packetWriter.PushByte(0xDF); // Header
            packetWriter.PushShort(0xA); // Packet Type
            packetWriter.PushShort(1);   // Unknown 1
            packetWriter.PushShort(0);   // Legnth
            packetWriter.PushInt(3086);  // Sender

            switch (destinationClient)
            {
            case 0:
                packetWriter.PushInt(sendingPlayer.Character.Id);             // Reciever
                packetWriter.PushInt(0x46312D2E);                             // Packet ID
                packetWriter.PushIdentity(50000, sendingPlayer.Character.Id); // TYPE / ID
                packetWriter.PushInt(0);
                packetWriter.PushIdentity(50000, sendingPlayer.Character.Id);
                packetWriter.PushInt(0xDEA9);  // Team Window Information ??
                packetWriter.PushInt(0x7);     // team ID??????
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushInt(0x48);    // ??
                packetWriter.PushShort(0x5);   // ???
                packetWriter.PushInt(0x8);     // Length of Team name?
                packetWriter.PushByte(0x4B);
                packetWriter.PushByte(0x61);
                packetWriter.PushByte(0x6C);
                packetWriter.PushByte(0x69);     // name?
                packetWriter.PushByte(0x6E);
                packetWriter.PushByte(0x61);
                packetWriter.PushByte(0x6D);
                packetWriter.PushByte(0x61);     // Name continued?
                packetWriter.PushShort(0);
                byte[] packet   = packetWriter.Finish();
                Client receiver = FindClient.FindClientById(recievingPlayer.Instance);
                if (receiver != null)
                {
                    receiver.SendCompressed(packet);
                }
                break;

            case 1:
                packetWriter.PushInt(recievingPlayer.Instance);             // Reciever
                packetWriter.PushInt(0x46312D2E);                           // Packet ID
                packetWriter.PushIdentity(50000, recievingPlayer.Instance); // TYPE / ID
                packetWriter.PushInt(0);
                packetWriter.PushIdentity(50000, recievingPlayer.Instance);
                packetWriter.PushInt(0xDEA9);  // Team Window Information ??
                packetWriter.PushInt(0x7);     // team ID??????
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushByte(0xFF);
                packetWriter.PushInt(0x48);    // ??
                packetWriter.PushShort(0x5);   // ??
                packetWriter.PushInt(0x8);     // Length of Team name?
                packetWriter.PushByte(0x4B);
                packetWriter.PushByte(0x61);
                packetWriter.PushByte(0x6C);
                packetWriter.PushByte(0x69);     // name?
                packetWriter.PushByte(0x6E);
                packetWriter.PushByte(0x61);
                packetWriter.PushByte(0x6D);
                packetWriter.PushByte(0x61);     // Name continued?
                packetWriter.PushShort(0);
                byte[] packet2 = packetWriter.Finish();
                sendingPlayer.SendCompressed(packet2);
                break;
            }
        }
Esempio n. 13
0
        public override void ExecuteCommand(Client client, Identity target, string[] args)
        {
            Client mClient = null;

            if (target.Type != 50000)
            {
                client.SendChatText("Target must be player");
                return;
            }
            if (args.Length < 3)
            {
                this.CommandHelp(client);
                return;
            }

            if (target.Type != 50000)
            {
                client.SendChatText("Target must be player");
                return;
            }
            string fullArgs = "";
            int    c        = 0;

            while (c < args.Length)
            {
                fullArgs = fullArgs + " " + args[c++];
            }
            fullArgs = fullArgs.Trim();

            string newName = fullArgs.Substring(args[0].Length + 1 + args[1].Length + 1);

            if ((mClient = FindClient.FindClientById(target.Instance)) != null)
            {
                switch (args[1].ToLower())
                {
                case "first":
                case "firstname":
                    if (newName == "\"\"")
                    {
                        newName = "";
                    }
                    client.SendChatText(mClient.Character.Name + "'s first name has been set to " + newName);
                    mClient.Character.FirstName = newName;
                    mClient.Character.WriteNames();
                    break;

                case "last":
                case "lastname":
                    if (newName == "\"\"")
                    {
                        newName = "";
                    }
                    client.SendChatText(mClient.Character.Name + "'s last name has been set to " + newName);
                    mClient.Character.LastName = newName;
                    mClient.Character.WriteNames();
                    break;

                case "nick":
                case "nickname":
                    if (args.Length != 3)
                    {
                        client.SendChatText("Usage: /command setname &lt;first/last/nick&gt; &lt;newname&gt;");
                        break;
                    }
                    client.SendChatText(mClient.Character.Name + "'s nick name has been set to " + newName);
                    mClient.Character.Name = newName;
                    mClient.Character.WriteNames();
                    break;

                default:
                    client.SendChatText("Usage: /command setname &lt;first/last/nick&gt; &lt;newname&gt;");
                    break;
                }
                return;
            }
            client.SendChatText("Unable to find target.");
        }