Saltar al contenido

Más en DLAN: Nuestras Traducciones | Otras Traducciones | Mods y modding | Revisiones y Guías | Videojuegos | Arte | Literatura | Rol y Rol por foro e IRC | Mapa de la web
Foto

Forzar combate?


9 respuestas al tema

#1 Rk.Sayan

Rk.Sayan

    Ancillae

  • Miembro
  • PipPipPip
  • 424 posts

Posteado 20 May 2019 - 12:27 AM

Buenas, aqui otra vez despues de mucho tiempo, quitando el polvo al proyecto de nunca acabar, y me surgió la dudilla.

 

¿Hay alguna función que fuerce el combate?

 

me explico:

 

cuando mi personaje le entra hambre y se daña así mismo no fuerza el combate, es decir, puedo descansar y tal, quiero forzarlo de alguna forma, como si me atacasen, vamos que mi personaje quede alterado hasta que se calme la situación por tiempo.

 

¿existe tal función?, y si no existiera, alguna solución para alterar al pj, que lo ataque algo invisible durante 1 segundo o yo que se , no se muy bien como llevar esto.

 

Gracias.



#2 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1229 posts

Posteado 21 May 2019 - 05:52 PM

mas o menos, lo que podrias hacer es que el PJ ataque un objeto via script, eso haria que entre en modo de combate, y cancelar el mismo con un ClearAllActions con un pequeño DelayCommand. tal vez quieras agregar un "if" para que el Clear solo se ejecute si la accion actual es atacar.

 

tal vez funcione si haces que el PJ se ataque a si mismo ( esto almenos funciona con dotes como Derribo si lo haces manualmente, no lo he intentado via script ), lo que te ahorraria tener que buscar otro objeto valido en el script.


Editado por MenemDoIt, 21 May 2019 - 05:55 PM.

10016077DS1515734551.gif


#3 lavafuego

lavafuego

    Ancillae

  • Miembro
  • PipPipPip
  • 401 posts

Posteado 26 May 2019 - 11:26 AM

..puedes vía script crear una facción hostil al resto, cuando le entre el hambre cambias la facción del pj a esa facción y al descansar recupere la suya. Es lo que se me ocurre a voz de pronto


Editado por lavafuego, 26 May 2019 - 11:27 AM.

http://tierrasdenemar.mi-foro.es/  (abierto para test 79.109.30.79:5121 )


#4 Txibi

Txibi

    Antediluvian

  • Miembro DLAN
  • PipPipPipPipPip
  • 4696 posts

Posteado 31 May 2019 - 09:27 PM

Había una opción de anular acciones, incluida el descanso, pero hace eones que no miro, a ver si miro y  pego.



#5 Rk.Sayan

Rk.Sayan

    Ancillae

  • Miembro
  • PipPipPip
  • 424 posts

Posteado 13 August 2019 - 05:08 PM

Retomo lo preguntado:

 

Bueno la razón de esto es que por que buscaba (y sigo buscando) una solución en cuanto al sol y los vampiros, si sale el sol, te daña , pero por ejemplo si mi personaje se pone a descansar en pleno sol no moriría nunca, mientras le daña se cura, asi que quería dejar al personaje jugador, alterado con la imposibilidad de descansar, ( ya se que hay métodos para ello, poner un contador y tal, que realmente es lo que he hecho), pero es más complejo de lo que parece, busco concretamente esa función por una razón.

 

En mi servidor esta enfocado en el mundo de vampiros, por lo tanto hay horas diurnas y nocturnas, ahora bien, ¿recordais Minecraft?, , si todos los que estan en el servidor se ponen a dormir ala misma hora, pasan las horas de golpe para jugar de día.

 

Esta es una idea parecida, no pasan de golpe , pero si más rapidas, si no hay nadie en combate en el servidor durante el día, las horas van pasando al doble de su velocidad real, hasta ahí todo bien,

pero no puedo hacer lo mismo ,si sale el Sol ,y me quema, pero  no se considera que está en combate, por lo tanto las horas diurnas van el doble de rápido por eso quería forzar el combate con alguna función o algo que lo fuerce.

 

