Ninfablanca

14/12/2005 17:17:26

Holas, me podeis decir como hago para que los cofres renueven sus tesoros pasado un tiempo?No se si es algo básico o complicado, pero en mi sistema de tesoros solo se renuevan al reiniciar. Gracias.

mviper

15/12/2005 01:21:37

IO lo que hice fue guardar un scrip de nombre mdj_tiempo con este cuerpo:

-------------------------------------------------------------------------------
[code:1:90848fe7e4]
int iHora(int iYear = 99999, int iMonth = 99, int iDay = 99, int iHour = 99)
{
if (iYear > 30000)
iYear = GetCalendarYear();
if (iMonth > 12)
iMonth = GetCalendarMonth();
if (iDay > 28)
iDay = GetCalendarDay();
if (iHour > 23)
iHour = GetTimeHour();

int iHourTimeZero = (iYear)*12*28*24 + (iMonth-1)*28*24 + (iDay-1)*24 + iHour;
return iHourTimeZero;
}
[/code:1:90848fe7e4]
-------------------------------------------------------------------------------------
Le das a guardar (si le das a compilar te dara error), y como veras nada de void main ni anda la pagina en blanco y se pega este script le das un nombre y guardas.

Despues en el cofre solo necesitas incluir unas lineas que son:

----------------------------------------------
Arriba del todo por encima de void main
----------------------------------------------

#include "mdj_viper" //O el nombre que le dieras al anterior script

--------------------------
Despues de definir los objetos, al definir las variables añades esto
---------------------------

int iHor=iHora();
int iTie=GetLocalInt(OBJECT_SELF,"baul")//Baul pues cambiarlo si quieres
int iRes=iTie-iHor;

-----------------------------------
Ahora la condicion para que salga el tesoro
-----------------------------------

if(iRes>=1)
{
//Aqui pon tu script de tesoro
iHor+=5//l 5 son als horas de juego que quieras que pasen antes del respaw (pon las que mas te apetezcan).
SetLocalInt(OBJECT_SELF,"baul",iHor);//NO saques esta linea de este if, porque si no empezara a contar el tiempo cada vez que habran, alla o no tesoro.
}

----------------------------
Listo, para aclararanos, cuando el pj abre el cofre, si e sla primera vez iHor es igual a la hora que sea, iTie=0 por tanto se hace el respaw, una vez echo en el baul se guarda una variable con a hora actual mas las que quieras para el respaw (en este caso he puesto 5), la proxima vez que se abra iHor, sera igual a la hora actual, pero iTie, sera la hora a la que se abrio +5 horas mas, por tanto si no pasaron als 5 horas, iRes sera inferior a 1 y no habra respaw, hasta que pase el tiempo indicado.

Pos eso.

Ninfablanca

17/12/2005 01:57:00

aham... veamos, todo me da 0 errores hasta que uso esta parte

int iHor=iHora();
int iTie=GetLocalInt(OBJECT_SELF,"baul")
int iRes=iTie-iHor;

if(iRes>=1)
{
CTG_CreateTreasure(TREASURE_TYPE_LOW, GetLastOpener(), OBJECT_SELF);//Aqui pon tu script de tesoro
iHor+=5//l 5 son als horas de juego que quieras que pasen antes del respaw (pon las que mas te apetezcan).
SetLocalInt(OBJECT_SELF,"baul",iHor);//NO saques esta linea de este if, porque si no empezara a contar el tiempo cada vez que habran, alla o no tesoro.
}


En la cual me da un error aqui: int iRes=iTie-iHor; Quizá esque lo haya exo yo mal, donde va todo esto en el script de creación de objetos? En mi caso sería x0_o2_anylow no?
El mensaje que me manda es ANALIZANDO LA LISTA DE VARIABLES.

17/12/2005 11:52:02

Faltan el ; al final de alguna de las instrucciones :P

mviper

17/12/2005 13:50:54

Cierto... son las prisas y no esctribirlo antes en el editor del aurora.. jus.

bueno.. en cuanto lo pongan en el editor el propioprograma le ira diciendo donde hacen falta las ; (que suele ser en la linea superior a la linea donde te dice que esta el error)

Gene

18/12/2005 11:36:45

Yo uso este ke es un uso por pj, asi evitamos a ver kien llega antes y demas.


[quote:a750cae974]/*
Gene.
Sabado 18 de Diciembree del 2005.
Script: gn_tesoros
*/

#include "NW_O2_CONINCLUDE"

//Cuerpo Principal.
void main()
{
object oSaqueador = GetLastOpener();
string sContenedor = GetTag(OBJECT_SELF);
int iNivel = 1;
int iCantidad = 1;

if (GetLocalInt(GetModule(),"iListo" + sContenedor + GetName(oSaqueador)) == 0 )
{
iNivel = GetHitDice(oSaqueador);
iCantidad = 5 + d20() + d10(iNivel);
CreateItemOnObject("nw_it_gold001",OBJECT_SELF,iCantidad);
GenerateLowTreasure(OBJECT_SELF);
SetLocalInt(GetModule(),"iListo" + sContenedor + GetName(oSaqueador), 1);
}
}//Fin cuerpo principal.[/quote:a750cae974]

