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

sobre el delaycommand y parecidos

tengo una duda terrible, en el DelayCommand(float) se supone que el float debe ser un numero de coma tal como 10.0 o 25.0 que son los segundos, pero… en lugar de estos numeros puedo poner el nombre de una variable flotante?? si la respuesta es afirmativa os pondre un script pa k echeis una mano, que no se pq corno no va!!

Si puedes :

[code:1:3efe765a38]
float fTiempo = 12.2
HacerYoKeSe(ACCION_TYPE_ASABER, GetPCSeaperMismo(), fTiempo);
[/code:1:3efe765a38]

digamos que se declara igual que el resto de variables, pero con float, creo recordar.

mmm, esque hay una funcion que se llama IntToFloat o algo asi

[quote:295f0d86d2]
int iCL=GetCharacterLevel(oPC);
float fCL=IntToFloat(iCL);
float iPenalt= iCL*10.0;

DelayCommand(PALMARLA, iPenalt,oPc); //o ActionWait

       [/quote:295f0d86d2]

Pues esto serviria para que al morir se esperase un tiempo antes de dejar la vida del todo, para que un clerigo pueda usar un hechizo de resurrecion de nivel 15 y no tenerlo como un hechizo tonto en mundos pers. Pero no va jeje

Mmmmmm

Hombre no deberia (o eso creo) fallar.

Pasate por irc #nwntoolset haber si alguien puede echarte una mano en el tema, ahi solemos resolver dudas.

Tambien podrias postear todo el script aqui si quieres, que lo mismo el fallo esta en otro detalle del script

no no, todo el demas script funciona, ya lo probe pero esto es que me trae de duda…

Respecto a la resurreción y demás, ya existen funciones que se encargan de ello aunque si bien es cierto que la belleza de un código bien estructurado y personal , esto… ejm ejm que me voy por las ramas…

Ahí va:

[b:cc9ad297c5][size=18:cc9ad297c5]// Set the destroyable status of the caller!!!!! ATENCIÓN . DICE CALLER, ES UN EVENTO DEL OBJETO , en el caso que nos ocupa OBJECT_TYPE_CREATURE ó 1[/size:cc9ad297c5][/b:cc9ad297c5]

// - bDestroyable: If this is FALSE, the caller does not fade out on death, but
// sticks around as a corpse.
// - bRaiseable: If this is TRUE, the caller can be raised via resurrection.
// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death.
void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE)

[b:cc9ad297c5][size=18:cc9ad297c5]En especial referencia al parámetro Integer : bRaiseable[/size:cc9ad297c5][/b:cc9ad297c5]

Creo que se podría implementar de esta manera, es una opinión..

Sardo Nunspa.

El tema no es ese sardo. Haber por lo que se puso arriba se kiere hacer :

Coger el valor de los dados de golpe del pj (Integer)
Ejemplo 5

Pasarlo a float
Ejemplo 5.0

Multiplicarlo por 10
Ejemplo 5.0 * 10.0 = 50.0

Dar una orden (PALMARLA) a los float tiempo
Ejemplo a los 50.0 segundos

No se para que la utilidad, pero bueno pongo un ejemplo de lo que pudiera ser o una de las cosas donde surigiria el tema que aqui se debate. Si queremos crear un nuevo conjuro en el cual a los X segundos el pj muriera, y su resistencia dependiera de su nivel, tendriamos que obtener el nivel (Integer) y con el calcular el tiempo (float) antes de que este muera.

Lo cual nos lleva a la pregunta de Aragorn :

[quote:1ad523517a=”Aragorn”]
se supone que el float debe ser un numero de coma tal como 10.0 o 25.0 que son los segundos, pero… en lugar de estos numeros puedo poner el nombre de una variable flotante?? si la respuesta es afirmativa os pondre un script pa k echeis una mano, que no se pq corno no va!!
[/quote:1ad523517a]

Mira te pongo un ejemplo Aragorn de un float declarado que uso yo.

Se tratan de unos hongos que puesto en mara-tanwe cuyos efectos, duracion, etc … son variables, y por lo tanto es cuestion de azar y declaro primero el float y luego le asigno un valor.

