From 2614ff6ca262a067c1c8574057130eba9549c4ed Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 2 Jul 2014 11:44:54 -0400 Subject: [PATCH] Fixed variety of bugs associated with guild elections, Disabled loading of Lady Valarian - should fix some crashes on loading screen --- scripts/radial/object/guild_access_device.py | 23 ++++++------- scripts/static_spawns/tatooine/mos_eisley.py | 7 ++-- src/resources/guild/Guild.java | 7 +++- src/services/GuildService.java | 35 ++++++++++++++++---- 4 files changed, 50 insertions(+), 22 deletions(-) diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 962f12db..644c9ec5 100644 --- a/scripts/radial/object/guild_access_device.py +++ b/scripts/radial/object/guild_access_device.py @@ -24,6 +24,8 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) # Guild Management radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) # Member Management + if guild.isElectionsEnabled() or owner.getObjectID() == guild.getLeader(): + radials.add(RadialOptions(0, 216, 3, '@guild:menu_leader_race')) # Guild Leader Elections #### Guild Management #### radials.add(RadialOptions(3, RadialOptions.serverGuildInfo, 3, '@guild:menu_info')) # Guild Information @@ -49,19 +51,18 @@ def createRadial(core, owner, target, radials): #### Guild Leader Elections #### if guild.isElectionsEnabled(): - radials.add(RadialOptions(0, 71, 3, '@guild:menu_leader_race')) # Guild Leader Elections - if guild.getLeaderCandidates().containsKey(owner.getObjectID()): + if guild.isRunningForLeader(owner.getObjectID()) == False: radials.add(RadialOptions(5, 72, 3, '@guild:menu_leader_register')) # Register to Run - else + else: radials.add(RadialOptions(5, 73, 3, '@guild:menu_leader_unregister')) # Unregister from Race radials.add(RadialOptions(5, 74, 4, '@guild:menu_leader_vote')) # Cast a Vote radials.add(RadialOptions(5, 75, 4, '@guild:menu_leader_standings')) # View Standings if owner.getObjectID() == guild.getLeader(): - radials.add(4, 56, 3, '@guild:menu_disable_elections') # Disable Elections + radials.add(RadialOptions(5, 56, 3, '@guild:menu_disable_elections')) # Disable Elections else: if owner.getObjectID() == guild.getLeader(): - radials.add(RadialOptions(4, 57, 3, '@guild:menu_enable_elections')) # Enable Elections + radials.add(RadialOptions(5, 57, 3, '@guild:menu_enable_elections')) # Enable Elections return return @@ -125,18 +126,16 @@ def handleSelection(core, owner, target, option): core.guildService.handleChangeGuildMotd(owner, guild) return - #### Guild Management #### + #### Guild Leader Elections #### # - Register to Run elif option == 72: - guild.getLeaderCandidates().put(owner.getObjectID(), 1) - owner.sendSystemMessage('@guild:vote_register_congrats', 0) + core.guildService.handleRunForLeader(owner, guild) return # - Unregister from Race elif option == 73: - guild.getLeaderCandidates().remove(owner.getObjectID()) - owner.sendSystemMessage('@guild:vote_unregistered', 0) + core.guildService.handleUnregisterForLeader(owner, guild) return # - Cast a Vote @@ -150,11 +149,11 @@ def handleSelection(core, owner, target, option): return # - Enable Elections - elif option == 56: + elif option == 57: core.guildService.handleEnableGuildElections(guild) return # - Disable Elections - elif option == 57: + elif option == 56: return return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley.py b/scripts/static_spawns/tatooine/mos_eisley.py index d4c7ee3d..7b0d9042 100644 --- a/scripts/static_spawns/tatooine/mos_eisley.py +++ b/scripts/static_spawns/tatooine/mos_eisley.py @@ -143,9 +143,10 @@ def addPlanetSpawns(core, planet): #building = core.objectService.getObject(long(-466404040703447347)) #stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', building.getCellByCellNumber(9), float(32.3), float(7.0), float(1.6), float(0), float(0), float(0), float(0)) - valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71)) - valarian.setCustomName('Lady Valarian') - valarian.setOptionsBitmask(256) + # Disabled for now. She seems to be the cause for quite a few crashes (but not the only reason for the crashes) + #valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71)) + #valarian.setCustomName('Lady Valarian') + #valarian.setOptionsBitmask(256) #Medical Center Interior diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 727fd17a..3ad306f7 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -40,7 +40,7 @@ public class Guild { private String leaderName; private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); - private Map leaderCandidates; + private Map leaderCandidates = new HashMap(); private String motd = ""; private boolean electionsEnabled = false; private long electionResultsDate; @@ -189,4 +189,9 @@ public class Guild { public void setLeaderCandidates(Map leaderCandidates) { this.leaderCandidates = leaderCandidates; } + + public boolean isRunningForLeader(long objectID) { + if (leaderCandidates.containsKey(Long.valueOf(objectID))) return true; + else return false; + } } diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 28094a54..3676e36a 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -257,7 +257,8 @@ public class GuildService implements INetworkDispatch { guild.setElectionResultsDate(System.currentTimeMillis() + (12095 * 100000)); // 2 weeks Map candidates = new HashMap(); - candidates.put(guild.getLeader(), 1); + candidates.put(Long.valueOf(guild.getLeader()), 1); + guild.setLeaderCandidates(candidates); GuildMember leader = guild.getMember(guild.getLeader()); @@ -270,7 +271,7 @@ public class GuildService implements INetworkDispatch { Map candidates = guild.getLeaderCandidates(); - if (candidates.size() <= 1) { + if (candidates == null || candidates.size() <= 1) { actor.sendSystemMessage("@guild:vote_no_candidates", DisplayType.Broadcast); return; } @@ -290,12 +291,29 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(window); } + public void handleRunForLeader(CreatureObject actor, Guild guild) { + if (guild.isRunningForLeader(actor.getObjectID())) { + actor.sendSystemMessage("@guild:vote_register_dupe", DisplayType.Broadcast); + return; + } else guild.getLeaderCandidates().put(actor.getObjectID(), 1); + + actor.sendSystemMessage("@guild:vote_register_congrats", DisplayType.Broadcast); + } + + public void handleUnregisterForLeader(CreatureObject actor, Guild guild) { + if (!guild.isRunningForLeader(actor.getObjectID())) { + return; + } else guild.getLeaderCandidates().remove(actor.getObjectID()); + + actor.sendSystemMessage("@guild:vote_unregistered", DisplayType.Broadcast); + } + public void handleVoteForLeader(CreatureObject actor, Guild guild) { SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:leader_vote_t", "@guild:leader_vote_d", new TreeMap(), actor, null, 0); Map candidates = guild.getLeaderCandidates(); - candidates.keySet().stream().forEach(candidateId -> { + for (Long candidateId : candidates.keySet()) { if (candidateId == guild.getLeader()) { window.addListBoxMenuItem("Incumbent: " + guild.getLeaderName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); } else { @@ -303,14 +321,19 @@ public class GuildService implements INetworkDispatch { window.addListBoxMenuItem("Challenger: " + candidate.getName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); } + } - }); - Vector returnList = new Vector(); returnList.add("List.lstList:SelectedRow"); window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { - long voteId = Long.parseLong(resultList.get(0)); + + int index = Integer.parseInt(resultList.get(0)); + + long voteId = window.getObjectIdByIndex(index); + + if(voteId == 0) + return; GuildMember voter = guild.getMember(actor.getObjectID()); if (voter == null)