El_Vara31/03/2014 14:45:31Buenas, 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. Cerril31/03/2014 14:58:07El 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_Vara31/03/2014 15:06:38Uhm, 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. Cerril31/03/2014 15:13:29Para 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_Vara31/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] Cerril31/03/2014 15:22:06En 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_Vara03/04/2014 03:36:43He 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.TEl_Vara04/04/2014 00:53:30Editado: Ya no me hace falta... he decidido no poner nada. |