Novedades

Implementación de la ráfaga de golpes

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
Bueno está hablado con MiniKanyas por eso lo he posteado aquí.

en el spells.2da
Row No.1335 (en el mío que no es el que está ahora)
LabelRafagaDeGolpes
Name1938
iconResRef****
SchoolV
RangeP
VS****
MetaMagic****
TargetType0x01
impactScriptife_flurry
Bard****
Cleric****
Druid****
Paladin****
Ranger****
Wiz_Sorc****
Innate1
ConjTime0
ConjAnimhead
ConjHeadVisual****
ConjHandVisual****
ConjGrndVisual****
ConjSoundVFX****
ConjSoundMale****
ConjSoundFemale****
CastAnimself
CastTime0
CastHeadVisual****
CastHandVisual****
CastGrndVisual****
CastSound****
Proj0
ProjModel****
ProjType****
ProjSpwnPoint****
ProjSound****
ProjOrientation****
InmunityType****
itemImmunity0
SubRadSpell1****
SubRadSpell2****
SubRadSpell3****
SubRadSpell4****
SubRadSpell5****
Category10
Master****
UserType2
SpellDesc6026
UseConcentration0
SpontaneouslyCast0
AltMessage6026
HostileSetting0
FeatID1462 (en mi caso, el que toque en el del servidor)
Counter1****
Counter2****
HasProjectile0

En el feat.2da
Row No1462 (en mi caso, el que toque en el servidor)
LabelFlurryofBlows
Feat1938
Description6026
iconife_flurry
MinAttackBonus****
MinStr****
MinDex****
MinInt****
MinWis****
MinCon****
MinCha****
MinSpellLvl****
Prereqfeat1****
Prereqfeat2****
GainMultiple0
EffectStack0
AllClassesCanUse0
Category22
MaxCR****
SpellID1335 (en mi caso, en el servidor el que toque)
Successor****
CRValue****
UsesPerDay****
MasterFeat****
TargetSelf1
OrReqFeat0****
OrReqFeat1****
OrReqFeat2****
OrReqFeat3****
OrReqFeat4****
ReqSkill****
ReqSkillMinRanks****
ReqSkill2****
ReqSkillMinRanks2****
ConstantsFEAT_FLURRY_OF_BLOWS
ToolCategories6
HostileFeat****
MinLevel****
MinLevelClass****
MaxLevel****
MinFortSave****
PreReqEpic0
ReqAction0

en el cls_feat_monk.2da hay que sustituir en la row 24 el FeatIndex 204 la row que definimos en el feat.2da

Luego falta el redefinir la dote como me has comentado pero eso ya es problema tuyo ;)

C:
// La spellid en mi 2da cambiar por el correcto del servidor.
const int FLURRY_OF_BLOWS_ID = 1335;

int isActiveFlurry();
int checkWeaponFlurry();
int checkValidWeaponFlurry(object oWeapon);

int isActiveFlurry() {
    int iSpell = FLURRY_OF_BLOWS_ID;
    int active = TRUE;
    effect eSearch = GetFirstEffect(OBJECT_SELF);
    while(GetIsEffectValid(eSearch)) {
        if(GetEffectSpellId(eSearch) != iSpell) {
            eSearch = GetNextEffect(OBJECT_SELF);
        } else {
            active = FALSE;
            break;
        }
    }
    return active;
}
int checkWeaponFlurry() {
    object oLWeap = GetItemInSlot(INVENTORY_SLOT_LEFTHAND);
    object oRWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
    int response = TRUE;
    // EL RESPONSE DEL PRIMER IF ES REDUNDANTE PERO PARA QUE QUEDE IGUAL EL CODIGO :P
    if(response == TRUE && GetIsObjectValid(oLWeap)) response = checkValidWeaponFlurry(oLWeap);
    if(response == TRUE && GetIsObjectValid(oRWeap)) response = checkValidWeaponFlurry(oRWeap);
    return response;
}
int checkValidWeaponFlurry(object oWeapon) {
    if(GetBaseItemType(oWeapon) == BASE_ITEM_KAMA) return TRUE;
    if(Get2DAString("baseitems","IsMonkWeapon",GetBaseItemType(oWeapon)) == "1") return TRUE;
    return FALSE;
}

