Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.


Pulse Control+D para no olvidar este enlace.
 
Pagina principalÍndicePortalÚltimas imágenesBuscarRegistrarseConectarsePagina principal

 

 Recibir daño en un area si no tienes equipado un objeto

Ir abajo 
3 participantes
AutorMensaje
Jastro
Aprendiz
Aprendiz
Jastro


Masculino
Edad : 38
Localización : Islas Canarias
¿Que me Gusta? : Todo y Nada
Puntos de Actividad : 6374

Cantidad de envíos : 40
Fecha de inscripción : 11/08/2008

Nº. de Miembro : 11
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeJue 16 Abr 2009, 3:31 pm

En este post hay 2 modelos de script, escoge el que mas te interese.

Modelo nº 1

Este script que voy a poner, esta programado por Xiulito.

Creamos este script llamado: damage_agua

Código:
void main()
{
object oPC = OBJECT_SELF;
effect eEffect = EffectDamage(10, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);//el numero 10 es el daño.

int iVariableAreaPC = GetLocalInt(GetArea(oPC), "AGUA_DAMAGE");

if (!GetIsPC(oPC) || GetIsDM(oPC)) return;//Corta el script si es NPC o DM.

DelayCommand(10.0, ExecuteScript("damage_agua", oPC));

if (iVariableAreaPC)
    {
    if (GetTag(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)) != "cascoagua")
        {
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
        }
    }
}

Este script no va a en ningun lado, se deja creado sin más.

y en el on enter del modulo ponemos.

Código:
void main()
{
object oPC = GetEnteringObject();

ExecuteScript("damage_agua", oPC);
}

¿COMO FUNCIONA EL SCRIPT?

Bien, este script es muy sencillo, una vez pues en el onenter del modulo el script, debemos hacer unos pasos para hacer unos sencillos pasos.

Nos dirigimos hacia la area en cuestión que queremos que haya la restricción del objeto, le damos al boton derecho, propiedades del área/avanzado/variables. Una vez allí tienes que añadir la siguiente
variable; AGUA_DAMAGE, tiene que ser una variable "int" y de valor el
que quieras pero siempre tiene que ser mayor a cero.

Si lo has hecho correctamente hará daño 10 cada 10 segundos si no tienes equipado el objeto en cuestion.


Modelo nº 2

Este script esta programado por Marina y Retocado por Xiulito.

Este script, va a en el Onheartbeat del area en cuestión

Código:
void SSP_LatidoSistema(object oPC)
{

//if(GetIsDM(oPC)) return;

object oArea = GetArea(oPC);



    {

        {
        if(GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND &&
        (GetIsAreaNatural(oArea) == AREA_NATURAL ||
        GetIsAreaNatural(oArea) == AREA_ARTIFICIAL) &&
        !GetIsAreaInterior(oArea))
            {

            effect eDamage = EffectDamage( 1, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_ENERGY );
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);

            }
        }

    }
}

void main()
{
//Saltar si ya hay una rutina de latido en progreso
if (GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != TRUE)
    {
    SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", TRUE);//Bloqueo de la rutina

    object oPC =GetFirstObjectInArea(OBJECT_SELF);
    while (GetIsObjectValid(oPC))
        {
        string sCasco = GetTag(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));

        if (sCasco=="escafandra")break;

        effect eDamage = EffectDamage( 1, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_ENERGY );
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);

        oPC = GetNextObjectInArea(OBJECT_SELF);
        }
    SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", FALSE);//Activado del latido
    }
}

y ponemos este script en el onHearbeat del MODULO

