Altar que suba solo a lvl 1!! (desesperado)
Hola a todos, soy nuevo en el Scripteado , y he estado probando un SAcript y nada d nada no llego del todo a conseguirlo
Mi problema es el siguiente… Yo estoy haceindo mi modulo ,y en el habra una zona de entrenamiento y en ella si t la acabas podras subir de lvl (sumando 1000 d Xp) esto me gustaria q se produjera con un objeto ( en mi caso es un altar
) yo hasta aki llego, pero lo q me pasa esq cuando tiro a q solo me suba un lvl osea se q solo a los lvl 1 les suba de lvl y nose como hacerlo..ya llevo asi 2 semanas y nada d nada y e decidido pedir ayuda hace unos dias, gracias d antemano y si sabeis como se hacae ayudarme q me toy volviendo loko!!!
Cherno
Activos en NWN
Los más activos en Scripting
Subforos
Neverwinter Nights
Cherno
Simplemente comprobar que no llega a 1000 de xp y si no llega, darle la xp que le falta para llegar, eso es todo.
Bueno, veras, yo lo haria de esta manera. Cojo el altar:
Hago una primera conversacion pensada para que los personajes de lvl1 puedan subir de nivel del tipo: “Te subire un nivel”.
Hago una segunda conversacion para o bien los personajes de lvl mayor que 2 del tipo: “Ya no puedes subir mas de nivel”.
Para que salga la primera conversacion, seleccionala desde el principio y ve a “Text appears when”. Incluye el siguiente script (es una condicional que sirve para iniciar o no conversaciones):
[code:1:67d9e7257e]
int StartingConditional()
{
int iPlayerXP;
Con el, hacemos un chequeo para ver si el lvl del personaje en cuestion es 1 (menos de 1000 XP). Si lo es, entonces la conversacion aparece. Si no lo es, la conversacion no aparecera.
Despues para subir un lvl al personaje, tienes que escoger el punto de la conversacion donde quieres que suba de lvl, ir a “Actions Taken” e incluir este otro script:
[code:1:67d9e7257e]
void main()
{
object oPlayer = GetFirstPC();
Y yo creo que asi deberia funcionarte. Si no es asi, que alguien me corrija.
Salu2.
Bueno, la segunda conversacion no hace falta que la hagas, que me he rallado.
.
Gracias TheMartyr por tu Script, pero aun no me sale
, pero se que esta muy creca, lo que ma pasa, es que una de dos lo de restringir el nivel ( vamos para los de Nivel 1 ) , lo que me pasa es que aun sigue subiendo, yo lo que he hecho a sido:
Crear una conversacion de dos lineas ( una de decir q le ha subido el nivel y otra q dice q gracias, jeje hay q ser educados no?
)
en la primera linea ( de que dice que le ha subido de nivel ) pongo el condicional que me has puesto aqui arriba:
[code:1:0e9642672a]
int StartingConditional()
{
int iPlayerXP;
object oPlayer = GetLastSpeaker();
iPlayerXP = GetXP(oPlayer);
if (iPlayerXP <= 999)
{
return TRUE;
}
else
{
return FALSE;
}
}
[/code:1:0e9642672a]
Esto en la pestaña de “el texto aparecera cuando…” vamos la que dices tu…
y luego el Script que te sube de nivel lo he puesto en “acciones emprendidas” tambien donde dices tu… lo he puesto en la misma linea que el otro, en la primera de la comversacion.
este es el que me has puesto y yo he puesto:
[code:1:0e9642672a]
void main()
{
object oPlayer = GetFirstPC();
int iLevel = 0;
iLevel += GetLevelByPosition(1, oPlayer);
iLevel += GetLevelByPosition(2, oPlayer);
iLevel += GetLevelByPosition(3, oPlayer);
int iCurrentXP = GetXP(oPlayer);
int x;
int iXPNeeded = 0;
for (x=1; x <= iLevel; x++) {
iXPNeeded += (x * 1000);
}
int iXPRequired = iXPNeeded - iCurrentXP;
GiveXPToCreature(oPlayer, iXPRequired);
}
[/code:1:0e9642672a]
Pues la cosa es que no tiene rstriccion de nivel al parecer, hago algo mal o esta algo mal en el Script…
Puede ser porque sea en la misma linea , es que ya lo veo tan cerca que ya casi esta que… dios, tengo unas ganas de dejar la zona de entrenamiento esta para los Newbies
Graciaspor la ayuda, haber si consigo saber porque no mira la restriccion…
Saludos
Cherno
Uf uf uf, a ver, a ver. Haz lo siguiente. Creas la conversacion, nop? Bien. Hazla de tal manera que quede algo asi como:
HABLA EL PNJ - Bienvenido a la zona de entrenamiento blablabla…
[b:39e0d4fcf3]1a CONTESTACION DEL PJ[/b:39e0d4fcf3] + Gracias blablabla, creo que soy merecedor de subir lvl ya (aqui pon el script para el chequeo de nivel en “Texto Aparece cuando…”. Este thread deberia salir cuando el personaje sea unicamente de lvl1).
CONTESTA EL PNJ - Blablabla… te subo un nivel ahora mismo.
CONTESTA EL PJ +Subeme un nivel por favor (y aqui el script de subir nivel)(END DIALOGUE).
[b:39e0d4fcf3]2a CONTESTACION DEL PJ[/b:39e0d4fcf3] + Gracias y hasta pronto (END DIALOGUE).
Y termina la conversacion. A ver si funciona.
la funcion que se debe usar en el script no es la que tu has escogido, yo no usaria GetFirstPC() ya que eso estaria mal, ni tampoco GetLastSpeaker() si no que usaria GetPCSpeaker(); es mas fiable.
LiRyCaL
el fallo esta en esta linea. Aparte del fallo yo comprobaria si el objeto ( el PJ ) es valido con la funcion GetIsObjectValid() y poniendo un SendMessageToPC() para comprobarlo, este tipo de comprobaciones ayudan mucho mientras se programa y se deben de eliminar en la version final del programa, ya que simplemente se consiferan una ayuda al programador.
void main()
{
object oPlayer = GetFirstPC();
Muchas gracias a los dos , ya he conseguido hacer q rule esto
:)
alfinal me va poniendo como dice LiRyCaL, GetPCSpeaker(); en lugar de GetFirstPC() y GetLastSpeaker() y asi tira, alfinal qedaria asi (para futuros interesados
)
en la restriccion de lvl :
[code:1:4275803d9e]
int StartingConditional()
{
int iPlayerXP;
object oPlayer = GetPCSpeaker();
iPlayerXP = GetXP(oPlayer);
if (iPlayerXP <= 999)
{
return TRUE;
}
else
{
return FALSE;
}
}
[/code:1:4275803d9e]
y en la subida de nivel :
[code:1:4275803d9e]
void main()
{
object oPlayer = GetPCSpeaker();
int iLevel = 0;
iLevel += GetLevelByPosition(1, oPlayer);
iLevel += GetLevelByPosition(2, oPlayer);
iLevel += GetLevelByPosition(3, oPlayer);
int iCurrentXP = GetXP(oPlayer);
int x;
int iXPNeeded = 0;
for (x=1; x <= iLevel; x++) {
iXPNeeded += (x * 1000);
}
int iXPRequired = iXPNeeded - iCurrentXP;
GiveXPToCreature(oPlayer, iXPRequired);
}
[/code:1:4275803d9e]
En serio chicos muchas gracias por ayudarme, no sabeis lo que me habeis quitado de encima… llevaba asi casi 3 semanas .
Os quiero mucho
(como amigos
)
Cherno
Ya sabia yo que habia algun fallo en los scripts (no me sonaba muy bien lo que habia puesto) pero no podia comprobarlo desde la facul.