#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)); }