Aschbourne_PRC8/_module/nss/_enchant_armor.nss
GetOffMyYarn 7f75e229f9 Adds and Changes
Added missing crafting maps, removed unnecessary maps, changed a few miscellaneous things.
2024-09-14 13:52:39 -04:00

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
*/