PGCC_PRC8/_module/nss/vata_fighter.nss
Jaysyn904 e51634d39b Initial upload
Initial upload.
2024-10-09 14:17:22 -04:00

107 lines
4.2 KiB
Plaintext

#include "x2_inc_itemprop"
#include "inc_baseitem"
object ArenaSummon(string sTemplate)
{
// do the summon
object oOrb = GetObjectByTag("CS_ORBSUMMON");
object oCreature = CreateObject(OBJECT_TYPE_CREATURE, sTemplate, GetLocation(GetObjectByTag("WP_ARENASUMMON")));
SendMessageToPC(GetPCSpeaker(), "Summoned " + GetName(oCreature) + ".");
//visual effects
location lOrbLocation = GetLocation(oOrb);
effect eOrbEffect = EffectVisualEffect(VFX_FNF_DISPEL);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eOrbEffect, lOrbLocation, 0.5);
location lCreatureLocation = GetLocation(oCreature);
effect eCreatureEffect = EffectVisualEffect(VFX_FNF_SMOKE_PUFF);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eCreatureEffect, lCreatureLocation, 1.0);
return oCreature;
}
int RandomDamageType()
{
//pick a random damage type
int iDamageType;
int iSwitch = Random(6);
if (iSwitch == 0) iDamageType = IP_CONST_DAMAGETYPE_ACID;
if (iSwitch == 1) iDamageType = IP_CONST_DAMAGETYPE_COLD;
if (iSwitch == 2) iDamageType = IP_CONST_DAMAGETYPE_ELECTRICAL;
if (iSwitch == 3) iDamageType = IP_CONST_DAMAGETYPE_FIRE;
if (iSwitch == 4) iDamageType = IP_CONST_DAMAGETYPE_MAGICAL;
if (iSwitch == 5) iDamageType = IP_CONST_DAMAGETYPE_SONIC;
return iDamageType;
}
void EquipNPC(object oNPC, int iLevel)
//assigns equipment to NPC based on level
{
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC);
object oOffHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC);
int iWeaponBonus = iLevel/3;
if (iWeaponBonus > 12) iWeaponBonus = 12;
int iArmorBonus = (iLevel+2)/4;
int iOffhandBonus = iLevel/4;
int iDamageType = RandomDamageType();
//apply main weapon bonuses
IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(iWeaponBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
if (isMelee(oWeapon))
IPSafeAddItemProperty(oWeapon, ItemPropertyDamageBonus(iDamageType, iWeaponBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
else
{
object oAmmo = GetItemInSlot(INVENTORY_SLOT_ARROWS, oNPC);
if (GetObjectType(oAmmo)!= OBJECT_TYPE_INVALID)
IPSafeAddItemProperty(oAmmo, ItemPropertyDamageBonus(iDamageType, iWeaponBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
oAmmo = GetItemInSlot(INVENTORY_SLOT_BOLTS, oNPC);
if (GetObjectType(oAmmo)!= OBJECT_TYPE_INVALID)
IPSafeAddItemProperty(oAmmo, ItemPropertyDamageBonus(iDamageType, iWeaponBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
oAmmo = GetItemInSlot(INVENTORY_SLOT_BULLETS, oNPC);
if (GetObjectType(oAmmo)!= OBJECT_TYPE_INVALID)
IPSafeAddItemProperty(oAmmo, ItemPropertyDamageBonus(iDamageType, iWeaponBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
}
//apply armor bonus
IPSafeAddItemProperty(oArmor, ItemPropertyACBonus(iArmorBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
//apply shield or offhand weapon bonus
if (GetObjectType(oOffHand)!= OBJECT_TYPE_INVALID)
{
if (isArmor(oOffHand))
IPSafeAddItemProperty(oOffHand, ItemPropertyACBonus(iOffhandBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE);
if (isMelee(oOffHand))
IPSetWeaponEnhancementBonus(oOffHand, iOffhandBonus);
}
//AssignCommand(oNPC, SpeakString("Weapon bonus = " + IntToString(iWeaponBonus), TALKVOLUME_SHOUT));
//AssignCommand(oNPC, SpeakString("Armor bonus = " + IntToString(iArmorBonus), TALKVOLUME_SHOUT));
//AssignCommand(oNPC, SpeakString("Offhand bonus = " + IntToString(iOffhandBonus), TALKVOLUME_SHOUT));
}
void main()
{
object oPC = GetPCSpeaker();
object oCreature = ArenaSummon("cs1_fighter");
int iPCLevel = GetLevelByPosition(1, oPC) + GetLevelByPosition(2, oPC) + GetLevelByPosition(3, oPC);
int iLevelUp = 1;
while (iLevelUp < iPCLevel)
{
iLevelUp = LevelUpHenchman(oCreature, CLASS_TYPE_FIGHTER, TRUE);
}
EquipNPC(oCreature, iLevelUp);
SendMessageToPC(oPC, GetName(oCreature) + "'s level = " + IntToString(iLevelUp));
}