Código:
void main()
{
//Saltar si ya hay una rutina de latido en progreso
if ((GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != 1))
{
SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 1);//Bloqueo de la rutina
object oPC = GetFirstPC();
while (GetIsObjectValid(oPC))
.


Última edición por Jastro el Sáb 18 Abr 2009, 2:08 pm, editado 3 veces
Volver arriba Ir abajo
Marina
Patos@
Patos@



Edad : 41
Puntos de Actividad : 5931

Cantidad de envíos : 24
Fecha de inscripción : 01/04/2009

Nº. de Miembro : 65
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeJue 16 Abr 2009, 3:53 pm

Para que mi script funcine correctamente, en el Onheartbeat del MODULO, debe estar incluida esta parte:

Citación :
void main()
{
//Saltar si ya hay una rutina de latido en progreso
if ((GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != 1))
{
SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 1);//Bloqueo de la rutina
object oPC = GetFirstPC();
while (GetIsObjectValid(oPC))

Si ya teneis algo en ese guion, es conveniente añadir esas lineas.
Volver arriba Ir abajo
Jastro
Aprendiz
Aprendiz
Jastro


Masculino
Edad : 38
Localización : Islas Canarias
¿Que me Gusta? : Todo y Nada
Puntos de Actividad : 6374

Cantidad de envíos : 40
Fecha de inscripción : 11/08/2008

Nº. de Miembro : 11
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeJue 16 Abr 2009, 4:17 pm

¿es del modulo entonces? esas lineas que añades, las cambios por:

Código:
void main()
{
//Saltar si ya hay una rutina de latido en progreso
if (GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != TRUE)
    {
    SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", TRUE);//Bloqueo de la rutina

    object oPC =GetFirstObjectInArea(OBJECT_SELF);
    while (GetIsObjectValid(oPC))

¿no?


Última edición por Jastro el Sáb 18 Abr 2009, 2:08 pm, editado 1 vez
Volver arriba Ir abajo
Marina
Patos@
Patos@



Edad : 41
Puntos de Actividad : 5931

Cantidad de envíos : 24
Fecha de inscripción : 01/04/2009

Nº. de Miembro : 65
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeJue 16 Abr 2009, 4:36 pm

No, esas lineas deben estar INCLUIDAS en el onheartbeat del MODULO, a pesar de que tambien forman parte del script general.

Me explico, el script largo va en el onheartbeat del AREA que queramos que afecte el daño, y las lineas que he puesto despues, deben estar incluidas en el onheartbeat del MODULO.
Volver arriba Ir abajo
Jastro
Aprendiz
Aprendiz
Jastro


Masculino
Edad : 38
Localización : Islas Canarias
¿Que me Gusta? : Todo y Nada
Puntos de Actividad : 6374

Cantidad de envíos : 40
Fecha de inscripción : 11/08/2008

Nº. de Miembro : 11
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeJue 16 Abr 2009, 5:25 pm

entendido entonces, lo voy a añadir en mi post, que la gente va directo a los post y no lo miran Smile
Volver arriba Ir abajo
Ender
Patos@
Patos@



Masculino
Edad : 32
Puntos de Actividad : 5672

Cantidad de envíos : 11
Fecha de inscripción : 31/08/2009

Nº. de Miembro : 100
Respeto por el Foro :
Recibir daño en un area si no tienes equipado un objeto Left_bar_bleue100 / 100100 / 100Recibir daño en un area si no tienes equipado un objeto Right_bar_bleue


Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitimeLun 31 Ago 2009, 4:22 am

como os complicais.

Se mete todo en el hearbeat, ya que quereis que suceda cada x tiempo.

comprueba objetos del area, si es pc, comprueba si lleva equipado el casco, si no lo lleva produce daño

poneis el entero y su incremento con el tiempo que querais que suceda, y ya esta.
Volver arriba Ir abajo
Contenido patrocinado





Recibir daño en un area si no tienes equipado un objeto Empty
MensajeTema: Re: Recibir daño en un area si no tienes equipado un objeto   Recibir daño en un area si no tienes equipado un objeto I_icon_minitime

Volver arriba Ir abajo
 
Recibir daño en un area si no tienes equipado un objeto
Volver arriba 
Página 1 de 1.
 Temas similares
-
» "Limpieza de Area inteligente"

Permisos de este foro:No puedes responder a temas en este foro.
Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN :: NWToolSet (Aurora) :: Scripting NWN :: Baul de Scripts-
Cambiar a: