M_v_M30/04/2007 16:07:27Bueno, un nuevo reto para los scripters, que luego tendrá una solución bastante sencilla, pero yo que soy un cazurro, no la saco: (a ver si alguno se pica y me ayuda xD)-¿Cómo haría para que un PJ al morir en un módulo, directamente NO PUEDA RESUCITAR? (MP al canto, llanamente) Pensé en el sistema de aquí, de llevarte a un área aislada, pero no me convenció demasiado... -¿Y para que los cofres aleatorios no den nunca armas superiores a +2? ¿Se puede hacer una selección de los objetos-oro que todos los cofres dan? Sí, no tengo ni zorra de guiones xD. Y he estado buscando y tampoco encuentro lo que busco. Si algún alma caritativa me ayuda, yo como siempre, a vuestros pies. :wink: M_v_M01/05/2007 12:22:14Lo de la muerte, solucionado a lo cutre (ya decía yo que algo así era), simplemente he quitado el script por defecto de on playerdeath... El problema es que creo que si por casualidad ese módulo se reiniciara con el PJ muerto, saldría vivo de nuevo. Pero no tengo ni idea.Así que he pensado que al morir, a ese PJ se le diera un objeto de trama, como aquí la mortalidad, y el sistema lo reconociera al entrar, y si lo tiene, llevarlo a ese Limbo tan bonito. Pero de nuevo, no se ni por dónde empezar...Kowaaa, Althoooor *bebé berreando* AlthorDeMalavir01/05/2007 15:20:33Respecto a lo de los tesoros el nwn implementa un sistema que tu pones en un area a parte unos cofres y metes hay lo que quieres que salga de tesoro en tu modulo, yo no lo uso asi que no se como funciona, tendrias que consultarlo por algun lado.Respecto a lo de la muerte para lo que pides solo hay que quitar una funcion del script del onPlayerDeath del modulo, la funcion es la que hace que te salga la ventanita para regenerar,a parte de eso, si el tipo sale y entra volvera a estar vivo por lo que hay que añadirle como bien dices o un objeto que lo identifique como muerto o meter una variable en la base de datos para no usar objeto alguno, asi si entra de nuevo, en el script de OnplayerEnter del modulo se le detecta, se le mata y se lemanda donde quieras. Puesto que lo de morir se parece bastante a lo que hay en mi modulo simplemente borrando alguna cosilla de lo mio se puede adaptar a lo tuyo asi que te pongo los scripts necesarios. EL siguiente script iria en el evento OnPlayerDeath, el script hace que no salga la ventana de regeneracion y ademas coloca la variable en el pj que indica que esta muerto. [code:1:8b60011cfa] //:://///////////////////////////////////////////// //:: Death Script //:: NW_O0_DEATH.NSS //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* This script handles the default behavior that occurs when a player dies. BK: October 8 2002: Overriden for Expansion */ //::////////////////////////////////////////////// //:: Created By: Brent Knowles //:: Created On: November 6, 2001 //::////////////////////////////////////////////// /* void ClearAllFactionMembers(object oMember, object oPlayer) { // AssignCommand(oMember, SpeakString("here")); AdjustReputation(oPlayer, oMember, 100); SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad object oClear = GetFirstFactionMember(oMember, FALSE); while (GetIsObjectValid(oClear) == TRUE) { ClearPersonalReputation(oPlayer, oClear); oClear = GetNextFactionMember(oMember, FALSE); } } */ void Raise(object oPlayer) { effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION); effect eBad = GetFirstEffect(oPlayer); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer); //Search for negative effects while(GetIsEffectValid(eBad)) { if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS || GetEffectType(eBad) == EFFECT_TYPE_DEAF || GetEffectType(eBad) == EFFECT_TYPE_PARALYZE || GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL) { //Remove effect if it is negative. RemoveEffect(oPlayer, eBad); } eBad = GetNextEffect(oPlayer); } //Fire cast spell at event for the specified target SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer); } void main() { object oPlayer = GetLastPlayerDied(); // * increment global tracking number of times that I died SetLocalInt(oPlayer, "NW_L_PLAYER_DIED", GetLocalInt(oPlayer, "NW_L_PLAYER_DIED") + 1); // * BK: Automation Control. Autopcs ignore death if (GetLocalInt(oPlayer, "NW_L_AUTOMATION") == 10) { Raise(oPlayer); DelayCommand(1.0, ExecuteScript("crawl", OBJECT_SELF)); return; // Raise and return } // * Handle Spirit of the Wood Death string sArea = GetTag(GetArea(oPlayer)); // * make friendly to Each of the 3 common factions AssignCommand(oPlayer, ClearAllActions()); // * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer); } if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer); } if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10) { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer); } //DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH)); SetCampaignInt("DB_MUERTES", "SM_PJMUERTO", 1, oPlayer); } [/code:1:8b60011cfa] AlthorDeMalavir01/05/2007 15:29:41El siguiente script iria en el evento OnClientEnter es para si sale del juego muerto cuando vuelva a entrar siga muerto y ademas lo lleve a otro lugar, tambien funciona si se reinicia el modulo. Crea un punto de ruta con la etiqueta SM_LIMBO en el area donde quieras que termine el pj.[code:1:21f277f7dc] void main() { object oPlayer = GetEnteringObject(); object theWaypoint = GetWaypointByTag("SM_LIMBO"); AssignCommand(oPlayer, JumpToLocation(GetLocation(theWaypoint))); effect eDeath = EffectDeath(FALSE, FALSE); int iVarMuerte = GetCampaignInt("DB_MUERTES", "SM_PJMUERTO", oPlayer); if(iVarMuerte == 1) DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPlayer)); } [/code:1:21f277f7dc] M_v_M01/05/2007 15:33:31De nuevo me toca quitarme el sombrero xD. Lo pongo y a ver como va la cosa... Por cierto, también funciona si el server se cuelga/reinicia?AlthorDeMalavir01/05/2007 15:38:36he modificado el script asi qu ecopialo bien, si fun ciona si reinicia.AlthorDeMalavir01/05/2007 15:40:27nuevo edicion, hyabia un error xD, no esperaba que lo viese tan pronto.M_v_M01/05/2007 15:47:53Paren las máquinas!! xD Al final me vuelves loco :P Vuelvo a copiar y pegar, mister.M_v_M01/05/2007 15:50:58Otra cosilla... Se supone que el PJ muere, y se queda en el sitio, sin que aparezca la ventanita de opciones, por lo tanto, sin poder regenerar por su cuenta, sólamente mediante el uso de un clérigo...Tengo pensado que si viene un clérigo y lo resucita, el PJ muerto pierda un nivel inmediatamente (más o menos, hacerlo lo más fiel a mesa posible), o ninguno, según el conjuro de resurrección usado... Sería esto posible? *Se disculpa de antemano por ser tan plasta* AlthorDeMalavir01/05/2007 16:10:14Si, eso es posible, seria cuastion de modificar los scripts de los conjuros de revivir a los muertos y resureccion para que al usarlos sobre un pj le quite la experiencia o niveles oportunos.Deberias intentar conseguir un programador yo no puedo hacerte los scripts de tu modulo xD, sobre todo sino los tengo yo ya hechos o si a mi me sirven depoco lo que tu pretendas hacer en tu modulo, yo te ayudare en lo que buenamente pueda, esto de la experiancia me supone una inversion de tiempo que no es que disponga y a mi modulo no le sirve de nada :P M_v_M01/05/2007 16:25:59Lo de que necesito un programador empieza a ser evidente cada vez más xDDD.Bueno, me pondré a toquitear, a ver que saco (aparte de tener que reinstalar el juego porque me cargue algo). Gracias por lo del sistema de muertes! M_v_M08/05/2007 20:34:55Lo he estado probando y algo falla, no sé qué es :? El caso es que si un PJ muere, vale, no sale la pantalla de resurrección, pero al salir y entrar al servidor de nuevo, no se va al punto de ruta SM_LIMBO.Y si se le resucita, sale y vuelve a entrar, entra muerto :? AlthorDeMalavir08/05/2007 22:31:36Cierto, el primer error es debido a que priemro hay que revivir al pj antes de mandarlo al limbo y una vez alli volverlo a matar para evitar que salga entonces y espere un reinicio.El segundo error se debe a que falta un script en el OnHeartbeat del modulo que verifique que el pj ha sido resucitado y por tanto elimine la variable que guarda que habia muerto. Son detalles que se escapan cuando lo programas pero no lo pruebas :P Mañana te lo miro y lo termino. M_v_M08/05/2007 22:44:37Si llego a terminarlo y colgarlo, te hago una estatua o algo (ubicado, digo :P )kowalevskaya09/05/2007 10:08:45[quote:c2fc64eb7f="M_v_M"]Lo he estado probando y algo falla, no sé qué es :? El caso es que si un PJ muere, vale, no sale la pantalla de resurrección, pero al salir y entrar al servidor de nuevo, no se va al punto de ruta SM_LIMBO.[/quote:c2fc64eb7f]Yo lo tengo hecho, poniéndole una calavera de trama y al entrar, si el PJ tiene la susodicha calavera, se bota al limbo. Lo que comentas que quieres hacer, viene en las HCR2 (Hard Core Rules 2). Si se te da bien el inglés, podrás largar al personaje al limbo dejando en su ubicación de muerte un "gonito" cuerpo con parte (o todas) sus pertenencias. [list:c2fc64eb7f]http://nwvault.ign.com/View.php?view=Scripts.Detail&id=701[/list:u:c2fc64eb7f] M_v_M09/05/2007 22:33:49Bueno, de aquí lo mismo puedo sacar algo :D Gracias de nuevo, Kowa... Esperando a Althor me quedo xD.kowalevskaya10/05/2007 00:00:40Ná... lo que sí, si me permites el consejo... mírate bien todo lo de las HCR2, porque despiezar los sistemas de scripts que aparecen, es un verdadero #oñazo... y la verdad está muy completo y es configurable... eso sí, todo en la lengua de Shakespeare.M_v_M12/05/2007 13:51:06Althooor *eco* :PAlthorDeMalavir12/05/2007 22:00:48ando algo liado haber si mañana puedo.M_v_M22/05/2007 16:35:47Mañana de que día? xD.AlthorDeMalavir23/05/2007 13:54:01Aqui el script que se ha de colo car en el OnHeartBeat del modulo par que si los resucitan pues que no entren muertos la siguiente vez, lo que hace es poner a cero la variable que inquica que murio.[code:1:f9c72297d2] void main() { //Saltar si ya hay una rutina de latido en progreso if ((GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != 1)) { SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 1);//Bloqueo de la rutina object oPC = GetFirstPC(); while (GetIsObjectValid(oPC)) { //Sistema para evitar que salgan muertos y entren vivos. int iPJFallecido = GetCampaignInt("DB_MUERTES", "SM_PJMUERTO", oPC); if(GetCurrentHitPoints(oPC) > 0 && iPJFallecido == 1) { SetCampaignInt("DB_MUERTES", "SM_PJMUERTO", 0, oPC); } oPC = GetNextPC(); } SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 0);//Activado del latido } } [/code:1:f9c72297d2] AlthorDeMalavir23/05/2007 14:00:39El error de que sale y vuelve a entrar y no va al limbo no lo veo claro, deberia funcionar, tal vez no le de tiempo a llevar al PJ antes de matarlo, rueba a subir el tiempo del DelayCommand en el script del evento OnclienEnter, ponlo en 5.0 o algo asi.M_v_M04/06/2007 16:46:01Cuando el curro y el mapeo me deje algo de tiempo libre lo toquiteo. Mil gracias, Althor y Kowa :DNefutari07/06/2007 14:08:05Yo el HCR no te lo recomiendo para dejar monigotes, a menos que quieras tirarte un buen rato con el raton para encontrarlo, solo funciona bien si dejas activado que pierdan todo su inventario.Es una putada todo el inventario, y al desactivarlo te crea un monigote utilizable, y una zona pequeña, sobre la zona de la cabeza que es la que se debe pinchar para poder coger el cuerpo, una jodienda en toda regla, solo por ayduar meto unas aclaraciones que hicieron en otro foro de scripters para este sistema, por si aun asi quieres utilizarlo. [code:1:06ee1b44fc] PWEXP: Cambia las opciones de experiencia, por defecto 0, si lo cambiamos llevara la exp de un mundo persistente GHOSTSYSTEM: Cambiarlo si quereis que al morir podais recuperar vuestro cuerpo en forma de fantasma MATERCOMP: Cambiadlo si teneis el addon de habilidades nuevas SINGLECHARACTER: Cambiadlo si quereis que los jugadores tengan solo un PJ LOGINMESSAGE: Mensaje de bienvenida del server DEATHOVERREBOOT: Para desconectar si estas muerto y salvarte de la muerte.. no lo cambieis SUMMONTIME: COn 1 los bichos invocados no duraran mas que lo que tengais de level, 0 invocaion por defecto de nwn REALFAM: Da de comer al familiar y no se recupera del todo HCRTRAPS: necesitas tiradas de busqueda para encontrar trampas LEVELTRAINER: Con 1 se requieren entrenadores para subir de nivel LEVELCOST: EL pj empieza con tal exp GIVELEVEL: DA el nivel al PJ DMRESERVE: deja un hueco al DM en partidas online, o dos, o tres... PKTRACKER: busca asesions PK de jugadores, por defecto si matas a 5 te exhan del serv al 6 TELLONPK: con 1 todos se enteran de que hubo un asesinato WANDERSYSTEM: con 1 hay una probabilidad mientras descansas de que aparezca un monstruo atacandote, por defecto no aparecen GODSYSTEM: COn 1 puedes rezar a tu dios y volver a la vida DEATHSYSTEM: en 0 volveremos al sistema basico de morir de nwn (sucks) BLEEDSYSTEM: metodo de desangrarse de HCR, a 0 hp te quedas tonto y con numero negativos comienzas a morir LOOTSYSTEM: COn 1 cualquiera puede robar las pertenencias de tu cuerpo muerto (esto jode mucho) REZCHANCE: en %, suerte de que tu dios te resucite REZPENALTY: con 1 al morir pierdes medio nivel LIMBO: con 1 al morir vamos al limbo, donde podemos rezar y volver a la vida, con 0 jeje, ahi te quedas en el camino RESTSYSTEM: con 1 necesitareis estar tranquilos para descansar, tener la panza llena y las horas de rigor RESTBREAK: tiempo entre descanso y descanso (en horas NWN) RESTARMORPEN: penalizacion al descansar por armaduras gordas LIMITEDRESTHEAL: con 1 nunca recuperaremos toda la vida al descansar. (n del autor: si lo ponemos a 0 para que estan los clerigos entonces?) BEDROLLSYSTEM: Se necesita un saco de dormir para el descanso STORESYSTEM: le da un poco mas de facilidad a los personajes nuevos con respecto a la armadura y compra de objetos FOODSYSTEM: Se necesita comida para descansar BURNTOUCH: Con 1, las antorchas duraran 1 hora de vida, a 0 seran imperecederas HUNGERSYSTEM: CON 1, necesitas comida y agua para no morirte de hambre por el camino FATIGUESYSTEM: COn 1, un personaje puede sentirse mal si no descansa lo adecuado HCREXP: Aplica la exp real del HCR, en 0 la deja como antes BASEEXP: regula esto para saber lo que recibe un jugador por experiencia al matar bichos, de ti depende poner la velocidad de tu modulo, ponlo bajo si quieres que sea mu mu chungo BONUSEXP: lo mismo de lo mismo, bonus de experiencia, mas grande, mas rapido subes de nivel HCREAD: Ponlo a 1 y go! [/code:1:06ee1b44fc] Por si aun asi te sirve de algo, yo lo di por imposible, lo del cuerpo. |