o se me ocurre que alo mejor si detecta de alguna forma que estoy siendo dañado pero no se si hay tal función.

 

 

Respecto a esto si no se os ocurre nada, ya le daré otra vuelta que me vino ala cabeza con el ejemplo de minecraft XD, pero mi siguiente duda es de hoy, y si que me tiene un poco jodido jeje, a ver que os parece.

----------

DUDA 2: esto es un removedor de 2 tipos de efectos , remueve incremento de CA, y relentizaciones, estoy buscando remover modificadores de Ataque, y resulta que no encuentro la constante(creo que no existe), ¿se os ocurre algo?

 

void main()
{
object oPC= GetItemActivator();
if (!GetIsPC(oPC)) return;

//Remove blindness from the PC
effect eLoop=GetFirstEffect(oPC);

while (GetIsEffectValid(eLoop))
   {
   if (GetEffectType(eLoop)==EFFECT_TYPE_MOVEMENT_SPEED_DECREASE)
         RemoveEffect(oPC, eLoop);
        
   if (GetEffectType(eLoop)==EFFECT_TYPE_AC_INCREASE)
         RemoveEffect(oPC, eLoop);
   
   
   eLoop=GetNextEffect(oPC);
   }
}

con esto aumento el NÚMERO DE ATAQUES a 5  durante 60 segundos,

effect eMasAtaque = EffectModifyAttacks(5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eMasAtaque , oJugador,59.9);

pero quiero poder removerlo con otra función, no ponerlo por tiempo, ¿Alguna idea?

 

Gracias.

 

Edito:

se me olvidaba,¿Alguien sabría indicarme donde puedo destripar un conjuro para ver el script?, busco concretamente el de acelerar, estaba pensando que alo mejor puedo encontrar la respuesta ahí ala segunda duda

cuando un se pone las botas de acelerar, se activa la velocidad , aumenta 4 ca natural, y suma un ataque, si me las quito, se q elimina todos esos bonificadores del tirón, basandome en eso, debería de ser posible cancelar el efecto.


Editado por Rk.Sayan, 13 August 2019 - 11:32 PM.


#6 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 223 posts

Posteado 13 August 2019 - 08:38 PM

Si usas un sistema de descanso que solo permita descansar 1 vez cada varias horas, el vampiro con suerte solo se podra curar 1 vez descansando, luego tendra q correr a la sombrita.


Colaborando en:



Nombre servidor: ES) Rebelión del Submundo
Tipo de servidor: rol/acción/jvj
Jugadores: 1-25
Niveles: 1-30
Base literaria: Reinos Olvidados
IP (conectar directamente): sombrasdefaerun.no-ip.org
Foro: http://usn-rol.foroes.org/



 


#7 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1229 posts

Posteado 14 August 2019 - 03:35 PM

sobre lo del combate, creo que seria mas facil que, cuando comience a funcionar el script que aplica el daño al PJ se cree una variable, y al detenerse el daño se remueva, y en el script de descanso miras a ver si la variable esta activa o no para permitir (o no) el descanso. lo mismo para el script que altera la velocidad a la que pasa el tiempo. eso deberia funcionar, si lo que te hemos recomendado a la fecha no lo ha hecho.

 

sobre el EFECTO de acelerar el mismo es hardcoded, no se puede ver o modificar.


10016077DS1515734551.gif


#8 Rk.Sayan

Rk.Sayan

    Ancillae

  • Miembro
  • PipPipPip
  • 424 posts

Posteado 15 August 2019 - 12:17 AM

Correcto, respecto ala duda 1 lo haré como dices, en el momento que dañe por sol, hare el cambio de hora ahí(no se como no se me ocurrió antes, gracias ), no creo que me cueste mucho, así que x ahí no pregunto más,

respecto a la duda 2, he estado probando cosas como:   

void main()
{
object oPC= GetItemActivator();

effect eMasAtaque = EffectModifyAttacks(5); //define efecto 5 ataques
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eMasAtaque, oPC); //aplica 5 ataques