mviper

18/12/2005 14:28:39

Con ese script, si es cierto que consigues un tesoro por persona en cada reset... pero.. no veo que sea muy util para tesoros, me explico:

[i:1f19700070]
"Tras caminar por dentro de la dungeon los 5 aventureros llegana auna camara que parece ser el lugar donde se dejaban las ofrendas al rey muerto.

Uno de los osados aventureros, s eacerca a un cofre lo habre y encuentra unos brillante sobjetos, que rapidamente guarda en su zurron, dejando el cofre vacio.

Tras el llega otro de lo aventureros de su grupo y habre el mismo cofre.. !Esta lleno de tesoros de nuevo¡, tras vaciarlo, otro aventurero del grupo se dirige al cofre, pues le pica la curiosidad y de nuevo... !!Otra vez esta llleno¡¡"
[/i:1f19700070]

Es decir... solo cogen tesoros una vez cada pj... pero solo una vez por reset, en un tesoro epico, aun puede valer... pero en tesoros cutrillos (por ejemplo las alcanatarillas de calimport), como que no le pega, sobretodo si calculamos que por lo que sea el server esta sin resetear un dia y medio.. seguramente el server este un dia entero con todos los cofres vacios... bueno eso ultimo tampoco es tan malo :P

Pos eso... que ese script esta usable para ciertos tesoros determinados (io uso uno muy parecido en dos cofres epicos, aparte de asegurarse de que solo de 3 tesoros en cada reset, esos 3 tesoros los da con un intervalo de al menos 10h de juego, entre ellos).

Ninfablanca

18/12/2005 16:01:57

Muchas gracias ya ta solucionado.

LordBassilus

17/06/2006 13:30:31

Al, stoy utilizando todo tal y como puso mviper y no hay forma de que me regenere el tesoro, digo más, no me lo genera ni la primera vez.
Los scripts estan bien porque al compilar no da ningún error pero pasen o no pasen horas, el cofre donde incluyo ese escript no me genera nada.

17/06/2006 18:09:30

[code:1:6873f3712b]
#include "x0_i0_treasure"

//::///////////////////////////////////////////////
//:: GetHourTimeZero
//:: Copyright (c) 2002 BrotherhoodofZock
//:://////////////////////////////////////////////
/*
modified July 30, 2002
iHourTimeZero calculation modified. iYear-1 replaced by iYear.
In NWN the Year-count starts with 0 (though year 0 doesn't make much sense).
Think of year 0 as the first year (Year 1).
*/
//:://////////////////////////////////////////////
//:: Created By: Timo "Lord Gsox" Bischoff (NWN Nick: Kihon)
//:: Created On: July 07, 2002
//:://////////////////////////////////////////////

// Counting the actual date from Year0 Month0 Day0 Hour0 in hours
int GetHourTimeZero(int iYear = 99999, int iMonth = 99, int iDay = 99, int iHour = 99)
{
// Check if a specific Date/Time is forwarded to the function.
// If no or invalid values are forwarded to the function, the current Date/Time will be used
if (iYear > 30000)
iYear = GetCalendarYear();
if (iMonth > 12)
iMonth = GetCalendarMonth();
if (iDay > 28)
iDay = GetCalendarDay();
if (iHour > 23)
iHour = GetTimeHour();

//Calculate and return the "HourTimeZero"-TimeIndex
int iHourTimeZero = (iYear)*12*28*24 + (iMonth-1)*28*24 + (iDay-1)*24 + iHour;
return iHourTimeZero;
}

//******************************************************************************
//* GT_DestruirContenido
//******************************************************************************
void GT_DestruirContenido(object oUbicado)
{
object oObjeto = GetFirstItemInInventory(oUbicado);

while( GetIsObjectValid(oObjeto))
{
DestroyObject(oObjeto);
oObjeto = GetNextItemInInventory(oUbicado);
}
}

void main()
{
int iDelayGT = 5; //Tiempo en horas de juego para generar de nuevo un tesoro

if (GetHourTimeZero() < GetLocalInt (OBJECT_SELF, "iUltimaApertura") + iDelayGT)
{
}
else
{
GT_DestruirContenido(OBJECT_SELF);
DelayCommand(0.1, CTG_CreateTreasure(TREASURE_TYPE_LOW, GetLastOpener(), OBJECT_SELF));
SetLocalInt (OBJECT_SELF, "iUltimaApertura", GetHourTimeZero());
}

}
[/code:1:6873f3712b]

Prueba este, la funcion CTG_CreateTreasure es del juego y la verdad no se como funciona, pero deberia de ir bien, este script va en el OnOpen del ubicado.

LordBassilus

18/06/2006 03:29:14

Es extraño, porque lo ponga donde lo ponga (sea el modulo q sea) me da una vez los objetos y luego, aunque pase el tiempo no los regenera. ¿Puede ser por la rapidez que le he puesto? porq para probar lo he puesto a 1min/hora.

22/06/2006 10:29:41

Pues me parece muy raro, no se a que puede deberse o_O