Una ayudita con mi enemigo Final... please
| Tengo pensao como enemigo final de mi modulete, un tio normalucho, ademas es hasta facil de matar, pero tiene un poder especial cada vez que le golpean con un arma cortadora…¡voila! se nos divide el muchacho… me hace gracia, es mu chulo. Yo cojo y pongo mi script en el evento onDamage. Lo q viene por defecto se lo dejo lo unico que hago es añadir codigo. Mi problema es q cada vez que le golpeo no me crea solo un enemigo sino 8!!!!. Claro cuando le has golpeao un par de veces te quedas sin memoria. Yo solo quiero q aparezca uno por vez hasta pongamos un limite por ejemplo de 10. Os paso lo que escribi: #include “NW_I0_GENERIC” void main() { object oPc=(GetLastAttacker()); object oWeapon=(GetLastWeaponUsed(oPc)); int nKindOfWeapon=GetBaseItemType(oWeapon); int tios= GetLocalInt(oPc,”numero”); object oArea= GetArea(OBJECT_SELF); vector vPosition = GetPosition(OBJECT_SELF); float fOrientation = GetFacing(OBJECT_SELF); vPosition.x= vPosition.x+2; vPosition.y= vPosition.y+2; vPosition.z= vPosition.z+2; location ilocate= Location(oArea,vPosition,fOrientation); SetLocalInt(oPc,”numero”,tios+1); if (tios<8) { if (nKindOfWeapon==(BASE_ITEM_BASTARDSWORD | BASE_ITEM_BATTLEAXE | BASE_ITEM_DOUBLEAXE | BASE_ITEM_GREATAXE)) { CreateObject(OBJECT_TYPE_CREATURE,”millo”,ilocate); } if (nKindOfWeapon==(BASE_ITEM_GREATSWORD | BASE_ITEM_HALBERD | BASE_ITEM_HANDAXE | BASE_ITEM_KAMA | BASE_ITEM_KATANA)) { CreateObject(OBJECT_TYPE_CREATURE,”millo”,ilocate); } if (nKindOfWeapon==(BASE_ITEM_KUKRI | BASE_ITEM_LONGSWORD | BASE_ITEM_RAPIER | BASE_ITEM_SCIMITAR | BASE_ITEM_SHORTSWORD)) { CreateObject(OBJECT_TYPE_CREATURE,”millo”,ilocate); } if (nKindOfWeapon==(BASE_ITEM_SICKLE | BASE_ITEM_TWOBLADEDSWORD)) { CreateObject(OBJECT_TYPE_CREATURE,”millo”,ilocate); } } if(!GetFleeToExit()) { if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) { if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) { if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) { DetermineSpecialBehavior(GetLastDamager()); } else if(GetIsObjectValid(GetLastDamager())) { DetermineCombatRound(); if(!GetIsFighting(OBJECT_SELF)) { object oTarget = GetLastDamager(); if(!GetObjectSeen(oTarget) && GetArea(OBJECT_SELF) == GetArea(oTarget)) { ActionMoveToLocation(GetLocation(oTarget), TRUE); ActionDoCommand(DetermineCombatRound()); } } } } else if (!GetIsObjectValid(GetAttemptedSpellTarget())) { object oTarget = GetAttackTarget(); if(!GetIsObjectValid(oTarget)) { oTarget = GetAttemptedAttackTarget(); } object oAttacker = GetLastHostileActor(); if (GetIsObjectValid(oAttacker) && oTarget != oAttacker && GetIsEnemy(oAttacker) && (GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4) | (GetHitDice(oAttacker) - 2) > GetHitDice(oTarget) ) ) { DetermineCombatRound(oAttacker); } } } } if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1006)); } } El nombre del enemigo final es millo. Haber si hay alguien que sea capaz de resolver esto porfi . Creo q es todo un reto, o por lo menos para mi, q me ha llevao toda una tarde sin resultado |
Activos en NWN
Los más activos en Scripting
Subforos
Neverwinter Nights
…
Vale parece que ya solo me crea un tio, cada vez que le toco con una de las armas q tengo predeterminadas, es mas cuando llega al tope, como la variable la tiene creada el pj jugador, no siguen apareciendo tios. Pero el problema q tengo ahora es q cada vez q ellos me matan a mi, se me cuela ga el juego. Este es el codigo optimizado q he puesto ahora en OnUserDefined:
void main()
{
int nUser = GetUserDefinedEventNumber();
if (nUser= 1006) //golpeado
{
object oPc=GetLastAttacker();
int tios= GetLocalInt(oPc,”numero”);
if (tios< 1)
{
object oWeapon=GetLastWeaponUsed(oPc);
int nKindOfWeapon=GetBaseItemType(oWeapon);
int bCrear = FALSE;
switch(nKindOfWeapon)
{
case BASE_ITEM_BASTARDSWORD:
case BASE_ITEM_BATTLEAXE:
case BASE_ITEM_DOUBLEAXE:
case BASE_ITEM_GREATAXE:
case BASE_ITEM_GREATSWORD:
case BASE_ITEM_KUKRI:
case BASE_ITEM_LONGSWORD:
case BASE_ITEM_HALBERD:
case BASE_ITEM_HANDAXE:
case BASE_ITEM_KAMA:
case BASE_ITEM_KATANA:
case BASE_ITEM_RAPIER:
case BASE_ITEM_SCIMITAR:
case BASE_ITEM_SHORTSWORD:
case BASE_ITEM_SICKLE:
case BASE_ITEM_TWOBLADEDSWORD:
bCrear = TRUE;
break;
}
}
De momento toy probando solo con una imagen. ¿Sabeis pq pasa?
Yo pensaba q era por falta de memoria y por eso reduje el numero de imagenes pq pensaba q se colgaba cuando se creaba una mas y ya mi ordenata no podia mas.
Bueno a ver q se os ocurre, pa esto
Es q ya no se q hacer pa una idea original q por fin se me ocurre, jolin!! q trabajito me esta dando, comprobao nada mas q me mata se cuelga el NWN, probao con enemigo de n15(guerrero) y un pj de n1(mago) (vamos q se moria seguro). Siempre puedo dejarlo asi, y q diga el malo antes de empezar este sera un duelo a muerte si pierdes mucho mas de lo q crees….
.Pero me parece muy poco profesional. Te voy a pasar los tres codigos q tengo escritos a ver q te parece:
OnSpawn (en las dos criaturas tanto Millo como las imagenes)
[quote:e03d3780a1]
void main()
{
SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);
SetSpawnInCondition(NW_FLAG_DEATH_EVENT);
SetListeningPatterns();
WalkWayPoints();
GenerateNPCTreasure();
}[/quote:e03d3780a1][size=18:e03d3780a1][/size:e03d3780a1][size=24: />
OnUserDefined, de las imagenes
[quote:e03d3780a1]
void main()
{
int nUser = GetUserDefinedEventNumber();
if (nUser= 1007) //muerto
{
object jefe= GetObjectByTag(“millo”);
int tios= GetLocalInt(jefe,”numero”);
SetLocalInt(jefe,”numero”,tios-1);
}
}
[/quote:e03d3780a1]
OnUserDefined, del malo maloso
[quote:e03d3780a1]
void main()
{
int nUser = GetUserDefinedEventNumber();
return;
}
[/quote:e03d3780a1]
Bueno haber q te parece. Todavia no he podio probar q tal se comporta todo cuando yo lo mato a el (estoooo…. todavia no he podio derrotarlo.
esto ya es el remate. Dejo q me mate un mierda de soldao q estaba por alli vigilando, y se me cuelga el juego, es decir no tiene nada q ver con el enemigo final. Me voy a la campaña principal del juego me matan… y no pasa nada sale el menucillo de respawn. Me hago un modulo tonto en un microset con un lobo apestoso dejo q me mate y se cuelga!!!!
Q puede estar pasando?
lo q yo creo que pasa es q no has puesto el waypoint para que resuciten. Crea un waypoint y pon en el tag nw_death_temple y así cuando te maten aparecerás ahi de nuevo.