Exemplo n.º 1
0
    def handle(world_session, socket, reader):
        if len(reader.data) > 1:  # Avoid handling empty Guild Demote packet.
            target_name = PacketReader.read_string(reader.data, 0).strip()
            target_player_mgr = RealmDatabaseManager.character_get_by_name(
                target_name)
            player_mgr = world_session.player_mgr

            if not player_mgr.guild_manager:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
            elif player_mgr.guild_manager.get_rank(
                    player_mgr.guid) > GuildRank.GUILDRANK_OFFICER:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_PERMISSIONS)
            elif not target_player_mgr:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                    GuildCommandResults.GUILD_PLAYER_NOT_FOUND)
            elif not player_mgr.guild_manager.has_member(
                    target_player_mgr.guid):
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                    GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
            elif not player_mgr.guild_manager.demote_rank(
                    target_player_mgr.guid):
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_INTERNAL)

        return 0
Exemplo n.º 2
0
    def send_guild(sender, message, lang, chat_type):
        if sender.guild_manager:
            sender_packet = ChatManager._get_message_packet(
                sender.guid, sender.chat_flags, message, chat_type, lang)

            if chat_type == ChatMsgs.CHAT_MSG_GUILD:
                sender.guild_manager.send_message_to_guild(
                    sender_packet,
                    GuildChatMessageTypes.G_MSGTYPE_ALL,
                    source=sender)
            else:
                if sender.guild_manager.get_rank(
                        sender.guid) > GuildRank.GUILDRANK_OFFICER:
                    GuildManager.send_guild_command_result(
                        sender, GuildTypeCommand.GUILD_CREATE_S, '',
                        GuildCommandResults.GUILD_PERMISSIONS)
                else:
                    sender.guild_manager.send_message_to_guild(
                        sender_packet,
                        GuildChatMessageTypes.G_MSGTYPE_OFFICERCHAT,
                        source=sender)
        else:
            GuildManager.send_guild_command_result(
                sender, GuildTypeCommand.GUILD_CREATE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
Exemplo n.º 3
0
    def handle(world_session, socket, reader):
        player = world_session.player_mgr

        if not player.guild_manager:
            GuildManager.send_guild_command_result(player, GuildTypeCommand.GUILD_CREATE_S, '',
                                                   GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        else:
            guild_name = PacketWriter.string_to_bytes(player.guild_manager.guild.name)
            data = pack(
                f'<{len(guild_name)}s',
                guild_name
            )

            # Members count
            data += pack('<I', len(player.guild_manager.members))
            accounts = RealmDatabaseManager.guild_get_accounts(guild_id=player.guild_manager.guild.guild_id)
            data += pack('<I', len(accounts))

            for member in player.guild_manager.members.values():
                player_name = PacketWriter.string_to_bytes(member.character.name)
                data += pack(
                    f'<{len(player_name)}sI',
                    player_name,
                    member.rank
                )

            player.session.enqueue_packet(PacketWriter.get_packet(OpCode.SMSG_GUILD_ROSTER, data))

        return 0
Exemplo n.º 4
0
    def handle(world_session, socket, reader):
        target_name = PacketReader.read_string(reader.data, 0).strip()
        target_player_mgr = WorldSessionStateHandler.find_player_by_name(
            target_name)
        player_mgr = world_session.player_mgr

        if not player_mgr.guild_manager:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        # TODO I guess not only GM should be able to promote?
        elif player_mgr != player_mgr.guild_manager.guild_master:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_PERMISSIONS)
        elif not target_player_mgr:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                GuildCommandResults.GUILD_PLAYER_NOT_FOUND)
        elif not player_mgr.guild_manager.is_member(target_player_mgr):
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        elif not player_mgr.guild_manager.promote_rank(target_player_mgr):
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_INTERNAL)

        return 0
Exemplo n.º 5
0
    def handle(world_session, socket, reader):
        player = world_session.player_mgr

        if not player.guild_manager:
            GuildManager.send_guild_command_result(
                player, GuildTypeCommand.GUILD_CREATE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        else:
            guild_name = PacketWriter.string_to_bytes(
                player.guild_manager.guild_name)
            data = pack('<%us' % len(guild_name), guild_name)

            # Members count
            data += pack('<I', len(player.guild_manager.members))
            # TODO: Nº of accounts
            data += pack('<I', 0)

            for member in player.guild_manager.members.values():
                player_name = PacketWriter.string_to_bytes(member.player.name)
                data += pack('<%usI' % len(player_name), player_name,
                             member.guild_manager.get_guild_rank(member))

            player.session.request.sendall(
                PacketWriter.get_packet(OpCode.SMSG_GUILD_ROSTER, data))

        return 0
Exemplo n.º 6
0
    def handle(world_session, socket, reader):
        player_mgr = world_session.player_mgr

        if player_mgr.guid in GuildManager.PENDING_INVITES:
            inviter = GuildManager.PENDING_INVITES[player_mgr.guid].inviter
            GuildManager.PENDING_INVITES.pop(player_mgr.guid)
            inviter.guild_manager.add_new_member(player_mgr)
        else:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_INTERNAL)

        return 0
