Files
dsrc/sku.0/sys.server/compiled/game/script/systems/jedi/jedi_cloak.script
T

208 lines
6.4 KiB
Plaintext

/********************************************************************************************************************************************
* Title: jedi_cloak.script
* Description: Jedi cloak script for putting hood up and down
**********************************************************************/
/***** INCLUDES ********************************************************/
include library.force_rank;
include library.jedi;
include library.prose;
include library.static_item;
include library.utils;
include library.reverse_engineering;
/***** CONSTANTS *******************************************************/
const string_id SID_USE_HOOD_UP = new string_id("spam", "hood_up");
const string_id SID_USE_HOOD_DOWN = new string_id("spam", "hood_down");
const string_id SID_NO_TWO_CLOAK = new string_id("spam", "no_two_cloak");
const string OBJVAR_BEING_REPLACED = "aboutToBeReplaced";
/***** TRIGGERS ********************************************************/
trigger OnInitialize()
{
//if we have destoy pending objvar, we need to be destroyed
if(hasObjVar(self, OBJVAR_BEING_REPLACED))
destroyObject(self);
return SCRIPT_CONTINUE;
}
//only want one in a players inventory at a time.
trigger OnAboutToBeTransferred(obj_id destContainer, obj_id transferer)
{
obj_id player = utils.getContainingPlayer(destContainer);
if(isIdValid(player))
{
if(jedi.hasAnyUltraCloak(player))
{
obj_id existingCloak = utils.getStaticItemInBankOrInventory(player, jedi.JEDI_CLOAK_LIGHT_HOOD_UP);
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInBankOrInventory(player, jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN);
}
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInBankOrInventory(player, jedi.JEDI_CLOAK_DARK_HOOD_UP);
}
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInBankOrInventory(player, jedi.JEDI_CLOAK_DARK_HOOD_DOWN);
}
// Appearance Inventory checks.
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInAppearanceInventory(player, jedi.JEDI_CLOAK_LIGHT_HOOD_UP);
}
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInAppearanceInventory(player, jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN);
}
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInAppearanceInventory(player, jedi.JEDI_CLOAK_DARK_HOOD_UP);
}
if(!isIdValid(existingCloak) || existingCloak == self)
{
existingCloak = utils.getStaticItemInAppearanceInventory(player, jedi.JEDI_CLOAK_DARK_HOOD_DOWN);
}
if(exists(existingCloak) && isIdValid(existingCloak) && existingCloak != self)
{
if(!hasObjVar(existingCloak, OBJVAR_BEING_REPLACED) && !hasObjVar(self, OBJVAR_BEING_REPLACED))
{
sendSystemMessage(player, SID_NO_TWO_CLOAK);
return SCRIPT_OVERRIDE;
}
}
}
}
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
{
if (utils.isEquipped(self))
{
string itemName = getStaticItemName(self);
menu_info_data mid = mi.getMenuItemByType(menu_info_types.ITEM_USE);
if ( mid != null )
mid.setServerNotify(true);
else
{
if (itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_UP || itemName == jedi.JEDI_CLOAK_DARK_HOOD_UP)
mi.addRootMenu(menu_info_types.ITEM_USE, SID_USE_HOOD_DOWN);
else if(itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN || itemName == jedi.JEDI_CLOAK_DARK_HOOD_DOWN)
mi.addRootMenu(menu_info_types.ITEM_USE, SID_USE_HOOD_UP);
}
}
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuSelect(obj_id player, int item)
{
if(!utils.isEquipped(self))
return SCRIPT_CONTINUE;
if( item == menu_info_types.ITEM_USE)
{
obj_id pInv = utils.getInventoryContainer(player);
string itemName = getStaticItemName(self);
boolean isAppearanceItem = isAPlayerAppearanceInventoryContainer(getContainedBy(self));
//set pending destroy objvar
setObjVar(self, OBJVAR_BEING_REPLACED, true);
if (itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_UP || itemName == jedi.JEDI_CLOAK_DARK_HOOD_UP)
{
obj_id newRobe = null;
if(itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_UP)
newRobe = static_item.createNewItemFunction(jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN, pInv);
if(itemName == jedi.JEDI_CLOAK_DARK_HOOD_UP)
newRobe = static_item.createNewItemFunction(jedi.JEDI_CLOAK_DARK_HOOD_DOWN, pInv);
if(isIdValid(newRobe))
{
if(reverse_engineering.isPoweredUpItem(self) && !isAppearanceItem)
{
float remainingTime = getFloatObjVar(self, reverse_engineering.ENGINEERING_TIMESTAMP);
//strip old mods
reverse_engineering.removePlayerPowerUpMods(player, self);
//apply new powerup stats to robe
reverse_engineering.addModsAndScript(player, self, newRobe, remainingTime);
}
utils.setScriptVar(newRobe, static_item.NO_SET_ITEM_EQUIP_SPAM, 1);
putInOverloaded(self, pInv);
equip(newRobe, player);
destroyObject(self);
return SCRIPT_CONTINUE;
}
}
if(itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN || itemName == jedi.JEDI_CLOAK_DARK_HOOD_DOWN)
{
obj_id hat = getObjectInSlot(player, "hat");
if(isIdValid(hat) && !isAppearanceItem)
putInOverloaded(hat, pInv);
if(isAppearanceItem)
{
obj_id appearanceHat = getObjectInSlot(getAppearanceInventory(player), "hat");
if(isIdValid(appearanceHat))
putInOverloaded(appearanceHat, pInv);
}
obj_id newRobe = null;
if(itemName == jedi.JEDI_CLOAK_LIGHT_HOOD_DOWN)
newRobe = static_item.createNewItemFunction(jedi.JEDI_CLOAK_LIGHT_HOOD_UP,pInv);
if(itemName == jedi.JEDI_CLOAK_DARK_HOOD_DOWN)
newRobe = static_item.createNewItemFunction(jedi.JEDI_CLOAK_DARK_HOOD_UP,pInv);
if(isIdValid(newRobe))
{
if(reverse_engineering.isPoweredUpItem(self) && !isAppearanceItem)
{
float remainingTime = getFloatObjVar(self, reverse_engineering.ENGINEERING_TIMESTAMP);
//strip old mods
reverse_engineering.removePlayerPowerUpMods(player, self);
//apply new powerup stats to robe
reverse_engineering.addModsAndScript(player, self, newRobe, remainingTime);
}
utils.setScriptVar(newRobe, static_item.NO_SET_ITEM_EQUIP_SPAM, 1);
putInOverloaded(self, pInv);
equip(newRobe, player);
destroyObject(self);
return SCRIPT_CONTINUE;
}
}
}
return SCRIPT_CONTINUE;
}