JVLIVS CAESAR MODS FORUM
Estimado usuario invitado: Si se registra/conecta podrá tener la mejor ventaja, postear en el foro, ya que los invitados solo pueden leer.

JVLIVS CAESAR MODS FORUM

Imperium III Mods Forvm. Último Mod - MCI 9.0!
 
ÍndiceÍndice  FAQFAQ  BuscarBuscar  RegistrarseRegistrarse  ConectarseConectarse  

Comparte | 
 

 Ayuda, No consigo averiguar en que fallo

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Ayuda, No consigo averiguar en que fallo   Jue Dic 15, 2016 11:21 pm

He estado creando un objeto parecido a esto de Capitan<Heroe<Leyenda (o cmo sea)
La diferencia que no se como hacer para que se equipe autometicamente a cualquier soldado de una raza en concreto.. (si me lo explicais ademas de encontrarme la falla mejor XD pero no preocupa tanto)

El objeto se llama Esencia Zombie, la raza x supuesto "Zombie" XD
se trata de un objeto similar a un ankh;
Esencia 1: restaura 1 de salud x segundo
Esencia 2: restaura 1 se salud x segundo y uno de energia cada 5 segundos
Esencia 3: restaura 1 de salus x segundo y uno de energia cada 3 segundos

y asi..

hasta el nivel 10 q permanecera igual pero generara un objeto en plan bonus que lo q hará ese objeto (Llamemosle Putrefacción primigenia) es que recibira un 33% mas de daño (esta podrido y es mas facil atravesarle a espadazos) pero cada vez q mate a un enemigo recuperara 20% de salud y tendra un 5% de transformar al enemigo en zombie beta (con 10 de viveres y la mitad de estadisticas base del original, y un objeto q le duplica la regeneración de vida siempre q tenga energia, de manera q en combate sera nula ya que tendrá ademas de las heredadas, defensa especial) asi qhe serviran para estorbar o hacer escaramuzas

el problema es

//void, Obj owner

Unit this;

this = owner.AsUnit;
if (!.IsValid) return;

while (true)
{
Sleep(600);
if ((owner.IsValid()) && (.IsAlive)){
if (owner.health < owner.maxhealth);
owner.Heal(1);
}
}

<!-- Salud hasta aqui -->

//void, Obj owner, Obj Victim
int carga;

while (true){

carga = GetUseCount();

if (carga == 2){
if (owner.AsUnit().AddItem("EsenciaZ2"));
if (owner.AsUnit().RemoveItemsOfType("EsenciaZ1"));
SetUseCount(0);
}


if (carga < 2){
if (victim.IsValid())
SetUseCount(carga + 1);
}

La salud se regenera bien, pero luego ocurre lo siguiente
quiero q gane una carga al eliminar a un enemigo, y q al tener 2 cargas el objeto se sustituya x el otro

pero x algun motivo al matar a 1 enemigo automaticamente se sustituye x esenciaz2, al matar a otro aparece otro esenciaz2 y al matar a un tercer enemigo aparecen otros 2 esenciasz2 (se duplican)

esenciaz2 no tiene aun nada escrito, esta en blanco, asi que el problema viene de esenciaz1 el cual no se xq sigue el script ahi aunq ya no exista el objeto..

ayudaa pliiis
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 9:27 am

Hola a tod@s , Ragn4Die , he dado unos retoques a la parte scrip del apartado "Al derrotar a una unidad enemiga" , creo que lo he arreglado , si no es así , lo dices.


//void, Obj owner, Obj Victim
int carga;

carga = GetUseCount();
carga = carga +1;
SetUseCount(carga);

if (carga == 2){
if (owner.AsUnit().AddItem("EsenciaZ2"));
if (owner.AsUnit().RemoveItemsOfType("EsenciaZ1"));
SetUseCount(0);
}

//if (carga < 2){
//if (victim.IsValid())
//SetUseCount(carga + 1);
//}

Te comento algunos fallos que has tenido.
1- while (true){ ........ }
    Ésto , por si no lo sabes , es un bucle , no es recomendable usarlos en un apartado como éste , que se inicia con cada muerte causada , y si se usa el bucle , hay que saber como y cuando salir de él usando el comando "break;".

2- En el momento que se comprueba si la carga es igual a 2.
    carga = GetUseCount();
    if (carga == 2){.....}

   Aquí te da fallo ya que la "carga" que comprueba sólo tiene el valor que posee el "GetUseCount()" antes de sumar +1 por la muerte causada. El +1 hay que ponerlo antes del  if (carga == 2){.....} , y asegurarse de que ese valor lo tiene el "GetUseCount()" y "carga" (que es precisamente la variable que se comprueba).

---------------------------------------------------------------------------------------------------------

Referente a la pregunta de equipar dependiendo de una raza en concreto , puedes usar algo como ésto.
if(unidad.race == raza){
      lo que quieres que pase

}

Ejemplo:
Unit u;

if(u.race == Britain){
   u.AddItem("EsenciaZ1"));
}


