Files
dsrc/sku.0/sys.server/compiled/game/script/player/player_dot.script
T

179 lines
4.2 KiB
Plaintext

/**********************************************************************
* Copyright (c)2000-2002 Sony Online Entertainment Inc.
* All Rights Reserved
*
* Title: player_dot
* Description: Script is attached to a target that has a dot effect
* @author $Author:$
* @version $Revision:$
**********************************************************************/
/***** INCLUDES ********************************************************/
include library.buff;
include library.dot;
include library.utils;
include library.trial;
/***** CONSTANTS *******************************************************/
/***** TRIGGERS ********************************************************/
trigger OnInitialize()
{
// Restart the dot messages for all dot_id's on the target.
string[] dot_ids = dot.getAllDots(self);
if (dot_ids != null)
{
for (int i = 0; i < dot_ids.length; i++)
{
string type = dot.getDotType(self, dot_ids[i]);
if(!type.equals(dot.DOT_DISEASE))
{
int pulse = dot.getDotPulse(self, dot_ids[i]);
dictionary d = new dictionary();
d.put("dot_id", dot_ids[i]);
d.put("pulse", pulse);
messageTo(self, "OnDotPulse", d, pulse, false);
}
}
}
else
detachScript(self, dot.SCRIPT_PLAYER_DOT);
return SCRIPT_CONTINUE;
}
trigger OnDetach()
{
if (utils.hasScriptVar(self, dot.SCRIPT_VAR_DOT_GRACE))
utils.removeScriptVar(self, dot.SCRIPT_VAR_DOT_GRACE);
// Make sure all dot states are clear
setState(self, STATE_BLEEDING, false);
setState(self, STATE_POISONED, false);
setState(self, STATE_DISEASED, false);
setState(self, STATE_ON_FIRE, false);
return SCRIPT_CONTINUE;
}
trigger OnEnterSwimming()
{
//LOG("LOG_CHANNEL", "player_dot::OnEnterSwimming -- " + self);
// Swimming puts out fires.
if (dot.isOnFire(self))
{
dot.reduceDotTypeStrength(self, dot.DOT_FIRE, 10000);
}
return SCRIPT_CONTINUE;
}
trigger OnAttribModDone(string modName, boolean isDead)
{
if(false)//modName.startsWith("dot.disease"))
{
string[] parts = split(modName, '.');
if(parts.length < 3)
return SCRIPT_CONTINUE;
string dot_id = parts[2];
dot.removeDotEffect(self, dot_id, true);
}
return SCRIPT_CONTINUE;
}
/***** MESSAGEHANDLERS *************************************************/
messageHandler OnDotPulse()
{
if (params == null)
return SCRIPT_CONTINUE;
string dot_id;
if (params.containsKey("dot_id"))
dot_id = params.getString("dot_id");
else
return SCRIPT_CONTINUE;
int pulse;
if (params.containsKey("pulse"))
pulse = params.getInt("pulse");
else
return SCRIPT_CONTINUE;
if (dot.applyDotDamage(self, dot_id))
{
// If we're DoT'd by a player keep us in combat while the DoT pulses.
obj_id attacker = params.getObjId("attacker");
if(isPlayer(attacker) && exists(attacker) )
{
addHate(self, attacker, 0.0f);
addHate(attacker, self, 0.0f);
}
messageTo(self, "OnDotPulse", params, pulse, false);
}
return SCRIPT_CONTINUE;
}
messageHandler OnBuffDotPulse()
{
if (params == null)
return SCRIPT_CONTINUE;
if(!trial.verifySession(self, params, params.getString("buffName")))
return SCRIPT_CONTINUE;
obj_id caster = params.getObjId("caster");
string buffName = params.getString("buffName");
int strength = params.getInt("strength");
string type = params.getString("type");
if(!buff.hasBuff(self, buffName))
{
return SCRIPT_CONTINUE;
}
long stackCount = buff.getBuffStackCount(self, buffName);
strength *= stackCount;
if (dot.applyBuffDotDamage(self, caster, buffName, strength, type))
{
// If we're DoT'd by a player keep us in combat while the DoT pulses.
obj_id attacker = params.getObjId("attacker");
if(isPlayer(attacker) && exists(attacker) )
{
addHate(self, attacker, 0.0f);
addHate(attacker, self, 0.0f);
}
messageTo(self, "OnBuffDotPulse", params, buff.BUFF_DOT_TICK, false);
}
return SCRIPT_CONTINUE;
}
messageHandler bleedingStopped()
{
return SCRIPT_CONTINUE;
}
messageHandler OnDotGraceEnd()
{
if (utils.hasScriptVar(self, dot.SCRIPT_VAR_DOT_GRACE))
utils.removeScriptVar(self, dot.SCRIPT_VAR_DOT_GRACE);
return SCRIPT_CONTINUE;
}
/***** COMMANDHANDLERS *************************************************/
/***** FUNCTIONS *******************************************************/