El_Vara

31/03/2014 14:45:31

Buenas, un saludo y gracias por adelantado, ahora también quiero preguntar sobre un modo de arena, yo tenía pensado un desencadenante donde... te dejaran descansar y si mueres te levantes sin más, osea, que no te quite la px ni te lleve el limbo, si se necesita que ponga los scripts no tengo problema en ello.

Un saludo.

Cerril

31/03/2014 14:58:07

El módulo no te lleva al limbo porqué si, para eso pase, requiere un script que tienes que tener en el OnPlayerRespawn del modulo (que se desencadena cuando pulsas el botón regenerar).

Solo tienes que localizarlo y condicionarlo si una variable tiene valor true:

Por ejemplo:

[code:1:4142a3e7ca]void main()
{
object oPC = GetLastRespawnButtonPresser();
if (!GetLocalInt(GetArea(oPC), "esto_es_una_arena"))
{
//Aqui va todo el script que se encarga de enviarte al moduro.
}
}[/code:1:4142a3e7ca]

El_Vara

31/03/2014 15:06:38

Uhm, entiendo, ¿y cómo pondría que al entrar a un desencadenante o al salir quitara o pusiera la int?
¿Y para que pueda descansar sería lo mismo no?
Edito: Voy a probar a ponerlo en mi script y envío a ver y me corriges.

Cerril

31/03/2014 15:13:29

Para eso en lugar de guardar la variable local en el área la guardas en el personaje.

En el onenter del desencadenante estableces la variable a true y en el onexit la estableces a false.

Luego en el onrest del módulo solo tienes que comprobar la variable y en caso de estar a true cancelas el descanso, o presentas un mensage que lo impida.

Aun así creo recordar que existe un desencadenante de descanso implementado en el aurora.

El_Vara

31/03/2014 15:16:08

[code:1:b4d6ef2b49]/*
Script: 0_tx_regenera; modificado por El_Vara.
*/

#include "nw_i0_plot"

//SUBPROGRAMA Resucitar.
void Resucitar(object oPJ)
{
//Cogemos el primer efecto negativo del PJ.
effect eEfectoNegativo = GetFirstEffect(oPJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPJ)), oPJ);

//Buscamos los efectos negativos
while(GetIsEffectValid(eEfectoNegativo))
{
if (GetEffectType(eEfectoNegativo) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_DEAF ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_NEGATIVELEVEL ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_MOVEMENT_SPEED_DECREASE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_CURSE ||
GetEffectType(eEfectoNegativo) == EFFECT_TYPE_SLOW)
{
//Si el efecto es negativo se elimina
RemoveEffect(oPJ, eEfectoNegativo);
}//fin de remover efecto.

//Examinamos el siguiente efecto negativo y asi hasta todos.
eEfectoNegativo = GetNextEffect(oPJ);

}//fin del while de busqueda de efectos negativos.

//Curamos el cuerpo del muerto.
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPJ)), oPJ);

}//fin del subprograma Resucitar.


//CUERPO PRINCIPAL.
void main()
{
//Script para tratar la muerte de un jugador
object oJugador = GetLastRespawnButtonPresser();
location locMuertePC = GetLocation(oJugador);

//Recordamos en una variable local su muerte.
SetLocalInt (GetModule(), "Muerto_" + GetName(oJugador) + GetPCPlayerName(oJugador) , 1);

//Le hacemos saltar al punto de ruta marcado en el limbo.
{
object oPC = GetLastRespawnButtonPresser();
if (!GetLocalInt(GetArea(oPC), "esto_es_una_arena"))
{
object oJumpTarget = GetObjectByTag("tx_limbo");
location locDestino = GetLocation(oJumpTarget); //Aqui va todo el script que se encarga de enviarte al moduro.


//Un poco de efecto visual, 3 segundos y salto al limbo.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), locMuertePC,3.0f);
DelayCommand(3.0,AssignCommand(oJugador, ClearAllActions()));
AssignCommand(oJugador, JumpToLocation(locDestino));
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_RESTORATION), GetLocation(oJugador),5.0f);
}
}
//Ejecutamos el subprograma Resucitar sobre el jugador.
Resucitar(oJugador);

//Creamos una Calavera de Trama en su inventario para que a partir de los siguientes reinicios vaya al Limbo.
//Por si se desconecta desde el limbo esperando el siguiente día entrar sin pagar el coste de bajar del Limbo.
CreateItemOnObject("tx_muerto", oJugador, 1);

}//Fin Cuerpo Principal.[/code:1:b4d6ef2b49]

Cerril

31/03/2014 15:22:06

En lugar de añadir el oPC, puedes sustituirlo por oJugador que es lo mismo, por lo demás deveria de funcionar.

Para que te funcione simplemente tienes que añadir al área una variable llamada esto_es_una_arena de tipo integer con valor true.

El_Vara

03/04/2014 03:36:43

He probado hacer el desencadenante pero ni idea, no se activar esa variable no se como hacer que al entrar te active y al salir te desactive T.T

El_Vara

04/04/2014 00:53:30

Editado: Ya no me hace falta... he decidido no poner nada.