mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-29 23:15:55 -04:00
635 lines
17 KiB
Plaintext
635 lines
17 KiB
Plaintext
// ALL MINI VEHICLE SCRIPTS
|
|
// structure/mini_vehicle_control.script
|
|
// creature/mini_vehicle.script
|
|
// terminal/mini_vehicle_terminal.script
|
|
|
|
include library.ai_lib;
|
|
include library.sui;
|
|
include library.utils;
|
|
include library.player_structure;
|
|
|
|
const int MAX_WAYPOINTS = 20;
|
|
|
|
//variable constants
|
|
const string OBJVAR_VEHICLE_PATROL_POINTS = "vehicle.patrolPoints";
|
|
const string OBJVAR_VEHICLE_PATROL_LOOP = "vehicle.patrol_loop";
|
|
const string OBJVAR_VEHICLE_PATROL_ONCE = "vehicle.patrol_once";
|
|
const string VEHICLE_MOVING = "vehicle.moving";
|
|
const string VEHICLE_SETTING_PATROL = "vehicle.settingPatrol";
|
|
const string SCRIPTVAR_VEHICLE_HELP_MENU = "vehicle.helpmenu";
|
|
const string TERMINAL_VEHICLE_ID = "vehicle.id";
|
|
|
|
//Pet Menu Strings
|
|
const string MENU_FILE = "pet/pet_menu";
|
|
const string_id SYS_PATROL_ADDED = new string_id(MENU_FILE,"patrol_added");
|
|
const string_id SYS_PATROL_REMOVED = new string_id(MENU_FILE,"patrol_removed");
|
|
const string_id SETPATROLPOINT = new string_id(MENU_FILE,"menu_set_patrol_point");
|
|
const string_id CLEARPOINTS = new string_id(MENU_FILE,"menu_clear_patrol_points");
|
|
const string_id CLEAR_LAST = new string_id(MENU_FILE,"patrol_clear_last");
|
|
const string_id PROGRAM = new string_id(MENU_FILE,"vehicle_options");
|
|
const string_id HELP = new string_id(MENU_FILE,"mini_vehicle_menu_help");
|
|
const string_id PATROL_OPTIONS = new string_id(MENU_FILE,"patrol_setting");
|
|
const string_id PATROL = new string_id(MENU_FILE,"menu_patrol");
|
|
const string_id ONCE = new string_id(MENU_FILE,"patrol_once");
|
|
const string_id LOOP = new string_id(MENU_FILE,"patrol_loop");
|
|
const string_id MINI_VEHICLE_NOT_OWNER = new string_id(MENU_FILE,"mini_vehicle_not_owner");
|
|
const string_id MINI_VEHICLE_NO_WAYPOINTS = new string_id(MENU_FILE,"mini_vehicle_no_waypoints");
|
|
const string_id MINI_VEHICLE_MAX_WAYPOINTS = new string_id(MENU_FILE,"mini_vehicle_max_waypoints");
|
|
const string_id MINI_VEHICLE_NOT_IN_HOUSE = new string_id(MENU_FILE,"mini_vehicle_not_in_house");
|
|
const string_id MINI_VEHICLE_WAYPOINTS_NOT_CLEAR = new string_id(MENU_FILE,"mini_vehicle_waypoints_not_cleared");
|
|
|
|
|
|
//------------------------------------------------
|
|
//triggers
|
|
//------------------------------------------------
|
|
trigger OnDestroy()
|
|
{
|
|
obj_id vehicle = self;
|
|
if (!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(self, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id house = getObjIdObjVar(vehicle, "house");
|
|
if(isValidId(house) && exists(house))
|
|
{
|
|
removeObjVar(house, "mini_vehicle.vehicle");
|
|
if(hasScript(house, "structure.mini_vehicle_control"))
|
|
detachScript(house, "structure.mini_vehicle_control");
|
|
}
|
|
removeObjVar(terminal, TERMINAL_VEHICLE_ID);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnMovePathComplete()
|
|
{
|
|
obj_id vehicle = self;
|
|
if (!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
utils.removeScriptVar(vehicle, VEHICLE_MOVING);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnMoveMoving()
|
|
{
|
|
obj_id vehicle = self;
|
|
if (!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
utils.setScriptVar(vehicle, VEHICLE_MOVING, true);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnInitialize()
|
|
{
|
|
obj_id vehicle = self;
|
|
if (!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
messageTo(vehicle, "initializeVehicleVariables", null, 1, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isIdValid(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal) || !exists(terminal))
|
|
{
|
|
destroyObject(vehicle);
|
|
}
|
|
if(utils.isNestedWithinAPlayer(vehicle))
|
|
{
|
|
messageTo(terminal, "destroyVehicle", null, 1, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
mi.addRootMenu(menu_info_types.ITEM_ACTIVATE, PATROL);
|
|
mi.addRootMenu(menu_info_types.SERVER_MENU1, HELP);
|
|
|
|
int mnuProgram = mi.addRootMenu(menu_info_types.SERVER_MENU2, PATROL_OPTIONS);
|
|
mi.addSubMenu(mnuProgram, menu_info_types.SERVER_MENU3, SETPATROLPOINT);
|
|
mi.addSubMenu(mnuProgram, menu_info_types.SERVER_MENU4, CLEARPOINTS);
|
|
mi.addSubMenu(mnuProgram, menu_info_types.SERVER_MENU5, CLEAR_LAST);
|
|
mi.addSubMenu(mnuProgram, menu_info_types.SERVER_MENU6, ONCE);
|
|
mi.addSubMenu(mnuProgram, menu_info_types.SERVER_MENU7, LOOP);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuSelect(obj_id player, int item)
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if(utils.isNestedWithinAPlayer(vehicle))
|
|
{
|
|
messageTo(terminal, "destroyVehicle", null, 1, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//Make sure this is the owner
|
|
if(player != getObjIdObjVar(terminal, "biolink.id"))
|
|
{
|
|
//convert this to string id
|
|
sendSystemMessage(player, MINI_VEHICLE_NOT_OWNER);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
sendDirtyObjectMenuNotification(vehicle);
|
|
|
|
if (item == menu_info_types.SERVER_MENU1)
|
|
{
|
|
createHelpDialog(vehicle, player);
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU2)
|
|
{
|
|
//nothing
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU3)
|
|
{
|
|
doSetPatrolPoint(vehicle, player);
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU4)
|
|
{
|
|
doClearPatrolPoints(vehicle, player);
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU5)
|
|
{
|
|
removeLastPatrolPoint(vehicle, player);
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU6)
|
|
{
|
|
setPatrolOnce(vehicle, player, terminal);
|
|
}
|
|
if (item == menu_info_types.SERVER_MENU7)
|
|
{
|
|
setPatrolLoop(vehicle, player, terminal);
|
|
}
|
|
if (item == menu_info_types.ITEM_ACTIVATE)
|
|
{
|
|
if(utils.hasScriptVar(vehicle, VEHICLE_MOVING) && !utils.hasScriptVar(vehicle, VEHICLE_SETTING_PATROL))
|
|
{
|
|
stop(vehicle);
|
|
utils.removeScriptVar(vehicle, VEHICLE_MOVING);
|
|
}
|
|
else
|
|
{
|
|
doPatrol(vehicle, player);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
//messageHandlers
|
|
//------------------------------------------------
|
|
|
|
|
|
//This is called on init to get the terminal user's OID
|
|
messageHandler getUserOidSetFirstPoint()
|
|
{
|
|
obj_id vehicle = self;
|
|
if (!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id player = getObjIdObjVar(vehicle, "user");
|
|
if (!isValidId(player))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
doSetPatrolPoint(vehicle, player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//forget the patrol points, go to start
|
|
//this isn't used becuase the vehicle can get stuck
|
|
messageHandler pathDirectlyToStart()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if (patrolLoc != null)
|
|
{
|
|
stop(vehicle);
|
|
pathTo(vehicle, patrolLoc[0]);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//This makes the vehicle retrace it's patrol path
|
|
messageHandler fromLastPointGoBackToStart()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
//move to terminal
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if (patrolLoc != null)
|
|
{
|
|
int patrolLength = patrolLoc.length;
|
|
location[] temp = new location[patrolLength];
|
|
for(int i = 0; i < patrolLength; ++i)
|
|
{
|
|
temp[i] = patrolLoc[(patrolLength-1)-i];
|
|
}
|
|
//retrace steps without ruining original patrol
|
|
patrolOnce(vehicle, temp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleActivateVehicle()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id player = getObjIdObjVar(vehicle, "user");
|
|
doPatrol(vehicle);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleDeactivateVehicle()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id player = getObjIdObjVar(vehicle, "user");
|
|
//keep this comment in case we can get the vehicle to retrace steps
|
|
//messageTo(vehicle, "pathDirectlyToStart", null, 1, false);
|
|
stop(vehicle);
|
|
if(utils.hasScriptVar(vehicle, VEHICLE_MOVING))
|
|
utils.removeScriptVar(vehicle, VEHICLE_MOVING);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
messageHandler initializeVehicleVariables()
|
|
{
|
|
obj_id vehicle = self;
|
|
obj_id house = getTopMostContainer(self);
|
|
|
|
if(!isIdValid(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if(!isIdValid(house) || !player_structure.isBuilding(house) || utils.isNestedWithinAPlayer(vehicle))
|
|
{
|
|
messageTo(terminal, "destroyVehicle", null, 1, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
setObjVar(vehicle, "house", house);
|
|
|
|
//dont overwrite the location list if one already exists
|
|
if(!hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS))
|
|
messageTo(vehicle, "getUserOidSetFirstPoint", null, 1, false);
|
|
|
|
//Attach the listener to the house here
|
|
if(!hasScript(house, "structure.mini_vehicle_control"))
|
|
{
|
|
attachScript(house, "structure.mini_vehicle_control");
|
|
}
|
|
//The house needs to know who the vehicle is
|
|
if(!hasObjVar(house, "mini_vehicle.vehicle"))
|
|
setObjVar(house, "mini_vehicle.vehicle", vehicle);
|
|
|
|
listenToMessage(house, "handleActivateVehicle");
|
|
listenToMessage(house, "handleDeactivateVehicle");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// handleDialogInput
|
|
// This function handles the player's selection on the SUI message box
|
|
// If the player selects Test Patrol the doPatrol function is called
|
|
// If the player selects CLOSE or X the UI is closed
|
|
//------------------------------------------------
|
|
messageHandler handleDialogInput()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
{
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
utils.removeScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
// Determine which button was pressed.
|
|
obj_id player = sui.getPlayerId(params);
|
|
if(!isValidId(player))
|
|
{
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
utils.removeScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
switch (bp)
|
|
{
|
|
case sui.BP_OK: // "Test"
|
|
doPatrol(vehicle, player);
|
|
return SCRIPT_CONTINUE;
|
|
|
|
case sui.BP_CANCEL: // "Close"
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
utils.removeScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
//Functions
|
|
//------------------------------------------------
|
|
|
|
//Kicks off the patrol if vehicle was asleep
|
|
boolean doPatrol(obj_id vehicle)
|
|
{
|
|
if(!isValidId(vehicle))
|
|
return false;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return false;
|
|
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if (patrolLoc == null)
|
|
return false;
|
|
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP))
|
|
{
|
|
ai_lib.setPatrolPath(vehicle, patrolLoc);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
patrolOnce(vehicle, patrolLoc);
|
|
messageTo(vehicle, "fromLastPointGoBackToStart", null, 120, false);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
//Overloaded function used when player interacting with UI or vehicle
|
|
boolean doPatrol(obj_id vehicle, obj_id player)
|
|
{
|
|
if(!isValidId(vehicle) || !isValidId(player))
|
|
return false;
|
|
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
utils.removeScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU);
|
|
|
|
if(utils.hasScriptVar(vehicle, VEHICLE_SETTING_PATROL))
|
|
{
|
|
utils.removeScriptVar(vehicle, VEHICLE_SETTING_PATROL);
|
|
}
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return false;
|
|
|
|
if (!hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS))
|
|
{
|
|
sendSystemMessage(player, MINI_VEHICLE_NO_WAYPOINTS);
|
|
return false;
|
|
}
|
|
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if (patrolLoc == null)
|
|
return false;
|
|
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP))
|
|
{
|
|
ai_lib.setPatrolPath(vehicle, patrolLoc);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
patrolOnce(vehicle, patrolLoc);
|
|
messageTo(vehicle, "fromLastPointGoBackToStart", null, 120, false);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
void doSetPatrolPoint(obj_id vehicle, obj_id player)
|
|
{
|
|
if(!isValidId(vehicle) || !isValidId(player))
|
|
return;
|
|
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
utils.removeScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU);
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return;
|
|
|
|
if(!utils.hasScriptVar(vehicle, VEHICLE_SETTING_PATROL))
|
|
{
|
|
utils.setScriptVar(vehicle, VEHICLE_SETTING_PATROL, true);
|
|
}
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if ( patrolLoc == null )
|
|
{
|
|
patrolLoc = new location[1];
|
|
}
|
|
else if (patrolLoc.length < MAX_WAYPOINTS)
|
|
{
|
|
location[] temp = new location[patrolLoc.length + 1];
|
|
for (int i = 0; i < patrolLoc.length; ++i)
|
|
temp[i] = patrolLoc[i];
|
|
patrolLoc = temp;
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, MINI_VEHICLE_MAX_WAYPOINTS);
|
|
return;
|
|
}
|
|
|
|
location playerLoc = getLocation(player);
|
|
if(!isValidId(playerLoc.cell))
|
|
{
|
|
sendSystemMessage(player, MINI_VEHICLE_NOT_IN_HOUSE);
|
|
return;
|
|
}
|
|
patrolLoc[patrolLoc.length - 1] = playerLoc;
|
|
//SET THE LOCATION ARRAY ON THE TERMINAL
|
|
setObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS, patrolLoc);
|
|
|
|
sendSystemMessage(player, SYS_PATROL_ADDED);
|
|
sendConsoleMessage(player, "Patrol points left: "+(MAX_WAYPOINTS - patrolLoc.length));
|
|
|
|
//Move the vehicle to the player as a courtesy so they can make it patrol all over.
|
|
pathTo(vehicle, playerLoc);
|
|
}
|
|
|
|
void doClearPatrolPoints(obj_id vehicle, obj_id player)
|
|
{
|
|
if(!isValidId(vehicle) || !isValidId(player))
|
|
return;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return;
|
|
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS))
|
|
{
|
|
removeObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
sendSystemMessage(player, SYS_PATROL_REMOVED);
|
|
|
|
ai_lib.clearPatrolPath(vehicle);
|
|
stop(vehicle);
|
|
messageTo( vehicle, "resumeDefaultCalmBehavior", null, 1, false );
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, MINI_VEHICLE_WAYPOINTS_NOT_CLEAR);
|
|
}
|
|
}
|
|
|
|
void removeLastPatrolPoint(obj_id vehicle, obj_id player)
|
|
{
|
|
if(!isValidId(vehicle) || !isValidId(player))
|
|
return;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return;
|
|
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS))
|
|
{
|
|
location[] patrolLoc = getLocationArrayObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS);
|
|
if ( patrolLoc == null )
|
|
{
|
|
sendSystemMessage(player, MINI_VEHICLE_WAYPOINTS_NOT_CLEAR);
|
|
}
|
|
else if (patrolLoc.length > 0)
|
|
{
|
|
location[] temp = new location[patrolLoc.length-1];
|
|
for (int i = 0; i < patrolLoc.length-1; ++i)
|
|
temp[i] = patrolLoc[i];
|
|
patrolLoc = temp;
|
|
setObjVar(terminal, OBJVAR_VEHICLE_PATROL_POINTS, patrolLoc);
|
|
sendSystemMessage(player, SYS_PATROL_ADDED);
|
|
sendConsoleMessage(player, "Patrol points left: "+(MAX_WAYPOINTS - patrolLoc.length));
|
|
}
|
|
|
|
location playerLoc = getLocation(player);
|
|
//Move the vehicle to the player as a courtesy so they can make it patrol all over.
|
|
if(isValidId(playerLoc.cell))
|
|
{
|
|
pathTo(vehicle, playerLoc);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean setPatrolLoop(obj_id vehicle, obj_id player, obj_id terminal)
|
|
{
|
|
if(!isValidId(vehicle) || !isValidId(player))
|
|
return false;
|
|
|
|
if(!isValidId(terminal) || !isValidId(terminal))
|
|
return false;
|
|
|
|
if (!hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP))
|
|
{
|
|
setObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP, true);
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_ONCE))
|
|
removeObjVar(terminal, OBJVAR_VEHICLE_PATROL_ONCE);
|
|
sendConsoleMessage(player, "Patrol loop setting applied.");
|
|
if(utils.hasScriptVar(vehicle, VEHICLE_MOVING))
|
|
{
|
|
stop(vehicle);
|
|
doPatrol(vehicle, player);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
boolean setPatrolOnce(obj_id vehicle, obj_id player, obj_id terminal)
|
|
{
|
|
if (!hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_ONCE))
|
|
{
|
|
setObjVar(terminal, OBJVAR_VEHICLE_PATROL_ONCE, true);
|
|
if (hasObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP))
|
|
removeObjVar(terminal, OBJVAR_VEHICLE_PATROL_LOOP);
|
|
sendConsoleMessage(player, "Patrol once only setting applied.");
|
|
if(utils.hasScriptVar(vehicle, VEHICLE_MOVING))
|
|
{
|
|
stop(vehicle);
|
|
doPatrol(vehicle, player);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// createDialog
|
|
// This fucntion creates the SUI message box with the basic instructions.
|
|
// It also has a button for the user to test their points.
|
|
//------------------------------------------------
|
|
int createHelpDialog(obj_id vehicle, obj_id player)
|
|
{
|
|
if(utils.hasScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU))
|
|
return -1;
|
|
|
|
if (!isIdValid(player))
|
|
{
|
|
return -1;
|
|
}
|
|
if (!isIdValid(vehicle))
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int pid = sui.msgbox( vehicle, player, utils.packStringId(new string_id("sui", "mini_vehicle_sui_text")), sui.OK_CANCEL, utils.packStringId(new string_id( "sui", "mini_vehicle_sui_title")), "handleDialogInput" );
|
|
|
|
sui.setSUIProperty( pid, sui.MSGBOX_BTN_CANCEL, sui.PROP_TEXT, utils.packStringId(new string_id( "sui", "close")));
|
|
sui.setSUIProperty( pid, sui.MSGBOX_BTN_OK, sui.PROP_TEXT, utils.packStringId(new string_id( "sui", "mini_vehicle_sui_test_button")));
|
|
|
|
flushSUIPage(pid);
|
|
|
|
utils.setScriptVar(vehicle, SCRIPTVAR_VEHICLE_HELP_MENU, true);
|
|
return pid;
|
|
}
|
|
|
|
messageHandler OnPack()
|
|
{
|
|
obj_id vehicle = self;
|
|
if(!isValidId(vehicle))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id terminal = getObjIdObjVar(vehicle, "terminal");
|
|
if(!isValidId(terminal))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
messageTo(terminal, "destroyVehicle", null, 1, false);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|