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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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