mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-08-01 01:15:59 -04:00
208 lines
6.4 KiB
Plaintext
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;
|
|
}
|