Pues eso es todo , espero que te sirva de ayuda
Volver arriba Ir abajo
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 2:11 pm

Genial, ahora si me acumula las 2 primeras cargas y se transforma en "Esencia2"

Pero por algun motivo al derrotar a un 3r enemigo me genera otra "esencia2" y al derrotar a un 4o enemigo genera otras 2 "esencia2"

Como soluciono eso? le pongo break; al final del script?
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 3:26 pm

Ragn4Die escribió:
Genial, ahora si me acumula las 2 primeras cargas y se transforma en "Esencia2"

Pero por algun motivo al derrotar a un 3r enemigo me genera otra "esencia2" y al derrotar a un 4o enemigo genera otras 2 "esencia2"

Como soluciono eso? le pongo break; al final del script?

Tienes que ser más esplícito acerca del problema que tienes , o jugaremos a las adivinanzas , ¿qué es lo que genera otra "esencia2"? ¿la "esencia1" o la "esencia2"? , yo la 1 tal como te la dejé , no me daba error.
Pon otra lista de código y se podrá estudiar el problema.
Volver arriba Ir abajo
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 4:20 pm

Script de EZ1:

//void, Obj owner

Unit this;

this = owner.AsUnit;
if (!.IsValid) return;

while (true)
{
    Sleep(600);
    if ((owner.IsValid()) && (.IsAlive)){
    if (owner.health < owner.maxhealth);
        owner.Heal(1);
}
}
 

//void, Obj owner, Obj Victim
int carga;

carga = GetUseCount();
carga = carga +1;
SetUseCount(carga);

if (carga == 2){
if (owner.AsUnit().AddItem("EsenciaZ2"));
if (owner.AsUnit().RemoveItemsOfType("EsenciaZ1"));
SetUseCount(0);
}

//if (carga < 2){
//if (victim.IsValid())
//SetUseCount(carga + 1);
//}

Ejemplo del problema:
Supongamos que tengo un guerrero (que llamaré Lider) con un objeto que simplemente le da un bonus en ataque para testear mas rapido y el objeto con ese script llamado 'EsenciaZ1' (lo llamaré EZ1) el cual al llegar a dos cargas se deberia transformar en 'EsenciaZ2' (lo llamaré EZ2)

Pues aqui el test:

1- Enfrento a Lider contra dos guerreros galos.
-Lider mata a 1 guerrero y EZ1 gana una carga (hasta ahi bien)
-Lider mata a un 2o guerrero y EZ1 gana otra carga transformandose en EZ2 (hasta ahi bien)

2- Voy en busca de un tercer y cuarto enemigo (en el editor puse otros 2 galos mas abajo para que te hagas una idea)
-Hasta este punto, Lider tiene en su inventario el objeto de bonus en ataque y EZ2
-Lider mata a un 3r guerrero, y aqui ocurre el primer problema, aparece por arte de magia otro EZ2 en el inventario (teniendo así el objeto bonus, EZ2 y EZ2)
-Lider mata a un 4o guerrero y su inventario pasa a ser (objeto bonus, EZ2, EZ2, EZ2, EZ2; osea que se duplican)

