def recruitResponse(player, arguments, target): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return if not checkPermission(player, guild, PERMISSION_RECRUIT): player.socket.sysmessage('You are not allowed to recruit canidates for this guild.') else: if not target.char or not target.char.player or not target.char.socket: player.socket.sysmessage('You can only recruit players for your guild.') else: if target.char.guild: player.socket.sysmessage('That character is already in a guild.') else: for member in guild.members: sendMessage(member, "A new canidate %s has been recruited into your guild by %s." % (target.char.name, player.name)) sendMessage(target.char, 'You have been recruited as a canidate for %s by %s.' % (guild.name, player.name)) guild.addcanidate(target.char) target.char.addscript( 'guilds.member' ) target.char.resendtooltip() if guild.guildstone: guild.guildstone.resendtooltip() guildCanidates(player, guild)
def onShowTooltip(sender, target, tooltip): tooltip.add(1042971, "#1041429") guild = None if target.hastag('guild'): guild = wolfpack.findguild(int(target.gettag('guild'))) if guild: if guild.guildstone != target: tooltip.add(1060847, "%s\t\n" % guild.name) else: if len(guild.abbreviation) == 0: appendix = "%s\n" % guild.name else: appendix = "%s [%s]\n" % (guild.name, guild.abbreviation) appendix += "Members: %u\n" % len(guild.members) appendix += "Canidates: %u\n" % len(guild.canidates) if guild.leader: appendix += "Leader: " + guild.leader.name + "\n" else: appendix += "Leader: None\n" tooltip.add(1060847, "%s\t\n" % appendix) else: tooltip.add(1060847, "Abandoned\t\n")
def onShowTooltip(sender, target, tooltip): tooltip.add(1042971, "#1041429") guild = None if target.hastag("guild"): guild = wolfpack.findguild(int(target.gettag("guild"))) if guild: if guild.guildstone != target: tooltip.add(1060847, tr("%s\t\n") % guild.name) else: if len(guild.abbreviation) == 0: appendix = tr("%s") % guild.name else: appendix = tr("%s [%s]") % (guild.name, guild.abbreviation) appendix += "\n" + tr("Members: %u") % len(guild.members) appendix += "\n" + tr("Candidates: %u") % len(guild.candidates) if guild.leader: appendix += "\n" + tr("Leader: %s") % guild.leader.name else: appendix += "\n" + tr("Leader: None") tooltip.add(1060847, "%s\t\n" % appendix) else: tooltip.add(1060847, tr("Abandoned") + "\t ")
def guildMembershipResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage(tr("The guild you try to manage has already been disbanded.")) return if response.button == 1 and (player in guild.members or player in guild.candidates): # Toggle Guildsign if 1 in response.switches: if player in guild.members: guild.setmemberinfo(player, {"showsign": 0}) player.socket.sysmessage(tr("You decide not to show your guildsign any longer.")) player.resendtooltip() elif 2 in response.switches: if player in guild.members: guild.setmemberinfo(player, {"showsign": 1}) player.socket.sysmessage(tr("You decide to show your guildsign from now on.")) player.resendtooltip() # Resign from the guild elif 3 in response.switches: members = guild.members candidates = guild.candidates if player in members or player in candidates: guild.removemember(player) for member in members: if member != player: sendMessage(member, tr("%s has left your guild.") % player.name) player.socket.sysmessage(tr("You have resigned from your guild.")) player.resendtooltip() if guild.guildstone: guild.guildstone.resendtooltip() # Resign from leadership elif 4 in response.switches: if player == guild.leader: members = guild.members guild.leader = None player.socket.sysmessage(tr("You have resigned from your position as the leader of this guild.")) player.resendtooltip() for member in members: if member != player: sendMessage( member, tr( "%s has resigned from the leadership position of your guild. You can elect a new leader by voting for a member at your guildstone." ) % player.name, ) if guild.guildstone: guild.guildstone.resendtooltip() mainMenu(player, guild)
def overview_response(player, args, response): if response.button == 0: return if len(response.switches) != 1: commandGuilds(player.socket, "guilds", "") else: guild = wolfpack.findguild(response.switches[0]) if guild: guilds.stone.mainMenu(player, guild)
def guildPropertiesResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return # Save changes if button 1 was pressed if response.button == 1: readonly = not checkPermission(player, guild, PERMISSION_PROPERTIES) if not readonly: messages = [] if response.text[1] != guild.name: guild.name = response.text[1] messages.append("The name of your guild has been changed to '%s' by %s." % (guild.name, player.name)) abbreviation = response.text[2][:3] if abbreviation != guild.abbreviation: guild.abbreviation = abbreviation messages.append("The abbreviation of your guild has been changed to [%s] by %s." % (abbreviation, player.name)) if 0 in response.switches and guild.alignment != 0: guild.alignment = 0 messages.append("The alignment of your guild has been changed to neutral by %s." % player.name) elif 1 in response.switches and guild.alignment != 1: guild.alignment = 1 messages.append("The alignment of your guild has been changed to good by %s." % player.name) elif 2 in response.switches and guild.alignment != 2: guild.alignment = 2 messages.append("The alignment of your guild has been changed to evil by %s." % player.name) if response.text[3] != guild.website: guild.website = response.text[3] messages.append("The website of your guild has been changed to %s by %s." % (guild.website, player.name)) if response.text[4] != guild.charta: guild.charta = response.text[4] messages.append("The charta of your guild has been changed by %s. Check your guildstone for details." % player.name) for member in guild.members: if member.socket: member.resendtooltip() for message in messages: sendMessage(member, message) if guild.guildstone: guild.guildstone.resendtooltip() mainMenu(player, guild)
def onUse(player, stone): guild = None if stone.hastag('guild'): guild = wolfpack.findguild(int(stone.gettag('guild'))) if not guild: player.socket.sysmessage('This guildstone is abandoned.') else: if not player.cansee(stone) or not player.canreach(stone, 3): player.socket.clilocmessage(501661) else: mainMenu(player, guild) return 1
def mainMenuResponse(player, arguments, response): if response.button != 0: if len(arguments) == 0: return guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return # Leave the guild if MAINMENU_MEMBERSHIP in response.switches: guildMembership(player, guild) # Disband the guild elif MAINMENU_DISBANDGUILD in response.switches: if player != guild.leader and not player.gm: player.socket.sysmessage('You need to be the leader of this guild or a gamemaster to disband it.') else: members = guild.members canidates = guild.canidates if guild.guildstone: guild.guildstone.delete() guild.delete() for char in members + canidates: sendMessage(char, "Your guild has been disbanded by %s!" % player.name) if char.socket: char.resendtooltip() # Show a page with member information elif MAINMENU_MEMBERS in response.switches: guildMembers(player, guild) # Show a page with canidate information elif MAINMENU_CANIDATES in response.switches: guildCanidates(player, guild) # Show a page with ally/enemy information: elif MAINMENU_DIPLOMACY in response.switches: guildDiplomacy(player, guild) # Show a page with the basic properties of this guild elif MAINMENU_GENERALPROPERTIES in response.switches: guildProperties(player, guild) return
def guildMembersResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return if response.button == 0 or len(response.switches) != 1: mainMenu(player, guild) else: # Show a detail menu if possible char = wolfpack.findchar(response.switches[0]) if not char or not char.player or char not in guild.members: guildMembers(player, guild) else: guildMemberDetails(player, guild, char)
def guildCanidatesResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return if response.button == 0: mainMenu(player, guild) else: if len(response.switches) == 1: switch = response.switches[0] # Expel a canidate if switch & 0x80000000: if checkPermission(player, guild, PERMISSION_EXPEL): switch &= ~0x80000000 char = wolfpack.findchar(switch) if char.player and char in guild.canidates: guild.removecanidate(char) sendMessage(char, "You have been expelled from your guild by %s." % player.name) for member in guild.members: sendMessage(member, "The canidate %s has been expelled from your guild by %s." % (char.name, player.name)) char.resendtooltip() if guild.guildstone: guild.guildstone.resendtooltip() else: player.socket.sysmessage('The selected player is not a canidate of this guild.') else: player.socket.sysmessage('You are not allowed to expel canidates in this guild.') # Promote a canidate elif switch & 0x40000000: if checkPermission(player, guild, PERMISSION_PROMOTE): switch &= ~0x40000000 char = wolfpack.findchar(switch) if char.player and char in guild.canidates: guild.removecanidate(char) sendMessage(char, "You have been promoted to be a full member of your guild by %s." % player.name) for member in guild.members: sendMessage(member, "The canidate %s has been promoted to full member status by %s." % (char.name, player.name)) guild.addmember(char) # Clean voting and or permissions char.deltag('vote_' + str(guild.serial)) char.deltag('permissions_' + str(guild.serial)) # Make sure our member has the neccesary event char.addscript( 'guilds.member' ) char.resendtooltip() if guild.guildstone: guild.guildstone.resendtooltip() else: player.socket.sysmessage('The selected player is not a canidate of this guild.') else: player.socket.sysmessage('You are not allowed to promote canidates in this guild.') # Show a target for inviting someone into the guild elif switch == 1: if not checkPermission(player, guild, PERMISSION_RECRUIT): player.socket.sysmessage('You are not allowed to recruit canidates for this guild.') else: player.socket.sysmessage('Choose the player you want to recruit for your guild.') player.socket.attachtarget('guilds.stone.recruitResponse', [guild.serial]) return # No switch has been selected else: mainMenu(player, guild) return guildCanidates(player, guild)
def guildCanidatesOverviewResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if guild: mainMenu(player, guild)
def guildMemberDetailsResponse(player, arguments, response): guild = wolfpack.findguild(arguments[0]) if not guild: player.socket.sysmessage('The guild you try to manage has already been disbanded.') return char = wolfpack.findchar(arguments[1]) if not char or not char in guild.members: player.socket.sysmessage('The character has already left this guild.') guildMembers(player, guild) return if response.button == 0: guildMembers(player, guild) elif response.button == 1: # Edit the permissions if checkPermission(player, guild, PERMISSION_GRANT) and player != char and guild.leader != char: permissions = 0 for switch in response.switches: permissions |= switch player.message('Original Switches: %x' % permissions) # We may only award permissions we have for ourself if not player.gm and player != guild.leader: permissions &= getPermissions(player, guild) org_permissions = getPermissions(char, guild) player.message('After Own Permissions: %x' % permissions) # Make sure that the permissions we cannot grant are inherited from his # current permissions permissions |= org_permissions & ~getPermissions(player, guild) player.message('Including Inherited: %x' % permissions) # Only change if neccesary if org_permissions != permissions: setPermissions(char, guild, permissions) player.socket.sysmessage('The permissions for %s have been modified.' % char.name) sendMessage(char, "Your guild permissions have been modified by %s. See your guildstone for details." % player.name) # Awards a guildtitle if checkPermission(player, guild, PERMISSION_TITLES): title = response.text[1] info = guild.getmemberinfo(char) if title != info['guildtitle']: info['guildtitle'] = title guild.setmemberinfo(char, info) sendMessage(char, "You have been granted the title '%s' by %s." % (title, player.name)) player.socket.sysmessage('The guildtitle for %s has been changed.' % char.name) char.resendtooltip() guildMembers(player, guild) # Send a message to char elif response.button == 2: message = response.text[2] if len(message) > 0 and message != 'Enter message...': if char.socket: player.socket.sysmessage('Your message to %s has been sent.' % char.name) char.socket.sysmessage('%s: %s' % (player.name, message), player.saycolor) else: setPrivateMessage(char, player, message) player.socket.sysmessage('Your message has been queued up. You may edit your message on the guildstone until the recipient logs in.') else: setPrivateMessage(char, player, None) guildMemberDetails(player, guild, char) guildMembers(player, guild) # Kick a member out of the guild elif response.button == 3: if not checkPermission(player, guild, PERMISSION_KICK): player.socket.sysmessage('You lack the permission to kick members out of this guild.') elif char != player and char != guild.leader: guild.removemember(char) char.resendtooltip() sendMessage(char, 'You have been removed from your guild by %s.' % player.name) for member in guild.members: sendMessage(member, '%s has been removed from your guild by %s.' % (char.name, player.name)) if guild.guildstone: guild.guildstone.resendtooltip() guildMembers(player, guild) # Change your vote for a leader voting elif response.button == 4: # Voting is only possible if there actually _is_ an election going on if not guild.leader: # Set the vote and then see if there are enough votes to promote a new leader vote = getVote(player, guild) # Place a new vote if 0x8001 in response.switches and vote != char.serial: # If we previously voted for someone else, tell him he doesnt have # our vote anymore. previous = wolfpack.findchar(vote) if previous and previous in guild.members: sendMessage(previous, '%s has withdrawn the vote for your leadership position.' % player.name) if char != player: player.socket.sysmessage('You place your vote for %s.' % char.name) sendMessage(char, '%s has voted for your leadership position.' % player.name) else: player.socket.sysmessage('You place your vote for yourself.') setVote(player, guild, char.serial) # Withdraw a specific vote elif 0x8001 not in response.switches and vote == char.serial: if char != player: player.socket.sysmessage('You withdraw your vote for %s.' % char.name) sendMessage(char, '%s has withdrawn the vote for your leadership position.' % player.name) else: player.socket.sysmessage('You withdraw your vote for yourself.') setVote(player, guild, 0) # Count votes and see if someone has more than 50% of all members votes # NOTE: He has to vote for himself to accept the leadership offer membercount = len(guild.members) canidates = {} members = guild.members for member in members: canidate = wolfpack.findchar(getVote(member, guild)) if canidate in members: if canidates.has_key(canidate): canidates[canidate] += 1 else: canidates[canidate] = 1 for (canidate, votes) in canidates.items(): if votes > floor(membercount * 0.50): # Member has enough votes to be a leader # Check if he voted for himself canidatevote = getVote(canidate, guild) if canidatevote == canidate.serial: for member in guild.members: if member != canidate: sendMessage(member, '%s has been elected as the new leader of your guild.' % canidate.name) else: sendMessage(canidate, 'You have been elected as the new leader of your guild.') guild.leader = canidate canidate.resendtooltip() if guild.guildstone: guild.guildstone.resendtooltip() else: sendMessage(canidate, 'You have enough votes to become the new leader of your guild. To accept this result, please vote for yourself at your guildstone.') break guildMembers(player, guild)