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.city; import script.library.prose; import script.library.sui; import script.library.utils; import java.util.Vector; public class city_vote extends script.terminal.base.base_terminal { public city_vote() { } public static final string_id SID_MAYORAL_RACE = new string_id("city/city", "mayoral_race"); public static final string_id SID_MAYORAL_STANDINGS = new string_id("city/city", "mayoral_standings"); public static final string_id SID_MAYORAL_VOTE = new string_id("city/city", "mayoral_vote"); public static final string_id SID_MAYORAL_REGISTER = new string_id("city/city", "mayoral_register"); public static final string_id SID_MAYORAL_UNREGISTER = new string_id("city/city", "mayoral_unregister"); public static final string_id SID_RESET_VOTING = new string_id("city/city", "reset_voting"); public static final string_id SID_REGISTER_INCUMBENT = new string_id("city/city", "register_incumbent"); public static final string_id SID_REGISTER_NONCITIZEN = new string_id("city/city", "register_noncitizen"); public static final string_id SID_REGISTER_NONPOLITICIAN = new string_id("city/city", "register_nonpolitician"); public static final string_id SID_REGISTER_DUPE = new string_id("city/city", "register_dupe"); public static final string_id SID_REGISTER_CONGRATS = new string_id("city/city", "register_congrats"); public static final string_id SID_REGISTER_TIMESTAMP = new string_id("city/city", "register_timestamp"); public static final string_id SID_REGISTRATION_LOCKED = new string_id("city/city", "registration_locked"); public static final string_id REGISTERED_CITIZEN_EMAIL_BODY = new string_id("city/city", "rceb"); public static final string_id REGISTERED_CITIZEN_EMAIL_SUBJECT = new string_id("city/city", "registered_citizen_email_subject"); public static final string_id UNREGISTERED_CITIZEN_EMAIL_BODY = new string_id("city/city", "unregistered_citizen_email_body"); public static final string_id UNREGISTERED_CITIZEN_EMAIL_SUBJECT = new string_id("city/city", "unregistered_citizen_email_subject"); public static final string_id SID_NOT_REGISTERED = new string_id("city/city", "not_registered"); public static final string_id SID_UNREGISTERED = new string_id("city/city", "unregistered_race"); public static final string_id SID_NO_CANDIDATES = new string_id("city/city", "no_candidates"); public static final string_id SID_VOTE_NONCITIZEN = new string_id("city/city", "vote_noncitizen"); public static final string_id SID_VOTE_PLACED = new string_id("city/city", "vote_placed"); public static final string_id SID_VOTE_ABSTAIN = new string_id("city/city", "vote_abstain"); public static final string_id SID_ALREADY_MAYOR = new string_id("city/city", "already_mayor"); public static final String STF_FILE = "city/city"; public static final string_id SID_NOT_OLD_ENOUGH = new string_id("city/city", "not_old_enough"); public int OnInitialize(obj_id self) throws InterruptedException { dictionary outparams = new dictionary(); outparams.put( "terminal", self ); obj_id city_hall = getTopMostContainer( self ); messageTo( city_hall, "registerVoteTerminal", outparams, 0.f, true ); 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 city_hall = getTopMostContainer( self ); if (isValidId(city_hall) && exists(city_hall)) { int city_id = findCityByCityHall( city_hall ); if (city_id > -1) { names[idx] = "city_name"; attribs[idx] = cityGetName( city_id ); idx++; obj_id mayor = cityGetLeader(city_id); if (isValidId(mayor)) { names[idx] = "current_mayor"; attribs[idx] = cityGetCitizenName(city_id, mayor); idx++; } int currentInterval = getIntObjVar(city_hall, "cityVoteInterval"); if (currentInterval > -1) { String intervalName = convertInterval(currentInterval); if (!intervalName.equals("error")) { names[idx] = "vote_interval"; attribs[idx] = intervalName; idx++; } } int nextUpdate = (getIntObjVar(city_hall, "lastUpdateTime") + getIntObjVar(city_hall, "currentInterval")) - getGameTime(); if (nextUpdate > -1) { names[idx] = "next_interval"; attribs[idx] = utils.assembleTimeRemainToUse(nextUpdate); idx++; } obj_id[] candidates = getObjIdArrayObjVar(city_hall, "candidate_list"); if (candidates != null) { for (int i=0; i < candidates.length; i++) { testAbortScript(); if (candidates[i] == mayor) { names[idx] = "incumbent"; attribs[idx] = cityGetCitizenName(city_id, mayor); idx++; } else { names[idx] = "candidate"; attribs[idx] = cityGetCitizenName(city_id, candidates[i]); idx++; } } } } } } return SCRIPT_CONTINUE; } public int OnObjectMenuRequest(obj_id self, obj_id player, menu_info mi) throws InterruptedException { obj_id city_hall = getTopMostContainer( self ); int city_id = findCityByCityHall( city_hall ); obj_id mayor = cityGetLeader( city_id ); int menu = mi.addRootMenu( menu_info_types.SERVER_MENU1, SID_MAYORAL_RACE ); mi.addSubMenu( menu, menu_info_types.SERVER_MENU2, SID_MAYORAL_STANDINGS ); mi.addSubMenu( menu, menu_info_types.SERVER_MENU3, SID_MAYORAL_VOTE ); if (!isRegisteredToRun( player, self )) { mi.addSubMenu( menu, menu_info_types.SERVER_MENU4, SID_MAYORAL_REGISTER ); } else { mi.addSubMenu( menu, menu_info_types.SERVER_MENU5, SID_MAYORAL_UNREGISTER ); } if (isGod( player )) { mi.addSubMenu( menu, menu_info_types.SERVER_MENU6, SID_RESET_VOTING ); } return super.OnObjectMenuRequest(self, player, mi); } public int OnObjectMenuSelect(obj_id self, obj_id player, int item) throws InterruptedException { if (item == menu_info_types.SERVER_MENU1 || item == menu_info_types.SERVER_MENU2) { showStandings( self, player ); } else if (item == menu_info_types.SERVER_MENU3) { placeVote( self, player ); } else if (item == menu_info_types.SERVER_MENU4) { registerToRun( self, player ); } else if (item == menu_info_types.SERVER_MENU5) { unregisterFromRace( self, player ); } else if (item == menu_info_types.SERVER_MENU6) { if (isGod( player )) { obj_id city_hall = getTopMostContainer( self ); int city_id = findCityByCityHall( city_hall ); obj_id[] citizens = cityGetCitizenIds( city_id ); for (int i=0; i 0) { setObjVar( city_hall, "candidate_list", new_candidates ); } else { if (hasObjVar( city_hall, "candidate_list" )) { removeObjVar( city_hall, "candidate_list"); } } } public String getNumVotes(obj_id candidate, Vector vote_ids, Vector vote_counts) throws InterruptedException { for (int j=0; j 7 || isGod(player)) { isOldEnough = true; } return isOldEnough; } public String convertInterval(int currentInterval) throws InterruptedException { if (currentInterval == 0) { return "Voting Week 1"; } if (currentInterval == 1) { return "Voting Week 2"; } if (currentInterval == 2) { return "Election Week"; } return "error"; } }