From 31fb79b406fa8e2bafb613766cbbda6ea6774762 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 23 May 2014 18:21:50 -0400 Subject: [PATCH] Added GuildMember class for handling member specific variables, changed sponsoring to use GuildMember --- scripts/radial/object/guild_access_device.py | 63 +++++-- scripts/radial/object/guild_registry.py | 5 +- src/resources/guild/Guild.java | 63 +++---- src/resources/guild/GuildMember.java | 187 +++++++++++++++++++ src/services/GuildService.java | 18 +- src/services/chat/ChatService.java | 2 +- 6 files changed, 286 insertions(+), 52 deletions(-) create mode 100644 src/resources/guild/GuildMember.java diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 8ebb1dc2..7f937447 100644 --- a/scripts/radial/object/guild_access_device.py +++ b/scripts/radial/object/guild_access_device.py @@ -5,7 +5,8 @@ from main import NGECore import sys def createRadial(core, owner, target, radials): - + # http://i293.photobucket.com/albums/mm62/cebot/radial.jpg + #radials.clear() if owner.getGuildId() != 0: @@ -15,30 +16,50 @@ def createRadial(core, owner, target, radials): if guild is None: return + member = guild.getMember(owner.getObjectID()) + + + # TODO: Add List of Guilds radial option + # TODO: Add List of Guild Wars radial option http://i293.photobucket.com/albums/mm62/cebot/wars.jpg << List of Guild Wars + 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 # Guild Management - radials.add(RadialOptions(0, RadialOptions.serverGuildInfo, 3, '@guild:menu_info')) # Guild Information + radials.add(RadialOptions(3, RadialOptions.serverGuildInfo, 3, '@guild:menu_info')) # Guild Information + #radials.add(RadialOptions(3, RadialOptions.serverGuildEnemies, 3, '@guild:menu_enemies')) # Guild Enemies + # TODO: Add Rank List + # TODO: Add Rank Summary + + #if member.hasDisbandPermission(): + #radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) # Disband Guild + #if member.hasChangeNamePermission(): + #radials.add(RadialOptions(3, RadialOptions.serverGuildNameChange, 3, '@guild:menu_namechange')) + #if owner.getObjectID() == guild.getLeader(): + #radials.add(RadialOptions(4, RadialOptions.serverTerminalPermissions, 3, '@guild:menu_permission_list')) # Permission List # Member Management - - # - Sponsor options - if guild.getSponsers().contains(owner.getObjectID()): + #radials.add(RadialOptions(4, RadialOptions.serverGuildMembers, 3, '@guild:menu_members')) # Guild Members + if member.hasSponsorPermission(): radials.add(RadialOptions(4, RadialOptions.serverGuildSponsor, 3, '@guild:menu_sponsor')) # Sponsor for Membership - - if guild.getSponsoredPlayers().size() > 0: - radials.add(RadialOptions(4, RadialOptions.serverGuildSponsored, 3, '@guild:menu_sponsored')) # Sponsored for Membership - - + if member.hasAcceptPermission() and guild.getSponsoredPlayers().size() > 0: + radials.add(RadialOptions(4, RadialOptions.serverGuildSponsored, 3, '@guild:menu_sponsored')) # Sponsored for Membership + #if owner.getObjectID() == guild.getLeader(): + #radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership return return def handleSelection(core, owner, target, option): + guild = core.guildService.getGuildById(owner.getGuildId()) + + if guild is None: + return + + # Guild Management + + # - Guild Info if option == RadialOptions.serverGuildInfo: - guild = core.guildService.getGuildById(owner.getGuildId()) - guildInfoPrompt = "Guild Name: " + guild.getName() + "\n" + \ "(neutral)\n" + \ "Guild Abbreviation: " + guild.getAbbreviation() + "\n" + \ @@ -50,11 +71,29 @@ def handleSelection(core, owner, target, option): core.suiService.openSUIWindow(wndGuildInfo) return + # Member Management + + # - Guild Members + elif option == RadialOptions.serverGuildMembers: + return + + # - Sponsor for Membership elif option == RadialOptions.serverGuildSponsor: core.guildService.handleGuildSponsor(owner) return + # - Sponsored for Membership elif option == RadialOptions.serverGuildSponsored: core.guildService.handleManageSponsoredPlayers(owner) return + + # - Permission List + elif option == RadialOptions.serverTerminalPermissions: + core.guildService.handleGuildPermissionList() + return + + # - Transfer PA Leadership + elif option == 69: + return + return \ No newline at end of file diff --git a/scripts/radial/object/guild_registry.py b/scripts/radial/object/guild_registry.py index fc0306bc..ed8e10b9 100644 --- a/scripts/radial/object/guild_registry.py +++ b/scripts/radial/object/guild_registry.py @@ -43,7 +43,8 @@ def doGuildCreate(owner, window, eventType, returnList): core = NGECore().getInstance() if eventType == 0: guild = core.guildService.createGuild(str(returnList.get(0)), str(owner.getAttachment('guildName')), owner) - core.guildService.joinGuild(guild, owner, None) - guild.getSponsers().add(owner.getObjectID()) + member = core.guildService.joinGuild(guild, owner, None) + if member is not None: + member.giveAllPermissions() return return \ No newline at end of file diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 718ec2e3..5ccc5b32 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -45,10 +45,8 @@ public class Guild extends Delta implements Serializable, Comparable { private String name; private long leader; private String leaderName; - private List members = new ArrayList(); - private List sponsors = new ArrayList(); + private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); - public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; this.abbreviation = abbreviation; @@ -59,8 +57,32 @@ public class Guild extends Delta implements Serializable, Comparable { //this.sponsors.add(leader.getObjectID()); } - public Guild() { - + public Guild() { } + + public GuildMember addMember(long member) { + GuildMember permissions = new GuildMember(); + members.put(member, permissions); + return permissions; + } + + public void sendGuildMail(String sender, String subject, String message) { + NGECore core = NGECore.getInstance(); + Date date = new Date(); + members.forEach((id, member) -> { + Mail guildMail = new Mail(); + guildMail.setMailId(core.chatService.generateMailId()); + guildMail.setTimeStamp((int) date.getTime()); + guildMail.setRecieverId(id); + guildMail.setStatus(Mail.NEW); + guildMail.setMessage(message); + guildMail.setSubject(subject); + guildMail.setSenderName(sender); + core.chatService.storePersistentMessage(guildMail); + + if (core.objectService.getObject(id) != null) { + core.chatService.sendPersistentMessageHeader(core.objectService.getObject(id).getClient(), guildMail); + } + }); } public int getId() { @@ -123,7 +145,7 @@ public class Guild extends Delta implements Serializable, Comparable { } } - public List getMembers() { + public Map getMembers() { return members; } @@ -139,14 +161,6 @@ public class Guild extends Delta implements Serializable, Comparable { } } - public List getSponsers() { - return sponsors; - } - - public void setSponsors(List sponsors) { - this.sponsors = sponsors; - } - public Map getSponsoredPlayers() { return sponsoredPlayers; } @@ -155,25 +169,10 @@ public class Guild extends Delta implements Serializable, Comparable { this.sponsoredPlayers = sponsoredPlayers; } - public void sendGuildMail(String sender, String subject, String message) { - NGECore core = NGECore.getInstance(); - Date date = new Date(); - members.forEach(member -> { - Mail guildMail = new Mail(); - guildMail.setMailId(core.chatService.generateMailId()); - guildMail.setTimeStamp((int) date.getTime()); - guildMail.setRecieverId(member); - guildMail.setStatus(Mail.NEW); - guildMail.setMessage(message); - guildMail.setSubject(subject); - guildMail.setSenderName(sender); - core.chatService.storePersistentMessage(guildMail); - - if (core.objectService.getObject(member) != null) { - core.chatService.sendPersistentMessageHeader(core.objectService.getObject(member).getClient(), guildMail); - } - }); + public GuildMember getMember(long objectID) { + return members.get(objectID); } + public byte[] getBytes() { synchronized(objectMutex) { IoBuffer buffer = createBuffer((getString().length() + 2)); diff --git a/src/resources/guild/GuildMember.java b/src/resources/guild/GuildMember.java new file mode 100644 index 00000000..2017bbe7 --- /dev/null +++ b/src/resources/guild/GuildMember.java @@ -0,0 +1,187 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.guild; + +import java.util.HashMap; +import java.util.Map; + +public class GuildMember { + private long objectId; + private long joinTime; + // 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 boolean mailPermission = false; + private boolean sponsorPermission = false; + private boolean titlePermission = false; + private boolean kickPermission = false; + private boolean acceptPermission = false; + private boolean warPermission = false; + private boolean changeNamePermission = false; + private boolean disbandPermission = false; + + public GuildMember() { } + + public GuildMember(long objectId) { + this.objectId = objectId; + this.joinTime = System.currentTimeMillis(); + } + + public void removeAllPermissions() { + this.mailPermission = false; + this.sponsorPermission = false; + this.titlePermission = false; + this.kickPermission = false; + this.acceptPermission = false; + this.warPermission = false; + this.changeNamePermission = false; + this.disbandPermission = false; + } + + public void giveAllPermissions() { + this.mailPermission = true; + this.sponsorPermission = true; + this.titlePermission = true; + this.kickPermission = true; + this.acceptPermission = true; + this.warPermission = true; + this.changeNamePermission = true; + this.disbandPermission = true; + } + + public long getObjectId() { + return objectId; + } + public void setObjectId(long objectId) { + this.objectId = objectId; + } + public long getJoinTime() { + return joinTime; + } + + public void setJoinTime(long joinTime) { + this.joinTime = joinTime; + } + + public boolean hasMailPermission() { + return mailPermission; + } + public void setMailPermission(boolean mailPermission) { + this.mailPermission = mailPermission; + } + + public boolean hasSponsorPermission() { + return sponsorPermission; + } + public void setSponsorPermission(boolean sponsorPermission) { + this.sponsorPermission = sponsorPermission; + } + public boolean hasTitlePermission() { + return titlePermission; + } + public void setTitlePermission(boolean titlePermission) { + this.titlePermission = titlePermission; + } + public boolean hasKickPermission() { + return kickPermission; + } + public void setKickPermission(boolean kickPermission) { + this.kickPermission = kickPermission; + } + public boolean hasAcceptPermission() { + return acceptPermission; + } + public void setAcceptPermission(boolean acceptPermission) { + this.acceptPermission = acceptPermission; + } + public boolean hasWarPermission() { + return warPermission; + } + public void setWarPermission(boolean warPermission) { + this.warPermission = warPermission; + } + public boolean hasChangeNamePermission() { + return changeNamePermission; + } + public void setChangeNamePermission(boolean changeNamePermission) { + this.changeNamePermission = changeNamePermission; + } + public boolean hasDisbandPermission() { + return disbandPermission; + } + public void setDisbandPermission(boolean disbandPermission) { + this.disbandPermission = disbandPermission; + } + + public Map getAllPermissions() { + Map permissions = new HashMap(); + permissions.put((long) 1, "@guild:permission_mail"); + permissions.put((long) 3, "@guild:permission_sponsor"); + permissions.put((long) 5, "@guild:permission_title"); + permissions.put((long) 7, "@guild:permission_accept"); + permissions.put((long) 9, "@guild:permission_kick"); + permissions.put((long) 11, "@guild:permission_war"); + permissions.put((long) 13, "@guild:permission_namechange"); + permissions.put((long) 15, "@guild:permission_disband"); + + + if (hasMailPermission()) + permissions.put((long) 2, "@guild:permission_mail_yes"); + else + permissions.put((long) 2, "@guild:permission_mail_no"); + + if (hasSponsorPermission()) + permissions.put((long) 4, "@guild:permission_sponsor_yes"); + else + permissions.put((long) 4, "@guild:permission_sponsor_no"); + + if (hasTitlePermission()) + permissions.put((long) 6, "@guild:permission_title_yes"); + else + permissions.put((long) 6, "@guild:permission_title_no"); + + if (hasAcceptPermission()) + permissions.put((long) 8, "@guild:permission_accept_yes"); + else + permissions.put((long) 8, "@guild:permission_accept_no"); + + if (hasKickPermission()) + permissions.put((long) 10, "@guild:permission_kick_yes"); + else + permissions.put((long) 10, "@guild:permission_kick_no"); + + if (hasWarPermission()) + permissions.put((long) 12, "@guild:permission_war_yes"); + else + permissions.put((long) 12, "@guild:permission_war_no"); + + if (hasChangeNamePermission()) + permissions.put((long) 14, "@guild:permission_namechange_yes"); + else + permissions.put((long) 14, "@guild:permission_namechange_no"); + + if (hasDisbandPermission()) + permissions.put((long) 16, "@guild:permission_disband_yes"); + else + permissions.put((long) 16, "@guild:permission_disband_no"); + return permissions; + } +} diff --git a/src/services/GuildService.java b/src/services/GuildService.java index d3389368..427aefaf 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -29,6 +29,7 @@ import java.util.Vector; import resources.common.OutOfBand; import resources.datatables.DisplayType; import resources.guild.Guild; +import resources.guild.GuildMember; import resources.objects.SWGSet; import resources.objects.creature.CreatureObject; import resources.objects.guild.GuildObject; @@ -84,12 +85,14 @@ public class GuildService implements INetworkDispatch { return guild; } - public void joinGuild(Guild guild, CreatureObject joinee, CreatureObject acceptor) { + public GuildMember joinGuild(Guild guild, CreatureObject joinee, CreatureObject acceptor) { + GuildMember member = null; PlayerObject ghost = joinee.getPlayerObject(); if (ghost == null) - return; + return member; + + member = guild.addMember(joinee.getObjectID()); - guild.getMembers().add(joinee.getObjectID()); joinee.setGuildId(guild.getId()); guild.getSponsoredPlayers().remove(joinee.getObjectID()); @@ -129,6 +132,11 @@ public class GuildService implements INetworkDispatch { } }); } + return member; + } + + public void handleGuildPermissionList(CreatureObject actor, Guild guild) { + } public void handleGuildSponsor(CreatureObject actor) { @@ -174,7 +182,7 @@ public class GuildService implements INetworkDispatch { actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_self", "TU", cOwner.getCustomName(), "TT", guild.getName()), DisplayType.Broadcast); ((CreatureObject)cOwner).sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_target", "TT", guild.getName(), "TU", actor.getCustomName()), DisplayType.Broadcast); - guild.sendGuildMail(guild.getName(), "@guildmail:sponsor_subject", new Stf("@guild:sponsor_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", cOwner.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:sponsor_subject", new Stf("@guildmail:sponsor_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", cOwner.getCustomName())); }); core.suiService.openSUIWindow(wndSponsoredConfirm); @@ -259,7 +267,7 @@ public class GuildService implements INetworkDispatch { public void handleGuildDeclineSponsorship(Guild guild, CreatureObject actor, CreatureObject sponsoree) { guild.getSponsoredPlayers().remove(sponsoree.getObjectID()); - guild.sendGuildMail(guild.getName(), "@guildmail:decline_subject", new Stf("@guildmail:decline_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TO", sponsoree.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:decline_subject", new Stf("@guildmail:decline_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", sponsoree.getCustomName())); Mail declinedMail = new Mail(); declinedMail.setMailId(core.chatService.generateMailId()); diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 251d125e..a37eed1b 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -262,7 +262,7 @@ public class ChatService implements INetworkDispatch { if(sender == null) return; - + // TODO: Recipient handling for values: citizens, group, guild, guild ranks (ace, boot, admiral, etc.) - Nulls at this point atm SWGObject recipient = getObjectByFirstName(packet.getRecipient()); PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost");