UW2_PRC8/_haks/poa_exp_abilities/prc_kotmc_combat.nss
Jaysyn904 2bb2c470e0 Updated to PRC8
Updated to PRC8.  Further function integration.  Fixed NPC onDeath script.   Full compile.  Updated release archive.
2024-02-20 22:24:11 -05:00

233 lines
5.1 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Knight of the Middle Circle - Combat Sense
//:: prc_kotmc_combat.nss
//:://////////////////////////////////////////////
//:: Applies a temporary AC and Attack bonus vs
//:: monsters of the targets racial type
//:://////////////////////////////////////////////
//:: Created By: Stratovarius
//:: Created On: July 16, 2004
//:://////////////////////////////////////////////
#include "inc_item_props" //adicionado por mim, pq na versao 3.5 do prc essa biblioteca nao estava aqui.
#include "prc_alterations"
#include "prc_class_const"
/*
//adicionado essa funcao direto do prc 2.2c do inc_item_props pq o prc mais recente nao tinha essa funcao ou eu nao achei
object GetPCSkin(object oPC);
object GetPCSkinKMC(object oPC)
{
object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);
if (!GetIsObjectValid(oSkin))
{
if ( GetHasItem(oPC, "base_prc_skin"))
{
oSkin = GetItemPossessedBy(oPC,"base_prc_skin");
AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR));
}
//Added GetHasItem check to prevent creation of extra skins on module entry
else {
oSkin = CreateItemOnObject("base_prc_skin", oPC);
AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR));
}
}
return oSkin;
}
*/
void main()
{
//Declare main variables.
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
object oTarget = PRCGetSpellTargetObject();
int nRace = MyPRCGetRacialType(oTarget);
int nClass = GetLevelByClass(CLASS_TYPE_KNIGHT_MIDDLECIRCLE, oPC) + GetLevelByClass(CLASS_TYPE_PALADIN, oPC);
int nDur = nClass + 3;
int nAC;
int nAttack;
if (nClass >= 1)
{
nAC = 2;
nAttack = 2;
}
if (nClass >= 5)
{
nAC = 4;
nAttack = 4;
}
if (nClass >= 10)
{
nAC = 6;
nAttack = 6;
}
if (nClass >= 15)
{
nAC = 8;
nAttack = 8;
}
if (nClass >= 20)
{
nAC = 10;
nAttack = 10;
}
if (nClass >= 25)
{
nAC = 12;
nAttack = 12;
}
if (nClass >= 30)
{
nAC = 14;
nAttack = 14;
}
if (nClass >= 35)
{
nAC = 16;
nAttack = 16;
}
if (nClass >= 40)
{
nAC = 18;
nAttack = 18;
}
if (nClass >= 45)
{
nAC = 20;
nAttack = 20;
}
if (nClass >= 50)
{
nAC = 22;
nAttack = 22;
}
if (nClass >= 55)
{
nAC = 24;
nAttack = 24;
}
if (nClass >= 60)
{
nAC = 26;
nAttack = 26;
}
if (nClass >= 65)
{
nAC = 28;
nAttack = 28;
}
if (nClass >= 70)
{
nAC = 30;
nAttack = 30;
}
if (nClass >= 75)
{
nAC = 32;
nAttack = 32;
}
if (nClass >= 80)
{
nAC = 34;
nAttack = 34;
}
/*
//codigo antigo prc 2.2c
if (GetLocalInt(oPC, "KOTMCCombat") == TRUE) return;
effect eAttack = EffectAttackIncrease(nAttack);
effect eAC = EffectACIncrease(nAC);
VersusRacialTypeEffect(eAttack, nRace);
VersusRacialTypeEffect(eAC, nRace);
SetLocalInt(oPC, "KOTMCCombat", TRUE);
DelayCommand(RoundsToSeconds(nDur), DeleteLocalInt(oPC, "KOTMCCombat"));
*/
/* //codigo prc 3.5 que nao funciona
if (GetLocalInt(oPC, "KOTMCCombat") == TRUE) return;
effect eAttack = EffectAttackIncrease(nAttack);
effect eAC = EffectACIncrease(nAC);
eAttack = VersusRacialTypeEffect(eAttack, nRace);
eAC = VersusRacialTypeEffect(eAC, nRace);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, RoundsToSeconds(nDur));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAC, oPC, RoundsToSeconds(nDur));
SetLocalInt(oPC, "KOTMCCombat", TRUE);
DelayCommand(RoundsToSeconds(nDur), DeleteLocalInt(oPC, "KOTMCCombat"));
*/
if (GetLocalInt(oPC, "KOTMCCombat") == TRUE) return;
//effect eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP);
effect eAC = EffectACIncrease(nAC);
eAC = VersusRacialTypeEffect(eAC, nRace);
effect eAttack = EffectAttackIncrease(nAttack);
eAttack = VersusRacialTypeEffect(eAttack, nRace);
// effect eImmune = EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS);
// eImmune = VersusAlignmentEffect(eImmune,ALIGNMENT_ALL, nAlign);
effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects( eAC, eAttack);
// eLink = EffectLinkEffects(eLink, eAC);
eLink = EffectLinkEffects(eLink, eDur);
eLink = EffectLinkEffects(eLink, eDur2);
//Apply the VFX impact and effects
//Fire cast spell at event for the specified target
// SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_PROTECTION_FROM_EVIL, FALSE));
//SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(nDur),TRUE,-1,nClass);
SetLocalInt(oPC, "KOTMCCombat", TRUE);
DelayCommand(RoundsToSeconds(nDur), DeleteLocalInt(oPC, "KOTMCCombat"));
}