Added missing crafting maps, removed unnecessary maps, changed a few miscellaneous things.
1064 lines
34 KiB
Plaintext
1064 lines
34 KiB
Plaintext
//New enchantarmor 10-21-05
|
|
//#include "_persist_01a"
|
|
#include "x2_inc_itemprop"
|
|
#include "aps_include"
|
|
|
|
void GetNextItemPossessedBy(object oPC, string sItemTag);
|
|
void GetNextStackedItem(object oPC, string sEssenceTag, int iCount);
|
|
void CreateAnObject(string sResource, object oPC, int iStackSize);
|
|
object CreatePlaceable(string sObject, location lPlace, float fDuration);
|
|
object oTestValid=OBJECT_INVALID;
|
|
void EnchantArmor(object oItem,int wBonus);
|
|
void EnPowerArmor(object oItem,int DamageType,int DamageQty);
|
|
void GiveToPC(object oItem, object oPC);
|
|
|
|
string sDialogResRef="";
|
|
string sEssence;
|
|
void main()
|
|
{
|
|
object oPC = GetLastDisturbed();
|
|
object oItem = GetInventoryDisturbItem();
|
|
string sItemTag = GetTag(oItem);
|
|
string sReEnchantMessage = "INVALID";
|
|
int iReEnchant = 0;
|
|
int iBaseItem=0;
|
|
int iMaxReEnchant;
|
|
int iMaxReEnchant2;
|
|
int iMaxReEnchant3;
|
|
int wBonus=1;
|
|
int wEffect=0;
|
|
int iEnpower=0;
|
|
|
|
int iEnchantSkill = GetPersistentInt(oPC,"iEnchantSkill","UOACraft");
|
|
int iEnchantChance = iEnchantSkill;
|
|
|
|
|
|
if (GetInventoryDisturbType()!= INVENTORY_DISTURB_TYPE_ADDED)
|
|
{
|
|
if (sItemTag=="ENCHANT_ARMOR1")
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",1);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +1.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR2")
|
|
{
|
|
if (iEnchantChance >= 100)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",2);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +2.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR3")
|
|
{
|
|
if (iEnchantChance >= 157)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",3);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +3.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR4")
|
|
{
|
|
if (iEnchantChance >= 214)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",4);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +4.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR5")
|
|
{
|
|
if (iEnchantChance >= 271)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",5);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +5",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR6")
|
|
{
|
|
if (iEnchantChance >= 328)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",6);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +6.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENCHANT_ARMOR7")
|
|
{
|
|
if (iEnchantChance >= 385)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",7);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +7.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR8")
|
|
{
|
|
if (iEnchantChance >= 442)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",8);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +8.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR9")
|
|
{
|
|
if (iEnchantChance >= 500)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",9);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +9.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR10")
|
|
{
|
|
if (iEnchantChance >= 590)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",10);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +10.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR11")
|
|
{
|
|
if (iEnchantChance >= 640)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",11);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +11.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR12")
|
|
{
|
|
if (iEnchantChance >= 730)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",12);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +12.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR13")
|
|
{
|
|
if (iEnchantChance >= 840)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",13);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +13.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENCHANT_ARMOR14")
|
|
{
|
|
if (iEnchantChance >= 950)
|
|
{
|
|
SetLocalInt(oPC,"iEnchant",14);
|
|
SetLocalInt(oPC,"iEnpower",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enchant ARMOR to +14.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enchant Armor with this.",oPC,FALSE);
|
|
}
|
|
if (sItemTag=="ENPOWER_ARMOR1")
|
|
{
|
|
if (iEnchantChance >= 500)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",1);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Acid Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR2")
|
|
{
|
|
if (iEnchantChance >= 500)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",2);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Cold Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR3")
|
|
{
|
|
if (iEnchantChance >= 500)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",3);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Electrical Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR4")
|
|
{
|
|
if (iEnchantChance >= 500)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",4);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Fire Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR5")
|
|
{
|
|
if (iEnchantChance >= 700)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",5);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Acid Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR6")
|
|
{
|
|
if (iEnchantChance >= 700)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",6);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Cold Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR7")
|
|
{
|
|
if (iEnchantChance >= 700)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",7);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Electrical Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR8")
|
|
{
|
|
if (iEnchantChance >= 700)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",8);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Fire Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR9")
|
|
{
|
|
if (iEnchantChance >= 800)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",9);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Acid Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR10")
|
|
{
|
|
if (iEnchantChance >= 800)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",10);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Cold Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR11")
|
|
{
|
|
if (iEnchantChance >= 800)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",12);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Fire Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR12")
|
|
{
|
|
if (iEnchantChance >= 800)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",13);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Slashing Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR13")
|
|
{
|
|
if (iEnchantChance >= 900)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",14);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Piercing Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR14")
|
|
{
|
|
if (iEnchantChance >= 900)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",15);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Bludgeoning Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR15")
|
|
{
|
|
if (iEnchantChance >= 900)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",16);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Negative Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
if (sItemTag=="ENPOWER_ARMOR16")
|
|
{
|
|
if (iEnchantChance >= 800)
|
|
{
|
|
SetLocalInt(oPC,"iEnpower",11);
|
|
SetLocalInt(oPC,"iEnchant",0);
|
|
FloatingTextStringOnCreature("Enchanting forge is now set to Enpower ARMOR with Electrical Resist.",oPC,FALSE);
|
|
}
|
|
else
|
|
FloatingTextStringOnCreature("You do not have sufficient skill to enpower Armor with this.",oPC,FALSE);
|
|
}
|
|
|
|
CopyObject(oItem,GetLocation(oPC),OBJECT_SELF,GetTag(oItem));
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
|
|
// The following 3 lines are to ensure compatability with UOAbigal's Persistent Token System.
|
|
// You can replace them with whatever 'no-drop' code you have or comment them out.
|
|
string sNoDropFlag = (GetStringLeft(GetTag(oItem),6));
|
|
if (sNoDropFlag == "NoDrop" || sNoDropFlag == "TOKEN_"||sNoDropFlag=="_TBOX_")
|
|
return;
|
|
if (GetBaseItemType(oItem)==BASE_ITEM_LARGEBOX)
|
|
{
|
|
DestroyObject(oItem);
|
|
SendMessageToPC(oPC,"To avoid possible dupe exploits, the container placed in this bag may be destroyed.");
|
|
return;
|
|
}
|
|
// End of compatability portion.
|
|
|
|
if (GetLocalInt(OBJECT_SELF,"iAmInUse")!=0)
|
|
{
|
|
FloatingTextStringOnCreature("You must wait for this item to finish enchanting..",oPC,FALSE);
|
|
CopyItem(oItem,oPC,TRUE);
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
iBaseItem = GetBaseItemType(oItem);
|
|
string sItemResRef = "";
|
|
int iStackSize = 0;
|
|
int iMaxStack = 5;
|
|
string sSuccess = "";
|
|
|
|
// Determins the PC level in the class WIZARD (CLASS_TYPE_WIZARD)
|
|
/* int wizard_lvl = 0;
|
|
wizard_lvl = GetLevelByClass(CLASS_TYPE_WIZARD,oPC);
|
|
SendMessageToPC(oPC,"Your Level in Wizard == " + IntToString(wizard_lvl));
|
|
|
|
if (wizard_lvl <=7 )
|
|
{
|
|
CopyItem(oItem,oPC,TRUE);
|
|
FloatingTextStringOnCreature("You are not a powerful enough wizard you cannot Enchant this item!",oPC,FALSE);
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
*/
|
|
|
|
if (GetStringLeft(sItemTag,5) != "ARMR_" && GetStringLeft(sItemTag,6) != "CLOTH_")
|
|
{
|
|
CopyItem(oItem,oPC,TRUE);
|
|
FloatingTextStringOnCreature("You cannot Enchant this item!",oPC,FALSE);
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
//int iEnchantChance = GetTokenPair(oPC,14,2);
|
|
// int iEnchantSkill = GetCampaignInt("UOACraft","iEnchantSkill",oPC);
|
|
// int iEnchantChance = iEnchantSkill;
|
|
|
|
|
|
if (iEnchantChance <=350)
|
|
{
|
|
iEnchantChance = GetAbilityScore(oPC,ABILITY_INTELLIGENCE)*3;
|
|
iEnchantChance = iEnchantChance + GetAbilityScore(oPC,ABILITY_DEXTERITY) + GetAbilityScore(oPC,ABILITY_WISDOM);
|
|
iEnchantChance = iEnchantChance * 3;
|
|
if (iEnchantChance >350) iEnchantChance = 350;
|
|
if (iEnchantSkill > iEnchantChance) iEnchantChance = iEnchantSkill;
|
|
}
|
|
|
|
if (sItemResRef=="INVALID")
|
|
{
|
|
SendMessageToPC(oPC,"You cannot Enchant this item!");
|
|
CopyItem(oItem,oPC,TRUE);
|
|
DestroyObject(oItem,0.1);
|
|
return;
|
|
}
|
|
|
|
if (iEnchantChance < 1)
|
|
{
|
|
if (iReEnchant==0)
|
|
{
|
|
FloatingTextStringOnCreature("You have no idea how to Enchant this item.",oPC,FALSE);
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("You have no idea how to reEnchant this item.",oPC,FALSE);
|
|
}
|
|
CopyItem(oItem,oPC,TRUE);
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
string sFlame= "";
|
|
int iEnchant = GetLocalInt(oPC,"iEnchant");
|
|
float fAngleToVector = 0.4;
|
|
|
|
switch(iEnchant) //se chance of success
|
|
{
|
|
case 1:
|
|
{
|
|
fAngleToVector = 0.5;
|
|
// iMaxStack = iMaxStack+3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance+150;
|
|
// sFlame = "plc_flamesmall";
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
fAngleToVector = 0.6;
|
|
// iMaxStack = iMaxStack+1;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance+100;
|
|
// sFlame = "plc_flamesmall";
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
fAngleToVector = 0.6;
|
|
// iMaxStack = iMaxStack+1;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance+75;
|
|
// sFlame = "plc_flamesmall";
|
|
break;
|
|
}
|
|
case 4:
|
|
{
|
|
fAngleToVector = 0.2;
|
|
// iMaxStack = iMaxStack-2;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance+50;
|
|
// DelayCommand(6.0,SendMessageToPC(oPC,"Current Enchanting chance : "+ IntToString(iEnchantChance)+"%"));
|
|
// sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 5:
|
|
{
|
|
fAngleToVector = 0.3;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance;
|
|
// sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 6:
|
|
{
|
|
fAngleToVector = 0.3;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-100;
|
|
// sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 7:
|
|
{
|
|
fAngleToVector = 0.3;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-250;
|
|
// sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 8:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-270;
|
|
//DelayCommand(6.0,SendMessageToPC(oPC,"Value of iEnchant : " + IntToString(iEnchant)));
|
|
//DelayCommand(6.0,SendMessageToPC(oPC,"Current Enchanting chance : "+ IntToString(iEnchantChance)+"%"));
|
|
sFlame = "plc_flamemedium";
|
|
break;
|
|
}
|
|
case 9:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-290;
|
|
sFlame = "plc_flamemedium";
|
|
break;
|
|
}
|
|
case 10:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-310;
|
|
sFlame = "plc_flamemedium";
|
|
break;
|
|
}
|
|
case 11:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-330;
|
|
sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 12:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-350;
|
|
sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 13:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-370;
|
|
sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
case 14:
|
|
{
|
|
fAngleToVector = 0.4;
|
|
// iMaxStack = iMaxStack -3;
|
|
if (iReEnchant==0)iEnchantChance = iEnchantChance-390;
|
|
sFlame = "plc_flamelarge";
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
sFlame = "plc_flamemedium";
|
|
break;
|
|
}
|
|
}
|
|
////////////////////////////////////////////////////////////////////////
|
|
iEnpower = GetLocalInt(oPC,"iEnpower");
|
|
switch(iEnpower)
|
|
{
|
|
case 1:
|
|
{
|
|
sEssence = "essence001";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ACID);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_10);
|
|
}
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
sEssence = "essence017";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_COLD);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_10);
|
|
}
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
sEssence = "essence006";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_10);
|
|
}
|
|
break;
|
|
}
|
|
case 4:
|
|
{
|
|
sEssence = "essence011";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_FIRE);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_10);
|
|
}
|
|
break;
|
|
}
|
|
case 5:
|
|
{
|
|
sEssence = "essence001";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ACID);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 6:
|
|
{
|
|
sEssence = "essence017";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_COLD);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 7:
|
|
{
|
|
sEssence = "essence006";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 8:
|
|
{
|
|
sEssence = "essence011";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_FIRE);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 9:
|
|
{
|
|
sEssence = "essence001";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ACID);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_20);
|
|
}
|
|
break;
|
|
}
|
|
case 10:
|
|
{
|
|
sEssence = "essence017";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_COLD);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_20);
|
|
}
|
|
break;
|
|
}
|
|
case 11:
|
|
{
|
|
sEssence = "essence006";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_20);
|
|
}
|
|
break;
|
|
}
|
|
case 12:
|
|
{
|
|
sEssence = "essence011";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_FIRE);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_20);
|
|
}
|
|
break;
|
|
}
|
|
case 13:
|
|
{
|
|
sEssence = "essence016";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_SLASHING);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 14:
|
|
{
|
|
sEssence = "essence016";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_PIERCING);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 15:
|
|
{
|
|
sEssence = "essence016";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_BLUDGEONING);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
case 16:
|
|
{
|
|
sEssence = "essence016";
|
|
if(GetItemPossessedBy(oPC,sEssence) != oTestValid)
|
|
{
|
|
SetLocalInt(oPC,"DamageType",IP_CONST_DAMAGETYPE_NEGATIVE);
|
|
SetLocalInt(oPC,"DamageQty",IP_CONST_DAMAGERESIST_15);
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
int DamageType=0;
|
|
int DamageQty=0;
|
|
break;
|
|
}
|
|
} //end of switch
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
location lSelf = GetLocation(OBJECT_SELF);
|
|
float fSelf = GetFacing(OBJECT_SELF);
|
|
vector vSelf = GetPosition(OBJECT_SELF);
|
|
object oArea = GetArea(OBJECT_SELF);
|
|
vector vFire;
|
|
int vDirection;
|
|
vFire = vSelf + (AngleToVector(fSelf) * fAngleToVector);
|
|
location lFire = Location(oArea,vFire,fSelf);
|
|
object oFire = CreatePlaceable(sFlame, lFire, 6.0);
|
|
|
|
AssignCommand(oPC,PlaySound("al_mg_chntmagic1"));
|
|
AssignCommand(oPC,PlaySound("al_mg_crystalgd1"));
|
|
AssignCommand(oPC,PlaySound("al_mg_jacobs1"));
|
|
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,4.0));
|
|
PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE,1.0,6.0);
|
|
|
|
SetLocalInt(OBJECT_SELF,"iAmInUse",99);
|
|
DelayCommand(7.0,SetLocalInt(OBJECT_SELF,"iAmInUse",0));
|
|
//ensure at least 1 respawn 10 minutes after used...
|
|
//this is to prevent a broken placeable that is used, with a 'in use' delay
|
|
//which would cancel the respawn
|
|
if (GetLocalInt(OBJECT_SELF,"iAmSetToRespawn")!=99)
|
|
{
|
|
SetLocalInt(OBJECT_SELF,"iAmSetToRespawn",99);
|
|
DelayCommand(600.0,ExecuteScript("_onclose_clear",OBJECT_SELF));
|
|
}
|
|
|
|
int iRandom = 0;
|
|
|
|
int iSuccess = 0;
|
|
int iSkillGain = 0;
|
|
|
|
////////////////////////////////////////////begin stackables
|
|
object oTemp = OBJECT_INVALID;
|
|
oTemp = GetItemPossessedBy(oPC,sEssence);
|
|
object oEssence = oTemp;
|
|
string sEssenceTag = GetTag(oEssence);
|
|
int iCount = 0;
|
|
int iEssence = 1;
|
|
iCount = GetNumStackedItems(oTemp);
|
|
DestroyObject(oTemp);
|
|
if (iCount<iEssence)
|
|
{
|
|
iEssence = iEssence - iCount;
|
|
//DelayCommand(2.0,GetNextStackedItem(oPC,sEssenceTag,iEssence)); //Not needed as long as only use 1 essence.
|
|
}
|
|
else
|
|
{
|
|
if (iCount > iEssence)
|
|
{
|
|
iCount = iCount - iEssence;
|
|
SendMessageToPC(oPC,"You should get back "+IntToString(iCount)+" essences");
|
|
DelayCommand(1.0,CreateAnObject(sEssence,oPC,iCount));
|
|
}
|
|
}
|
|
////////////////////////////////////////////////////////////////end stackables
|
|
|
|
iEnpower = GetLocalInt(oPC,"iEnpower");
|
|
iEnchantChance = iEnchantChance - (iEnchantSkill * iEnpower/100);
|
|
//SendMessageToPC(oPC,"Value of iEnpower : " + IntToString(iEnpower));
|
|
//SendMessageToPC(oPC,"Current Enchanting chance : "+ IntToString(iEnchantChance)+"%");
|
|
|
|
if (Random(1000) <= iEnchantChance)
|
|
{
|
|
iSuccess = 1;
|
|
iStackSize = 1;
|
|
if (iEnchant>=1)
|
|
{
|
|
DelayCommand(5.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_CONJURE1,1.0,1.0)));
|
|
DelayCommand(5.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0,1.0)));
|
|
DelayCommand(5.0,EnchantArmor(oItem,iEnchant));
|
|
// DelayCommand(5.0,EnchantItem(oItem));
|
|
DelayCommand(6.0, GiveToPC(oItem,oPC));
|
|
sSuccess = "You successfully Enchant the Item";
|
|
DelayCommand(6.0,FloatingTextStringOnCreature(sSuccess,oPC,FALSE));
|
|
DelayCommand(5.8,PlaySound("vs_chant_conj_lm"));
|
|
DelayCommand(6.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_BLUR,FALSE),OBJECT_SELF,2.0));
|
|
} //end of iEnchant if
|
|
|
|
int iEnpower = GetLocalInt(oPC,"iEnpower");
|
|
int DamageType =GetLocalInt(oPC,"DamageType");
|
|
int DamageQty =GetLocalInt(oPC,"DamageQty");
|
|
if (iEnpower>=1)
|
|
{
|
|
DelayCommand(5.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_CONJURE2,1.0,1.0)));
|
|
DelayCommand(5.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0,1.0)));
|
|
DelayCommand(5.0,EnPowerArmor(oItem,DamageType,DamageQty));
|
|
DelayCommand(6.0, GiveToPC(oItem,oPC));
|
|
sSuccess = "You successfully Enpower the Item";
|
|
DelayCommand(6.0,FloatingTextStringOnCreature(sSuccess,oPC,FALSE));
|
|
DelayCommand(5.8,PlaySound("vs_chant_ench_hm"));
|
|
DelayCommand(6.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_BEAM_LIGHTNING,FALSE),OBJECT_SELF,2.0));
|
|
} //end of iEnpower if
|
|
|
|
}
|
|
else
|
|
{
|
|
DelayCommand(5.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_TIRED,1.0,1.0)));
|
|
DelayCommand(6.0,FloatingTextStringOnCreature("The incantation fails and the item is lost.",oPC,FALSE));
|
|
DelayCommand(5.8,PlaySound("as_na_steamshrt2"));
|
|
DelayCommand(6.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_PARALYZED ,FALSE),OBJECT_SELF,2.0));
|
|
}
|
|
DelayCommand(6.0,DestroyObject(oItem));
|
|
|
|
if (iSuccess == 1)
|
|
{
|
|
iRandom = Random(1000);
|
|
if (iEnchantSkill > 700) iRandom = iRandom + 25;
|
|
if (iEnchantSkill > 998) iRandom = iRandom - 20;
|
|
if (iEnchantSkill > 999) iRandom = 0;
|
|
if (iRandom > iEnchantSkill)
|
|
{
|
|
if (d10(1)+1 >= iEnchantChance/100) iSkillGain = 1;
|
|
}
|
|
}
|
|
|
|
//Ensure no more than 1 skill gain every 10 seconds to avoid token droppage.
|
|
if (iSkillGain ==1)
|
|
{
|
|
if (GetLocalInt(oPC,"iSkillGain")!= 0)
|
|
{
|
|
iSkillGain = 0;
|
|
}
|
|
else
|
|
{
|
|
SetLocalInt(oPC,"iSkillGain",99);
|
|
DelayCommand(10.0,SetLocalInt(oPC,"iSkillGain",0));
|
|
}
|
|
} // end of if iskill gain == 1
|
|
|
|
|
|
if (iSkillGain ==1)
|
|
{
|
|
string sOldSkill = "";
|
|
string sOldSkill2 = "";
|
|
iEnchantSkill++;
|
|
sOldSkill2 = IntToString(iEnchantSkill);
|
|
sOldSkill = "."+GetStringRight(sOldSkill2,1);
|
|
if (iEnchantSkill > 9)
|
|
{
|
|
sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill;
|
|
}
|
|
else
|
|
{
|
|
sOldSkill = "0"+sOldSkill;
|
|
}
|
|
if (iEnchantSkill <= 1000)
|
|
{
|
|
// DelayCommand(6.0,SetTokenPair(oPC,14,2,iEnchantSkill));
|
|
DelayCommand(6.0,SetPersistentInt(oPC,"iEnchantSkill",iEnchantSkill,0,"UOACraft"));
|
|
DelayCommand(6.0,SendMessageToPC(oPC,"==================================="));
|
|
DelayCommand(6.0,SendMessageToPC(oPC,"Your skill in Enchanting has gone up!"));
|
|
DelayCommand(6.0,SendMessageToPC(oPC,"Current Enchanting skill : "+ sOldSkill+"%"));
|
|
DelayCommand(6.0,SendMessageToPC(oPC,"==================================="));
|
|
DelayCommand(6.0, GiveXPToCreature(oPC, 5));
|
|
}
|
|
|
|
} // end of skill gain
|
|
} //end of main
|
|
void CreateAnObject(string sResource, object oPC, int iStackSize)
|
|
{
|
|
|
|
CreateItemOnObject(sResource,oPC,iStackSize);
|
|
return;
|
|
}
|
|
|
|
object CreatePlaceable(string sObject, location lPlace, float fDuration)
|
|
{
|
|
object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE,sObject,lPlace,FALSE);
|
|
if (fDuration != 0.0)
|
|
DestroyObject(oPlaceable,fDuration);
|
|
return oPlaceable;
|
|
}
|
|
|
|
void EnchantArmor(object oItem,int wBonus)
|
|
{
|
|
itemproperty iBonus = ItemPropertyACBonus(wBonus);
|
|
IPSafeAddItemProperty(oItem,iBonus);
|
|
}
|
|
|
|
void GiveToPC(object oItem, object oPC)
|
|
{
|
|
CopyItem(oItem,oPC,TRUE);
|
|
}
|
|
void EnPowerArmor(object oItem,int DamageType,int DamageQty)
|
|
{
|
|
itemproperty iEffect = ItemPropertyDamageResistance(DamageType,DamageQty);
|
|
IPSafeAddItemProperty(oItem,iEffect);
|
|
}
|
|
|
|
|
|
/*
|
|
IP_CONST_DAMAGEBONUS_1
|
|
IP_CONST_DAMAGEBONUS_10
|
|
IP_CONST_DAMAGEBONUS_1d10
|
|
IP_CONST_DAMAGEBONUS_1d12
|
|
IP_CONST_DAMAGEBONUS_1d4
|
|
IP_CONST_DAMAGEBONUS_1d6
|
|
IP_CONST_DAMAGEBONUS_1d8
|
|
IP_CONST_DAMAGEBONUS_2
|
|
IP_CONST_DAMAGEBONUS_2d10
|
|
IP_CONST_DAMAGEBONUS_2d12
|
|
IP_CONST_DAMAGEBONUS_2d4
|
|
IP_CONST_DAMAGEBONUS_2d6
|
|
IP_CONST_DAMAGEBONUS_2d8
|
|
IP_CONST_DAMAGEBONUS_3
|
|
IP_CONST_DAMAGEBONUS_4
|
|
IP_CONST_DAMAGEBONUS_5
|
|
IP_CONST_DAMAGEBONUS_6
|
|
IP_CONST_DAMAGEBONUS_7
|
|
IP_CONST_DAMAGEBONUS_8
|
|
IP_CONST_DAMAGEBONUS_9
|
|
|
|
|
|
IP_CONST_DAMAGETYPE_ACID
|
|
Acid damagetype.
|
|
IP_CONST_DAMAGETYPE_BLUDGEONING
|
|
Bludgenoning damagetype.
|
|
IP_CONST_DAMAGETYPE_COLD
|
|
Cold damagetype.
|
|
IP_CONST_DAMAGETYPE_DIVINE
|
|
Divine energy damage type.
|
|
IP_CONST_DAMAGETYPE_ELECTRICAL
|
|
Electrical damage type.
|
|
IP_CONST_DAMAGETYPE_FIRE
|
|
Fire damage type.
|
|
IP_CONST_DAMAGETYPE_MAGICAL
|
|
Any magical (i.e. not physical) damage type.
|
|
IP_CONST_DAMAGETYPE_NEGATIVE
|
|
Negative energy damage type.
|
|
IP_CONST_DAMAGETYPE_PHYSICAL
|
|
Physical (i.e. not magical) damage type.
|
|
IP_CONST_DAMAGETYPE_PIERCING
|
|
Piercing damage type.
|
|
IP_CONST_DAMAGETYPE_POSITIVE
|
|
Positive energy damage type.
|
|
IP_CONST_DAMAGETYPE_SLASHING
|
|
Slashing damage type.
|
|
IP_CONST_DAMAGETYPE_SONIC
|
|
Sonic damage type.
|
|
IP_CONST_DAMAGETYPE_SUBDUAL
|
|
Subdual damage type.
|
|
*/
|
|
|
|
/*
|
|
IP_CONST_DAMAGERESIST_10 Resist 10 damage.
|
|
|
|
IP_CONST_DAMAGERESIST_15 Resist 15 damage.
|
|
|
|
IP_CONST_DAMAGERESIST_20 Resist 20 damage.
|
|
|
|
IP_CONST_DAMAGERESIST_25 Resist 25 damage.
|
|
|
|
IP_CONST_DAMAGERESIST_30 Resist 30 damage.
|
|
|
|
*/
|
|
/*
|
|
IP_CONST_DAMAGETYPE_ACID Acid damagetype.
|
|
|
|
IP_CONST_DAMAGETYPE_BLUDGEONING Bludgenoning damagetype.
|
|
|
|
IP_CONST_DAMAGETYPE_COLD Cold damagetype.
|
|
|
|
IP_CONST_DAMAGETYPE_DIVINE Divine energy damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_ELECTRICAL Electrical damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_FIRE Fire damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_MAGICAL Any magical (i.e. not physical) damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_NEGATIVE Negative energy damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_PHYSICAL Physical (i.e. not magical) damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_PIERCING Piercing damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_POSITIVE Positive energy damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_SLASHING Slashing damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_SONIC Sonic damage type.
|
|
|
|
IP_CONST_DAMAGETYPE_SUBDUAL Subdual damage type
|
|
|
|
*/
|