Voici un script qui permet aux PJ d'agripper les autres. Sa permet par exemple d'attraper un voleur qui s'enfuit.
Dans le OnActivateItem du module :
void agrippement(object oActivator, object oTarget) {
int nEtat = GetLocalInt(oActivator, "agrippeur");
if (nEtat == 1) {
int nCasterModif;
int nCasterFor = GetAbilityModifier(ABILITY_STRENGTH,oActivator);
int nCasterDex = GetAbilityModifier(ABILITY_DEXTERITY,oActivator);
if (nCasterFor < nCasterDex) {
nCasterModif = nCasterDex;
} else {
nCasterModif = nCasterFor;
}
int nCasterRoll = d20(1) + nCasterModif;
int nTargetRoll = d20(1) + GetAbilityModifier(ABILITY_DEXTERITY,oTarget);
if (nCasterRoll >= nTargetRoll) {// Si le jet est réussi
effect eParalize = EffectCutsceneImmobilize();
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND);
effect eLink = EffectLinkEffects(eParalize, eDur);
eLink = EffectLinkEffects(eHand, eLink);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eParalize, oActivator, 6.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
FloatingTextStrRefOnCreature(2478, oActivator);
DelayCommand(6.0, agrippement(oActivator, oTarget));
} else { // Si le jet est raté
FloatingTextStringOnCreature("* agrippement raté *",oActivator,FALSE);
effect eKnockdown = EffectParalyze();
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdown, oActivator, 5.0);
SetLocalInt(oActivator, "agrippeur", 0);
}
} else {
FloatingTextStringOnCreature("* cible relachée *",oActivator,FALSE);
}
}
void main()
{
object oActivator = GetItemActivator();
object oItem = GetItemActivated();
object oTarget = GetItemActivatedTarget();
string sTag = GetTag(oItem);
if ((sTag == "agrippeur") & GetIsObjectValid(oTarget)) {// Baton d'agrippement
location lActivator = GetLocation(oActivator);
location lTarget = GetLocation(oTarget);
vector vActivator = GetPositionFromLocation(lActivator);
vector vTarget = GetPositionFromLocation(lTarget);
vector vDistance = vTarget - vActivator;
float fDistance = VectorMagnitude(vDistance);
if(fDistance > 3.0) { //Si on est trop loin
FloatingTextStringOnCreature("* Vous êtes trop loin *",oActivator,TRUE);
return;
} else { //Si on est assez pres
int nEtat = GetLocalInt(oActivator, "agrippeur");
if(nEtat == 1) {
SetLocalInt(oActivator, "agrippeur", 0);
return;
} else {
SetLocalInt(oActivator, "agrippeur", 1);
agrippement(oActivator, oTarget);
}
}
}
}
Il suffit ensuite de créer un bâton (comme le bâton d'émotions) qui a pour tag "agrippeur"
Voila ^^
J'attend avec impatience vos remarques, critiques et améliorations éventuelles
Edite : j'ai oublié de préciser quelque chose.
La personne qui tante d'agripper fait un jet de force opposé à un jet de force ou de dextérité (le meilleur des deux) de la victime.