Exemplo n.º 7
0
    def handle(world_session, socket, reader):
        target_name = PacketReader.read_string(reader.data, 0).strip()
        target_player_mgr = WorldSessionStateHandler.find_player_by_name(
            target_name)
        player_mgr = world_session.player_mgr

        if not player_mgr.guild_manager:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        if not target_player_mgr:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                GuildCommandResults.GUILD_PLAYER_NOT_FOUND)
        elif player_mgr != player_mgr.guild_manager.guild_master:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_FOUNDER_S, '',
                GuildCommandResults.GUILD_PERMISSIONS)
        elif not target_player_mgr.guild_manager or not player_mgr.guild_manager.is_member(
                target_player_mgr):
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        else:
            player_mgr.guild_manager.set_guild_master(target_player_mgr)

        return 0
Exemplo n.º 8
0
    def handle(world_session, socket, reader):
        player = world_session.player_mgr

        if not player.guild_manager:
            GuildManager.send_guild_command_result(
                player, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        elif player.guild_manager.guild_master == player:  # GM should use disband.
            GuildManager.send_guild_command_result(
                player, GuildTypeCommand.GUILD_INVITE_S, '',
                GuildCommandResults.GUILD_INTERNAL)
        else:
            player.guild_manager.leave(player)

        return 0
Exemplo n.º 9
0
    def handle(world_session, socket, reader):
        player_mgr = world_session.player_mgr

        if not player_mgr.guild_manager:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_CREATE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        elif player_mgr != player_mgr.guild_manager.guild_master:
            GuildManager.send_guild_command_result(
                player_mgr, GuildTypeCommand.GUILD_FOUNDER_S, '',
                GuildCommandResults.GUILD_PERMISSIONS)
        else:
            player_mgr.guild_manager.disband()

        return 0
Exemplo n.º 10
0
    def handle(world_session, socket, reader):
        if reader.data:  # Handle null data.
            motd = PacketReader.read_string(reader.data, 0).strip()
            player_mgr = world_session.player_mgr

            if not player_mgr.guild_manager:
                GuildManager.send_guild_command_result(player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                                                       GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
            elif player_mgr.guild_manager.get_rank(player_mgr.guid) > GuildRank.GUILDRANK_OFFICER:
                GuildManager.send_guild_command_result(player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                                                       GuildCommandResults.GUILD_PERMISSIONS)
            else:
                player_mgr.guild_manager.set_motd(motd)
        elif world_session.player_mgr.guild_manager:
            world_session.player_mgr.guild_manager.send_motd(world_session.player_mgr)

        return 0
Exemplo n.º 11
0
    def handle(world_session, socket, reader):
        player = world_session.player_mgr

        if not player.guild_manager:
            GuildManager.send_guild_command_result(
                player, GuildTypeCommand.GUILD_CREATE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        else:
            # Guild name
            name_bytes = PacketWriter.string_to_bytes(
                player.guild_manager.guild_name)
            data = pack('<%us' % len(name_bytes), name_bytes)

            # TODO: Handle proper data and nº of accounts
            # Day, Month, Years, Players, Nº Accounts
            data += pack('<5I', 0, 0, 0, len(player.guild_manager.members), 0)
            player.session.request.sendall(
                PacketWriter.get_packet(OpCode.SMSG_GUILD_INFO, data))

        return 0
Exemplo n.º 12
0
    def handle(world_session, socket, reader):
        player = world_session.player_mgr

        if not player.guild_manager:
            GuildManager.send_guild_command_result(
                player, GuildTypeCommand.GUILD_CREATE_S, '',
                GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
        else:
            # Guild name
            name_bytes = PacketWriter.string_to_bytes(
                player.guild_manager.guild.name)
            data = pack(f'<{len(name_bytes)}s', name_bytes)

            accounts = RealmDatabaseManager.guild_get_accounts(
                guild_id=player.guild_manager.guild.guild_id)
            # TODO: Parse DB DT.
            # Day, Month, Years, Players, Nº Accounts
            data += pack('<5I', 0, 0, 0, len(player.guild_manager.members),
                         len(accounts))
            player.session.enqueue_packet(
                PacketWriter.get_packet(OpCode.SMSG_GUILD_INFO, data))

        return 0
Exemplo n.º 13
0
    def handle(world_session, socket, reader):
        if len(reader.data) >= 28:  # Avoid handling empty petition buy packet.
            npc_guid = unpack('<Q', reader.data[:8])[0]
            guild_name = PacketReader.read_string(reader.data, 20)

            if npc_guid > 0:
                if world_session.player_mgr.guild_manager:
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_CREATE_S, '',
                        GuildCommandResults.GUILD_ALREADY_IN_GUILD)
                elif not TextChecker.valid_text(guild_name, is_guild=True):
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_CREATE_S, '',
                        GuildCommandResults.GUILD_NAME_INVALID)
                elif guild_name in GuildManager.GUILDS or RealmDatabaseManager.guild_petition_get_by_name(
                        guild_name):
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_CREATE_S, guild_name,
                        GuildCommandResults.GUILD_NAME_EXISTS)
                elif world_session.player_mgr.inventory.get_item_count(
                        PetitionManager.CHARTER_ENTRY) > 0:
                    world_session.player_mgr.inventory.send_buy_error(
                        BuyResults.BUY_ERR_CANT_CARRY_MORE,
                        PetitionManager.CHARTER_ENTRY, npc_guid)
                elif world_session.player_mgr.coinage <= PetitionManager.CHARTER_COST:
                    world_session.player_mgr.inventory.send_buy_error(
                        BuyResults.BUY_ERR_NOT_ENOUGH_MONEY,
                        PetitionManager.CHARTER_ENTRY, npc_guid)
                elif world_session.player_mgr.inventory.add_item(
                        PetitionManager.CHARTER_ENTRY, handle_error=False):
                    petition_item = world_session.player_mgr.inventory.get_first_item_by_entry(
                        PetitionManager.CHARTER_ENTRY)
                    petition = PetitionManager.create_petition(
                        world_session.player_mgr.guid, guild_name,
                        petition_item.guid)
                    # We bind this petition to the charter guild item, else its just a dummy item for the client.
                    petition_item.set_enchantment(0, petition.petition_id, 0,
                                                  0)
                    world_session.player_mgr.mod_money(
                        -PetitionManager.CHARTER_COST, reload_items=True)

        return 0
Exemplo n.º 14
0
    def handle(world_session, socket, reader):
        if len(reader.data
               ) >= 16:  # Avoid handling empty petition offer packet.
            petition_item_guid, target_player_guid = unpack(
                '<2Q', reader.data[:16])
            target_player_mgr = WorldSessionStateHandler.find_player_by_guid(
                target_player_guid)
            if petition_item_guid > 0:
                if not target_player_mgr:
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_INVITE_S, 'Player',
                        GuildCommandResults.GUILD_PLAYER_NOT_FOUND)
                elif target_player_mgr.guild_manager:
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_INVITE_S,
                        target_player_mgr.player.name,
                        GuildCommandResults.GUILD_ALREADY_IN_GUILD)
                if target_player_mgr.team != world_session.player_mgr.team:
                    GuildManager.send_guild_command_result(
                        world_session.player_mgr,
                        GuildTypeCommand.GUILD_INVITE_S, '',
                        GuildCommandResults.GUILD_NOT_ALLIED)
                else:
                    petition = PetitionManager.get_petition(petition_item_guid)
                    if petition:
                        packet = PetitionManager.build_signatures_packet(
                            petition)
                        target_player_mgr.session.enqueue_packet(packet)
                    else:
                        PetitionManager.send_petition_sign_result(
                            world_session.player_mgr,
                            PetitionError.PETITION_UNKNOWN_ERROR)

        return 0
