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

117 lines
3.0 KiB
Plaintext

/**
* Copyright (c)2000-2002 Sony Online Entertainment Inc.
* All Rights Reserved
*
* Title: furniture.scriptlib
* Description: base functions for furniture handling
* @author $Author:$
* @version $Revision:$
*/
/***** INCLUDES ********************************************************/
include library.utils;
/***** CONSTANTS *******************************************************/
const string VAR_CHAIR_OCCUPIED_BASE = "occupied";
const string VAR_CHAIR_OCCUPIED_IDS = "occupied.ids"; //obj_id array
const string VAR_CHAIR_OCCUPIED_LIMIT = "occupied.limit"; //int
const string VAR_PLAYER_SEAT_BASE = "seat";
const string VAR_PLAYER_SEAT_ID = "seat.id";
const string SCRIPT_CHAIR = "item.furniture.chair";
const string SCRIPT_PLAYER_SEATED = "player.player_seated";
const string_id SID_SEAT_FULL = new string_id("error_message","seat_full");
/***** FUNCTIONS *******************************************************/
/***********************************************************************
* @brief tries to seat a player in the specified chair
*
* @param obj_id player
* @param obj_id chair
*
* @return boolean; false on unable to seat player
***********************************************************************/
boolean sit(obj_id player, obj_id chair)
{
if ( (player == null) || (chair == null) )
{
return false;
}
if ( !hasObjVar(chair, VAR_CHAIR_OCCUPIED_LIMIT) )
{
return false;
}
resizeable obj_id[] occupants = getResizeableObjIdArrayObjVar(chair, VAR_CHAIR_OCCUPIED_IDS);
int pos = 0; //default
if ( (occupants != null) && (occupants.length != 0) )
{
pos = occupants.length;
if ( pos >= getIntObjVar(chair, VAR_CHAIR_OCCUPIED_LIMIT) )
{
sendSystemMessage(player, SID_SEAT_FULL);
return false;
}
}
if ( sitOnObject(player, chair, pos) )
{
occupants = utils.addElement(occupants, player);
setObjVar(chair, VAR_CHAIR_OCCUPIED_IDS, occupants);
setObjVar(player, VAR_PLAYER_SEAT_ID, chair);
attachScript(player, SCRIPT_PLAYER_SEATED);
return true;
}
else
{
return false;
}
}
/***********************************************************************
* @brief tries to unseat a player
*
* @param obj_id player
*
* @return boolean; false on unable to seat player
***********************************************************************/
boolean unseat(obj_id player)
{
if ( player == null )
{
return false;
}
if ( !hasObjVar(player, VAR_PLAYER_SEAT_ID) )
{
return false;
}
obj_id chair = getObjIdObjVar(player, VAR_PLAYER_SEAT_ID);
resizeable obj_id[] occupants = getResizeableObjIdArrayObjVar(chair, VAR_CHAIR_OCCUPIED_IDS);
occupants = utils.removeElement(occupants, player);
if(occupants == null || occupants.length == 0) {
return false;
}
boolean litmus = setObjVar(chair, VAR_CHAIR_OCCUPIED_IDS, occupants);
removeObjVar(player, VAR_PLAYER_SEAT_BASE);
detachScript(player, SCRIPT_PLAYER_SEATED);
return litmus;
}