Script de EZ2:

//void, Obj owner

Unit this;

this = owner.AsUnit;
if (!.IsValid) return;

while (true)
{
    Sleep(600);
    if ((owner.IsValid()) && (.IsAlive)){
    if (owner.health < owner.maxhealth);
        owner.Heal(1);
       
}
}

{
    Sleep(3000)
    if ((owner.IsValid()) && (.IsAlive)){
    if (owner.stamina < owner.maxstamina);
        owner.HealStamina(1);
}
}

No tiene nada raro y no entiendo por que ocurre esto.
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 4:56 pm

a mi no me ocurre nada de eso ,  he tenido que poner un ";"  que has dejado sin copiar/pegar justo detras del  Sleep(3000); y quitar unos "{}" que estaban solos.
El item no cura la energía ya que todo eso está fuera del bucle, no te corrijo nada ya que me da la sensación que este código es mucho más largo de lo que muestras ... si no es así , lo dices y se le da un arreglito.

Lo único que se me ocurre es que tengas código escrito en algún apartado de esos de "al derrotar algún enemigo..." y no te has dado cuenta.
Volver arriba Ir abajo
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 5:05 pm

Vale ya esta, solucionado, el esencia 2 tenia un par de lineas que debi copiar de esencia 1 sin querer..(Lo siento de veras)

-Como hago para que de energia cada 5 seg? ya q si dices q esta fuera del bucle.. `^.^`

-Para equipar Esencia a una raza en concreto, tengo que crear un script en SUBAI?
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 6:59 pm

¡Claro! no hay problema .


//void, Obj owner

Unit this;
int tiempo;

this = owner.AsUnit;

if(owner.race != Britain) return;   // esta linea hace que no funcione el item si no lo tiene equipado una unidad bretona
if (!.IsValid) return;

while (true){
    Sleep(600);
    tiempo = tiempo + 600;
    if ((owner.IsValid()) && (.IsAlive)){
    if (owner.health < owner.maxhealth);
        owner.Heal(1);
    }
    if(tiempo >= 4800){          // aqui calcula el tiempo
       tiempo = 0;
       if (owner.stamina < owner.maxstamina);
       owner.HealStamina(1);
      
    }
}

No se si se puede hacer que una unidad no pueda coger un objeto, pero si se puede hacer que lo suelte , pero sería muy confuso pare el que juega.
Creo que es mejor que no funcione nada si lo recoge la unidad equivocada. El código que te he puesto ya está listo para que no funcione si eso pasa.

Pon esta linea de código casi al principio y justo despues de   this = owner.AsUnit;    y en todos los apartados.
Está puesto para que sólo funcione con los bretones , pon tú él que quieras.
if(owner.race != Britain) return;
Volver arriba Ir abajo
Gigoras
Veterano
Veterano
avatar

Cantidad de envíos : 354
Edad : 47
Location : Salmantica.
Reputación : 127
Fecha de inscripción : 28/11/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 7:08 pm

¡¡¡ Y con esto queda claro por que cualquiera hacemos mapas y solo los maestros hacen CIVILIZACIONES !!!
Gracias sunny CAMARADA  sunny
Volver arriba Ir abajo
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 7:16 pm

Ando un poco confuso con eso del tiempo n.n'

que significa:

tiempo = tiempo + 600;

 y