Exemplo n.º 15
0
    def handle(world_session, socket, reader):
        if len(reader.data) > 1:  # Avoid handling empty Guild Invite packet.
            target_name = PacketReader.read_string(reader.data, 0).strip()
            target_player_mgr = WorldSessionStateHandler.find_player_by_name(
                target_name)
            player_mgr = world_session.player_mgr

            if not player_mgr.guild_manager:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_PLAYER_NOT_IN_GUILD)
            elif player_mgr.guild_manager.get_rank(
                    player_mgr.guid) > GuildRank.GUILDRANK_OFFICER:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_PERMISSIONS)
            elif not target_player_mgr:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                    GuildCommandResults.GUILD_PLAYER_NOT_FOUND)
            elif target_player_mgr.guild_manager:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, target_name,
                    GuildCommandResults.GUILD_ALREADY_IN_GUILD)
            elif target_player_mgr.team != player_mgr.team:
                GuildManager.send_guild_command_result(
                    player_mgr, GuildTypeCommand.GUILD_INVITE_S, '',
                    GuildCommandResults.GUILD_NOT_ALLIED)
            else:
                if player_mgr.guild_manager.invite_member(
                        player_mgr, target_player_mgr):
                    GuildManager.send_guild_command_result(
                        player_mgr, GuildTypeCommand.GUILD_INVITE_S,
                        target_name, GuildCommandResults.GUILD_U_HAVE_INVITED)

                    name_bytes = PacketWriter.string_to_bytes(
                        player_mgr.player.name)
                    data = pack(f'<{len(name_bytes)}s', name_bytes)

                    guild_name_bytes = PacketWriter.string_to_bytes(
                        player_mgr.guild_manager.guild.name)
                    data += pack(f'<{len(guild_name_bytes)}s',
                                 guild_name_bytes)

                    target_player_mgr.session.enqueue_packet(
                        PacketWriter.get_packet(OpCode.SMSG_GUILD_INVITE,
                                                data))

        return 0