Added ability to transfer leadership to another member in a Guild

This commit is contained in:
Waverunner
2014-06-30 18:53:43 -04:00
parent 09db42757d
commit 60299183d7
5 changed files with 85 additions and 12 deletions
+4 -1
View File
@@ -45,7 +45,7 @@ def createRadial(core, owner, target, radials):
radials.add(RadialOptions(4, RadialOptions.serverGuildSponsored, 3, '@guild:menu_sponsored')) # Sponsored for Membership
if owner.getObjectID() == guild.getLeader():
radials.add(RadialOptions(4, 218, 3, '@guild:menu_member_motd')) # Create a Guild Message
#radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership
radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership
return
return
@@ -77,6 +77,7 @@ def handleSelection(core, owner, target, option):
core.guildService.showDisbandConfirmWindow(owner, guild)
return
# - Change Guild Name
elif option == RadialOptions.serverGuildNameChange:
core.guildService.handleChangeGuildName(owner, guild)
return
@@ -100,8 +101,10 @@ def handleSelection(core, owner, target, option):
# - Transfer PA Leadership
elif option == 69:
core.guildService.handleTransferLeadership(owner, guild)
return
# - Change Message of the Day
elif option == 218:
core.guildService.handleChangeGuildMotd(owner, guild)
return
+9
View File
@@ -41,6 +41,7 @@ public class Guild {
private Map<Long, GuildMember> members = new HashMap<Long, GuildMember>();
private Map<Long, String> sponsoredPlayers = new HashMap<Long, String>();
private String motd = "";
private boolean electionsEnabled = false;
public Guild(int id, String abbreviation, String name, SWGObject leader) {
this.id = id;
@@ -162,4 +163,12 @@ public class Guild {
public GuildMember getMember(long objectID) {
return members.get(objectID);
}
public boolean isElectionsEnabled() {
return electionsEnabled;
}
public void setElectionsEnabled(boolean electionsEnabled) {
this.electionsEnabled = electionsEnabled;
}
}
+1 -3
View File
@@ -33,9 +33,7 @@ public class GuildMember {
private String rank = "";
private String name = "";
private String title = "";
// TODO: These might have to be moved to a new GuildRank class depending on how permissions worked for NGE
//this works for now... Lack of NGE Guild Rank guides makes re-creation difficult (Ranks introduced Game Update 8: http://swg.wikia.com/wiki/Game_Update_8)
private Vector<String> permissions = new Vector<String>();
private boolean mailPermission = false;
private boolean sponsorPermission = false;
+65 -8
View File
@@ -169,6 +169,71 @@ public class GuildService implements INetworkDispatch {
return member;
}
public void changeGuildLeader(Guild guild, CreatureObject formerLeaderCreo, CreatureObject newLeaderCreo, boolean elected) {
GuildMember formerLeader = guild.getMember(formerLeaderCreo.getObjectID());
if (formerLeader == null)
return;
GuildMember newLeader = guild.getMember(newLeaderCreo.getObjectID());
if (newLeader == null)
return;
formerLeader.removeAllPermissions();
newLeader.giveAllPermissions();
// TODO: Handling of guild PA Halls
guild.setLeader(newLeaderCreo.getObjectID());
guild.setLeaderName(newLeaderCreo.getCustomName());
if (elected) {
// TODO: Guild leader elections
} else {
formerLeaderCreo.sendSystemMessage("@guild:ml_success", DisplayType.Broadcast);
newLeaderCreo.sendSystemMessage("@guild:ml_you_are_leader", DisplayType.Broadcast);
guild.sendGuildMail(guild.getName(), "@guildmail:leaderchange_subject", new ProsePackage("@guildmail:leaderchange_text", "TU", newLeaderCreo.getCustomName()));
}
}
public void handleTransferLeadership(CreatureObject actor, Guild guild) {
SUIWindow transferWindow = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:make_leader_t", "@guild:make_leader_d", actor, null, 0,
(owner, eventType, returnList) -> {
String name = returnList.get(0);
if (name == "" || name == " ")
return;
SWGObject transferTarget = core.chatService.getObjectByFirstName(name);
if (transferTarget == null) {
actor.sendSystemMessage("@guild:ml_not_loaded", DisplayType.Broadcast);
return;
}
if (!guild.getMembers().containsKey(transferTarget.getObjectID())) {
actor.sendSystemMessage("@guild:ml_fail", DisplayType.Broadcast);
return;
}
if (actor.getPlanetId() != transferTarget.getPlanetId() || actor.getWorldPosition().getDistance2D(transferTarget.getWorldPosition()) > (float) 10) {
actor.sendSystemMessage("@guild:ml_not_loaded", DisplayType.Broadcast);
return;
}
SUIWindow confirmTransferWindow = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@guild:make_leader_t", "@guild:make_leader_p", transferTarget, null, 0, (owner2, eventType2, returnList2) -> {
changeGuildLeader(guild, actor, (CreatureObject) transferTarget, false);
});
core.suiService.openSUIWindow(confirmTransferWindow);
});
core.suiService.openSUIWindow(transferWindow);
}
public void handleCreateGuildName(CreatureObject actor, SWGObject creationSource) {
if (actor.getGuildId() != 0) { actor.sendSystemMessage("@guild:create_fail_in_guild", DisplayType.Broadcast); return; }
@@ -606,8 +671,6 @@ public class GuildService implements INetworkDispatch {
core.suiService.openSUIWindow(window);
}
public void handleGuildSponsorWindow(CreatureObject actor) {
SUIWindow wndSponsorPlayer = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:sponsor_title", "@guild:sponsor_prompt", actor, null, (float) 10, (sponsor, eventType, returnList) -> {
@@ -660,7 +723,6 @@ public class GuildService implements INetworkDispatch {
core.suiService.openSUIWindow(wndSponsorPlayer);
}
public void handleGuildDisband(CreatureObject actor, Guild guild) {
Map<Long, GuildMember> members = guild.getMembers();
@@ -700,7 +762,6 @@ public class GuildService implements INetworkDispatch {
removeGuild(guild.getId());
}
public void handleManageSponsoredPlayers(CreatureObject actor) {
Guild guild = getGuildById(actor.getGuildId());
@@ -794,7 +855,6 @@ public class GuildService implements INetworkDispatch {
core.chatService.sendPersistentMessageHeader(sponsoree.getClient(), declinedMail);
}
public void showKickConfirmWindow(CreatureObject actor, CreatureObject target, Guild guild) {
if (target.getObjectID() == guild.getLeader() && target.getObjectID() == actor.getObjectID()) {
@@ -889,7 +949,6 @@ public class GuildService implements INetworkDispatch {
}
}
public void sendMailToGuild(String sender, String subject, String message, int guildId) {
Guild guild = getGuildById(guildId);
@@ -917,12 +976,10 @@ public class GuildService implements INetworkDispatch {
target.getClient().getSession().write(roomMessage.serialize());
}
public GuildObject getGuildObject() {
return object;
}
public SWGSet<String> getGuildList() {
return object.getGuildList();
}
+6
View File
@@ -384,6 +384,12 @@ public class SUIService implements INetworkDispatch {
}
public SUIWindow createMessageBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, SUICallback handleFunc) {
SUIWindow window = createMessageBox(type, title, promptText, owner, rangeObject, maxDistance);
window.addHandler(0, "", Trigger.TRIGGER_OK, new Vector<String>(), handleFunc);
return window;
}
public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance) {
SUIWindow window = createSUIWindow("Script.inputBox", owner, rangeObject, maxDistance);