Buenas,
Lo único que se me ocurre es "mover" al contrincante si superas la tirada.
// /////////////////////////////////////////////////////////////////////////////
// DevolverLocation
// Devuelve la localizacion transformada a partir de oPC
// Ejemplo: 1 por encima DevolverLocation(oPC, 0.0f, (GetPosition(oPC).z)+1.0f);
// v2.0, ahora selecciona la orientacion
// Created by: Avernum para Tierra de Héroes
//:://////////////////////////////////////////////
//===========================================================================
location DevolverLocation(object oPC, float fDist, float fHeight = 0.0f, int iOrientacion = 1)
{
//La altura hace cosas raras a veces. Investigar.
float fDistance = -fDist;
object oArea = GetArea(oPC);
vector vPosition = GetPosition(oPC);
float fOrientation;
vPosition.z += fHeight;
if (iOrientacion != 0)
{
switch(iOrientacion)
{
//Delante de donde este mirando oPC
case 1: fOrientation = GetFacing(oPC); break;
//Detras de donde este mirando oPC
case 2: fOrientation = -GetFacing(oPC); break;
//A la izquierda de donde este mirando oPC
case 3: fOrientation = GetFacing(oPC)+90.0; break;
//A la derecha de donde este mirando oPC
case 4: fOrientation = GetFacing(oPC)-90.0; break;
//Al este absoluto
case 5: fOrientation = 0.0; break;
//Al norte absoluto
case 6: fOrientation = 90.0; break;
//Al sur absoluto
case 7: fOrientation = 270.0; break;
//Al oeste absoluto
case 8: fOrientation = 180.0; break;
//Aleatorio
case 9: fOrientation = IntToFloat(Random(360)); break;
}
}
//SendMessageToPC(GetFirstPC(), "fOrientation: "+FloatToString(fOrientation));
vector vNewPos = AngleToVector(fOrientation);
float vZ = vPosition.z;
float vX = vPosition.x - fDistance * vNewPos.x;
float vY = vPosition.y - fDistance * vNewPos.y;
//fOrientation = GetFacing(oTarget);
vX = vPosition.x - fDistance * vNewPos.x;
vY = vPosition.y - fDistance * vNewPos.y;
//vNewPos = AngleToVector(fOrientation);
vZ = vPosition.z;
vNewPos = Vector(vX, vY, vZ);
return Location(oArea, vNewPos, fOrientation);
}
// ---------------------------------------------------------------------------------------
object oEnemigo = el contrincante en cuestion
object oPJ = Tú
int iOrientacion;
if (d2()==1){iOrientacion=3;}else{iOrientacion=4}
location lLoc = DevolverLocation(oPJ, 2.0f, 0.0f, iOrientacion);
AssignCommand(oEnemigo, ClearAllActions(TRUE));
AssignCommand(oEnemigo, JumpToLocation(lLoc));
Con esto el enemigo se moverá 2 metros a la izquierda o derecha del personaje aleatoriamente. En la funcion 3 es izquierda y 4 es derecha. Cambia el 2.0f por lo que quieras para empujones mas o menos fuertes según tirada, o incluso aplica EffectKnockDown para que se caiga al suelo, como la dote Derribo.
Espero que te ayude, saludos!