Saludos a todos, abro este tema por que he visto que en la EE se puede cambiar la altura de los personajes, y la pregunta es, ¿alguien sabe como dar la opción a través de script en alguna conversación que se pueda cambiar la altura a gusto del jugador?, ¿o si saben si existe algún sistema en el vault? que yo he buscado pero no he encontrado.

Altura de personajes
#1
Posteado 16 January 2020 - 02:12 AM
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/
#2
Posteado 22 January 2020 - 09:00 PM
¡Saludos!
Avernum a vuestro servicio.
Creo que tengo lo que buscas.
A continuación script (con comentarios) para aumentar el tamaño de un personaje jugador.
Es sólo visual, lo que quiere decir que el NWN tratará al personaje como si tuviera el 100% del tamaño normal. Esto es cosa del motor y no se puede hacer nada.
//:://///////////////////////////////////////////// //:: TIERRA DE HEROES - sf_aumentar_tam //:: Copyright (c) 2018 Fran Luque (Avernum). //::////////////////////////////////////////////// /* On Action Taken, Aumentar tamaño del personaje jugador un 10% Toma el valor de iEscalaActual. Si es 0 lo pone a 100 por defecto (100% del tamaño, o sea sin cambios) Capado a 80%-150% por defecto */ //::////////////////////////////////////////////// //:: Created By: Fran Luque //:: Created On: 29/12/2018 //::////////////////////////////////////////////// #include "pervars_inc" //::////////////////////////////////////////////// void main() { //Jugador con el que estamos hablando object oPC = GetPCSpeaker(); //Tomar valor de escala actual (Si no usas pervars_inc, cambiar GetPCInt(oPC, "ESCALA") por GetLocalInt(oPC, "ESCALA"); int iEscalaActual = GetPCInt(oPC, "ESCALA"); //Si es 0, establecer un valor por defecto if (iEscalaActual<=0){iEscalaActual=100;} //Sumar 10 a la escala (+10%) iEscalaActual+=10; //Capar. Capar es opcional, y no hay nada que impida a los jugadores medir 500 metros de altura o ser tan pequeños que no se vean. Ver mas abajo. if (iEscalaActual>=150){iEscalaActual=150;} //Guardar persistentemente el valor de escala. Al entrar en el server, se aplica la escala aqui establecia, o no se hace nada si es 0. SetPCInt(oPC, "ESCALA", iEscalaActual); //Aplicar la transformacion de escala //Es SOLO VISUAL, esto es cosa del motor del NWN... Los pj a todos los efectos menos el visual tendran un tamaño normal. SetObjectVisualTransform(oPC, OBJECT_VISUAL_TRANSFORM_SCALE, iEscalaActual * 0.01); //Esto es para dar una indicacion al jugador que la escala se ha aplicado. No hace falta. ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION), oPC); }
Para disminuir tamaño, crea otra linea de conversación, guarda este script con otro nombre y pon iEscalaActual-=10 en lugar de iEscalaActual+=10 y if (iEscalaActual<80){iEscalaActual=80;} si lo quieres capar en vez de la linea actual.
Se puede poner cualquier valor y en definitiva cambiar el script para cambiar cualquier visual (OBJECT_VISUAL_TRANSFORM_ROTATE_* , OBJECT_VISUAL_TRANSFORM_TRANSLATE_*, etc)
Ésto lo uso en mi servidor Tierra de Héroes. Iré subiendo scripts chulos que voy haciendo.
Adjunto módulo para probar el sistema, con pnj, conversación (con extras gracias a Scarface) y scripts, con las opciones de cambiar la cabeza, color de pelo, altura, fenotipo (gordo/flaco), tatus, etc.
El efecto es persistente (requiere o meter en base de datos o en items, como pervars_inc).
Usar con CEP 2.65+ para ver todas las cabezas disponibles por razas y géneros.
Link al modulo de ejemplo:
https://drive.google...iew?usp=sharing
Editado por Avernum, 25 January 2020 - 11:52 AM.
#3
Posteado 24 January 2020 - 04:20 AM
Excelente, lo estaré probando dentro de estos días, gracias.
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/
#4
Posteado 26 January 2020 - 05:43 AM
¿Como hago para incluir pervars_inc?. no compila sin eso.
PD: No pude descargar el modulo de pruebas, da problemas la pagina.
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/
#5
Posteado 27 January 2020 - 08:58 PM
La libreria pervars_inc sirve para tener datos persistentes introduciéndolos en un item que debe llevar el personaje jugador.
Funciona igual que SetLocalInt y GetLocalInt en mi script.
Puedes quitar o comentar la linea #include "pervars_inc" y cambiar GetPCInt por GetLocalInt y funciona igual, solo que sin persistencia. Todo lo que pongas usando las funciones de pervars_inc sobrevivirá a los resets de servidor e incluso entre servidores, sin usar la base de datos del NWN, siempre que se guarde el personaje (automático al salir del juego)
En el OnClientEnter de mi modulo, miro si los personajes que entran tienen la variable y actualizo su altura, color de ojos, si se les ve o no el yelmo, capa, les pongo los henchmen si tenian etc.
Tengo una versión modificada de persvars_inc incluída en el modulo de prueba que pongo en este post, si quieres la original aquí tienes el enlace:
https://neverwinterv...cript-libraries
Mirror: https://neverwinterv...cript-libraries
Pongo otro enlace al modulo de test del pnj Otorgador de Aspecto, no sé por qué no te funciona el anterior. Lo he probado desde varios ordenadores y todo ok.
Mirror: https://mega.nz/#!IZk0zS4A
EDIT: Por si acaso te pide una clave de cifrado para descargar el modulo de test, es: lYlkYT4gvaslg0q3jSKAafUSqdLxuf-McVzpfsgScag
O pincha en https://mega.nz/#!IZk0zS4A!lYlkYT4gvaslg0q3jSKAafUSqdLxuf-McVzpfsgScag
Editado por Avernum, 27 January 2020 - 09:03 PM.
#6
Posteado 29 January 2020 - 08:11 AM
Gracias, lo probaré esta tarde (ahora si pude descargar el de pruebas)
Por cierto, me quedan un par de dudas que quizá resuelva probando, pero según miraba, el tag del item que lleva el pj es ¿"Player_ID_Token"?, lo puedo cambiar por otro item supongo. Y lo otro, ¿como hago para que en OnClientEnter mire si tienen la variable y los actualize?.
Editado por Zoraga, 29 January 2020 - 08:11 AM.
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/
#7
Posteado 29 January 2020 - 08:09 PM
Si, uso el item con tag "Player_ID_Token" aprovechando el item que usa el sistema 'Unique Player ID System.' de Adam Walenga (pillado del Vault y modificado para Tierra de Heroes).
Ejemplo OnClientEnter (quitando lineas que no vienen al caso):
Aprovecho para meter unas lineas como ejemplo de uso de una extension de la base de datos del juego: NBDE (Natural Bioware Database Extension).
La NBDE se usa igual que la base por defecto pero es muchisimo mas rapida y eficiente.
#include "pervars_inc" void main() { object oPC = GetEnteringObject(); if (GetIsDM(oPC)){return;} //Lealtades, dioses, titulos, etc... string sLealtad = ""; int iFX; effect eVisEyes; int iToggleYelmo; object oCasco = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); int iEscalaActual = GetPCInt(oPC, "ESCALA"); int iFenotipoActual = GetPCInt(oPC, "FENOTIPO"); //Reponer efectos iFX = NBDE_GetCampaignInt(NOMBREBDFXOJOS, "FXOJOSPJACTUAL", oPC); if (iFX>0){ eVisEyes=EffectVisualEffect(iFX); ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eVisEyes), oPC); } //:://////////////////////////////////////////////----------------------------------------------------------------------------------------------------- //Reponer Toggle Yelmo iToggleYelmo = NBDE_GetCampaignInt(TOGGLE_YELMO_DB, "YelmoToggle", oPC); oCasco = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); if (iToggleYelmo==TRUE) { if (GetIsObjectValid(oCasco)){ SetHiddenWhenEquipped(oCasco, TRUE);} } else { if (GetIsObjectValid(oCasco)){ SetHiddenWhenEquipped(oCasco, FALSE);} } //:://////////////////////////////////////////////------------------------------- //Reponer tamaño PJ if (iEscalaActual!=0) { SetObjectVisualTransform(oPC, OBJECT_VISUAL_TRANSFORM_SCALE, iEscalaActual * 0.01); } //:://////////////////////////////////////////////------------------------------------ if (iFenotipoActual!=0) { SetPhenoType(iFenotipoActual, oPC); } //:://////////////////////////////////////////////-------------------------------------- ... etc }
Otro uso de pervars_inc: Contar numero de bichos matados por el jugador por raza.
Esto se pone en tu script OnDeath de las criaturas
// ================================================================================================================ // LOGROS POR KILLS (Raza) // ================================================================================================================ //::////////////////////////////////////////////////::////////////////////////////////////////////// //Para Logros de Matar Bichos, por raza. Usa Pervars_inc, usea que si no se guarda el pj no se guarda el progreso. int DevolverKillsRaza(object oPC, int iRaza) { return GetPCInt(oPC, "RAZAKILLS_"+IntToString(iRaza)); //RAZAKILLS_xx } //::////////////////////////////////////////////////::////////////////////////////////////////////// void ActualizarKillsRaza(object oPC, int iRaza) { int i = DevolverKillsRaza(oPC, iRaza); i++; SetPCInt(oPC, "RAZAKILLS_"+IntToString(iRaza), i); SendMessageToPC(oPC, "<c ¢{>"+GetNombreRaza(iRaza)+" muertos:</c> ["+IntToString(i)+"]"); } //::////////////////////////////////////////////////::////////////////////////////////////////////// object oKiller = GetLastKiller(); //Para logros de exterminio de criaturas int iRaza = GetRacialType(OBJECT_SELF); ActualizarKillsRaza(oKiller, iRaza);
En general uso pervars_inc para guardar datos referentes al jugador y uso NBDE para datos mas generales.
#8
Posteado 30 January 2020 - 09:10 AM
Vale, muchas gracias, creo que ya lo pillé, lo he probado y hasta el momento funciona, incluso de forma persistente, al menos cuando lo subo desde un servidor local. Me falta probar subiendo el modulo a internet, pero aún no lo puedo probar de esa forma hasta que actualize mi windows en el PC, ya que desde mi portatil se ralentiza demasiado subiéndolo por internet y desde el PC no puedo actualizar el juego, asi que luego de eso podré ver su funcionamiento definitivo, muchas gracias por la ayuda, este sistema y sus variantes dan para mucho.
Editado por Zoraga, 30 January 2020 - 10:33 AM.
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/
#9
Posteado 19 February 2020 - 08:32 AM
Perdón por seguir con este tema, no se si abrir otro tema al respecto, pero, ¿sabe como usar este sistema en el evento OnSpawn de una criatura para que aparezca mas grande (o mas pequeña)? vi que se puede pintar criaturas en un area y cambiarles la escala, pero en la paleta no se puede, por lo que no puedo hacer encuentros de criaturas de esta manera.
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/
#10
Posteado 19 February 2020 - 11:14 AM
No lo he testeado pero es sencillo. Tan solo debes hacer una cosa:
Añadir ésto en el evento onspawn de la criatura:
if (GetLocalInt(OBJECT_SELF, "Random_Escala") == FALSE) { int iAltura = GetLocalInt (OBJECT_SELF, "altura"); SetObjectVisualTransform(OBJECT_SELF, OBJECT_VISUAL_TRANSFORM_SCALE, iAltura * 0.01); }
Y añadirle a la criatura una variable llamada "altura" y ponerle pues lo deseado. En mi mente aquí se usa la misma escala de variable que en el script original:
Si quieres tamaño normal int iAltura = 100. (Esto es por el calculo de *0.01, se puede cambiar)
Si quieres que mida más, pues pones int iAltura = 120...
O si quieres que mida menos pues lo mismo int iAltura = 80.
Se puede hacer tambien para que sea Ramdom.
O también se puede poner una cantidad fija en el script y no poner variables a la criatura.
O tambien elegir una cantidad según la etiqueta de la criatura...
Pero bueno yo creo que la mejor es que pongas la variable que te guste en cada criatura.
De hecho, si te digo la verdad a mi no me gusta ponerle mas bajo de 80 o más alto de 120 en las criaturas, al menos en las razas básicas, se me hacen o muy pequeñas o muy enormes.
Testéalo a ver si funciona, que yo soy mucho de fallo y error.
Editado: He modificado en la forma que detecta si tiene o no la variable. Ahora no debería fallar.
Editado por Obsidiana, 19 February 2020 - 01:37 PM.
#11
Posteado 20 February 2020 - 07:51 AM
Muchas gracias, lo estaré probando, es para criaturas principalmente, así puedo hacer una mayor variedad de boses temibles, crear un Tarrasque, y tambien pensaba hacer un pueblo de gente pequeña, bueno en realidad hay muchas otras ideas que tengo en mente, se agradece.
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/
#12
Posteado 23 February 2020 - 06:32 AM
Ahí probando aplique el script para hacer que los familiares y compeñeros animales de los personajes vayan creciendo según el nivel, desde cría a adulto, quedó de maravilla.
Asi que bueno, luego de probar y testear de diversas otras formas, funciona todo bien, tanto lo de Avernum como lo de Obsidiana, agradezco la ayuda de ambos.
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/
Responder
