Files
dsrc/sku.0/sys.server/compiled/game/script/library/space_content.scriptlib
T

157 lines
5.4 KiB
Plaintext

// this library is where all of the space content stuff lives.
include library.utils;
include library.travel;
include library.space_utils;
include library.locations;
// ======================================================================
const string LAUNCH_LOCATION_DATATABLE_NAME = "datatables/space_zones/launch_locations.iff";
const string LAUNCH_LOCATION_COLUMN_POINTNAME = "pointName";
const string LAUNCH_LOCATION_COLUMN_GROUND_SCENE = "groundScene";
const string LAUNCH_LOCATION_COLUMN_GROUND_X = "groundX";
const string LAUNCH_LOCATION_COLUMN_GROUND_Y = "groundY";
const string LAUNCH_LOCATION_COLUMN_GROUND_Z = "groundZ";
const string_id SID_BAD_TRAVEL_POINT = new string_id("space/space_interaction", "bad_travel_point");
const string_id SID_NO_HOMING_BEACON = new string_id("space/space_interaction", "no_homing_beacon");
// ======================================================================
void landPlayer(obj_id objPlayer, obj_id objStation, string strDestination)
{
// validate
float fltDistance = getDistance(objStation, space_transition.getContainingShip(objPlayer));
if (fltDistance > space_transition.STATION_COMM_MAX_DISTANCE)
{
string_id strSpam = new string_id("space/space_interaction", "too_far");
sendSystemMessage(objPlayer, strSpam);
return;
}
int row = dataTableSearchColumnForString(strDestination, LAUNCH_LOCATION_COLUMN_POINTNAME, LAUNCH_LOCATION_DATATABLE_NAME);
if (row < 0)
{
prose_package ppBadTravelPoint = prose.getPackage(SID_BAD_TRAVEL_POINT);
prose.setTO(ppBadTravelPoint, strDestination);
sendSystemMessageProse(objPlayer, ppBadTravelPoint);
return;
}
else
{
obj_id objShip = space_transition.getContainingShip(objPlayer);
if (isIdValid(objShip))
{
obj_id objOwner = getOwner(objShip);
space_combat.clearHyperspace(objShip);
space_transition.clearOvertStatus(objShip);
obj_id objControlDevice = space_transition.findEmptyShipControlDeviceForPlayer(objOwner);
//space_utils.setLandingLocation(objControlDevice, strDestination);
}
string groundScene = dataTableGetString(LAUNCH_LOCATION_DATATABLE_NAME, row, LAUNCH_LOCATION_COLUMN_GROUND_SCENE);
float groundX = dataTableGetFloat(LAUNCH_LOCATION_DATATABLE_NAME, row, LAUNCH_LOCATION_COLUMN_GROUND_X);
float groundY = dataTableGetFloat(LAUNCH_LOCATION_DATATABLE_NAME, row, LAUNCH_LOCATION_COLUMN_GROUND_Y);
float groundZ = dataTableGetFloat(LAUNCH_LOCATION_DATATABLE_NAME, row, LAUNCH_LOCATION_COLUMN_GROUND_Z);
float theta = rand()*(2.f*(float)Math.PI);
float radius = 2.f + rand()*3.f;
groundX += radius * Math.cos(theta);
groundZ += radius * Math.sin(theta);
warpPlayer(objPlayer, groundScene, groundX, groundY, groundZ, null, groundX, groundY, groundZ);
}
}
// ----------------------------------------------------------------------
string getPlanetForLaunchLocation(string pointName)
{
int row = dataTableSearchColumnForString(pointName, LAUNCH_LOCATION_COLUMN_POINTNAME, LAUNCH_LOCATION_DATATABLE_NAME);
string ret = null;
if (row != -1)
ret = dataTableGetString(LAUNCH_LOCATION_DATATABLE_NAME, row, LAUNCH_LOCATION_COLUMN_GROUND_SCENE);
return ret;
}
// ----------------------------------------------------------------------
void notifySpawner(obj_id objObject)
{
// objObject is the thing that needs to nofity it's parent
if(!isIdValid(objObject))
{
return;
}
if(hasObjVar(objObject, "intNotified"))
{
return; // no need to notify, already done.
}
if(hasScript(objObject, "space.content_tools.squad_member"))
{
return; // squad_member handles notification for us
}
obj_id objParent = getObjIdObjVar(objObject, "objParent");
if(isIdValid(objParent))
{
setObjVar(objObject, "intNotified", 1);
space_utils.notifyObject(objParent, "childDestroyed", null);
}
}
// ----------------------------------------------------------------------
void landPlayerHoming(obj_id objPlayer, obj_id objStation)
{
// validate
float fltDistance = getDistance(objStation, space_transition.getContainingShip(objPlayer));
if (fltDistance > space_transition.STATION_COMM_MAX_DISTANCE)
{
string_id strSpam = new string_id("space/space_interaction", "too_far");
sendSystemMessage(objPlayer, strSpam);
return;
}
if (!hasObjVar (objPlayer, "homingBeacon.planet") && !hasObjVar (objPlayer, "homingBeacon.houseLoc"))
{
sendSystemMessage(objPlayer, SID_NO_HOMING_BEACON);
return;
}
else
{
obj_id objShip = space_transition.getContainingShip(objPlayer);
if (isIdValid(objShip))
{
obj_id objOwner = getOwner(objShip);
space_combat.clearHyperspace(objShip);
space_transition.clearOvertStatus(objShip);
obj_id objControlDevice = space_transition.findEmptyShipControlDeviceForPlayer(objOwner);
//space_utils.setLandingLocation(objControlDevice, strDestination);
}
string groundScene = getStringObjVar(objPlayer, "homingBeacon.planet");
location houseLoc = getLocationObjVar(objPlayer, "homingBeacon.houseLoc");
location landingSpot = locations.getGoodLocationAroundLocation(houseLoc, 30f, 30f, 30f, 30f);
obj_id house = getObjIdObjVar (objPlayer, "homingBeacon.houseId");
utils.warpPlayer(objPlayer, groundScene, landingSpot);
dictionary params = new dictionary();
params.put ("landingSpot", landingSpot);
params.put ("groundScene", groundScene);
params.put ("player", objPlayer);
params.put ("house", house);
messageTo(house, "houseCheck", params, 40, false);
}
}
// ======================================================================