package script.terminal; import script.*; import script.base_class.*; import script.combat_engine.*; import java.util.Arrays; import java.util.Hashtable; import java.util.Vector; import script.base_script; import script.library.guild; import script.library.player_structure; import script.library.sui; import script.library.utils; import script.library.prose; public class terminal_guild extends script.terminal.base.base_terminal { public terminal_guild() { } public static final string_id SID_GUILD_GUILD_MANAGEMENT = new string_id ("guild", "menu_guild_management"); public static final string_id SID_GUILD_MEMBER_MANAGEMENT = new string_id ("guild", "menu_member_management"); public static final string_id SID_GUILD_CREATE = new string_id ("guild", "menu_create"); public static final string_id SID_GUILD_INFO = new string_id ("guild", "menu_info"); public static final string_id SID_GUILD_MEMBERS = new string_id ("guild", "menu_members"); public static final string_id SID_GUILD_SPONSORED = new string_id ("guild", "menu_sponsored"); public static final string_id SID_GUILD_ENEMIES = new string_id ("guild", "menu_enemies"); public static final string_id SID_GUILD_SPONSOR = new string_id ("guild", "menu_sponsor"); public static final string_id SID_GUILD_DISBAND = new string_id ("guild", "menu_disband"); public static final string_id SID_GUILD_NAMECHANGE = new string_id ("guild", "menu_namechange"); public static final string_id SID_GUILD_SPONSOR_ACCEPT = new string_id ("guild", "sponsor_accept"); public static final string_id SID_GUILD_SPONSOR_DECLINE = new string_id ("guild", "sponsor_decline"); public static final string_id SID_GUILD_SPONSOR_NOT_FOUND = new string_id ("guild", "sponsor_not_found"); public static final string_id SID_GUILD_SPONSOR_ALREADY_IN_GUILD = new string_id ("guild", "sponsor_already_in_guild"); public static final String STR_GUILD_ALLEGIENCE = "@guild:allegiance"; public static final String STR_GUILD_TITLE = "@guild:title"; public static final String STR_GUILD_KICK = "@guild:kick"; public static final String STR_GUILD_PERMISSIONS = "@guild:permissions"; public static final String STR_GUILD_SPONSOR_PROMPT = "@guild:sponsor_prompt"; public static final String STR_GUILD_SPONSOR_TITLE = "@guild:sponsor_title"; public static final String STR_GUILD_ADD_ENEMY = "@guild:add_enemy"; public static final String STR_GUILD_ENEMIES_PROMPT = "@guild:enemies_prompt"; public static final String STR_GUILD_ENEMIES_TITLE = "@guild:enemies_title"; public static final String STR_GUILD_SPONSORED_PROMPT = "@guild:sponsored_prompt"; public static final String STR_GUILD_SPONSORED_TITLE = "@guild:sponsored_title"; public static final String STR_GUILD_MEMBERS_PROMPT = "@guild:members_prompt"; public static final String STR_GUILD_MEMBERS_TITLE = "@guild:members_title"; public static final String STR_GUILD_DISBAND_TITLE = "@guild:disband_title"; public static final String STR_GUILD_DISBAND_PROMPT = "@guild:disband_prompt"; public static final String STR_GUILD_CREATE_NAME_PROMPT = "@guild:create_name_prompt"; public static final String STR_GUILD_CREATE_NAME_TITLE = "@guild:create_name_title"; public static final String STR_GUILD_CREATE_ABBREV_PROMPT = "@guild:create_abbrev_prompt"; public static final String STR_GUILD_CREATE_ABBREV_TITLE = "@guild:create_abbrev_title"; public static final String STR_GUILD_NAMECHANGE_NAME_PROMPT = "@guild:namechange_name_prompt"; public static final String STR_GUILD_NAMECHANGE_NAME_TITLE = "@guild:namechange_name_title"; public static final String STR_GUILD_NAMECHANGE_ABBREV_PROMPT = "@guild:namechange_abbrev_prompt"; public static final String STR_GUILD_NAMECHANGE_ABBREV_TITLE = "@guild:namechange_abbrev_title"; public static final String STR_GUILD_SPONSOR_VERIFY_PROMPT = "@guild:sponsor_verify_prompt"; public static final String STR_GUILD_SPONSOR_VERIFY_TITLE = "@guild:sponsor_verify_title"; public static final String STR_GUILD_MEMBER_OPTIONS_PROMPT = "@guild:member_options_prompt"; public static final String STR_GUILD_MEMBER_OPTIONS_TITLE = "@guild:member_options_title"; public static final String STR_GUILD_ACCEPT = "@guild:accept"; public static final String STR_GUILD_DECLINE = "@guild:decline"; public static final String STR_GUILD_SPONSORED_OPTIONS_PROMPT = "@guild:sponsored_options_prompt"; public static final String STR_GUILD_SPONSORED_OPTIONS_TITLE = "@guild:sponsored_options_title"; public static final String STR_GUILD_WAR_ENEMY_NAME_PROMPT = "@guild:war_enemy_name_prompt"; public static final String STR_GUILD_WAR_ENEMY_NAME_TITLE = "@guild:war_enemy_name_title"; public static final String STR_GUILD_TITLE_PROMPT = "@guild:title_prompt"; public static final String STR_GUILD_TITLE_TITLE = "@guild:title_title"; public static final String STR_GUILD_KICK_PROMPT = "@guild:kick_prompt"; public static final String STR_GUILD_KICK_TITLE = "@guild:kick_title"; public static final String STR_GUILD_PERMISSIONS_PROMPT = "@guild:permissions_prompt"; public static final String STR_GUILD_PERMISSIONS_TITLE = "@guild:permissions_title"; public static final String STR_GUILD_INFO_TITLE = "@guild:info_title"; public static final String STR_GUILD_PERMISSION_MAIL_YES = "@guild:permission_mail_yes"; public static final String STR_GUILD_PERMISSION_MAIL_NO = "@guild:permission_mail_no"; public static final String STR_GUILD_PERMISSION_SPONSOR_YES = "@guild:permission_sponsor_yes"; public static final String STR_GUILD_PERMISSION_SPONSOR_NO = "@guild:permission_sponsor_no"; public static final String STR_GUILD_PERMISSION_TITLE_YES = "@guild:permission_title_yes"; public static final String STR_GUILD_PERMISSION_TITLE_NO = "@guild:permission_title_no"; public static final String STR_GUILD_PERMISSION_ACCEPT_YES = "@guild:permission_accept_yes"; public static final String STR_GUILD_PERMISSION_ACCEPT_NO = "@guild:permission_accept_no"; public static final String STR_GUILD_PERMISSION_KICK_YES = "@guild:permission_kick_yes"; public static final String STR_GUILD_PERMISSION_KICK_NO = "@guild:permission_kick_no"; public static final String STR_GUILD_PERMISSION_WAR_YES = "@guild:permission_war_yes"; public static final String STR_GUILD_PERMISSION_WAR_NO = "@guild:permission_war_no"; public static final String STR_GUILD_PERMISSION_NAMECHANGE_YES = "@guild:permission_namechange_yes"; public static final String STR_GUILD_PERMISSION_NAMECHANGE_NO = "@guild:permission_namechange_no"; public static final String STR_GUILD_PERMISSION_DISBAND_YES = "@guild:permission_disband_yes"; public static final String STR_GUILD_PERMISSION_DISBAND_NO = "@guild:permission_disband_no"; public static final string_id SID_GUILD_LEADER_CHANGE = new string_id ("guild", "menu_leader_change"); public static final string_id SID_GUILD_ENABLE_ELECTIONS = new string_id ("guild", "menu_enable_elections"); public static final string_id SID_GUILD_DISABLE_ELECTIONS = new string_id ("guild", "menu_disable_elections"); public static final string_id SID_LEADER_RACE = new string_id ("guild", "menu_leader_race"); public static final string_id SID_LEADER_STANDINGS = new string_id ("guild", "menu_leader_standings"); public static final string_id SID_LEADER_VOTE = new string_id ("guild", "menu_leader_vote"); public static final string_id SID_LEADER_REGISTER = new string_id ("guild", "menu_leader_register"); public static final string_id SID_LEADER_UNREGISTER = new string_id ("guild", "menu_leader_unregister"); public static final string_id SID_RESET_VOTING = new string_id ("guild", "menu_leader_reset_vote"); public static final string_id SID_NO_CANDIDATES = new string_id ("guild", "vote_no_candidates"); public static final string_id SID_VOTE_PLACED = new string_id ("guild", "vote_placed"); public static final string_id SID_VOTE_ABSTAIN = new string_id ("guild", "vote_abstain"); public static final string_id SID_REGISTER_DUPE = new string_id ("guild", "vote_register_dupe"); public static final string_id SID_NOT_REGISTERED = new string_id ("guild", "vote_not_registered"); public static final string_id SID_UNREGISTERED = new string_id ("guild", "vote_unregistered"); public static final string_id SID_REGISTER_CONGRATS = new string_id ("guild", "vote_register_congrats"); public static final string_id SID_ELECTIONS_OPEN = new string_id ("guild", "vote_elections_open"); public static final string_id SID_ELECTIONS_CLOSED = new string_id ("guild", "vote_elections_closed"); public static final string_id SID_ALREADY_LEADER = new string_id ("guild", "already_leader"); public static final string_id OPEN_ELECTIONS_EMAIL_BODY = new string_id ("guild", "open_elections_email_body"); public static final string_id OPEN_ELECTIONS_EMAIL_SUBJECT = new string_id ("guild", "open_elections_email_subject"); public static final string_id CLOSED_ELECTIONS_EMAIL_BODY = new string_id ("guild", "closed_elections_email_body"); public static final string_id CLOSED_ELECTIONS_EMAIL_SUBJECT = new string_id ("guild", "closed_elections_email_subject"); public static final string_id OPEN_ELECTIONS_ABSENT_EMAIL_BODY = new string_id ("guild", "open_elections_absent_email_body"); public static final string_id OPEN_ELECTIONS_ABSENT_EMAIL_SUBJECT = new string_id ("guild", "open_elections_absent_email_subject"); public static final string_id SID_NEED_ACCEPT_HALL = new string_id ("guild", "need_accept_hall"); public static final string_id SID_ACCEPT_HALL = new string_id ("guild", "accept_hall"); public static final string_id SID_TERMINAL_LOCKED = new string_id ("guild", "terminal_locked"); public static final string_id SID_NO_LOTS = new string_id ("guild", "no_lots"); public static final string_id SID_ML_NOT_LOADED = new string_id ("guild", "ml_not_loaded"); public static final string_id SID_ML_NO_LOTS_FREE = new string_id ("guild", "ml_no_lots_free"); public static final string_id SID_ML_TRIAL = new string_id ("guild", "ml_trial"); public static final string_id SID_ML_SUCCESS = new string_id ("guild", "ml_success"); public static final string_id SID_ML_REJECTED = new string_id ("guild", "ml_rejected"); public static final string_id SID_ML_YOU_ARE_LEADER = new string_id ("guild", "ml_you_are_leader"); public static final string_id SID_ML_FAIL = new string_id ("guild", "ml_fail"); public static final string_id SID_PA_OWNER_NOW = new string_id ("guild", "pa_owner_now"); public static final int DISBAND_CHECK_TIME = 60*60*2; public static final float TERMINAL_USE_DISTANCE = 8.0f; public static final int LEADER_ABSENT_TIME = 60*60*24*28; public static final int ELECTIONS_COMPLETE = 60*60*24*14; public static final String SID_VOTING_ENABLED = "@guild:voting_enabled"; public static final String SID_VOTING_DISABLED = "@guild:voting_disabled"; public int getStructureGuildId(obj_id self) throws InterruptedException { int guildId = 0; obj_id structure = player_structure.getStructure(self); if (isIdValid(structure) && hasObjVar(structure, "player_structure.owner") && hasObjVar(structure, "guildId")) { guildId = getIntObjVar(structure, "guildId"); if (guildId != 0 && !guildExists(guildId)) { removeObjVar(structure, "guildId"); guildId = 0; } } if (guildId == 0 && hasObjVar(self, "guildId")) { guildId = getIntObjVar(self, "guildId"); if (guildId != 0 && !guildExists(guildId)) { removeObjVar(self, "guildId"); guildId = 0; } } return guildId; } public int OnInitialize(obj_id self) throws InterruptedException { messageTo(self, "checkDisband", null, DISBAND_CHECK_TIME, false); obj_id structure = player_structure.getStructure(self); if (isIdValid(structure)) { if (!hasObjVar(structure, player_structure.VAR_IS_GUILD_HALL)) { setObjVar(structure, player_structure.VAR_IS_GUILD_HALL, 1); } setObjVar( self, "pa_hall", structure ); if (hasObjVar( structure, "elections" )) { setObjVar( self, "elections", getIntObjVar( structure, "elections") ); } } obj_id pa_hall = player_structure.getStructure( self ); if (!hasScript( pa_hall, "guild.pa_hall_vote" )) { attachScript( pa_hall, "guild.pa_hall_vote"); } setObjVar( pa_hall, "vote_terminal", self ); return super.OnInitialize(self); } public int OnGetAttributes(obj_id self, obj_id player, String[] names, String[] attribs) throws InterruptedException { int idx = utils.getValidAttributeIndex(names); if (idx == -1) { return SCRIPT_CONTINUE; } if (exists(self)) { obj_id pa_hall = getTopMostContainer(self); if (isValidId(pa_hall) && exists(pa_hall)) { int guildId = getStructureGuildId(self); if (guildId > -1) { String guildName = guildGetName(guildId); if (!guildName.equals("")) { names[idx] = "guild_name"; attribs[idx] = guildName; idx++; } String guildAbbrev = guildGetAbbrev(guildId); if (!guildName.equals("")) { names[idx] = "guild_abbrev"; attribs[idx] = guildAbbrev; idx++; } obj_id guildLeader = guildGetLeader(guildId); if (isValidId(guildLeader)) { names[idx] = "guild_leader"; attribs[idx] = guildGetMemberName(guildId, guildLeader); idx++; } names[idx] = "elections"; if (hasObjVar( self, "elections" )) { attribs[idx] = SID_VOTING_ENABLED; } else { attribs[idx] = SID_VOTING_DISABLED; } idx++; if (hasObjVar( self, "elections")) { names[idx] = "elections_countdown"; int electionCompleted = (getIntObjVar(self, "elections") + ELECTIONS_COMPLETE) - getGameTime(); attribs[idx] = utils.assembleTimeRemainToUse(electionCompleted); idx++; obj_id[] candidates = getObjIdArrayObjVar( pa_hall, "candidate_list"); if (candidates != null) { for (int i=0; i < candidates.length; i++) { testAbortScript(); if (candidates[i] == guildLeader) { names[idx] = "incumbent"; attribs[idx] = guildGetMemberName(guildId, guildLeader); idx++; } else { names[idx] = "candidate"; attribs[idx] = guildGetMemberName(guildId, candidates[i]); idx++; } } } } } } } return SCRIPT_CONTINUE; } public int OnObjectMenuRequest(obj_id self, obj_id player, menu_info mi) throws InterruptedException { if (outOfRange(self, player)) { return super.OnObjectMenuRequest(self, player, mi); } int guildId = getStructureGuildId(self); obj_id structure = player_structure.getStructure(self); String pa_owner = getStringObjVar( structure, "player_structure.owner"); if (guildId == 0) { if (isIdValid(structure) && hasObjVar(structure, "player_structure.owner")) { String ownerName = getStringObjVar(structure, "player_structure.owner"); String firstName = getFirstName(player); if (ownerName.toUpperCase().equals(firstName.toUpperCase())) { guildId = getGuildId(player); if (guildId != 0) { setObjVar(structure, "guildId", guildId); permissionsAddAllowed(structure, "Guild:"+guildGetAbbrev(guildId)); } else { mi.addRootMenu(menu_info_types.SERVER_GUILD_CREATE, SID_GUILD_CREATE); } } } } if (guildId != 0 && (getGuildId(player) == guildId || isGod(player))) { int guildManagementMenu = mi.addRootMenu(menu_info_types.SERVER_GUILD_GUILD_MANAGEMENT, SID_GUILD_GUILD_MANAGEMENT); mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_GUILD_INFO, SID_GUILD_INFO); mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_GUILD_ENEMIES, SID_GUILD_ENEMIES); if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_DISBAND)) { mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_GUILD_DISBAND, SID_GUILD_DISBAND); } if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_NAMECHANGE)) { mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_GUILD_NAMECHANGE, SID_GUILD_NAMECHANGE); } if (player == guildGetLeader(guildId)) { if (hasObjVar( self, "elections" )) { mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_MENU2, SID_GUILD_DISABLE_ELECTIONS); } else { mi.addSubMenu(guildManagementMenu, menu_info_types.SERVER_MENU2, SID_GUILD_ENABLE_ELECTIONS); } String player_whole_name = guildGetMemberName( guildId, player ); java.util.StringTokenizer tok = new java.util.StringTokenizer( player_whole_name ); String player_name = tok.nextToken(); if (!player_name.equalsIgnoreCase( pa_owner )) { obj_id pa_owner_id = getPlayerIdFromFirstName( pa_owner ); int login_date = getPlayerLastLoginTime( pa_owner_id ); long current_date = System.currentTimeMillis() / 1000; if (current_date - login_date > LEADER_ABSENT_TIME) { mi.addRootMenu( menu_info_types.SERVER_MENU9, SID_ACCEPT_HALL ); } } } int memberManagementMenu = mi.addRootMenu(menu_info_types.SERVER_GUILD_MEMBER_MANAGEMENT, SID_GUILD_MEMBER_MANAGEMENT); mi.addSubMenu(memberManagementMenu, menu_info_types.SERVER_GUILD_MEMBERS, SID_GUILD_MEMBERS); if (guild.hasSponsoredMembers(guildId)) { mi.addSubMenu(memberManagementMenu, menu_info_types.SERVER_GUILD_SPONSORED, SID_GUILD_SPONSORED); } if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_SPONSOR)) { mi.addSubMenu(memberManagementMenu, menu_info_types.SERVER_GUILD_SPONSOR, SID_GUILD_SPONSOR); } if (player == guildGetLeader(guildId)) { mi.addSubMenu(memberManagementMenu, menu_info_types.SERVER_MENU1, SID_GUILD_LEADER_CHANGE); } if (hasObjVar( self, "elections" )) { int menu = mi.addRootMenu( menu_info_types.SERVER_MENU3, SID_LEADER_RACE ); mi.addSubMenu( menu, menu_info_types.SERVER_MENU4, SID_LEADER_STANDINGS ); mi.addSubMenu( menu, menu_info_types.SERVER_MENU5, SID_LEADER_VOTE ); if (!isRegisteredToRun( player, self )) { mi.addSubMenu( menu, menu_info_types.SERVER_MENU6, SID_LEADER_REGISTER ); } else { mi.addSubMenu( menu, menu_info_types.SERVER_MENU7, SID_LEADER_UNREGISTER ); } } } return super.OnObjectMenuRequest(self, player, mi); } public int OnObjectMenuSelect(obj_id self, obj_id player, int item) throws InterruptedException { if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); obj_id structure = player_structure.getStructure(self); String pa_owner = getStringObjVar( structure, "player_structure.owner"); String leader_name = null; if (guildId != 0) { String leader_whole_name = guildGetMemberName( guildId, guildGetLeader(guildId) ); if (leader_whole_name != null) { java.util.StringTokenizer tok = new java.util.StringTokenizer( leader_whole_name ); leader_name = tok.nextToken(); } } if (guildId == 0) { if (getGuildId(player) == 0) { if (isIdValid(structure)) { String ownerName = getStringObjVar(structure, "player_structure.owner"); String firstName = getFirstName(player); if (ownerName.toUpperCase().equals(firstName.toUpperCase())) { sui.inputbox( self, player, STR_GUILD_CREATE_NAME_PROMPT, sui.OK_CANCEL, STR_GUILD_CREATE_NAME_TITLE, sui.INPUT_NORMAL, null, "onGuildCreateNameResponse"); } } } } else if (getGuildId(player) == guildId || isGod(player)) { if (item == menu_info_types.ITEM_USE || item == menu_info_types.SERVER_GUILD_INFO) { showGuildInfo(self, player); } else if (item == menu_info_types.SERVER_GUILD_ENEMIES) { showGuildEnemies(self, player); } else if (item == menu_info_types.SERVER_GUILD_SPONSORED) { showGuildSponsored(self, player); } else if (item == menu_info_types.SERVER_GUILD_MEMBERS) { showGuildMembers(self, player); } else if (item == menu_info_types.SERVER_GUILD_SPONSOR) { sui.inputbox( self, player, STR_GUILD_SPONSOR_PROMPT, sui.OK_CANCEL, STR_GUILD_SPONSOR_TITLE, sui.INPUT_NORMAL, null, "onGuildSponsorResponse"); } else if (item == menu_info_types.SERVER_GUILD_DISBAND) { sui.msgbox( self, player, STR_GUILD_DISBAND_PROMPT, sui.YES_NO, STR_GUILD_DISBAND_TITLE, sui.MSG_NORMAL, "onGuildDisbandResponse"); } else if (item == menu_info_types.SERVER_GUILD_NAMECHANGE) { sui.inputbox( self, player, STR_GUILD_NAMECHANGE_NAME_PROMPT, sui.OK_CANCEL, STR_GUILD_NAMECHANGE_NAME_TITLE, sui.INPUT_NORMAL, null, "onGuildNamechangeNameResponse"); } else if (item == menu_info_types.SERVER_MENU1) { if (player == guildGetLeader(guildId)) { sui.inputbox( self, player, "@guild:make_leader_d", sui.OK_CANCEL, "@guild:make_leader_t", sui.INPUT_NORMAL, null, "handleMakeLeader", null ); } } else if (item == menu_info_types.SERVER_MENU2) { toggleElections( self, player ); sendDirtyObjectMenuNotification(self); } if (item == menu_info_types.SERVER_MENU3 || item == menu_info_types.SERVER_MENU4) { showStandings( self, player ); } else if (item == menu_info_types.SERVER_MENU5) { placeVote( self, player ); } else if (item == menu_info_types.SERVER_MENU6) { registerToRun( self, player ); } else if (item == menu_info_types.SERVER_MENU7) { unregisterFromRace( self, player ); } else if (item == menu_info_types.SERVER_MENU8) { } else if ((leader_name == null) || !leader_name.equalsIgnoreCase( pa_owner )) { if (player == guildGetLeader(guildId) && item == menu_info_types.SERVER_MENU9) { obj_id pa_owner_id = getPlayerIdFromFirstName( pa_owner ); int login_date = getPlayerLastLoginTime( pa_owner_id ); long current_date = System.currentTimeMillis() / 1000; if (current_date - login_date > LEADER_ABSENT_TIME) { acceptPAHall( self, player ); } } } } return SCRIPT_CONTINUE; } public int selectPermissionsMessage(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String name = params.getString("name"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); obj_id target = guild.findMemberIdByName(guildId, name, false, true); setMenuContextString(self, player, "guildPermissionsTarget", name); String[] perms = new String[8]; if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_MAIL)) { perms[0] = STR_GUILD_PERMISSION_MAIL_YES; } else { perms[0] = STR_GUILD_PERMISSION_MAIL_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_SPONSOR)) { perms[1] = STR_GUILD_PERMISSION_SPONSOR_YES; } else { perms[1] = STR_GUILD_PERMISSION_SPONSOR_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_TITLE)) { perms[2] = STR_GUILD_PERMISSION_TITLE_YES; } else { perms[2] = STR_GUILD_PERMISSION_TITLE_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_ACCEPT)) { perms[3] = STR_GUILD_PERMISSION_ACCEPT_YES; } else { perms[3] = STR_GUILD_PERMISSION_ACCEPT_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_KICK)) { perms[4] = STR_GUILD_PERMISSION_KICK_YES; } else { perms[4] = STR_GUILD_PERMISSION_KICK_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_WAR)) { perms[5] = STR_GUILD_PERMISSION_WAR_YES; } else { perms[5] = STR_GUILD_PERMISSION_WAR_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_NAMECHANGE)) { perms[6] = STR_GUILD_PERMISSION_NAMECHANGE_YES; } else { perms[6] = STR_GUILD_PERMISSION_NAMECHANGE_NO; } if (guild.hasGuildPermission(guildId, target, guild.GUILD_PERMISSION_DISBAND)) { perms[7] = STR_GUILD_PERMISSION_DISBAND_YES; } else { perms[7] = STR_GUILD_PERMISSION_DISBAND_NO; } sui.listbox( self, player, guild.buildFakeLocalizedProse(STR_GUILD_PERMISSIONS_PROMPT, name, ""), sui.OK_CANCEL, STR_GUILD_PERMISSIONS_TITLE, perms, "onGuildPermissionsResponse"); return SCRIPT_CONTINUE; } public int showGuildEnemiesMessage(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); int[] enemyIds = guild.getEnemyIds(guildId); setMenuContextIntArray(self, player, "guildEnemyIds", enemyIds); String[] enemies = guild.getEnemyNamesAndAbbrevs(guildId); int numEnemies = 0; if (enemies != null) { numEnemies = enemies.length; } boolean warPerms = guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_WAR); int numOptions = numEnemies; if (warPerms) { ++numOptions; } String[] options = new String[numOptions]; int index = 0; if (warPerms) { options[index++] = STR_GUILD_ADD_ENEMY; } for (int i = 0; i < numEnemies; ++i) { testAbortScript(); options[index++] = enemies[i]; } sui.listbox( self, player, STR_GUILD_ENEMIES_PROMPT, sui.OK_CANCEL, STR_GUILD_ENEMIES_TITLE, options, "onGuildEnemiesResponse", true, false); return SCRIPT_CONTINUE; } public int showGuildSponsoredMessage(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); sui.listbox( self, player, STR_GUILD_SPONSORED_PROMPT, sui.OK_CANCEL, STR_GUILD_SPONSORED_TITLE, guild.getMemberNames(guildId, true, false), "onGuildSponsoredResponse", true, false); return SCRIPT_CONTINUE; } public int onGuildNamechangeNameResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { String newGuildName = sui.getInputBoxText(params); setMenuContextString(self, player, "guildNamechangeName", newGuildName); sui.inputbox( self, player, STR_GUILD_NAMECHANGE_ABBREV_PROMPT, sui.OK_CANCEL, STR_GUILD_NAMECHANGE_ABBREV_TITLE, sui.INPUT_NORMAL, null, "onGuildNamechangeAbbrevResponse"); } return SCRIPT_CONTINUE; } public int onGuildNamechangeAbbrevResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String newGuildName = getMenuContextString(self, player, "guildNamechangeName"); removeMenuContextVar(self, player, "guildNamechangeName"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { int guildId = getStructureGuildId(self); String newGuildAbbrev = sui.getInputBoxText(params); guild.nameChange(guildId, player, newGuildName, newGuildAbbrev); } return SCRIPT_CONTINUE; } public int onGuildCreateNameResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { String newGuildName = sui.getInputBoxText(params); setMenuContextString(self, player, "guildCreateName", newGuildName); sui.inputbox( self, player, STR_GUILD_CREATE_ABBREV_PROMPT, sui.OK_CANCEL, STR_GUILD_CREATE_ABBREV_TITLE, sui.INPUT_NORMAL, null, "onGuildCreateAbbrevResponse"); } return SCRIPT_CONTINUE; } public int onGuildCreateAbbrevResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String newGuildName = getMenuContextString(self, player, "guildCreateName"); removeMenuContextVar(self, player, "guildCreateName"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { messageTo( self, "endVote", null, 0.f, false ); String newGuildAbbrev = sui.getInputBoxText(params); guild.create(player, newGuildName, newGuildAbbrev); } return SCRIPT_CONTINUE; } public int onGuildDisbandResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { guild.disband(guildId, player); } return SCRIPT_CONTINUE; } public int onGuildSponsorResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { String sponsorName = sui.getInputBoxText(params); obj_id target = utils.getNearbyPlayerByName(player, sponsorName); if (isIdValid(target)) { if (getGuildId(target) != 0) { prose_package pp = new prose_package(); pp.actor.set(getName(target)); pp.stringId = SID_GUILD_SPONSOR_ALREADY_IN_GUILD; sendSystemMessageProse(getChatName(player), pp); } else { obj_id targetPlayerObj = getPlayerObject(target); if (isIdValid(targetPlayerObj) && !isIgnoring(targetPlayerObj, getFirstName(player))) { setMenuContextObjId(self, target, "sponsoring", player); int guildId = getStructureGuildId(self); deltadictionary dd = target.getScriptVars(); dd.put("sponsorTerminal", self); dictionary d = new dictionary(); d.put("prompt", guild.buildFakeLocalizedProse(STR_GUILD_SPONSOR_VERIFY_PROMPT, getName(player), guildGetName(guildId))); d.put("title", STR_GUILD_SPONSOR_VERIFY_TITLE); messageTo(target, "startGuildSponsorSui", d, 0, false); } } } else { prose_package pp = new prose_package(); pp.actor.set(sponsorName); pp.stringId = SID_GUILD_SPONSOR_NOT_FOUND; sendSystemMessageProse(getChatName(player), pp); } } return SCRIPT_CONTINUE; } public int onGuildSponsorVerifyResponse(obj_id self, dictionary params) throws InterruptedException { obj_id target = params.getObjId("player"); obj_id player = getMenuContextObjId(self, target, "sponsoring"); removeMenuContextVar(self, target, "sponsoring"); int guildId = getStructureGuildId(self); prose_package pp = new prose_package(); pp.actor.set(getName(target)); if (sui.getIntButtonPressed(params) == sui.BP_OK) { guild.sponsor(guildId, player, target); pp.stringId = SID_GUILD_SPONSOR_ACCEPT; } else { pp.stringId = SID_GUILD_SPONSOR_DECLINE; } sendSystemMessageProse(getChatName(player), pp); return SCRIPT_CONTINUE; } public int onGuildMembersResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { int row = sui.getListboxSelectedRow(params); obj_id[] members = guild.getMemberIds(guildId, false, true); if (row >= 0 && row < members.length) { String name = guildGetMemberName(guildId, members[row]); setMenuContextString(self, player, "guildMemberName", name); sui.listbox( self, player, guild.buildFakeLocalizedProse(STR_GUILD_MEMBER_OPTIONS_PROMPT, name, ""), sui.OK_CANCEL, STR_GUILD_MEMBER_OPTIONS_TITLE, getAvailableMemberOptions(self, player), "onGuildMemberOptionsResponse"); } } return SCRIPT_CONTINUE; } public int onGuildMemberOptionsResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { int row = sui.getListboxSelectedRow(params); String name = getMenuContextString(self, player, "guildMemberName"); String[] entries = getAvailableMemberOptions(self, player); if (row >= 0 && row < entries.length) { if (entries[row].equals(STR_GUILD_TITLE)) { chooseTitle(self, player, name); } else if (entries[row].equals(STR_GUILD_KICK)) { confirmKick(self, player, name); } else if (entries[row].equals(STR_GUILD_PERMISSIONS)) { selectPermissions(self, player, name); } } } removeMenuContextVar(self, player, "guildMemberName"); return SCRIPT_CONTINUE; } public int onGuildSponsoredResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { int row = sui.getListboxSelectedRow(params); obj_id[] sponsored = guild.getMemberIds(guildId, true, false); if (row >= 0 && row < sponsored.length) { String[] entries = new String[2]; entries[0] = STR_GUILD_ACCEPT; entries[1] = STR_GUILD_DECLINE; String name = guildGetMemberName(guildId, sponsored[row]); setMenuContextString(self, player, "guildSponsoredName", name); sui.listbox( self, player, guild.buildFakeLocalizedProse(STR_GUILD_SPONSORED_OPTIONS_PROMPT, name, ""), sui.OK_CANCEL, STR_GUILD_SPONSORED_OPTIONS_TITLE, entries, "onGuildSponsoredOptionsResponse"); } } return SCRIPT_CONTINUE; } public int onGuildSponsoredOptionsResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String name = getMenuContextString(self, player, "guildSponsoredName"); removeMenuContextVar(self, player, "guildSponsoredName"); if (name == null || !isIdValid(player) || outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { int row = sui.getListboxSelectedRow(params); if (row >= 0 && row <= 1) { int guildId = getStructureGuildId(self); if (row == 0) { guild.accept(guildId, player, name); } else if (row == 1) { guild.kick(guildId, player, name); } showGuildSponsored(self, player); } } return SCRIPT_CONTINUE; } public int onGuildEnemiesResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); int[] enemyIds = getMenuContextIntArray(self, player, "guildEnemyIds"); removeMenuContextVar(self, player, "guildEnemyIds"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { int guildId = getStructureGuildId(self); if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_WAR)) { int row = sui.getListboxSelectedRow(params); if (row == 0) { sui.inputbox( self, player, STR_GUILD_WAR_ENEMY_NAME_PROMPT, sui.OK_CANCEL, STR_GUILD_WAR_ENEMY_NAME_TITLE, sui.INPUT_NORMAL, null, "onGuildWarEnemyNameResponse"); } else { if (row > 0 && row <= enemyIds.length) { int enemyId = enemyIds[row-1]; if (guild.hasDeclaredWarAgainst(guildId, enemyId)) { guild.peace(guildId, player, enemyId); } else { guild.war(guildId, player, enemyId); } showGuildEnemies(self, player); } } } } return SCRIPT_CONTINUE; } public int onGuildWarEnemyNameResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } if (sui.getIntButtonPressed(params) == sui.BP_OK) { int guildId = getStructureGuildId(self); String enemyName = sui.getInputBoxText(params); guild.war(guildId, player, enemyName); } showGuildEnemies(self, player); return SCRIPT_CONTINUE; } public int onGuildKickResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String name = getMenuContextString(self, player, "guildKickName"); removeMenuContextVar(self, player, "guildKickName"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { guild.kick(guildId, player, name); } return SCRIPT_CONTINUE; } public int onGuildTitleResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String name = getMenuContextString(self, player, "guildTitlePlayerName"); removeMenuContextVar(self, player, "guildTitlePlayerName"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { String newTitle = sui.getInputBoxText(params); guild.title(guildId, player, name, newTitle); } return SCRIPT_CONTINUE; } public int onGuildInfoResponse(obj_id self, dictionary params) throws InterruptedException { return SCRIPT_CONTINUE; } public int onGuildPermissionsResponse(obj_id self, dictionary params) throws InterruptedException { obj_id player = params.getObjId("player"); String target = getMenuContextString(self, player, "guildPermissionsTarget"); removeMenuContextVar(self, player, "guildPermissionsTarget"); if (outOfRange(self, player)) { return SCRIPT_CONTINUE; } int guildId = getStructureGuildId(self); if (sui.getIntButtonPressed(params) == sui.BP_OK) { int row = sui.getListboxSelectedRow(params); if (row >= 0 && row <= 7) { if (row == 0) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_MAIL); } else if (row == 1) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_SPONSOR); } else if (row == 2) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_TITLE); } else if (row == 3) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_ACCEPT); } else if (row == 4) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_KICK); } else if (row == 5) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_WAR); } else if (row == 6) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_NAMECHANGE); } else if (row == 7) { guild.togglePermission(guildId, player, target, guild.GUILD_PERMISSION_DISBAND); } selectPermissions(self, player, target); } } return SCRIPT_CONTINUE; } public int checkDisband(obj_id self, dictionary params) throws InterruptedException { int guildId = getStructureGuildId(self); if (guildId != 0 && !guildExists(guildId)) { obj_id structure = player_structure.getStructure(self); if (isIdValid(structure)) { player_structure.destroyStructure(structure, false); } } else { messageTo(self, "checkDisband", null, DISBAND_CHECK_TIME, false); } return SCRIPT_CONTINUE; } public boolean outOfRange(obj_id self, obj_id player) throws InterruptedException { location a = getLocation(self); location b = getLocation(player); if (a.cell == b.cell && a.distance(b) < TERMINAL_USE_DISTANCE) { return false; } return true; } public String[] getAvailableMemberOptions(obj_id self, obj_id player) throws InterruptedException { int guildId = getStructureGuildId(self); int count = 0; if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_TITLE)) { ++count; } if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_KICK)) { ++count; } if (player == guildGetLeader(guildId) || isGod(player)) { ++count; } String[] ret = new String[count]; count = 0; if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_TITLE)) { ret[count++] = STR_GUILD_TITLE; } if (guild.hasGuildPermission(guildId, player, guild.GUILD_PERMISSION_KICK)) { ret[count++] = STR_GUILD_KICK; } if (player == guildGetLeader(guildId) || isGod(player)) { ret[count++] = STR_GUILD_PERMISSIONS; } return ret; } public void chooseTitle(obj_id self, obj_id player, String name) throws InterruptedException { setMenuContextString(self, player, "guildTitlePlayerName", name); sui.inputbox( self, player, guild.buildFakeLocalizedProse(STR_GUILD_TITLE_PROMPT, name, ""), sui.OK_CANCEL, STR_GUILD_TITLE_TITLE, sui.INPUT_NORMAL, null, "onGuildTitleResponse"); } public void confirmKick(obj_id self, obj_id player, String name) throws InterruptedException { setMenuContextString(self, player, "guildKickName", name); sui.msgbox( self, player, guild.buildFakeLocalizedProse(STR_GUILD_KICK_PROMPT, name, ""), sui.YES_NO, STR_GUILD_KICK_TITLE, sui.MSG_NORMAL, "onGuildKickResponse"); } public void selectPermissions(obj_id self, obj_id player, String name) throws InterruptedException { dictionary params = new dictionary(); params.put("player", player); params.put("name", name); messageTo(self, "selectPermissionsMessage", params, 2, false); } public void showGuildInfo(obj_id self, obj_id player) throws InterruptedException { int guildId = getStructureGuildId(self); obj_id[] memberIds = guild.getMemberIds(guildId, false, true); String guildInfoStr = new String ( "Guild Name: "+ guildGetName(guildId) + "\n"+ "Guild Abbreviation: "+ guildGetAbbrev(guildId) + "\n"+ "Guild Leader: "+ guildGetMemberName(guildId, guildGetLeader(guildId)) + "\n"+ "Members: "+ memberIds.length); sui.msgbox( self, player, guildInfoStr, sui.OK_ONLY, STR_GUILD_INFO_TITLE, sui.MSG_NORMAL, "onGuildInfoResponse"); } public void showGuildMembers(obj_id self, obj_id player) throws InterruptedException { int guildId = getStructureGuildId(self); sui.listbox( self, player, STR_GUILD_MEMBERS_PROMPT, sui.OK_CANCEL, STR_GUILD_MEMBERS_TITLE, guild.getMemberNamesAndTitles(guildId), "onGuildMembersResponse", true, false); } public void showGuildEnemies(obj_id self, obj_id player) throws InterruptedException { dictionary params = new dictionary(); params.put("player", player); messageTo(self, "showGuildEnemiesMessage", params, 2, false); } public void showGuildSponsored(obj_id self, obj_id player) throws InterruptedException { dictionary params = new dictionary(); params.put("player", player); messageTo(self, "showGuildSponsoredMessage", params, 2, false); } public String getMenuContextString(obj_id self, obj_id player, String varName) throws InterruptedException { deltadictionary dd = self.getScriptVars(); return dd.getString("guildMenu." + player + "." + varName); } public void setMenuContextString(obj_id self, obj_id player, String varName, String value) throws InterruptedException { deltadictionary dd = self.getScriptVars(); dd.put("guildMenu."+ player + "."+ varName, value); } public obj_id getMenuContextObjId(obj_id self, obj_id player, String varName) throws InterruptedException { deltadictionary dd = self.getScriptVars(); return dd.getObjId("guildMenu." + player + "." + varName); } public void setMenuContextObjId(obj_id self, obj_id player, String varName, obj_id value) throws InterruptedException { deltadictionary dd = self.getScriptVars(); dd.put("guildMenu."+ player + "."+ varName, value); } public int[] getMenuContextIntArray(obj_id self, obj_id player, String varName) throws InterruptedException { deltadictionary dd = self.getScriptVars(); return dd.getIntArray("guildMenu." + player + "." + varName); } public void setMenuContextIntArray(obj_id self, obj_id player, String varName, int[] value) throws InterruptedException { deltadictionary dd = self.getScriptVars(); dd.put("guildMenu."+ player + "."+ varName, value); } public void removeMenuContextVar(obj_id self, obj_id player, String varName) throws InterruptedException { deltadictionary dd = self.getScriptVars(); dd.remove("guildMenu."+ player + "."+ varName); } public int handleMakeLeader(obj_id self, dictionary params) throws InterruptedException { if (sui.getIntButtonPressed(params) != sui.BP_OK) { return SCRIPT_CONTINUE; } obj_id player = sui.getPlayerId(params); String input_name = sui.getInputBoxText( params ); int guildId = getStructureGuildId(self); obj_id[] members = guild.getMemberIds( guildId, false, true ); for (int i=0; i 20) { sendSystemMessage( player, SID_ML_NOT_LOADED ); return SCRIPT_CONTINUE; } obj_id structure = player_structure.getStructure( self ); if (!player_structure.canOwnStructure( structure, members[i] )) { sendSystemMessage( player, SID_ML_NO_LOTS_FREE ); return SCRIPT_CONTINUE; } if (utils.isFreeTrial(player, members[i])) { sendSystemMessage( player, SID_ML_TRIAL ); return SCRIPT_CONTINUE; } utils.setScriptVar( self, "temp_new_leader", members[i] ); sui.msgbox( self, members[i], "@guild:make_leader_p", sui.YES_NO, "@guild:make_leader_t", sui.MSG_NORMAL, "handleAcceptLeadership"); return SCRIPT_CONTINUE; } } sendSystemMessage( player, SID_ML_FAIL ); return SCRIPT_CONTINUE; } public int handleAcceptLeadership(obj_id self, dictionary params) throws InterruptedException { obj_id pa_hall = getTopMostContainer( self ); int guildId = getStructureGuildId( self ); obj_id oldLeader = guildGetLeader( guildId ); obj_id newLeader = utils.getObjIdScriptVar( self, "temp_new_leader"); if (sui.getIntButtonPressed(params) == sui.BP_OK) { obj_id[] members = guild.getMemberIds( guildId, false, true ); boolean done = false; for (int i=0; i 0) { setObjVar( pa_hall, "candidate_list", new_candidates ); } else { if (hasObjVar( pa_hall, "candidate_list" )) { removeObjVar( pa_hall, "candidate_list"); } } } public String getNumVotes(obj_id candidate, Vector vote_ids, Vector vote_counts) throws InterruptedException { for (int j=0; j