include library.locations; include library.prose; include library.space_transition; include library.space_utils; include library.utils; const string INSTANCE_DATATABLE = "datatables/instance/instance_datatable.iff"; const string REQUEST_TYPE = "instance.request_name"; const string REQUEST_TEAM = "instance.request_team"; const string REQUEST_TRIGGER = "instance.request_trigger"; const string INSTANCE_OWNER = "instance_data.instance_owner"; const string INSTANCE_START_TIME = "instance_data.start_time"; const string PLAYER_LIST = "instance_data.player_list"; const string PLAYER_ID_LIST = "instance_data.player_obj_id_list"; const string INSTANCE_TEAM = "instance_data.team"; const string MIN_PLAYERS = "instance_data.min_players"; const string PLAYER_INSTANCE = "instance_player_data"; const string PLAYER_INSTANCE_PROTECTED = "instance_player_protected_data"; const string REQUEST_BUFF = "instance_request_pending"; const string INSTANCE_DEBUG_LOG = "instance-debug"; const int REQUEST_INVALID = -1; const int REQUEST_MOVETO = 0; const int REQUEST_CLOSE = 1; const int RESET_NONE = 0; const int RESET_DAILY = 1; const int FAIL_INSTANCE_FULL = 0; const int FAIL_NOT_MEMBER = 1; const int INSTANCE_TIMEOUT = 2; const int FAIL_INVALID_LOCKOUT = 3; const int FAIL_INSTANCE_CLOSED = 4; const int FAIL_INSTANCE_FEW_PLAYERS = 5; const int FAIL_WARN_TOO_FEW = 6; const string_id SID_UNDER_FIVE_MINUTE_WARNING = new string_id("instance", "five_minute_warning"); void registerInstance(obj_id instance_id) { registerInstance(instance_id, getInstanceName(instance_id)); } void registerInstance(obj_id instance_id, string instanceName) { getClusterWideData("instance_manager-"+instanceName, instanceName+"_"+instance_id, true, instance_id); } boolean isInstanceActive(obj_id instance_id) { return false; } boolean isInInstanceArea(obj_id subject) { string area_name = locations.getBuildoutAreaName(subject); int area_row = locations.getBuildoutAreaRow(subject); obj_id planet = getPlanetByName(getLocation(subject).area); string instance_controller = ""+area_name+"_"+area_row; obj_id areaInstanceController = utils.hasScriptVar(planet, instance_controller) ? utils.getObjIdScriptVar(planet, instance_controller) : null; if (!isIdValid(areaInstanceController)) { validateInstanceScriptsOnPlayer(subject); return false; } return true; } string getInstanceName(obj_id instance_id) { return getStringObjVar(instance_id, "instance_name"); } int getInstancePlayerCap(obj_id instance_id) { return getInstancePlayerCap(getInstanceName(instance_id)); } int getInstancePlayerCap(string instance_name) { return dataTableGetInt(INSTANCE_DATATABLE, instance_name, "max_players"); } int getMinPlayers(obj_id instance_id) { return getMinPlayers(getInstanceName(instance_id)); } int getMinPlayers(string instance_name) { return dataTableGetInt(INSTANCE_DATATABLE, instance_name, "min_players"); } obj_id getInstanceOwner(obj_id instance_id) { return utils.hasScriptVar(instance_id, INSTANCE_OWNER) ? utils.getObjIdScriptVar(instance_id, INSTANCE_OWNER) : instance_id; } string getPlayerList(obj_id instance_id) { return getPlayerList(instance_id, 1); } string getPlayerList(obj_id instance_id, int groupNumber) { return utils.hasScriptVar(instance_id, PLAYER_LIST+"_"+groupNumber) ? utils.getStringScriptVar(instance_id, PLAYER_LIST+"_"+groupNumber) : "none"; } int getInstanceCloseTime(obj_id instance_id) { return getInstanceStartTime(instance_id) + getInstanceDuration(instance_id); } int getInstanceStartTime(obj_id instance_id) { return utils.hasScriptVar(instance_id, INSTANCE_START_TIME) ? utils.getIntScriptVar(instance_id, INSTANCE_START_TIME) : -1; } int getInstanceTeam(obj_id instance_id) { return utils.hasScriptVar(instance_id, INSTANCE_TEAM) ? utils.getIntScriptVar(instance_id, INSTANCE_TEAM) : -1; } int getCurrentPopulation(obj_id instance_id) { obj_id[] players = utils.getPlayersInBuildoutRow(getLocation(instance_id).area, locations.getBuildoutAreaRow(instance_id)); if (players == null || players.length == 0) return 0; return players.length; } obj_id[] getPlayersInInstanceArea(obj_id instance_id) { string instance_area = getLocation(instance_id).area; if(utils.hasScriptVar(instance_id, "buildoutCoordinates")) { dictionary coords = utils.getDictionaryScriptVar(instance_id, "buildoutCoordinates"); if(coords == null) { utils.removeScriptVar(instance_id, "buildoutCoordinates"); } else { return utils.getPlayersInBuildoutDimensions(instance_area, coords.getFloat("x1"), coords.getFloat("x2"), coords.getFloat("z1"), coords.getFloat("z2")); } } int row = locations.getBuildoutAreaRow(instance_id); dictionary coords = utils.getCoordinatesInBuildoutRow(instance_area, row); if(coords != null) { utils.setScriptVar(instance_id, "buildoutCoordinates", coords); } return utils.getPlayersInBuildoutDimensions(instance_area, coords.getFloat("x1"), coords.getFloat("x2"), coords.getFloat("z1"), coords.getFloat("z2")); } obj_id[] getPlayersInInstanceArea(string area, int row) { return utils.getPlayersInBuildoutRow(area, row); } obj_id[] getPlayersByTeamList(obj_id[] allPlayers, string groupList) { obj_id[] listPlayers = getPlayersInPlayerList(groupList); resizeable obj_id[] validPlayers = new obj_id[0]; for (int i=0;i 1) { sendSystemMessage(player, new string_id("instance", "nomove_ship_full")); return false; } } } if (isRequestPending(player)) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-player "+getFirstName(player)+"("+player+") has a request pending already"); sendSystemMessage(player, new string_id("instance", "instance_request_pending")); return false; } dictionary lockoutData = getLockoutData(player, instanceName); if (lockoutData != null && !lockoutData.isEmpty()) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-LockoutData was NOT empty for player "+getFirstName(player)+"("+player+")"); int endTime = lockoutData.getInt("time"); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-endTime for player "+getFirstName(player)+"("+player+") is " + endTime); obj_id instance_id = lockoutData.getObjId("instance_id"); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-instance_id for player "+getFirstName(player)+"("+player+") is " + instance_id); obj_id owner = lockoutData.getObjId("owner"); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-owner for player "+getFirstName(player)+"("+player+") is " + owner); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-Trying to bypass entry for "+getName(player)+" to "+instanceName+". Owner/Team: "+owner+"/"+team); movePlayerToInstance(player, instance_id, instanceName, owner, false, team); LOG("doLogging", "Trying to bypass entry for "+getName(player)+" to "+instanceName+". Owner/Team: "+owner+"/"+team); return true; } utils.setScriptVar(player, REQUEST_TYPE, REQUEST_MOVETO); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-setting script var '"+REQUEST_TYPE+"' for player "+getFirstName(player)+"("+player+") to " + REQUEST_MOVETO); utils.setScriptVar(player, REQUEST_TEAM, team); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-setting script var '"+REQUEST_TEAM+"' for player "+getFirstName(player)+"("+player+") to " + team); utils.setScriptVar(player, REQUEST_TRIGGER, defaultTrigger); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-setting script var '"+REQUEST_TRIGGER+"' for player "+getFirstName(player)+"("+player+") to " + defaultTrigger); CustomerServiceLog(INSTANCE_DEBUG_LOG, "requestInstanceMovement-LockoutData WAS empty for player "+getFirstName(player)+"("+player+"). After setting appropriate scriptvars we are now requesting clusterWide Data"); getClusterWideData("instance_manager-"+instanceName, "*", true, player); setRequestPending(player); return true; } int getInstanceRequestType(obj_id player) { return utils.hasScriptVar(player, REQUEST_TYPE) ? utils.getIntScriptVar(player, REQUEST_TYPE) : REQUEST_INVALID; } int getInstanceRequestTeam(obj_id player) { return utils.hasScriptVar(player, REQUEST_TEAM) ? utils.getIntScriptVar(player, REQUEST_TEAM) : REQUEST_INVALID; } boolean isPlayerOwnerGroupList(obj_id player, obj_id owner, obj_id instance_id, string groupList, int team, int instance_team) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "isPlayerOwnerGroupList-Start for player "+getFirstName(player)+"("+player+")."); if (team != instance_team) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "isPlayerOwnerGroupList- (team != instance_team) for player "+getFirstName(player)+"("+player+"). Returning False"); return false; } if (!isIdValid(owner) || owner == instance_id) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "isPlayerOwnerGroupList- (!isIdValid(owner) || owner == instance_id) for player "+getFirstName(player)+"("+player+"). Returning false"); return false; } if (player == owner) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "isPlayerOwnerGroupList- (player == owner) for player "+getFirstName(player)+"("+player+"). Returning false"); return true; } obj_id groupId = getGroupObject(player); CustomerServiceLog(INSTANCE_DEBUG_LOG, "isPlayerOwnerGroupList- groupId for player "+getFirstName(player)+"("+player+") is "+groupId+"."); if (isIdValid(groupId)) { obj_id[] members = getGroupMemberIds(groupId); for (int i=0;i= time) { CustomerServiceLog(INSTANCE_DEBUG_LOG, "getLockoutData-player "+getFirstName(player)+"("+player+") calander time was greater than or equal to parsed time. Removing objvar and returning null."); removeObjVar(player, PLAYER_INSTANCE+"."+instance_name); return null; } dictionary dict = new dictionary(); dict.put("time", time); dict.put("instance_id", instance_id); dict.put("owner", owner); dict.put("instance_name", instance_name); dict.put("start_time", start_time); return dict; } dictionary[] getAllLockoutData(obj_id player) { int numRows = dataTableGetNumRows(INSTANCE_DATATABLE); resizeable dictionary[] instanceData = new dictionary[0]; for (int i=0;i