Files
dsrc/sku.0/sys.server/compiled/game/script/library/space_dungeon_data.scriptlib
T
2013-09-10 23:17:15 -07:00

417 lines
12 KiB
Plaintext

/**********************************************************************
* Copyright (c)2000-2004 Sony Online Entertainment Inc.
* All Rights Reserved
*
* Title: space_dungeon
* Description: Handles reading of datatable info for space dungeons
* @author $Author:$
* @version $Revision:$
**********************************************************************/
/***** INCLUDES ********************************************************/
include library.player_structure;
include library.utils;
include library.space_dungeon;
include library.sui;
include library.prose;
/***** CONSTANTS *******************************************************/
// Ticket Template
const string TEMPLATE_TICKET = "object/tangible/travel/travel_ticket/dungeon_ticket.iff";
// Dungeon Datatable
const string DUNGEON_DATATABLE = "datatables/dungeon/space_dungeon.iff";
// Scripts
const string TRAVEL_DUNGEON = "item.travel_ticket.travel_space_dungeon";
const string DUNGEON_CONTROLLER = "theme_park.dungeon.space_dungeon_controller";
// ObjVars / ScriptVars ******************
// Player
/***** TRIGGERS ********************************************************/
/***** MESSAGEHANDLERS *************************************************/
/***** COMMANDHANDLERS *************************************************/
/***** FUNCTIONS *******************************************************/
/***********************************************************************
* @brief gets the dungeon's travel success string_id
*
* @param string dungeon_name
*
* @return string_id
***********************************************************************/
string_id getDungeonSuccessString(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonSuccessString -- name is null");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
string success_string = dataTableGetString(space_dungeon_data.DUNGEON_DATATABLE, idx, "success_string");
return utils.unpackString(success_string);
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonSuccessString -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief gets the dungeon's travel failure string_id
*
* @param string dungeon_name
*
* @return string_id
***********************************************************************/
string_id getDungeonFailureString(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonFailureString -- name is null");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
string failure_string = dataTableGetString(space_dungeon_data.DUNGEON_DATATABLE, idx, "failure_string");
return utils.unpackString(failure_string);
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonFailureString -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief gets the maximum number of players allowed in a dungeon
*
* @param string dungeon_name
*
* @return int -1 on failure
***********************************************************************/
int getDungeonMaxPlayers(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonFailureString -- name is null");
return -1;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
int max_players = dataTableGetInt(space_dungeon_data.DUNGEON_DATATABLE, idx, "max_players");
return max_players;
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonMaxPlayers -- Unable to find a datatable entry for " + name);
return -1;
}
}
/***********************************************************************
* @brief gets the starting location for a dungeon. It does not return
* the cell obj_id. Use getDungeonStartCell to get the cell name.
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
location getDungeonStartLocation(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonStartLocation -- name is null");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
dictionary row = dataTableGetRow(space_dungeon_data.DUNGEON_DATATABLE, idx);
// note - the ONLY place the planet is used for is ticket validation
// the actual scene of the dungeon is what determines where the player teleports to
string planet = row.getString("planet");
float loc_x = row.getFloat("start_loc_x");
float loc_y = row.getFloat("start_loc_y");
float loc_z = row.getFloat("start_loc_z");
location start_loc = new location(loc_x, loc_y, loc_z, planet);
return start_loc;
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonStartLocation -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
float getDungeonStartLocationRadius(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonStartLocationRadius -- name is null");
return 0.0f;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
dictionary row = dataTableGetRow(space_dungeon_data.DUNGEON_DATATABLE, idx);
return row.getFloat("start_loc_radius");
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonStartLocationRadius -- Unable to find a datatable entry for " + name);
}
return 0.0f;
}
/***********************************************************************
* @brief gets the starting location for a dungeon. It does not return
* the cell obj_id. Use getDungeonStartCell to get the cell name.
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
location getDungeonStartLocationRandomized(string name)
{
location loc = getDungeonStartLocation(name);
if (null == loc)
return null;
float startLocationRadius = getDungeonStartLocationRadius(name);
loc.x += (-1.0f + (2.0f * random.rand())) * startLocationRadius;
loc.z += (-1.0f + (2.0f * random.rand())) * startLocationRadius;
return loc;
}
/***********************************************************************
* @brief Gets the location to which to dump the player, after leaving
* the dungeon.
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
location getDungeonExitLocation(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonExitLocation -- name is null");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
dictionary row = dataTableGetRow(space_dungeon_data.DUNGEON_DATATABLE, idx);
string planet = row.getString("exit_planet");
float loc_x = row.getFloat("exit_loc_x");
float loc_y = row.getFloat("exit_loc_y");
float loc_z = row.getFloat("exit_loc_z");
location start_loc = new location(loc_x, loc_y, loc_z, planet);
return start_loc;
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonExitLocation -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
float getDungeonExitLocationRadius(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonExitLocation -- name is null");
return 0.0f;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
dictionary row = dataTableGetRow(space_dungeon_data.DUNGEON_DATATABLE, idx);
return row.getFloat("exit_loc_radius");
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonExitLocation -- Unable to find a datatable entry for " + name);
}
return 0.0f;
}
/***********************************************************************
* @brief Gets the location to which to dump the player, after leaving
* the dungeon.
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
location getDungeonExitLocationRandomized(string name)
{
location loc = getDungeonExitLocation(name);
if (null == loc)
return null;
float exitLocationRadius = getDungeonExitLocationRadius(name);
loc.x += (-1.0f + (2.0f * random.rand())) * exitLocationRadius;
loc.z += (-1.0f + (2.0f * random.rand())) * exitLocationRadius;
return loc;
}
/***********************************************************************
* @brief Gets the location to which to dump the player, after leaving
* the dungeon.
*
* @param string dungeon_name
*
* @return location null on failure
***********************************************************************/
string getDungeonStartCellName(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonStartCellName -- name is null");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
string cell_name = dataTableGetString(space_dungeon_data.DUNGEON_DATATABLE, idx, "start_cell_name");
return cell_name;
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonStartCellName -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief Returns the script that is to be attached on players that
* are in the dungeon.
*
* @param string name
*
* @return string null on failure or no script
***********************************************************************/
string getDungeonPlayerScript(string name)
{
if (name == null)
{
LOG("space_dungeon", "space_dungeon.getDungeonPlayerScript -- name is null.");
return null;
}
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
string script = dataTableGetString(space_dungeon_data.DUNGEON_DATATABLE, idx, "player_script");
if (script != null)
{
if (script.length() < 1)
return null;
}
return script;
}
else
{
LOG("space_dungeon", "space_dungeon.getDungeonPlayerScript -- Unable to find a datatable entry for " + name);
return null;
}
}
/***********************************************************************
* @brief
*
* @param
*
* @return
***********************************************************************/
boolean isValidDungeon(string name)
{
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx == -1)
{
return false;
}
return true;
}
/** --------------------------------------------------------------------------
Use: Get the maximum time allowed for a single session of a private instance to be active as
defined in space_dungeon_data.DUNGEON_DATATABLE column "time_limit"
params: The string name of the private instance time you are checking
return: the maximum time allowed for the dungeon as a float
----------------------------------------------------------------------------------**/
int getMaxDungeonSesssionTime(string name)
{
int idx = dataTableSearchColumnForString(name, "dungeon", space_dungeon_data.DUNGEON_DATATABLE);
if (idx > -1)
{
int maxSessionTime = dataTableGetInt(space_dungeon_data.DUNGEON_DATATABLE, idx, "time_limit");
if (maxSessionTime > 36000 || maxSessionTime < 600)
{
LOG("space_dungeon", "spaceDungeonData.getMaxDungeonSessionTime:: maxSessionTime was greater than 10 hours or less than 10 minutes. Setting to 30 minutes");
maxSessionTime = 3600;
}
return maxSessionTime;
}
else
{
LOG("space_dungeon", "spaceDungeonData.getMaxDungeonSessionTime:: dungeon was not found in the table, returning 30 minutes");
return 3600;
}
}