Files
dsrc/sku.0/sys.server/compiled/game/script/poi/wounded/leader_inv.script
T

196 lines
4.1 KiB
Plaintext

/**
*
* Title: leader_inv.script
* Description: inventory script for mediator leader in POI wounded
*/
/***** INCLUDES ********************************************************/
include library.poi;
include library.scenario;
include library.healing;
include library.consumable;
/***** INHERITS ********************************************************/
inherits item.container.add_only;
/***** CONSTANTS *******************************************************/
const int PROVIDED_MEDICINE = 4;
/***** TRIGGERS *******************************************************/
trigger OnAttach()
{
return SCRIPT_CONTINUE;
}
trigger OnInitialize()
{
return SCRIPT_CONTINUE;
}
trigger OnAboutToReceiveItem(obj_id srcContainer, obj_id transferer, obj_id item)
{
obj_id actor = getContainedBy(self);
if ( (actor == null) || (actor == obj_id.NULL_ID) )
{
return SCRIPT_OVERRIDE;
}
obj_id poiMaster = poi.getBaseObject(actor);
if ( (poiMaster == null) || (poiMaster == obj_id.NULL_ID) )
{
LOG("poiWounded", "OnStartNpcConversation: unable to locate base object");
return SCRIPT_CONTINUE;
}
string convo = getStringObjVar(poiMaster, scenario.VAR_SCENARIO_CONVO);
if ( convo.equals("") )
{
LOG("poiWounded", "OnStartNpcConversation: unable to determine conversation file");
return SCRIPT_CONTINUE;
}
if ( isPlayer(transferer) )
{
if ( !healing.isMedicine(item) )
{
scenario.say(actor, convo, "item_not_medicine");
return SCRIPT_OVERRIDE;
}
}
return SCRIPT_CONTINUE;
}
trigger OnReceivedItem(obj_id srcContainer, obj_id transferer, obj_id item)
{
obj_id actor = getContainedBy(self);
if ( (actor == null) || (actor == obj_id.NULL_ID) )
{
return SCRIPT_OVERRIDE;
}
obj_id poiMaster = poi.getBaseObject(actor);
if ( (poiMaster == null) || (poiMaster == obj_id.NULL_ID) )
{
LOG("poiWounded", "OnStartNpcConversation: unable to locate base object");
return SCRIPT_CONTINUE;
}
string convo = getStringObjVar(poiMaster, scenario.VAR_SCENARIO_CONVO);
if ( convo.equals("") )
{
LOG("poiWounded", "OnStartNpcConversation: unable to determine conversation file");
return SCRIPT_CONTINUE;
}
if ( isPlayer(transferer) )
{
if ( healing.isMedicine(item) )
{
int cnt = getIntObjVar(item, consumable.VAR_CONSUMABLE_CHARGES);
obj_id[] actors = scenario.getActorsWithNamePrefix(poiMaster, scenario.MEDIATOR);
if ( (actors == null) || (actors.length == 0) )
{
}
else
{
boolean assisted = false;
for ( int i = 0; i < cnt; i++ )
{
obj_id wounded = getFirstWoundedActor(actors);
if ( wounded == null )
{
i = cnt;
}
}
if ( assisted )
{
scenario.setPlayerProgress(transferer, PROVIDED_MEDICINE);
//give reward
scenario.say(actor, convo, "m_reward");
int amt = 0;
attrib_mod[] mods = getAttribModArrayObjVar(item, consumable.VAR_CONSUMABLE_MODS);
if ( (mods == null) || (mods.length == 0) )
{
}
else
{
for ( int n = 0; n < mods.length; n++ )
{
amt += mods[n].getValue();
}
}
amt *= cnt;
obj_id wounded = getFirstWoundedActor(actors);
if ( wounded == null )
{
scenario.say(actor, convo, "m_all_healed");
poi.complete(poiMaster);
//give bonus!
amt *= 1.25f;
}
amt /= 10;
dictionary d = new dictionary();
d.put("target", transferer);
d.put("amt", amt);
messageTo(actor, "giveReward", d, 0, false);
}
destroyObject(item);
}
}
}
return SCRIPT_CONTINUE;
}
/***** FUNCTIONS *******************************************************/
boolean healActorWounds(obj_id actor, int[] wounds)
{
if ( (actor == null) || (wounds == null) || (wounds.length == 0) )
{
return false;
}
attribute[] maxAttribs = getUnmodifiedMaxAttribs(actor);
for ( int i = 0; i < maxAttribs.length; ++i )
{
int woundVal = wounds[i];
if ( woundVal > 0 )
{
addAttribModifier(actor, maxAttribs[i].getType(), maxAttribs[i].getValue(), 0, 0, MOD_POOL);
}
}
return true;
}
obj_id getFirstWoundedActor(obj_id[] actors)
{
return null;
}
/***** MESSAGEHANDLER *******************************************************/