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

Problema con script de muerte: Aplica 2 veces a un jugador


3 respuestas al tema

#1 Khan51

Khan51

    Neonato

  • Miembro
  • PipPip
  • 138 posts

Posteado 20 November 2017 - 11:08 PM

Buenas a todos. Vengo con una duda que tal vez sea simple pero yo no consigo verla. El problema es que cuando mueren dos jugadores a la vez y van al limbo, en vez de aplicarle el penalizador que toca a cada uno, a un jugador le aplica doble penalización y a otro nada, es decir que uno se come el de los dos. 

 

El script en cuestión es este, a ver si podéis darme alguna solución: 

 

// Aplica penalizador al Jugador que regenera.

//SUBPROGRAMA AplicaPenalizador.
void AplicaPenalizador(object oMuerto)
{
    int iXP = GetXP(oMuerto);
    //100 es el penalizador en experiencia por cada nivel del muerto.
    int iPenalizador = 100 * GetHitDice(oMuerto);
    int iNivel = GetHitDice(oMuerto);
    // Tu no puedes perder un nivel de esta forma.
    int nMin = ((iNivel * (iNivel - 1)) / 2) * 1000;
    int iNuevaXP = iXP - iPenalizador;
    if (iNuevaXP < nMin)
       iNuevaXP = nMin;
    SetXP(oMuerto, iNuevaXP);
    //0.50 es el % de oro perdido, 50% significa que perdera la mitad de su oro.
    int nGoldToTake = FloatToInt(0.10 * GetGold(oMuerto));
    AssignCommand(oMuerto, TakeGoldFromCreature(nGoldToTake, oMuerto, TRUE));
    //Las lineas habituales del juego indicando que mueres, pierdes tanta xp, etc...
    DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oMuerto, FALSE));
    DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oMuerto, FALSE));
}//Fin Subprograma AplicaPenalizador.

void main()

{

 // Get the creature who triggered this event.
    object oPC = GetEnteringObject();

    // Only fire for (real) PCs.
    if ( !GetIsPC(oPC)  ||  GetIsDMPossessed(oPC) )
        return;

    // Give "rh_muerto" to the PC.
    CreateItemOnObject("rh_muerto", oPC);

    object oJugador = GetLastPlayerDied();
    //Aplicamos el subprograma AplicaPenalizador al Jugador.
    AplicaPenalizador(oJugador);

    effect eVFX;
    object oTarget;
}//Fin del Cuerpo Principal.

Un saludo!


"La ignoracia convencida, no tiene remedio. . ."

 


#2 Txibi

Txibi

    Antediluvian

  • Miembro DLAN
  • PipPipPipPipPip
  • 4631 posts

Posteado 21 November 2017 - 02:34 AM

Saludos.

 

Aplica el castigo al último que muere, pero tal como estaba se aplicaba al acabar el desangrado. Es raro que mueran sincronizados a la vez, salvo que no esté la espera agonizando y mueran sin ese paso previo.

 

Si tienes problemas con muertes simultáneas añade de comprobación el nombre, en plan: object oNombreFiambre = GetName(oJugador); y verifica ultimo muerto + nombre del muerto.

 

Pon al principio del script el include de funciones #include "nw_i0_plot"

 

Txibi.



#3 Khan51

Khan51

    Neonato

  • Miembro
  • PipPip
  • 138 posts

Posteado 21 November 2017 - 01:31 PM

La espera de agonizando si que está, las veces que ha pasado ha sido con gente que se ha metido en sitios muy complicados y han muerto de golpe, vamos que les han metido de ostias y se han puesto directos en -11 :P

 

Probaré lo que has puesto a ver si funciona ;)

 

EDITO: Me da error de compilación, con lo de la comprobación del nombre, ya sea por variable no definida, variable repetida o cosas similares. Tengo que decir que las variables no las tengo muy controladas, pero si me puedes decir como meter eso sin error Txibi... :mellow:

 

El principal problema es que cuando están en grupo se buguea, cuando mueren solos no hay ningún problema. Pero si dos jugadores mueren mas o mesnos a la vez aunque esten uno a cada punta del servidor, se ralla y pasa lo que comenté en el primer post. 

 

Por si sirve de algo el script no va en el script de muerte, si no en el OnEnter del area del limbo.


Editado por Khan51, 21 November 2017 - 03:30 PM.

"La ignoracia convencida, no tiene remedio. . ."

 


#4 Txibi

Txibi

    Antediluvian

  • Miembro DLAN
  • PipPipPipPipPip
  • 4631 posts

Posteado 21 November 2017 - 04:44 PM

Mirado como está en el on enter cuenta el que entró, esté o no muerto, y se aplica la penalización no al que entrá sino al último en morir. Lo suyo sería que estuviera en el script de muerte no por el on enter.


Editado por Txibi, 21 November 2017 - 04:45 PM.




Responder



  


A Bragol. Tus amigos te echan de menos.