Es un nuevo sistema que a�adira una nueva desventaja a las armaduras. Debido a que estas no solo deben penalizar la capacidad de combate (Penalizacion de destreza), se a�ade tambien con este sistema una reduccion de movimiento, segun la dureza que indique el peso de la misma. Basado en el addon del REN.
Se me olvidaba poner aqui el codigo
con las modficaciones que le hice
//::///////////////////////////////////////////////
//:: pesoarm_biblio
//:: Copyright (c) 2003 NwN Hispania.
//:://////////////////////////////////////////////
/*
Una copia del REN pero modifcada
para que funcione con las opcioens de equipar
y quitarse items. De esta forma ya no se toca
el heartbeat y lso efectos se mantienen hasta
que la armadura sea removida.
*/
//:://////////////////////////////////////////////
//:: Creado por Gonar.
//:: Creado en septiembre.
//:: Modificado por: Belsirk
//:://////////////////////////////////////////////
void ArmaduraPesada(object oPC)
{
// Miramos que armadura lleva puesta el pj.
object oArmadura = GetItemInSlot(INVENTORY_SLOT_CHEST ,oPC);
// Calculamos su peso.
int iPeso = GetWeight(oArmadura);
// Preparamos un nuevo efecto.
effect eMover;
// Consultamos los valores configurados por ti
// en el script ren_add_e_omload del evento
// OnModuleLoad, del evento.
int iLigero = GetLocalInt(GetModule(), "Ligero");
int iMedio = GetLocalInt(GetModule(), "Medio");
int iPesado = GetLocalInt(GetModule(), "Pesado");
int iMligero = GetLocalInt(GetModule(), "mLigero");
int iMmedio = GetLocalInt(GetModule(), "mMedio");
int iMpesado = GetLocalInt(GetModule(), "mPesado");
// String usada para definir el valor del % de reduccion.
string sCuanto = "0";
// Comenzamos a buscar concordancia del peso de la
// armadura con los valores establecidos.
// En caso de coincidencia, se declarara el efecto
// de reduccion de movimiento, segun el valor que se
// estipulara en las variables de configuracion.
if((iPeso >= iLigero) && (iPeso = iMedio) && (iPeso = iPesado)
{
eMover = SupernaturalEffect(EffectMovementSpeedDecrease(iMpesado) );
sCuanto = IntToString(iMpesado);
}
// Aplicamos el efecto.
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMover, oPC);
//Le enviamso un mensaje al jugador avisando por que se mueve lento
SendMessageToPC(oPC, "Su velocidad se ha visto afectada por el peso de la armadura " + sCuanto + " %");
}
//Para quitar el efecto dado por la armadura
void SinArmadura(object oPC, int iPeso)
{
//Esto funcioan de una forma sencilla, va a buscar un efecto
// que cause qeu tu velocidad se reduzca, al hallarlo se retira
// de este programa
effect eLoop = GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)== EFFECT_TYPE_MOVEMENT_SPEED_DECREASE)
{
RemoveEffect(oPC, eLoop);
SendMessageToPC(oPC, "Ya te puedes mover con libertad");
return; // Ya no necesita seguir buscando los demas efectos.
}
eLoop=GetNextEffect(oPC);
}
YA termine el script anti magia (o al menos ya solo me falta darle persistencia) asi qeu antse de seguirle a ese termianre este, y acabo de hallar un posible motivo del fallo
que no vi cuando lo subi, los ifs no estan bien solo tienen un signo de igual y eso no es correcto en los ifs.
Supongo qeu tu intencion era >=, con eso ya deberia de jalar pero inteligentemente no me traje mi cd del NWN y hasta mañana no lo tendre asi qeu no lo puedo verificar ahorita.
Aunque si siempre nso daba un 27 de penalidad tons hay un fallo adicional por ahi...
Posted by Gonar at 2004-06-01 13:35:00 Voted 10.00 on 05/31/04
Yo lo he vuelto a ojear asi por encima y no veo a priori el error, no se.
Como odio tener 40 cosas que hacer no consigo centrarme en ninguna, me tendre que dejar la fiesta una temporada y ponerme al dia en esto de nuevo :P
Enga, no toque el script por que me quede trabado en otor script de anti-magia que ando desarollando y debido a un bug que no esperaba de CopyObject and CopyItem en un ciclo pues se me fue todo el dia en este script...
Juro que en esta semana corrijo las fallas y actualizo esta mejora :P
Posted by Gonar at 2004-05-31 01:13:00 Voted 10.00 on 05/31/04
^^ acabo de postear, y se me ocurrio una nueva modificacion para la biblioteca :P
Haber, resulta que si te pones ropas (osea armadura con peso menor de iLigero) te muestra el msg sin especificar valor en el %, y por lo tanto es logico que intenta aplicar el efecto pero no posee valor de reduccion. Voy a probar si este es el problema y por lo tanto la posible solucion.
De todas maneras solucione o no el tema, es una mejora bonita para la funcion de ponerse armadura, pues tiene en cuenta las armaduas (bueno ropas) que pesen menos de iLigero con las cuales antes no se contaba.
//::///////////////////////////////////////////////
//:: pesoarm_biblio
//:: Copyright (c) 2003 NwN Hispania.
//:://////////////////////////////////////////////
/*
Nueva biblioteca para el sistema de armaduras
pesadas creado originalmente por Gonar y
mejorado por Belsirk para los nuevos eventos
de modulo.
*/
//:://////////////////////////////////////////////
//:: Creado por Belsirk y Gonar.
//:: Creado en septiembre 2003
//:: Modificado en mayo 2004
//:://////////////////////////////////////////////
void ArmaduraPesada(object oPC);
void SinArmadura(object oPC, int iPeso);
// Script que se aplicara en cuanto un personaje se ponga una armadura.
// Dependiendo del peso de esta se aplicaran unos u otro modificadores,
// o incluso ningun modificador.
void ArmaduraPesada(object oPC)
{
// Miramos que armadura lleva puesta el pj.
object oArmadura = GetItemInSlot(INVENTORY_SLOT_CHEST ,oPC);
// Calculamos su peso.
int iPeso = GetWeight(oArmadura);
// Preparamos un nuevo efecto.
effect eMover;
// Consultamos los valores configurados por ti en el script pesoarm_onload
// del evento OnModuleLoad.
int iLigero = GetLocalInt(GetModule(), "Ligero");
int iMedio = GetLocalInt(GetModule(), "Medio");
int iPesado = GetLocalInt(GetModule(), "Pesado");
int iMligero = GetLocalInt(GetModule(), "mLigero");
int iMmedio = GetLocalInt(GetModule(), "mMedio");
int iMpesado = GetLocalInt(GetModule(), "mPesado");
// String usada para definir el valor del % de reduccion.
string sCuanto;
// Comenzamos a buscar concordancia del peso de la armadura con los valores
// establecidos.
// En caso de coincidencia, se declarara el efecto de reduccion de movimiento,
// segun el valor que se
// estipulara en las variables de configuracion.
if(iPeso = iLigero))
{
eMover = EffectMovementSpeedDecrease(iMligero);
sCuanto = IntToString(iMligero);
}
if((iPeso = iMedio))
{
eMover = EffectMovementSpeedDecrease(iMmedio);
sCuanto = IntToString(iMmedio);
}
if(iPeso >= iPesado)
{
eMover = EffectMovementSpeedDecrease(iMpesado);
sCuanto = IntToString(iMpesado);
}
// Aplicamos el efecto, si es preciso.
if(sCuanto != "0")
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMover, oPC);
// Le enviamso un mensaje al jugador avisando por que se mueve lento.
SendMessageToPC(oPC, "Su velocidad se ha visto afectada por el peso de la armadura " + sCuanto + " %");
}
// Cuando el jugador se quite la armadura, se eliminaran los efectos que esta
// imponia sobre el mismo.
void SinArmadura(object oPC, int iPeso)
{
//Esto funciona de una forma sencilla, va a buscar un efecto que cause que tu
// velocidad se reduzca, al hallarlo lo retira del personaje.
effect eLoop = GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)== EFFECT_TYPE_MOVEMENT_SPEED_DECREASE)
{
RemoveEffect(oPC, eLoop);
SendMessageToPC(oPC, "Ya te puedes mover con libertad");
return; // Ya no necesita seguir buscando los demas efectos.
}
eLoop=GetNextEffect(oPC);
}
}
Nada, lo sigue haciendo y no se por que, pero ahora al menos tiene en cuenta las ropas como fuera de los valores configurados de peso.
Posted by Gonar at 2004-05-31 00:54:46 Voted 10.00 on 05/31/04
Posted by Gonar at 2004-05-31 00:54:00 Voted 10.00 on 05/31/04
Primero agradecer a Belsirk que halla adaptado el sistema a los nuevos eventos ^^ genial idea.
Lo he estado probando y localize (o por lo menos a mi me pasa), que aplica el mismo modificador de velocidad tanto si te pones una armadura ligera como una media o pesada.
Como no sabia si era por que me rallaba o si era asi, modifique la biblioteca para que en el sendmessagetopc mostrara el % de modificacion, asi pues comprobe que siempre aplicaba un 27 % independientemente de la armadura.
He mirado por encima la biblioteca y los scripts y no localizo el error (supongo que ya viene de antes, en el Onhear tambien fallaria), Belsirk te copio aqui la nueva biblioteca, bueno es poca la modificacion que hize, pero supongo que te servira.
//::///////////////////////////////////////////////
//:: pesoarm_biblio
//:: Copyright (c) 2003 NwN Hispania.
//:://////////////////////////////////////////////
/*
Una copia del REN pero modifcada
para que funcione con las opcioens de equipar
y quitarse items. De esta forma ya no se toca
el heartbeat y lso efectos se mantienen hasta
que la armadura sea removida.
*/
//:://////////////////////////////////////////////
//:: Creado por Gonar.
//:: Creado en septiembre.
//:: Modificado por: Belsirk
//:://////////////////////////////////////////////
void ArmaduraPesada(object oPC)
{
// Miramos que armadura lleva puesta el pj.
object oArmadura = GetItemInSlot(INVENTORY_SLOT_CHEST ,oPC);
// Calculamos su peso.
int iPeso = GetWeight(oArmadura);
// Preparamos un nuevo efecto.
effect eMover;
// Consultamos los valores configurados por ti
// en el script ren_add_e_omload del evento
// OnModuleLoad, del evento.
int iLigero = GetLocalInt(GetModule(), "Ligero");
int iMedio = GetLocalInt(GetModule(), "Medio");
int iPesado = GetLocalInt(GetModule(), "Pesado");
int iMligero = GetLocalInt(GetModule(), "mLigero");
int iMmedio = GetLocalInt(GetModule(), "mMedio");
int iMpesado = GetLocalInt(GetModule(), "mPesado");
// String usada para definir el valor del % de reduccion.
string sCuanto;
// Comenzamos a buscar concordancia del peso de la
// armadura con los valores establecidos.
// En caso de coincidencia, se declarara el efecto
// de reduccion de movimiento, segun el valor que se
// estipulara en las variables de configuracion.
if((iPeso = iLigero))
{
eMover = EffectMovementSpeedDecrease(iMligero);
sCuanto = IntToString(iMligero);
}
if((iPeso = iMedio))
{
eMover = EffectMovementSpeedDecrease(iMmedio);
sCuanto = IntToString(iMmedio);
}
if(iPeso >= iPesado)
{
eMover = EffectMovementSpeedDecrease(iMpesado);
sCuanto = IntToString(iMpesado);
}
// Aplicamos el efecto.
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMover, oPC);
//Le enviamso un mensaje al jugador avisando pro que se mueve lento
SendMessageToPC(oPC, "Su velocidad se ha visto afectada por el peso de la armadura " + sCuanto + " %");
}
//Para quitar el efecto dado por la armadura
void SinArmadura(object oPC, int iPeso)
{
//Esto funcioan de una forma sencilla, va a buscar un efecto
// que cause qeu tu velocidad se reduzca, al hallarlo se retira
// de este programa
effect eLoop = GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)== EFFECT_TYPE_MOVEMENT_SPEED_DECREASE)
{
RemoveEffect(oPC, eLoop);
SendMessageToPC(oPC, "Ya te puedes mover con libertad");
return; // Ya no necesita seguir buscando los demas efectos.
}
eLoop=GetNextEffect(oPC);
}
}
You must be Logged In to post comments in this section.