DelayCommand(10.0,RemoveEffect(oPC, eMasAtaque )); //pasados 10 segs, borra los ataques

}

pero este script, solo borra el efecto si es en el mismo script que le doy el efecto, es decir no me deja plantearlo asi:

void main()
{
object oPC= GetItemActivator();

if (GetLocalInt(oPC,  "POWER1")) //si el jugador tiene variable power1, me da los efectos
{
effect eMasAtaque = EffectModifyAttacks(5); //define efecto 5 ataques
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eMasAtaque, oPC); //aplica 5 ataques
}


else //sino tiene power1, me borra los efectos
{
RemoveEffect(oPC, eMasAtaque ); // borra los ataques
}

}

No entiendo por que de esta forma no quiere funcionar, copila bien pero no borra nunca los efectos, en cambio si pusiera en el mismo tramo de parentesis  los efectos, si que los borra, me raya un poco , ¿sabrían decirme por qué ? :S

 

Gracias.


Editado por Rk.Sayan, 15 August 2019 - 12:24 AM.


#9 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1229 posts

Posteado 15 August 2019 - 04:10 AM

No se puede remover un efecto de esa forma, lo que tenes que hacer es crear un bucle buscando los efectos actuales en el PJ y remover el indicado.

 

Si no sabes que efecto es podrias enviarte un mensaje a vos mismo con IntToString ( dentro del bucle ), asi identificas que efecto es ( su Int ) y despues eliminas ese efecto especifico y dejas los demas si gustas.

 

aun asi no se si el modificador en el numero de ataques se aplica en el PJ como un "efecto" propiamente dicho, y no tengo el NWN instalado para probarlo, para la prueba seria mejor que lo intentes con otro efecto como un bonificador de habilidad, y una vez que veas como funciona esto cambias el bonificador de habilidad por el EffectModifyAttacks.


Editado por MenemDoIt, 15 August 2019 - 04:15 AM.

10016077DS1515734551.gif


#10 Rk.Sayan

Rk.Sayan

    Ancillae

  • Miembro
  • PipPipPip
  • 424 posts

Posteado 17 August 2019 - 01:39 AM

Buah, despues de darle vueltas y vueltas caí en una cosa

 

que la función del juego no sirve, y que hay otra que hace lo mismo que si sirve XD

 

al releer el Lexicon nwn

esto es erroneo  EffectModifyAttacks(5);  eso aumenta el número de ataques  , y se supone que con esto, los restauras  a su estado original, RestoreBaseAttackBonus(oPC);  , pero no es verdad, el primero funciona pero el segundo no.

para hacer esto correctamente hay otra función  SetBaseAttackBonus( 5, oPC);  y se restaura con RestoreBaseAttackBonus(oPC);

 

en resumen ambas funciones hacen lo mismo, pero solo una es detenible

segun el lexicon, el primero es un efecto,  tipo conjuro que puede ser puesto permanente o temporal (pero no borrable)

el segundo es permanente, pero borrable, esta confusión me ha llevado la vida XDD

 

dejo un ejemplo pa quien le sirva de ayuda y no se tope con este problema ^^

 

if ( Objeto == "mas_ataque" )//tag del objeto
  {
  
   if(GetLocalInt(oJugador,  "DOY_ATAQUES")) // si tiene variable
      {
       DeleteLocalInt(oJugador, "DOY_ATAQUES");     //borra la variable
       RestoreBaseAttackBonus(oJugador);            //restaura los ataques
      }
  
   else    //sino tiene variable
      {
      SetBaseAttackBonus( 5, oJugador);            //da 5 ataques por turno 
      SetLocalInt(oJugador, "DOY_ATAQUES",1);      //da variable
      }
  
   }

si lo usas una vez, da los ataques, si lo vuelves a usar los quita.

Gracias Menem  y Zoraga, nos vemos en mis futuras dudas :thumb:


Editado por Rk.Sayan, 17 August 2019 - 01:42 AM.




Responder



  


A Bragol. Tus amigos te echan de menos.