Neverwinter Nights
Menú
Gamersmafia es ahora un archivo de solo lectura.

Bajar de nivel

Pues e intentaod hacer un script que baje de lvl a un pj (1 nivel) y no consigo dar [code:1:4c0d3f6475]void main() { object oPlayer = GetLastSpeaker(); 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 = -(iCurrentXP - iXPNeeded); GiveXPToCreature(oPlayer, iXPRequired); }[/code:1:4c0d3f6475] El scritp base es uno que subia de lvl.. lo he intentado adaptar pero parece que no va? sabes donde esta el fallo o en el caso de que no vaya la cosa por aqui como se hace?

Si kieres ke baje a nivel uno… metele -1000000 puntos de experiencia, y verás ke pasa verás…

He estado mirando para que sirve eso del getlevelbyposition y no lo tengo muy claro, estao pensando lo que me has dicho por elmsn del bucle, pues…..niidea pero como sabes como va un bucle te pongo mas o menos la idea, que ahora no se la script exacta,

object opc = getloquesea
int lvl = Gethitdice(opc);
int lvl2 = lvl-1
int iCurrentXP =GetXP(opc); ;

el bucle un do-while, la idea tipo:
while lvl != lvl 2

icurrentxp–;
setxp (pc, icurrentxp);

vaya, ahora que lo pienso se puede ahcer con lo del givexp en el bucle, con un decremento de 1, eso se puede desarrollar asi tambien,

hasta que baje al siguiente lvl y salga del bucle,pero..mmm ahora que loveo bien, no se si sale del bucle, por que no se si lee cada vez el lvl

Pero lo que te he dicho antes, si pones;

If (Gethitdice =2) {setxp(opc, 0);
If (Gethitdice =3) {setxp(opc, 1000);
If (Gethitdice =4) {setxp(opc, 3000);
If (Gethitdice =5) {setxp(opc, 6000);
If (Gethitdice =6) {setxp(opc, 10000);

asi hasta 20, con 172.000 (creo), 40 en caso de xp2, que no tengo, y no te comas el tarro

umh creo si me respondeis 2 preguntas lo puedo hacer..

GetHitDice exactamente que te deveulve?
Existen bucles que decrecen?

un bucle no es mas que un ciclo, que repite incansablemente una tarea que le hayas asignado, hasta que se cumpla la condición para salir de el, no aumentan ni disminuyes. Incrementa o decrementa si le has dicho que incremente algo, con ++ o que decremente con –, estos son operadores de incremento o decremento, si pones untipo de dato y ++ dentro de un bucle ira aumentandolo hasta salir de el.
Gethitdice es ya del nwn, es una funcion que indica los dados de vida del pj, es decir, su lvl, sin tener en cuenta la clase, era algo del d&d, dados de golpe del bicho, para referirse a su level. bien, con lo de arriba te dice if tiene tantos dados de golpe, o sea level, hazle setxp 3000, y como todas las clases van por los mismos px, se quedaria en 2 lvl, facil no? y pasa del bucle, auque si lo pruebas, dime si funciona comprobando la condicion si tiene lvl tal, sigue con el bucle, que me gustaria saberlo.XD

Ya lo saque… simplemente apañando un poco el codigo de arriba…

[quote:02cb2aa713] int x;
int y = iLevel - 1;
int iXPNeeded = 0;
for (x=1; x < y; x++) {
iXPNeeded += (x * 1000);
}

SetXP(GetPCSpeaker(), iXPNeeded);[/quote:02cb2aa713]

En vez de calcular la resta… me di cuenta que con el GiveXPToCreature no se podian dar valores negativos (o en caso contrario, no me iba) pero asi si simplemente calculaba 1 nivel menos del “iLvl” y con el SetXP le doy…

Gracias pro la ayuda igualmente

Los más activos en Scripting