[code:1:17b8eb0b6a]
void main()
{
object oPC = GetItemActivator();
int nEfecto = d20();
int nAumento;
int nVefecto = nEfecto;
int nCaract = d4();
int nDano = nCaract * 50;
int nDano2 = nCaract * 25;
int nPorcentaje = d100();
int nCaos = d8();
int nAzar = d4();
int nNivel = d2();
float fDuracion;
float fDuracion2;
//:: Determinando float al azar.
//:: Esto es la duracion.
if(nAzar==1)
{
fDuracion = 120.0f;
fDuracion2 = 30.0f;
}
if(nAzar==2)
{
fDuracion = 240.0f;
fDuracion2 = 60.0f;
}
if(nAzar==3)
{
fDuracion = 360.0f;
fDuracion2 = 90.0f;
}
if(nAzar==4)
{
fDuracion = 480.0f;
fDuracion2 = 120.0f;
}
//:: Influencia de la caracteristica de constitucion.
if((GetAbilityScore(oPC, ABILITY_CONSTITUTION)) < 4)
{
nAumento = (GetAbilityScore(oPC, ABILITY_CONSTITUTION));
nEfecto = nVefecto + nAumento;
}
if((GetAbilityScore(oPC, ABILITY_CONSTITUTION)) > 16)
{
int nAumento = (20 - (GetAbilityScore(oPC, ABILITY_CONSTITUTION)));
nEfecto = nVefecto - nAumento;
}
//:: Aplicando efecto al azar.
if(nEfecto==1)
{
effect eCaos = EffectAbilityDecrease(ABILITY_CHARISMA, nCaract);
AssignCommand(oPC, SpeakString("Te crece pelo en la cara, se te achata la nariz y te crecen los colmillos. Ahora tienes un cierto parecido a un Grak."));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCaos, oPC, fDuracion);
}
if(nEfecto==2)
{
effect eCaos = EffectDamage(nDano, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);
AssignCommand(oPC, SpeakString("El dano que sufres mientras tu cuerpo padece extranas mutaciones es elevado, despues tu cuerpo vuelve a la normalidad, si has sobrevivido claro."));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCaos, oPC);
}
if(nEfecto==3)
{
effect eCaos = EffectAttackIncrease(nCaract, ATTACK_BONUS_MISC);
AssignCommand(oPC, SpeakString("No sabes en que consiste realmente lo que te sucede, pero notas un cierto aumento de tu habilidad de combate, como si preveieras el ataque de tus adversarios."));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCaos, oPC, fDuracion);
}
if(nEfecto==4)
{
effect eCaos = EffectSkillIncrease(SKILL_LORE, nCaract);
AssignCommand(oPC, SpeakString("Por tu cabeza circulan gran cantidad de conocimientos, a una velocidad increible, estos van desapareciendo igual que aparecen."));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCaos, oPC, fDuracion);
}
if(nEfecto==5)

No si ya… lo decía para hacer posible una resurrección sobre una criatura.
Respecto a lo que parece que quiere en realidad:

Mensaje de Aragorn…

“Pues esto serviria para que [b:557834679c]al morir [/b:557834679c]se [b:557834679c]esperase un tiempo antes [/b:557834679c][b:557834679c]de dejar la vida del todo[/b:557834679c], para que un clerigo pueda usar un hechizo de resurrecion de nivel 15 y no tenerlo como un hechizo tonto en mundos pers. Pero no va jeje”.

Osea que en teoría la criatura muere, pero no “muere” del todo hasta pasados n segundos; cosa más rara.

  • Si ya ha muerto ( vida 0 o inferior a 0) , se deberán retocar los scripts de muerte de bioware utilizados en el Evento OnDeath de la criatura, ahí se le puede colocar el Delay o hacer lo que se quiera.

Se puede pillar el nivel que se quiera de la criatura mediante GetLevelByClass o GetLevelByPosition, o realizar un bucle del 1 al 3 que sume todos los niveles que tiene en cada clase la criatura ( si se quiere así ). El resultado lo pasamos a float (IntToFloat) y lo multiplicamos por la variable float declarada.

Por ejemplo si queremos que tarde 1 segundo por cada nivel, pués el float a 1.0 ( float multiplicador = 1.0; ) , si son 1.5 segundos pués float multiplicador = 1.5 y así….

Si se quiere hacer que a partir n niveles de personaje el multiplicador cambie, pués ´se podría realizar un loop de 1 hasta total del nivel de la criatura y poner sentencias IF en medio para controlar si cuando es un determinado nivel, utilizar otro multiplicador asignando de nuevo a la varible float un nuevo valor, y así…

Vamos, se puede hacer de varias maneras….

Sardo Nunspa

[code:1:bd05c1bfce]
void palmarla()
{
//las acciones que quieras llevar a cabo
}

void main()
{
int iCL=GetCharacterLevel(oPC);
float fCL=IntToFloat(iCL);
float fPenalt= fCL*10.0;
DelayCommand(float fPenalty, palmarla() );
}
//Lo unico que hice fue convertir la variable float fPenalty en un float ya que usabas un int que era int iCL en vez de usar el float que convirtieras a dicho tipo. Saludos y avisa si no funciona.
[/code:1:bd05c1bfce]

El talento es un regalo, la practica es lo que abre el envoltorio

Los más activos en Scripting