Saltar al contenido

Más en DLAN: Nuestras Traducciones | Otras Traducciones | Mods y modding | Revisiones y Guías | Videojuegos | Arte | Literatura | Rol y Rol por foro e IRC | Mapa de la web
Foto

Empujar


4 respuestas al tema

#1 Obsidiana

Obsidiana

    Humano

  • Miembro
  • Pip
  • 50 posts

Posteado 15 July 2019 - 12:23 AM

Buenas, estaba trabajando en una dote para mi módulo. Para esa dote necesitaba hacer una tirada enfrentada y conseguir que el que ganara "empujara" al rival hacia un lado.

 

El problema es, que no se como hacer el empuje. ¿Alguien tiene alguna idea como plasmar esto? Gracias de antemano!


Editado por Obsidiana, 15 July 2019 - 12:25 AM.


#2 Zoraga

Zoraga

    Ancillae

  • Miembro
  • PipPipPip
  • 256 posts

Posteado 18 July 2019 - 07:34 AM

Hola, ¿Te refieres a la tirada de dados, o a la animación del empuje?.


Colaborando en:



Nombre servidor: ES) Rebelión del Submundo
Tipo de servidor: rol/acción/jvj
Jugadores: 1-25
Niveles: 1-30
Base literaria: Reinos Olvidados
IP (conectar directamente): sombrasdefaerun.no-ip.org
Foro: http://usn-rol.foroes.org/



 


#3 Obsidiana

Obsidiana

    Humano

  • Miembro
  • Pip
  • 50 posts

Posteado 04 February 2020 - 09:06 PM

A la animación de empuje, disculpa acabo de ver el mensaje.



#4 Avernum

Avernum

    Humano

  • Miembro
  • Pip
  • 15 posts

Posteado 04 February 2020 - 09:52 PM

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!



#5 Obsidiana

Obsidiana

    Humano

  • Miembro
  • Pip
  • 50 posts

Posteado 05 February 2020 - 02:09 AM

Muchas gracias! Me cendrá de perlas!





Responder



  


A Bragol. Tus amigos te echan de menos.