Пример #1
0
        public static void HandlePetitionRename(IRealmClient client, RealmPacketIn packet)
        {
            var petitionGuid = packet.ReadEntityId();
            var newName      = packet.ReadCString().Trim();

            var charter = client.ActiveCharacter.Inventory.GetItem(petitionGuid) as PetitionCharter;
            var chr     = client.ActiveCharacter;

            if (charter.Petition.Type == PetitionType.Guild)
            {
                if (!GuildMgr.IsValidGuildName(newName))
                {
                    GuildHandler.SendResult(chr, GuildCommandId.CREATE, newName, GuildResult.NAME_INVALID);
                    return;
                }
                else if (GuildMgr.DoesGuildExist(newName))
                {
                    GuildHandler.SendResult(chr, GuildCommandId.CREATE, newName, GuildResult.NAME_EXISTS);
                    return;
                }
            }
            else
            {
                if (!ArenaMgr.IsValidArenaTeamName(newName))
                {
                    ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, newName, string.Empty, ArenaTeamResult.NAME_INVALID);
                    return;
                }
                else if (ArenaMgr.DoesArenaTeamExist(newName))
                {
                    ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, newName, string.Empty, ArenaTeamResult.NAME_EXISTS);
                    return;
                }
            }

            charter.Petition.Name = newName;
            charter.Petition.Update();

            SendPetitionRename(client, charter);
        }
Пример #2
0
        public static void HandlePetitionBuy(IRealmClient client, RealmPacketIn packet)
        {
            var chr = client.ActiveCharacter;

            var petitionerId = packet.ReadEntityId();
            var petitioner   = chr.Map.GetObject(petitionerId) as NPC;

            //var petitionId = packet.ReadInt32();
            //var petitionCreator = packet.ReadEntityId();
            //packet.SkipBytes(4 + 8);
            packet.Position += 4 + 8;
            var name = packet.ReadCString().Trim();

            //var bodytext = packet.ReadCString().Trim();
            //var minSignatures = packet.ReadInt32();
            //var maxSignatures = packet.ReadInt32();
            //var deadline = packet.ReadInt32();
            //var issueDate = packet.ReadInt32();
            //var allowedGuildId = packet.ReadInt32();
            //var allowedClassMask = packet.ReadInt32();
            //var allowedRaceMask = packet.ReadInt32();
            //var allowedGender = packet.ReadInt32(); // wow is sexist... :(
            //var allowedMinLevel = packet.ReadInt32();
            //var allowedMaxLevel = packet.ReadInt32();
            //packet.SkipBytes(4 * 10);
            //packet.Position += (7 * 8) + 2 + 1 + 8;
            packet.Position += 4 * 10;
            var choice = packet.ReadInt32();

            //var petitionType = packet.ReadInt32();
            //packet.SkipBytes(4);
            packet.Position += 4;

            if (petitioner != null && petitioner.IsPetitioner && petitioner.CheckVendorInteraction(chr))
            {
                ItemId       itemId = 0;
                uint         cost   = 0;
                PetitionType type   = PetitionType.None;

                if (petitioner.IsGuildPetitioner)
                {
                    if (chr.IsInGuild)
                    {
                        GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.ALREADY_IN_GUILD);
                        return;
                    }
                    if (!GuildMgr.IsValidGuildName(name))
                    {
                        GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.NAME_INVALID);
                        return;
                    }
                    else if (GuildMgr.DoesGuildExist(name))
                    {
                        GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.NAME_EXISTS);
                        return;
                    }
                    itemId = PetitionerEntry.GuildPetitionEntry.ItemId;
                    cost   = GuildMgr.GuildCharterCost;
                    type   = PetitionType.Guild;
                }
                else if (petitioner.IsArenaPetitioner)
                {
                    switch (choice)
                    {
                    case 1:
                        itemId = PetitionerEntry.ArenaPetition2v2Entry.ItemId;
                        cost   = PetitionerEntry.ArenaPetition2v2Entry.Cost;
                        type   = PetitionType.Arena2vs2;
                        break;

                    case 2:
                        itemId = PetitionerEntry.ArenaPetition3v3Entry.ItemId;
                        cost   = PetitionerEntry.ArenaPetition3v3Entry.Cost;
                        type   = PetitionType.Arena3vs3;
                        break;

                    case 3:
                        itemId = PetitionerEntry.ArenaPetition5v5Entry.ItemId;
                        cost   = PetitionerEntry.ArenaPetition5v5Entry.Cost;
                        type   = PetitionType.Arena5vs5;
                        break;

                    default:
                        return;
                    }
                    if (!ArenaMgr.IsValidArenaTeamName(name))
                    {
                        ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, name, string.Empty, ArenaTeamResult.NAME_INVALID);
                        return;
                    }
                    else if (ArenaMgr.DoesArenaTeamExist(name))
                    {
                        ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, name, string.Empty, ArenaTeamResult.NAME_EXISTS);
                        return;
                    }
                }
                if (itemId != 0 && cost != 0 && type != PetitionType.None)
                {
                    var templ = ItemMgr.GetTemplate(itemId);
                    if (templ == null)
                    {
                        SendBuyError(chr, petitioner, itemId, BuyItemError.CantFindItem);
                    }
                    else if (chr.Money < cost)
                    {
                        SendBuyError(chr, petitioner, itemId, BuyItemError.NotEnoughMoney);
                    }
                    else if (!PetitionRecord.CanBuyPetition(chr.EntityId.Low))
                    {
                        chr.SendSystemMessage("You can't buy another petition !");
                    }
                    else
                    {
                        var slotId = chr.Inventory.FindFreeSlot(templ, 1);
                        if (slotId.Container == null)
                        {
                            SendBuyError(chr, petitioner, itemId, BuyItemError.CantCarryAnymore);
                        }
                        else
                        {
                            var item = slotId.Container.AddUnchecked(slotId.Slot, templ, 1, true) as PetitionCharter;
                            item.Petition = new PetitionRecord(name, chr.EntityId.Low, item.EntityId.Low, type);
                            item.Petition.Create();

                            chr.Money -= cost;

                            item.SetEnchantId(EnchantSlot.Permanent, item.EntityId.Low);
                        }
                    }
                }
            }
        }