void main()
{
    int iLevel = GetLevelByClass(CLASS_TYPE_MONK);
    int iPenal = 2;
    int active = isActiveFlurry();
    if(!checkWeaponFlurry()) {
        FloatingTextStringOnCreature("*No se puede utilizar la Ráfaga de golpes con el arma equipada*",OBJECT_SELF,FALSE);
        return;
    }

    if(active == TRUE) {
        FloatingTextStringOnCreature("*Ráfaga de golpes activada*",OBJECT_SELF,FALSE);
        if(iLevel >= 5) iPenal--;
        if(iLevel >= 9) iPenal--;
        effect eff = EffectModifyAttacks(1);
        eff = SupernaturalEffect(eff);
        if(iPenal > 0) eff = EffectLinkEffects(eff,EffectAttackDecrease(iPenal));
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eff,OBJECT_SELF);
    } else {
        FloatingTextStringOnCreature("*Ráfaga de golpes desactivada*",OBJECT_SELF,FALSE);
        effect eff = GetFirstEffect(OBJECT_SELF);
        while(GetIsEffectValid(eff)) {
            int iId = GetEffectSpellId(eff);
            if(iId == FLURRY_OF_BLOWS_ID) RemoveEffect(OBJECT_SELF,eff);
            eff = GetNextEffect(OBJECT_SELF);
        }
    }
}
 
Última edición:

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
se me olvidó linkear el supernaturaleffect metelo tu porfa :rolleyes:
 

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
He realizado la modificación para que sólo pueda activarse con la KAMA y puños, y las armas activadas en el baseitems.2da y de paso puse el supernaturaleffect que se me había olvidado.

La rutina para deactivarla en el onequip la tendrías que añadir tu quizá lo mejor habría sido sacar la de activación y deactivación en funciones para poder reutilizar el código con un import, así que sientete libre de hacerlo si quieres ;)
 

Dhraax

Equipo Técnico
Registrado
31/7/11
Mensajes
4,643
Me han pasado esto para revisarlo y en lineas generales lo veo bien. Pero nosotros utilizamos NWNX, seria ideal que el sistema funcionase con la dote nativa aplicando los bonos por sobre el efecto original del juego.

- NWNX_ON_USE_FEAT_BEFORE
- NWNX_ON_USE_FEAT_AFTER

Tal vez nos pueda ayudar a mantener la dote activa sin necesidad de hacerle control en todos lados, ya que la dote vanilla por si misma funciona bien, y a eso aplicarle bonos extra en vez de quitarle penalizadores https://nwnlexicon.com/index.php/EffectAttackIncrease, aumentas los bonos que te ha quitado la dote original.
Seria montar un wrapper por encima de la funciona actual para no tener que crear una dote nueva realmente o modificar nada de como funciona la dote original.
Si tienes tiempo y ganas mira un poco del tema a ver si puedes modificarlo.
 

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
Una idea que en su momento baraje, es dejar la variable que penaliza la ráfaga a 0 y aplicar el penalizador Usando nwnx, sinceramente no se la viabilidad de esto. El martes estoy libre para hablarlo por discord y ver que camino puede ser mas efectivo.

Sino dime tu hora. Lo digo porque ya no estoy en el canal de pdb y es mas complicado encontrarme.
 

Dhraax

Equipo Técnico
Registrado
31/7/11
Mensajes
4,643
Mas que para la penalización, el usar el NWNX es para el evento de NWNX_ON_USE_FEAT_* entonces siempre utiliza la dote del motor, te pondrá -2 pero tu por encima le añaden bono, anulando el cambio y aplicando bonificaciones extra si procede.
 

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
El tema es que ese penalizador es editable cambiando una variable de un 2da. Tengo que mirarlo seguro.

Lo de dejar el penalizador a 0 y aplicarlo con nwnx es únicamente para que no cuente en el +20 de ataque máximo permitido, de esta forma le damos un +2 real sin penalizar conjuros.
 

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
De esta forma únicamente seria ver el nivel de monje para aplicar dicho penalizador.

Sin tocar la dote
 

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
Vale he echado un ojillo rápido y en el ruleset.2da se puede definir el penalizador estándar de la ráfaga de golpes de motor:

Captura de pantalla de 2024-05-06 23-58-01.png

Ya de paso se puede establecer los dados de daño como en 3.5
Captura de pantalla de 2024-05-06 23-56-35.png

También he mirado el el baseitem.2da para establecer las armas de monje, es tan sencillo como establecer 1 en la columna isMonkWeapon
Captura de pantalla de 2024-05-07 00-03-00.png

Mi idea es aplicar un penalizador de -2 o -1 en caso de que el monje sea de nivel inferior al establecido (esto creo que puede además hacer más rápido el script, dado que los monjes con niveles superiores al 9 ya no deben ni de chequear el evento NWNX_ON_USE_FEAT_

Puedo hacer algo y si me pasas el baseitem.2da y el ruleset.2da del servidor puedo el fin de semana esbozar algún script rápido.
 
Última edición:

Hela

Calculador épico de fichas de PJ
Registrado
11/7/20
Mensajes
2,019
Aprovecho el parche que se ha subido del cual quedan cosas pendientes de subir para preguntar si se va a tener en cuenta esto. Por mi parte no he recibido ningún mensaje ni contestación sobre este asunto por eso lo pregunto.
 
Arriba