if(tiempo >= 4800){          // aqui calcula el tiempo
       tiempo = 0;
???

no lo tengo muy claro XD

y sobre lo de la raza.. me referia a que tengo que hacer para cuando invoque una unidad (q en este caso es un zombie) o coloque una unidad de raza zombie en el editor este obtenga automaticamente el objeto, del tipo de los rangos de asur q lo obtienen todos automaticamente pero solo con una raza.
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 7:47 pm

... lo de Asur ando verde , todavía no lo he probado .... jejeje

Lo del tiempo es facil , quieres curar en un mismo apartado salud y energía pero en dos tiempos diferentes , si pones Sleep(600) y luego Sleep(5000),  ten en cuenta que primero curará pero cuando llegue a la orden Sleep(5000) , se quedará esperando 5 segundos sin hacer nada . De esta manera se hace un cálculo cada 600 (+ 600 , + 600 , ...  ) y así hasta los 4800 ( casi 5 segundos ) para curar la energía sin tener que esperar 5 segundos parado sin curar vida.
Un lío , seguro .... Question Question Question Question Question Question Question Question Question Question Question Question 

En el tema del Zombi me pierdo , no te entiendo. A que te refieres con invocar , ¿te refieres a hacer aparecer una unidad que no está en el mapa?.
¿a que te refieres con raza zombie? pense que con raza te referías a las civilizaciones , esas son las razas de juego , ... jejeje ... es su nombre técnico.
Volver arriba Ir abajo
Ragn4Die
Defensor
Defensor


Cantidad de envíos : 32
Reputación : 1
Fecha de inscripción : 26/05/2016

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 8:17 pm

Si a ver, he creado una especie de Raza, sin estructuras, pero es una raza la cual he llamado Zombie, esto viene a la historia que estoy haciendo en la que Anubis te arrastra al inframundo (es aliado y controlable) el cual tiene un objeto que va con cargas con el cual puede invocar 'zombies', de los cuales hasta ahora tengo 17 tipos diferentes de zombie (4 invocables y 13 que estaran por el mapa haciendonos la vida imposible (entre los cuales hay uno que es una especie de chaman que podra invocar un zombie con un 5% de probabilidades cuando ataca (el codigo aun no lo he hecho pero esa es la idea)) y yo queria saber que codigo hay que hacer para que esa raza obtenga ese objeto tanto si esta en el mapa como si es invocada.

<properties race="Zombie"/>
<properties edittree_pos="Units/Zombie/Basico Nivel 1"/>

supongo que eso es lo que indica la raza en el script de la unidad asi q si, raza zombie y el resumen de todo eso es:

como hacer para que cuando coloque yo un 'zombie' con el editor o mediante invocacion este obtenga el objeto 'EsenciaZ1'
Volver arriba Ir abajo
Camarada
Equipo de Diseño
Equipo de Diseño
avatar

Cantidad de envíos : 295
Location : España
Reputación : 122
Fecha de inscripción : 01/05/2010

MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   Vie Dic 16, 2016 9:00 pm

Ahmmmmmmm .... no se pueden crear por ahora razas nuevas , la raza zombi no te la reconocerá el juego , si pones Zombie en vez Britain puede que por un error que tiene el juego parezca que funciona , prueva a ver , pero ya te aviso que no se pueden crear por ahora razas nuevas.

Si les pones nombres id si funcionaría , pero ten en cuenta que tienen que ser diferentes , no se pueden llamas igual (Zombie01 , Zombie02 , Zombie03 ....):
  <class id="Zombie01" cpp_class="CVXUnit" parent="Melee" entity="Units/.......

Y el código sería :

if(u.AsUnit().class == "Zombie01" || u.AsUnit().class == "Zombie02" || u.AsUnit().class == "Zombie03")
   u1.AsUnit().AddItem("EsenciaZ1");
Volver arriba Ir abajo
Contenido patrocinado




MensajeTema: Re: Ayuda, No consigo averiguar en que fallo   

Volver arriba Ir abajo
 
Ayuda, No consigo averiguar en que fallo
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» Fallo PS3 por un cuelgue
» [Resuelto]ayuda en mi pc w8 fallo con cod UO
» Ayuda con Jinouga
» Garra de Agnaktor
» Ayuda para Matar a Gigginox y Capturar a Uragan (3 Estrellas)

Permisos de este foro:No puedes responder a temas en este foro.
JVLIVS CAESAR MODS FORUM :: Modding en General :: Modding en General :: Edición de Scripts-
Cambiar a: