481 lines
15 KiB
Plaintext
481 lines
15 KiB
Plaintext
|
//#include "_persist_01a"
|
||
|
#include "nw_i0_plot"
|
||
|
|
||
|
void CreateAnObject(string sResource, object oPC);
|
||
|
void GetNextItemPossessedBy(object oPC, string sItemTag);
|
||
|
object CreatePlaceable(string sObject, location lPlace, float fDuration);
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
if (GetInventoryDisturbType()!= INVENTORY_DISTURB_TYPE_ADDED)
|
||
|
{
|
||
|
if (GetLastDisturbed() == OBJECT_SELF)
|
||
|
{
|
||
|
DestroyObject(GetInventoryDisturbItem());
|
||
|
return;
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
object oPC = GetLastDisturbed();
|
||
|
object oItem = GetInventoryDisturbItem();
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
CopyItem(oItem,oPC,TRUE);
|
||
|
SendMessageToPC(oPC,"You must wait till the pelt in the oven is done before starting another.");
|
||
|
DestroyObject(oItem);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
string sItemTag = GetTag(oItem);
|
||
|
string sPeltResRef = "";
|
||
|
string sPeltFailResRef = "";
|
||
|
|
||
|
if (GetStringLeft(sItemTag,5) != "PELT_")
|
||
|
{
|
||
|
CopyItem(oItem,oPC,TRUE);
|
||
|
FloatingTextStringOnCreature("You cannot cure this item!",oPC,FALSE);
|
||
|
DestroyObject(oItem);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//int iTanChance = GetTokenPair(oPC,14,9);
|
||
|
//int iTanSkill = iTanChance;
|
||
|
int iTanSkill = GetCampaignInt("UOACraft","iCureSkill",oPC);
|
||
|
int iTanChance = iTanSkill;
|
||
|
int iKindling = 1;
|
||
|
int iSalt = 1;
|
||
|
string sPeltSuccess;
|
||
|
string sPeltFail;
|
||
|
|
||
|
if (iTanChance <350)
|
||
|
{
|
||
|
iTanChance = GetAbilityScore(oPC,ABILITY_DEXTERITY)*3;
|
||
|
iTanChance = iTanChance + GetAbilityScore(oPC,ABILITY_INTELLIGENCE) + GetAbilityScore(oPC,ABILITY_WISDOM);
|
||
|
iTanChance = iTanChance * 6;
|
||
|
if (iTanChance >350) iTanChance = 350;
|
||
|
if (iTanSkill > iTanChance) iTanChance = iTanSkill;
|
||
|
}
|
||
|
|
||
|
if (sItemTag == "PELT_BROWNBEAR")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the brown bear pelt.";
|
||
|
sPeltFail = "You fail to cure the brown bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_BLACKBEAR")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured011";
|
||
|
sPeltFailResRef = "cured026";
|
||
|
sPeltSuccess = "You carefully cure the black bear pelt.";
|
||
|
sPeltFail = "You fail to cure the black bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_GRIZZLYBEAR")
|
||
|
{
|
||
|
iSalt = 3;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 550;
|
||
|
sPeltResRef = "cured013";
|
||
|
sPeltFailResRef = "cured028";
|
||
|
sPeltSuccess = "You carefully cure the grizzly bear pelt.";
|
||
|
sPeltFail = "You fail to cure the grizzly bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_POLARBEAR")
|
||
|
{
|
||
|
iSalt = 3;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 650;
|
||
|
sPeltResRef = "cured015";
|
||
|
sPeltFailResRef = "cured030";
|
||
|
sPeltSuccess = "You carefully cure the polar bear pelt.";
|
||
|
sPeltFail = "You fail to cure the polar bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DIREBEAR")
|
||
|
{
|
||
|
iSalt = 3;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 600;
|
||
|
sPeltResRef = "cured013";
|
||
|
sPeltFailResRef = "cured028";
|
||
|
sPeltSuccess = "You carefully cure the dire bear pelt.";
|
||
|
sPeltFail = "You fail to cure the dire bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_ANCIENTDIREBEAR")
|
||
|
{
|
||
|
iSalt = 3;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 700;
|
||
|
sPeltResRef = "cured014";
|
||
|
sPeltFailResRef = "cured029";
|
||
|
sPeltSuccess = "You carefully cure the ancient dire bear pelt.";
|
||
|
sPeltFail = "You fail to cure the ancient dire bear pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DOG")
|
||
|
{
|
||
|
iTanChance = iTanChance - 100;
|
||
|
sPeltResRef = "cured004";
|
||
|
sPeltFailResRef = "cured019";
|
||
|
sPeltSuccess = "You carefully cure the dog pelt.";
|
||
|
sPeltFail = "You fail to cure the dog pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_WOLF")
|
||
|
{
|
||
|
iTanChance = iTanChance - 200;
|
||
|
sPeltResRef = "cured007";
|
||
|
sPeltFailResRef = "cured022";
|
||
|
sPeltSuccess = "You carefully cure the wolf pelt.";
|
||
|
sPeltFail = "You fail to cure the wolf pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_WORG")
|
||
|
{
|
||
|
iTanChance = iTanChance - 250;
|
||
|
sPeltResRef = "cured008";
|
||
|
sPeltFailResRef = "cured023";
|
||
|
sPeltSuccess = "You carefully cure the worg pelt.";
|
||
|
sPeltFail = "You fail to cure the worg pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DIREWOLF")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iTanChance = iTanChance - 450;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the dire wolf pelt.";
|
||
|
sPeltFail = "You fail to cure the dire wolf pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_WINTERWOLF")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 300;
|
||
|
sPeltResRef = "cured009";
|
||
|
sPeltFailResRef = "cured024";
|
||
|
sPeltSuccess = "You carefully cure the winter wolf pelt.";
|
||
|
sPeltFail = "You fail to cure the winter wolf pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_COUGAR")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the cougar pelt.";
|
||
|
sPeltFail = "You fail to cure the cougar pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_CRAGCAT")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured009";
|
||
|
sPeltFailResRef = "cured024";
|
||
|
sPeltSuccess = "You carefully cure the crag cat pelt.";
|
||
|
sPeltFail = "You fail to cure the crag cat pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_PANTHER")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured008";
|
||
|
sPeltFailResRef = "cured023";
|
||
|
sPeltSuccess = "You carefully cure the panther pelt.";
|
||
|
sPeltFail = "You fail to cure the panther pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_MALARPANTHER")
|
||
|
{
|
||
|
iSalt = 3;
|
||
|
iKindling=2;
|
||
|
iTanChance = iTanChance - 550;
|
||
|
sPeltResRef = "cured011";
|
||
|
sPeltFailResRef = "cured026";
|
||
|
sPeltSuccess = "You carefully cure the malar panther pelt.";
|
||
|
sPeltFail = "You fail to cure the malar panther pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_LION")
|
||
|
{
|
||
|
iSalt = 2;
|
||
|
iKindling = 2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the lion pelt.";
|
||
|
sPeltFail = "You fail to cure the lion pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_LEOPARD")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iTanChance = iTanChance - 350;
|
||
|
sPeltResRef = "cured007";
|
||
|
sPeltFailResRef = "cured022";
|
||
|
sPeltSuccess = "You carefully cure the leopard pelt.";
|
||
|
sPeltFail = "You fail to cure the leopard pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_JAGUAR")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iTanChance = iTanChance - 400;
|
||
|
sPeltResRef = "cured008";
|
||
|
sPeltFailResRef = "cured023";
|
||
|
sPeltSuccess = "You carefully cure the jaguar pelt.";
|
||
|
sPeltFail = "You fail to cure the jaguar pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DIRETIGER")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iKindling=2;
|
||
|
iTanChance = iTanChance - 500;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the dire tiger pelt.";
|
||
|
sPeltFail = "You fail to cure the dire tiger pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_BADGER")
|
||
|
{
|
||
|
sPeltResRef = "cured003";
|
||
|
sPeltFailResRef = "cured018";
|
||
|
sPeltSuccess = "You carefully cure the badger pelt.";
|
||
|
sPeltFail = "You fail to cure the badger pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_BAT")
|
||
|
{
|
||
|
sPeltResRef = "cured002";
|
||
|
sPeltFailResRef = "cured017";
|
||
|
sPeltSuccess = "You carefully cure the bat pelt.";
|
||
|
sPeltFail = "You fail to cure the bat pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_COW")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iTanChance = iTanChance - 400;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the cow pelt.";
|
||
|
sPeltFail = "You fail to cure the cow pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DEER")
|
||
|
{
|
||
|
iTanChance = iTanChance - 100;
|
||
|
sPeltResRef = "cured004";
|
||
|
sPeltFailResRef = "cured019";
|
||
|
sPeltSuccess = "You carefully cure the deer pelt.";
|
||
|
sPeltFail = "You fail to cure the deer pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DIREBADGER")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iTanChance = iTanChance - 200;
|
||
|
sPeltResRef = "cured006";
|
||
|
sPeltFailResRef = "cured021";
|
||
|
sPeltSuccess = "You carefully cure the dire badger pelt.";
|
||
|
sPeltFail = "You fail to cure the dire badger pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_DIRERAT")
|
||
|
{
|
||
|
iTanChance = iTanChance - 150;
|
||
|
sPeltResRef = "cured005";
|
||
|
sPeltFailResRef = "cured020";
|
||
|
sPeltSuccess = "You carefully cure the dire rat pelt.";
|
||
|
sPeltFail = "You fail to cure the dire rat pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_RAT")
|
||
|
{
|
||
|
//iSalt = 3; //remove this
|
||
|
//iKindling = 3;
|
||
|
sPeltResRef = "cured001";
|
||
|
sPeltFailResRef = "cured016";
|
||
|
sPeltSuccess = "You carefully cure the rat pelt.";
|
||
|
sPeltFail = "You fail to cure the rat pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_OX")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iKindling=2;
|
||
|
iTanChance = iTanChance - 300;
|
||
|
sPeltResRef = "cured010";
|
||
|
sPeltFailResRef = "cured025";
|
||
|
sPeltSuccess = "You carefully cure the ox pelt.";
|
||
|
sPeltFail = "You fail to cure the ox pelt.";
|
||
|
}
|
||
|
if (sItemTag == "PELT_WHITESTAG")
|
||
|
{
|
||
|
iSalt=2;
|
||
|
iKindling=2;
|
||
|
iTanChance = iTanChance - 400;
|
||
|
sPeltResRef = "cured012";
|
||
|
sPeltFailResRef = "cured027";
|
||
|
sPeltSuccess = "You carefully cure the white stag pelt.";
|
||
|
sPeltFail = "You fail to cure the white stag pelt.";
|
||
|
}
|
||
|
|
||
|
if (iTanChance < 1)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("You have no idea how to cure this pelt.",oPC,FALSE);
|
||
|
CopyItem(oItem,oPC,TRUE);
|
||
|
DestroyObject(oItem);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (GetNumItems(oPC,"ITEM_KINDLING") < iKindling)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("You do not have enough kindling to cure this pelt.",oPC,FALSE);
|
||
|
CopyItem(oItem,oPC,TRUE);
|
||
|
DestroyObject(oItem);
|
||
|
return;
|
||
|
}
|
||
|
if (GetNumItems(oPC,"ITEM_TANNERSSALT") < iSalt)
|
||
|
{
|
||
|
FloatingTextStringOnCreature("You do not have enough tanner's salt to cure this pelt.",oPC,FALSE);
|
||
|
CopyItem(oItem,oPC,TRUE);
|
||
|
DestroyObject(oItem);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SetLocalInt(OBJECT_SELF,"iAmInUse",99);
|
||
|
DelayCommand(8.0,SetLocalInt(OBJECT_SELF,"iAmInUse",0));
|
||
|
|
||
|
object oTemp = OBJECT_INVALID;
|
||
|
oTemp = GetItemPossessedBy(oPC,"ITEM_TANNERSSALT");
|
||
|
DestroyObject(oTemp);
|
||
|
oTemp = GetItemPossessedBy(oPC,"ITEM_KINDLING");
|
||
|
DestroyObject(oTemp);
|
||
|
|
||
|
if (iSalt>1) DelayCommand(1.0,GetNextItemPossessedBy(oPC,"ITEM_TANNERSSALT"));
|
||
|
if (iSalt>2) DelayCommand(2.0,GetNextItemPossessedBy(oPC,"ITEM_TANNERSSALT"));
|
||
|
if (iSalt>3) DelayCommand(3.0,GetNextItemPossessedBy(oPC,"ITEM_TANNERSSALT"));
|
||
|
if (iKindling>1) DelayCommand(4.0,GetNextItemPossessedBy(oPC,"ITEM_KINDLING"));
|
||
|
if (iKindling>2) DelayCommand(5.0,GetNextItemPossessedBy(oPC,"ITEM_KINDLING"));
|
||
|
if (iKindling>3) DelayCommand(6.0,GetNextItemPossessedBy(oPC,"ITEM_KINDLING"));
|
||
|
|
||
|
|
||
|
|
||
|
AssignCommand(oPC,PlaySound("al_cv_firebowl1"));
|
||
|
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,6.0));
|
||
|
//PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE,1.0,6.0);
|
||
|
location lSelf = GetLocation(OBJECT_SELF);
|
||
|
float fSelf = GetFacing(OBJECT_SELF)+180.0;
|
||
|
vector vSelf = GetPosition(OBJECT_SELF);
|
||
|
object oArea = GetArea(OBJECT_SELF);
|
||
|
vector vFire;
|
||
|
int vDirection;
|
||
|
vFire = vSelf + (AngleToVector(fSelf) * 0.7);
|
||
|
location lFire = Location(oArea,vFire,fSelf);
|
||
|
object oFire = CreatePlaceable("plc_flamemedium", lFire, 6.0);
|
||
|
DelayCommand(3.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SMOKE_PUFF,FALSE),GetLocation(oFire),6.0));
|
||
|
AssignCommand(oFire,PlaySound("as_na_steamlong1"));
|
||
|
|
||
|
int iRandom = Random(1000);
|
||
|
int iSuccess = 0;
|
||
|
int iSkillGain = 0;
|
||
|
|
||
|
if (iRandom < iTanChance)
|
||
|
{
|
||
|
iSuccess = 1;
|
||
|
}
|
||
|
|
||
|
DelayCommand(6.0,DestroyObject(oItem));
|
||
|
if (iSuccess == 1)
|
||
|
{
|
||
|
DelayCommand(6.0,FloatingTextStringOnCreature(sPeltSuccess,oPC,FALSE));
|
||
|
DelayCommand(6.0,CreateAnObject(sPeltResRef,oPC));
|
||
|
iRandom = Random(1000);
|
||
|
if (iRandom >= iTanSkill)
|
||
|
{
|
||
|
if (d10(1)+1 >= iTanChance/100) iSkillGain = 1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DelayCommand(6.0,FloatingTextStringOnCreature(sPeltFail,oPC,FALSE));
|
||
|
if (Random(1000) <= iTanSkill)
|
||
|
{
|
||
|
DelayCommand(7.0,FloatingTextStringOnCreature("You manage to recover the ruined pelt....",oPC,FALSE));
|
||
|
DelayCommand(7.0,CreateAnObject(sPeltFailResRef,oPC));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//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));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if (iSkillGain ==1)
|
||
|
{
|
||
|
string sOldSkill = "";
|
||
|
string sOldSkill2 = "";
|
||
|
iTanSkill++;
|
||
|
sOldSkill2 = IntToString(iTanSkill);
|
||
|
sOldSkill = "."+GetStringRight(sOldSkill2,1);
|
||
|
if (iTanSkill > 9)
|
||
|
{
|
||
|
sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sOldSkill = "0"+sOldSkill;
|
||
|
}
|
||
|
if (iTanSkill <= 1000)
|
||
|
{
|
||
|
//DelayCommand(6.0,SetTokenPair(oPC,14,9,iTanSkill));
|
||
|
DelayCommand(6.0,SetCampaignInt("UOACraft","iCureSkill",iTanSkill,oPC));
|
||
|
DelayCommand(6.0,SendMessageToPC(oPC,"================================="));
|
||
|
DelayCommand(6.0,SendMessageToPC(oPC,"Your skill in curing has gone up!"));
|
||
|
DelayCommand(6.0,SendMessageToPC(oPC,"Current curing skill : "+ sOldSkill+"%"));
|
||
|
DelayCommand(6.0,SendMessageToPC(oPC,"================================="));
|
||
|
if (GetLocalInt(GetModule(),"_UOACraft_XP")!=0) DelayCommand(5.9,GiveXPToCreature(oPC,GetLocalInt(GetModule(),"_UOACraft_XP")));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void CreateAnObject(string sResource, object oPC)
|
||
|
{
|
||
|
CreateItemOnObject(sResource,oPC,1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void GetNextItemPossessedBy(object oPC, string sItemTag)
|
||
|
{
|
||
|
object oTemp = GetItemPossessedBy(oPC,sItemTag);
|
||
|
DestroyObject(oTemp);
|
||
|
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;
|
||
|
}
|