Updated onSkillGain, onSkillLoss and onSkillChange JS events

Updated onSkillGain, onSkillLoss and onSkillChange JS events:
	Additional parameters now supported by events - skillGainAmount and skillLossAmount
		onSkillGain( player, skillID, skillGainAmount ) 	// skillGainAmount is always positive
		onSkillLoss( player, skillID, skillLossAmount ) 	// skillLossAmount is always positive
		onSkillChange( player, skillID, skillChangeAmount ) // skillChangeAmount can be negative or positive
	The return value from onSkillGain and onSkillLoss events can now be used to control behavior:
		return true - skill gain/loss is allowed, and server will go through with the skill update
		return false - skill gain/loss is not allowed, and server will prevent the skill update, but will not block additional scripts with same event from running
	onSkillChange will now run as long as onSkillGain or onSkillLoss events return true, and if those events are not defined
Updated JS Docs
This commit is contained in:
Xoduz 2021-10-17 08:08:19 +08:00
parent bfb7763296
commit f33e37ac06
6 changed files with 162 additions and 64 deletions

View file

@ -748,27 +748,32 @@ bool cScript::OnDefense( CChar *attacker, CChar *defender )
}
//o-----------------------------------------------------------------------------------------------o
//| Function - bool OnSkillGain( CChar *player, SI08 skill )
//| Function - SI08 OnSkillGain( CChar *player, SI08 skill, UI32 skillGainAmount )
//o-----------------------------------------------------------------------------------------------o
//| Purpose - Triggers for character with event attached when gaining skillpoints
//o-----------------------------------------------------------------------------------------------o
bool cScript::OnSkillGain( CChar *player, SI08 skill )
SI08 cScript::OnSkillGain( CChar *player, SI08 skill, UI32 skillGainAmount )
{
if( !ValidateObject( player ) )
return false;
const SI08 RV_NOFUNC = -1;
if( !ValidateObject( player ))
return RV_NOFUNC;
if( !ExistAndVerify( seOnSkillGain, "onSkillGain" ) )
return false;
return RV_NOFUNC;
jsval params[2], rval;
jsval params[3], rval;
JSObject *charObj = JSEngine->AcquireObject( IUE_CHAR, player, runTime );
params[0] = OBJECT_TO_JSVAL( charObj );
params[1] = INT_TO_JSVAL( skill );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillGain", 2, params, &rval );
params[2] = INT_TO_JSVAL( skillGainAmount );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillGain", 3, params, &rval );
if( retVal == JS_FALSE )
{
SetEventExists( seOnSkillGain, false );
return RV_NOFUNC;
}
return ( retVal == JS_TRUE );
return TryParseJSVal( rval );
}
//o-----------------------------------------------------------------------------------------------o
@ -1738,45 +1743,51 @@ bool cScript::OnStatChange( CChar *player, UI32 stat )
}
//o-----------------------------------------------------------------------------------------------o
//| Function - bool OnSkillLoss( CChar *player, SI08 skill )
//| Function - SI08 OnSkillLoss( CChar *player, SI08 skill, UI32 skillLossAmount )
//o-----------------------------------------------------------------------------------------------o
//| Purpose - Triggers for characters with event attached when losing skillpoints
//o-----------------------------------------------------------------------------------------------o
bool cScript::OnSkillLoss( CChar *player, SI08 skill )
SI08 cScript::OnSkillLoss( CChar *player, SI08 skill, UI32 skillLossAmount )
{
if( !ValidateObject( player ) )
return false;
const SI08 RV_NOFUNC = -1;
if( !ValidateObject( player ))
return RV_NOFUNC;
if( !ExistAndVerify( seOnSkillLoss, "onSkillLoss" ) )
return false;
return RV_NOFUNC;
jsval params[2], rval;
jsval params[3], rval;
JSObject *charObj = JSEngine->AcquireObject( IUE_CHAR, player, runTime );
params[0] = OBJECT_TO_JSVAL( charObj );
params[1] = INT_TO_JSVAL( skill );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillLoss", 2, params, &rval );
params[2] = INT_TO_JSVAL( skillLossAmount );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillLoss", 3, params, &rval );
if( retVal == JS_FALSE )
{
SetEventExists( seOnSkillLoss, false );
return RV_NOFUNC;
}
return ( retVal == JS_TRUE );
return TryParseJSVal( rval );
}
//o-----------------------------------------------------------------------------------------------o
//| Function - bool OnSkillChange( CChar *player, SI08 skill )
//| Function - bool OnSkillChange( CChar *player, SI08 skill, SI32 skillChangeAmount )
//o-----------------------------------------------------------------------------------------------o
//| Purpose - Triggers for characters with event attached when skillpoints change
//o-----------------------------------------------------------------------------------------------o
bool cScript::OnSkillChange( CChar *player, SI08 skill )
bool cScript::OnSkillChange( CChar *player, SI08 skill, SI32 skillChangeAmount )
{
if( !ValidateObject( player ) )
return false;
if( !ExistAndVerify( seOnSkillChange, "onSkillChange" ) )
return false;
jsval params[2], rval;
jsval params[3], rval;
JSObject *charObj = JSEngine->AcquireObject( IUE_CHAR, player, runTime );
params[0] = OBJECT_TO_JSVAL( charObj );
params[1] = INT_TO_JSVAL( skill );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillChange", 2, params, &rval );
params[2] = INT_TO_JSVAL( skillChangeAmount );
JSBool retVal = JS_CallFunctionName( targContext, targObject, "onSkillChange", 3, params, &rval );
if( retVal == JS_FALSE )
SetEventExists( seOnSkillChange, false );