Fixed CCOH, Fixed starting GP, Fixed DMFI languages, Fix cep weapon appearances, Fixed new player start up system. Added PC deleter. Added ACP 4.1. Full compile. Updated release archive.
783 lines
26 KiB
Plaintext
783 lines
26 KiB
Plaintext
#include "nw_i0_plot"
|
|
|
|
void CreateAnObject(string sResource, object oPC, int iStackSize);
|
|
void GetNextStackedItem(object oPC, string sItemTag, int iCount, int iMode, string sStackResRef);
|
|
void GetNextItemPossessedBy(object oPC, string sItemTag);
|
|
string GetComponent(int iWoodType);
|
|
string GetComponentName(int iWoodType);
|
|
string CraftLookup(string sResRef, int iWoodType);
|
|
|
|
void main()
|
|
{
|
|
object oSelf = OBJECT_SELF;
|
|
object oItem = GetInventoryDisturbItem();
|
|
object oPC = GetLastDisturbed();
|
|
string sTag = GetTag(oItem);
|
|
string sSuccess = "";
|
|
string sFail = "";
|
|
string sItemResRef = "";
|
|
string sItemResRefPoor = "";
|
|
string sItemResRefExceptional = "";
|
|
int iRandom = 0;
|
|
int iSuccess = 0;
|
|
int iSkillGain = 0;
|
|
int iComponent1 = 1;
|
|
int iComponent2 = 0;
|
|
int iComponent3 = 0;
|
|
int iComponent1Stackable = 1;
|
|
int iComponent2Stackable = 0;
|
|
int iComponent3Stackable = 0;
|
|
int iStackSize = 0;
|
|
int iWoodType = GetLocalInt(oPC,"iUseThisWood"); // Credit to Lau3 for reporting this spacing error "iUseThis Wood".
|
|
int iPenalty = iWoodType*10;
|
|
int iDifficulty = 0;
|
|
string sComponent1 = "";
|
|
string sComponent2 = "";
|
|
string sComponent3 = "";
|
|
string sComponent1Name = "";
|
|
string sComponent2Name = "";
|
|
string sComponent3Name = "";
|
|
string sComponentResRef = "";
|
|
object oTemp = OBJECT_INVALID;
|
|
|
|
|
|
if (GetInventoryDisturbType()== INVENTORY_DISTURB_TYPE_ADDED)
|
|
{
|
|
// 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.
|
|
CopyItem(oItem,oPC,TRUE);
|
|
DestroyObject(oItem);
|
|
FloatingTextStringOnCreature("You can only craft by removing pattern tokens from this station.",oPC,FALSE);
|
|
}
|
|
|
|
if (GetStringLeft(GetResRef(oItem),10)=="flagswitch")
|
|
{
|
|
if (sTag == "SWITCH_WOOD1") SetLocalInt(oPC,"iUseThisWood",0);
|
|
if (sTag == "SWITCH_WOOD2") SetLocalInt(oPC,"iUseThisWood",1);
|
|
if (sTag == "SWITCH_WOOD3") SetLocalInt(oPC,"iUseThisWood",2);
|
|
if (sTag == "SWITCH_WOOD4") SetLocalInt(oPC,"iUseThisWood",3);
|
|
if (sTag == "SWITCH_WOOD5") SetLocalInt(oPC,"iUseThisWood",4);
|
|
if (sTag == "SWITCH_WOOD6") SetLocalInt(oPC,"iUseThisWood",5);
|
|
if (sTag == "SWITCH_WOOD7") SetLocalInt(oPC,"iUseThisWood",6);
|
|
if (sTag == "SWITCH_WOOD8") SetLocalInt(oPC,"iUseThisWood",7);
|
|
if (sTag == "SWITCH_WOOD9") SetLocalInt(oPC,"iUseThisWood",8);
|
|
if (sTag == "SWITCH_WOOD10") SetLocalInt(oPC,"iUseThisWood",9);
|
|
if (sTag == "SWITCH_WOOD11") SetLocalInt(oPC,"iUseThisWood",10);
|
|
if (sTag == "SWITCH_WOOD12") SetLocalInt(oPC,"iUseThisWood",11);
|
|
if (sTag == "SWITCH_WOOD13") SetLocalInt(oPC,"iUseThisWood",12);
|
|
if (sTag == "SWITCH_WOOD14") SetLocalInt(oPC,"iUseThisWood",13);
|
|
if (sTag == "SWITCH_WOOD15") SetLocalInt(oPC,"iUseThisWood",14);
|
|
if (sTag == "SWITCH_WOOD16") SetLocalInt(oPC,"iUseThisWood",15);
|
|
if (sTag == "SWITCH_WOOD17") SetLocalInt(oPC,"iUseThisWood",16);
|
|
if (sTag == "SWITCH_WOOD18") SetLocalInt(oPC,"iUseThisWood",17);
|
|
if (sTag == "SWITCH_WOOD19") SetLocalInt(oPC,"iUseThisWood",18);
|
|
string sWoodMessage = "Switching wood types. now set to "+GetStringLowerCase(GetName(oItem))+".";
|
|
FloatingTextStringOnCreature(sWoodMessage,oPC,FALSE);
|
|
DestroyObject(oItem);
|
|
string sTagSelf = GetTag(oSelf);
|
|
AssignCommand(oPC,DoPlaceableObjectAction(oSelf,PLACEABLE_ACTION_USE));
|
|
AssignCommand(oPC,DelayCommand(1.5,DoPlaceableObjectAction(GetNearestObjectByTag(sTagSelf,oPC,1),PLACEABLE_ACTION_USE)));
|
|
return;
|
|
}
|
|
|
|
if (GetStringLeft(GetResRef(oItem),7)!="pattern") return;
|
|
CopyObject(oItem,GetLocation(oPC),OBJECT_SELF,GetTag(oItem));
|
|
DestroyObject(oItem);
|
|
|
|
if (GetItemPossessedBy(oPC,"Carpenters_Tools")==OBJECT_INVALID)
|
|
{
|
|
SendMessageToPC(oPC,"You must have carpenters tools in order to create anything here.");
|
|
return;
|
|
}
|
|
|
|
if (GetLocalInt(OBJECT_SELF,"iAmInUse") != 0)
|
|
{
|
|
SendMessageToPC(oPC,"You must wait till the current club, quarterstaff, or torch is completed before starting another.");
|
|
return;
|
|
}
|
|
|
|
int iCarpentrySkill = GetCampaignInt("UOACraft","iCarpentrySkill",oPC);
|
|
int iCarpentryChance = iCarpentrySkill;
|
|
|
|
|
|
if (GetItemPossessedBy(oPC,"NoDrop_SkillLogBook")==OBJECT_INVALID)
|
|
{
|
|
CreateItemOnObject("skilllogbook",oPC,1);
|
|
}
|
|
|
|
if (iCarpentryChance < 350)
|
|
{
|
|
iCarpentryChance = GetAbilityScore(oPC,ABILITY_STRENGTH)*5;
|
|
iCarpentryChance = iCarpentryChance+(GetAbilityScore(oPC,ABILITY_DEXTERITY)*3);
|
|
iCarpentryChance = iCarpentryChance+(GetAbilityScore(oPC,ABILITY_CONSTITUTION)*2);
|
|
iCarpentryChance = iCarpentryChance*3;
|
|
if (iCarpentryChance>350)iCarpentryChance=350;
|
|
if (iCarpentrySkill > iCarpentryChance) iCarpentryChance=iCarpentrySkill;
|
|
}
|
|
|
|
iCarpentryChance = iCarpentryChance - iPenalty;
|
|
|
|
|
|
if (sTag == "pattern103") //club
|
|
{
|
|
iPenalty=200;
|
|
sSuccess = "You successfully form and shape the wood into a club.";
|
|
sFail = "You are unable to shape and form the wood properly, and the club is ruined.";
|
|
sItemResRefPoor = CraftLookup("wblcl002",iWoodType);
|
|
sItemResRef = CraftLookup("nw_wblcl001",iWoodType);
|
|
sItemResRefExceptional = CraftLookup("wblcl003",iWoodType);
|
|
sComponent1 = GetComponent(iWoodType);
|
|
iComponent1 = 2;
|
|
}
|
|
|
|
if (sTag == "pattern104") //quarterstaff
|
|
{
|
|
iPenalty = 300;
|
|
sSuccess = "You successfully form and shape the wood into a quarterstaff.";
|
|
sFail = "You are unable to shape and form the wood properly, and the quarterstaff is ruined.";
|
|
sItemResRefPoor = CraftLookup("wdbqs002",iWoodType);
|
|
sItemResRef = CraftLookup("nw_wdbqs001",iWoodType);
|
|
sItemResRefExceptional = CraftLookup("wdbqs003",iWoodType);
|
|
sComponent1 = GetComponent(iWoodType);
|
|
iComponent1 = 3;
|
|
}
|
|
|
|
if (sTag == "pattern109") //torches
|
|
{
|
|
iDifficulty = -50; //bonus of 5.0 skill to make torches
|
|
sSuccess = "You successfully form and shape the wood, combining the straw and tar into torches.";
|
|
sFail = "You are unable to create the torches, instead causing a sticky mess.";
|
|
sItemResRef = "nw_it_torch001";
|
|
sComponent1 = "WOOD_NORMAL"; //Normal Wood
|
|
iComponent1 = 1;
|
|
sComponent2 = "ITEM_STRAW"; //Bundle of Straw
|
|
iComponent2 = 1;
|
|
sComponent3 = "_UOA_BOTTLE_TAR"; //Bottle of Tar
|
|
iComponent3 = 1;
|
|
iComponent3Stackable=1;
|
|
sComponent1Name="normal wood";
|
|
sComponent2Name="bundles of straw";
|
|
sComponent3Name="bottles of tar";
|
|
}
|
|
|
|
if (sTag == "pattern117") //Wine Cask
|
|
{
|
|
iDifficulty = 400;
|
|
sSuccess = "You successfully form and shape the wood into an empty wine cask.";
|
|
sFail = "The wood warps, rendering the wine cask unuseable.";
|
|
sItemResRef = "item_cask_001"; //empty wine cask
|
|
sItemResRefPoor = sItemResRef;
|
|
sItemResRefExceptional = sItemResRef;
|
|
sComponent1 = "WOOD_NORMAL"; //Normal Wood
|
|
iComponent1 = 8;
|
|
sComponent1Name="normal wood";
|
|
}
|
|
if (sTag == "pattern118") //Beer barrel
|
|
{
|
|
iDifficulty = 450;
|
|
sSuccess = "You successfully form and shape the wood into an empty beer barrel.";
|
|
sFail = "The wood warps, rendering the beer barrel unuseable.";
|
|
sItemResRef = "item_cask_002"; //empty wine cask
|
|
sItemResRefPoor = sItemResRef;
|
|
sItemResRefExceptional = sItemResRef;
|
|
sComponent1 = "WOOD_NORMAL"; //Normal Wood
|
|
iComponent1 = 8;
|
|
sComponent1Name="normal wood";
|
|
}
|
|
if (sTag == "pattern119") //Mead barrel
|
|
{
|
|
iDifficulty = 400;
|
|
sSuccess = "You successfully form and shape the wood into an empty mead barrel.";
|
|
sFail = "The wood warps, rendering the mead barrel unuseable.";
|
|
sItemResRef = "item_cask_003"; //empty wine cask
|
|
sItemResRefPoor = sItemResRef;
|
|
sItemResRefExceptional = sItemResRef;
|
|
sComponent1 = "WOOD_MAPLE"; //Maple Wood
|
|
iComponent1 = 8;
|
|
sComponent1Name="maple wood";
|
|
}
|
|
if (sTag == "pattern120") //Whiskey barrel
|
|
{
|
|
iDifficulty = 200;
|
|
sSuccess = "You successfully form and shape the wood into an empty whiskey barrel.";
|
|
sFail = "The wood warps, rendering the whiskey barrel unuseable.";
|
|
sItemResRef = "item_cask_004"; //empty wine cask
|
|
sItemResRefPoor = sItemResRef;
|
|
sItemResRefExceptional = sItemResRef;
|
|
sComponent1 = "WOOD_OAK"; //Maple Wood
|
|
iComponent1 = 8;
|
|
sComponent1Name="oak wood";
|
|
}
|
|
if (sTag == "pattern121") //Rum barrel
|
|
{
|
|
iDifficulty = 300;
|
|
sSuccess = "You successfully form and shape the wood into an empty rum barrel.";
|
|
sFail = "The wood warps, rendering the rum barrel unuseable.";
|
|
sItemResRef = "item_cask_005"; //empty wine cask
|
|
sItemResRefPoor = sItemResRef;
|
|
sItemResRefExceptional = sItemResRef;
|
|
sComponent1 = "WOOD_OAK"; //Maple Wood
|
|
iComponent1 = 8;
|
|
sComponent2 = "_UOA_BOTTLE_TAR"; //Bottle of Tar
|
|
iComponent2 = 1;
|
|
iComponent2Stackable=1;
|
|
sComponent1Name="oak wood";
|
|
sComponent2Name="bottles of tar";
|
|
}
|
|
|
|
|
|
|
|
if (sTag=="pattern103")sComponent1Name = GetComponentName(iWoodType);
|
|
if (sTag=="pattern104")sComponent1Name = GetComponentName(iWoodType);
|
|
// check for components
|
|
if (GetNumItems(oPC,sComponent1) < iComponent1)
|
|
{
|
|
FloatingTextStringOnCreature("You do not have enough "+sComponent1Name+" to do this.",oPC,FALSE);
|
|
return;
|
|
}
|
|
if (iComponent2 > 0)
|
|
{
|
|
if (GetNumItems(oPC,sComponent2) < iComponent2)
|
|
{
|
|
FloatingTextStringOnCreature("You do not have enough "+sComponent2Name+" to do this.",oPC,FALSE);
|
|
return;
|
|
}
|
|
}
|
|
if (iComponent3 > 0)
|
|
{
|
|
if (GetNumItems(oPC,sComponent3) < iComponent3)
|
|
{
|
|
FloatingTextStringOnCreature("You do not have enough "+sComponent3Name+" to do this.",oPC,FALSE);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Remove all components
|
|
if (iComponent1Stackable != 0)
|
|
{
|
|
oTemp = GetItemPossessedBy(oPC,sComponent1);
|
|
sComponentResRef = GetResRef(oTemp);
|
|
iStackSize = GetNumStackedItems(oTemp);
|
|
DestroyObject(oTemp);
|
|
if (iStackSize < iComponent1)
|
|
{
|
|
iComponent1 = iComponent1 - iStackSize;
|
|
DelayCommand(2.0,GetNextStackedItem(oPC,sComponent1,iComponent1,1,sComponentResRef));
|
|
}
|
|
else
|
|
{
|
|
if (iStackSize > iComponent1)
|
|
{
|
|
iStackSize = iStackSize - iComponent1;
|
|
DelayCommand(1.0,CreateAnObject(sComponentResRef,oPC,iStackSize));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (iComponent1; iComponent1>0; iComponent1--)
|
|
{
|
|
GetNextItemPossessedBy(oPC,sComponent1);
|
|
}
|
|
}
|
|
if (sComponent2 != "")
|
|
{
|
|
if (iComponent2Stackable != 0)
|
|
{
|
|
oTemp = GetItemPossessedBy(oPC,sComponent2);
|
|
sComponentResRef = GetResRef(oTemp);
|
|
iStackSize = GetNumStackedItems(oTemp);
|
|
DestroyObject(oTemp);
|
|
if (iStackSize < iComponent2)
|
|
{
|
|
iComponent2 = iComponent2 - iStackSize;
|
|
DelayCommand(2.0,GetNextStackedItem(oPC,sComponent2,iComponent2,1, sComponentResRef));
|
|
}
|
|
else
|
|
{
|
|
if (iStackSize > iComponent2)
|
|
{
|
|
iStackSize = iStackSize - iComponent2;
|
|
DelayCommand(1.0,CreateAnObject(sComponentResRef,oPC,iStackSize));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (iComponent2; iComponent2>0; iComponent2--)
|
|
{
|
|
GetNextItemPossessedBy(oPC,sComponent2);
|
|
}
|
|
}
|
|
}
|
|
if (sComponent3 != "")
|
|
{
|
|
if (iComponent3Stackable != 0)
|
|
{
|
|
oTemp = GetItemPossessedBy(oPC,sComponent3);
|
|
sComponentResRef = GetResRef(oTemp);
|
|
iStackSize = GetNumStackedItems(oTemp);
|
|
DestroyObject(oTemp);
|
|
if (iStackSize < iComponent3)
|
|
{
|
|
iComponent3 = iComponent3 - iStackSize;
|
|
DelayCommand(2.0,GetNextStackedItem(oPC,sComponent3,iComponent3,1, sComponentResRef));
|
|
}
|
|
else
|
|
{
|
|
if (iStackSize > iComponent3)
|
|
{
|
|
iStackSize = iStackSize - iComponent3;
|
|
DelayCommand(1.0,CreateAnObject(sComponentResRef,oPC,iStackSize));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (iComponent3; iComponent3>0; iComponent3--)
|
|
{
|
|
GetNextItemPossessedBy(oPC,sComponent3);
|
|
}
|
|
}
|
|
}
|
|
|
|
iCarpentryChance = iCarpentryChance - iDifficulty;
|
|
if (iCarpentryChance <1) iCarpentryChance = 1;
|
|
|
|
PlaySound("as_cv_sawing1");
|
|
DelayCommand(3.0,PlaySound("as_cv_sawing1"));
|
|
DelayCommand(6.0,PlaySound("as_cv_sawing2"));
|
|
DelayCommand(9.0,PlaySound("as_cv_hammering1"));
|
|
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,13.0));
|
|
|
|
SetLocalInt(OBJECT_SELF,"iAmInUse",99);
|
|
DelayCommand(13.1,SetLocalInt(OBJECT_SELF,"iAmInUse",0));
|
|
|
|
|
|
iRandom = Random(1000);
|
|
if (iRandom <= iCarpentryChance)
|
|
{
|
|
iSuccess = 1;
|
|
int iSuccess2 = 1;
|
|
if (sTag!="pattern109") // non-torches
|
|
{
|
|
iCarpentryChance = iCarpentryChance - 50;
|
|
if (Random(1000) <= iCarpentryChance) iSuccess2 = iSuccess2+1;
|
|
iCarpentryChance = iCarpentryChance-100;
|
|
if (Random(1000) <= iCarpentryChance) iSuccess2 = iSuccess2+1;
|
|
iCarpentryChance = iCarpentryChance + 150;
|
|
if (iSuccess2 == 1)AssignCommand(oPC,DelayCommand(12.0,CreateAnObject(sItemResRefPoor,oPC,1)));
|
|
if (iSuccess2 == 2)AssignCommand(oPC,DelayCommand(12.0,CreateAnObject(sItemResRef,oPC,1)));
|
|
if (iSuccess2 == 3)AssignCommand(oPC,DelayCommand(12.0,CreateAnObject(sItemResRefExceptional,oPC,1)));
|
|
}
|
|
if (sTag=="pattern109") //torches
|
|
{
|
|
AssignCommand(oPC,DelayCommand(12.0,CreateAnObject(sItemResRef,oPC,1)));
|
|
AssignCommand(oPC,DelayCommand(12.1,CreateAnObject(sItemResRef,oPC,1)));
|
|
AssignCommand(oPC,DelayCommand(12.2,CreateAnObject(sItemResRef,oPC,1)));
|
|
AssignCommand(oPC,DelayCommand(12.3,CreateAnObject(sItemResRef,oPC,1)));
|
|
AssignCommand(oPC,DelayCommand(12.4,CreateAnObject(sItemResRef,oPC,1)));
|
|
}
|
|
AssignCommand(oPC,DelayCommand(12.0,FloatingTextStringOnCreature(sSuccess,oPC,FALSE)));
|
|
if (Random(1000) >= iCarpentrySkill)
|
|
{
|
|
if (d10(1)+1 >= iCarpentryChance/100) iSkillGain = 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC,DelayCommand(12.0,FloatingTextStringOnCreature(sFail,oPC,FALSE)));
|
|
return;
|
|
}
|
|
|
|
//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 = "";
|
|
iCarpentrySkill++;
|
|
sOldSkill2 = IntToString(iCarpentrySkill);
|
|
sOldSkill = "."+GetStringRight(sOldSkill2,1);
|
|
if (iCarpentrySkill > 9)
|
|
{
|
|
sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill;
|
|
}
|
|
else
|
|
{
|
|
sOldSkill = "0"+sOldSkill;
|
|
}
|
|
if (iCarpentrySkill <= 1000)
|
|
{
|
|
DelayCommand(13.0,SetCampaignInt("UOACraft","iCarpentrySkill",iCarpentrySkill,oPC));
|
|
DelayCommand(13.0,SendMessageToPC(oPC,"==================================="));
|
|
DelayCommand(13.0,SendMessageToPC(oPC,"Your skill in carpentry has gone up!"));
|
|
DelayCommand(13.0,SendMessageToPC(oPC,"Current carpentry skill : "+ sOldSkill+"%"));
|
|
DelayCommand(13.0,SendMessageToPC(oPC,"==================================="));
|
|
if (GetLocalInt(GetModule(),"_UOACraft_XP")!=0) DelayCommand(12.9,GiveXPToCreature(oPC,GetLocalInt(GetModule(),"_UOACraft_XP")));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//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));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
void CreateAnObject(string sResource, object oPC, int iStackSize)
|
|
{
|
|
CreateItemOnObject(sResource,oPC,iStackSize);
|
|
return;
|
|
}
|
|
|
|
void GetNextStackedItem(object oPC, string sItemTag, int iCount, int iMode, string sStackResRef)
|
|
{
|
|
object oTemp = GetItemPossessedBy(oPC,sItemTag);
|
|
int iStackCount = GetNumStackedItems(oTemp);
|
|
int iTemp = iCount - iStackCount;
|
|
iStackCount = iStackCount-iCount;
|
|
DestroyObject(oTemp);
|
|
if (iStackCount > 0)
|
|
{
|
|
SendMessageToPC(oPC,"You should get back "+IntToString(iStackCount));
|
|
DelayCommand(1.0,CreateAnObject(sStackResRef,oPC,iStackCount));
|
|
}
|
|
// this next line *should* recursively call this function if the number of
|
|
// stacked items does not meet the required number of items to be destroyed.
|
|
if (iTemp > 0) DelayCommand(1.0,GetNextStackedItem(oPC,sItemTag,iTemp, iMode, sStackResRef));
|
|
return;
|
|
}
|
|
|
|
void GetNextItemPossessedBy(object oPC, string sItemTag)
|
|
{
|
|
object oTemp = GetItemPossessedBy(oPC,sItemTag);
|
|
DestroyObject(oTemp);
|
|
return;
|
|
}
|
|
|
|
string GetComponent(int iWoodType)
|
|
{
|
|
switch (iWoodType)
|
|
{
|
|
case 1:{return "WOOD_OLIVE"; break;}
|
|
case 2:{return "WOOD_WILLOW"; break;}
|
|
case 3:{return "WOOD_PINE"; break;}
|
|
case 4:{return "WOOD_FIR"; break;}
|
|
case 5:{return "WOOD_MANGROVE"; break;}
|
|
case 6:{return "WOOD_CHERRY"; break;}
|
|
case 7:{return "WOOD_MAPLE"; break;}
|
|
case 8:{return "WOOD_ALMOND"; break;}
|
|
case 9:{return "WOOD_HICKORY"; break;}
|
|
case 10:{return "WOOD_BIRCH"; break;}
|
|
case 11:{return "WOOD_ELDER"; break;}
|
|
case 12:{return "WOOD_WALNUT"; break;}
|
|
case 13:{return "WOOD_ELM"; break;}
|
|
case 14:{return "WOOD_MAHOGANY"; break;}
|
|
case 15:{return "WOOD_OAK"; break;}
|
|
case 16:{return "WOOD_YEW"; break;}
|
|
case 17:{return "WOOD_REDWOOD"; break;}
|
|
case 18:{return "WOOD_IRONWOOD"; break;}
|
|
default:{return "WOOD_NORMAL"; break;}
|
|
}
|
|
return "WOOD_NORMAL";
|
|
}
|
|
|
|
string GetComponentName(int iWoodType)
|
|
{
|
|
switch (iWoodType)
|
|
{
|
|
case 1:{return "olive branches"; break;}
|
|
case 2:{return "willow branches"; break;}
|
|
case 3:{return "pine logs"; break;}
|
|
case 4:{return "fir logs"; break;}
|
|
case 5:{return "mangrove logs"; break;}
|
|
case 6:{return "cherry logs"; break;}
|
|
case 7:{return "maple logs"; break;}
|
|
case 8:{return "almond logs"; break;}
|
|
case 9:{return "hickory logs"; break;}
|
|
case 10:{return "birch logs"; break;}
|
|
case 11:{return "elder logs"; break;}
|
|
case 12:{return "walnut logs"; break;}
|
|
case 13:{return "elm logs"; break;}
|
|
case 14:{return "mahogany logs"; break;}
|
|
case 15:{return "oak logs"; break;}
|
|
case 16:{return "yew branches"; break;}
|
|
case 17:{return "redwood"; break;}
|
|
case 18:{return "ironwood"; break;}
|
|
default:{return "normal logs"; break;}
|
|
}
|
|
return "normal logs";
|
|
}
|
|
|
|
|
|
string CraftLookup(string sResRef, int iWoodType)
|
|
{
|
|
if (GetStringLeft(sResRef,9)=="item_cask") return sResRef;
|
|
switch (iWoodType)
|
|
{
|
|
case 0:
|
|
{
|
|
return sResRef;
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
// Olive Club
|
|
if (sResRef=="wblcl002") return "wblcl005";
|
|
if (sResRef=="nw_wblcl001") return "wblcl004";
|
|
if (sResRef=="wblcl003") return "wblcl006";
|
|
// Olive Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs005";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs004";
|
|
if (sResRef=="wdbqs003") return "wdbqs006";
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
// Willow Club
|
|
if (sResRef=="wblcl002") return "wblcl008";
|
|
if (sResRef=="nw_wblcl001") return "wblcl007";
|
|
if (sResRef=="wblcl003") return "wblcl009";
|
|
// Willow Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs008";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs007";
|
|
if (sResRef=="wdbqs003") return "wdbqs009";
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
// Pine Club
|
|
if (sResRef=="wblcl002") return "wblcl011";
|
|
if (sResRef=="nw_wblcl001") return "wblcl010";
|
|
if (sResRef=="wblcl003") return "wblcl012";
|
|
// Pine Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs011";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs010";
|
|
if (sResRef=="wdbqs003") return "wdbqs012";
|
|
break;
|
|
}
|
|
case 4:
|
|
{
|
|
// Fir Club
|
|
if (sResRef=="wblcl002") return "wblcl014";
|
|
if (sResRef=="nw_wblcl001") return "wblcl013";
|
|
if (sResRef=="wblcl003") return "wblcl015";
|
|
// Fir Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs014";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs013";
|
|
if (sResRef=="wdbqs003") return "wdbqs015";
|
|
break;
|
|
}
|
|
case 5:
|
|
{
|
|
// Mangrove Club
|
|
if (sResRef=="wblcl002") return "wblcl017";
|
|
if (sResRef=="nw_wblcl001") return "wblcl016";
|
|
if (sResRef=="wblcl003") return "wblcl018";
|
|
// Mangrove Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs017";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs016";
|
|
if (sResRef=="wdbqs003") return "wdbqs018";
|
|
break;
|
|
}
|
|
case 6:
|
|
{
|
|
// Cherry Club
|
|
if (sResRef=="wblcl002") return "wblcl020";
|
|
if (sResRef=="nw_wblcl001") return "wblcl019";
|
|
if (sResRef=="wblcl003") return "wblcl021";
|
|
// Cherry Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs020";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs019";
|
|
if (sResRef=="wdbqs003") return "wdbqs021";
|
|
break;
|
|
}
|
|
case 7:
|
|
{
|
|
// Maple Club
|
|
if (sResRef=="wblcl002") return "wblcl023";
|
|
if (sResRef=="nw_wblcl001") return "wblcl022";
|
|
if (sResRef=="wblcl003") return "wblcl024";
|
|
// Maple Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs023";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs022";
|
|
if (sResRef=="wdbqs003") return "wdbqs024";
|
|
break;
|
|
}
|
|
case 8:
|
|
{
|
|
// Almond Club
|
|
if (sResRef=="wblcl002") return "wblcl026";
|
|
if (sResRef=="nw_wblcl001") return "wblcl025";
|
|
if (sResRef=="wblcl003") return "wblcl027";
|
|
// Almond Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs026";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs025";
|
|
if (sResRef=="wdbqs003") return "wdbqs027";
|
|
break;
|
|
}
|
|
case 9:
|
|
{
|
|
// Hickory Club
|
|
if (sResRef=="wblcl002") return "wblcl029";
|
|
if (sResRef=="nw_wblcl001") return "wblcl028";
|
|
if (sResRef=="wblcl003") return "wblcl030";
|
|
// Hickory Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs029";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs028";
|
|
if (sResRef=="wdbqs003") return "wdbqs030";
|
|
break;
|
|
}
|
|
case 10:
|
|
{
|
|
// Birch Club
|
|
if (sResRef=="wblcl002") return "wblcl032";
|
|
if (sResRef=="nw_wblcl001") return "wblcl031";
|
|
if (sResRef=="wblcl003") return "wblcl033";
|
|
// Birch Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs032";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs031";
|
|
if (sResRef=="wdbqs003") return "wdbqs033";
|
|
break;
|
|
}
|
|
case 11:
|
|
{
|
|
// Elder Club
|
|
if (sResRef=="wblcl002") return "wblcl035";
|
|
if (sResRef=="nw_wblcl001") return "wblcl034";
|
|
if (sResRef=="wblcl003") return "wblcl036";
|
|
// Elder Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs035";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs034";
|
|
if (sResRef=="wdbqs003") return "wdbqs036";
|
|
break;
|
|
}
|
|
case 12:
|
|
{
|
|
// Walnut Club
|
|
if (sResRef=="wblcl002") return "wblcl038";
|
|
if (sResRef=="nw_wblcl001") return "wblcl037";
|
|
if (sResRef=="wblcl003") return "wblcl039";
|
|
// Walnut Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs038";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs037";
|
|
if (sResRef=="wdbqs003") return "wdbqs039";
|
|
break;
|
|
}
|
|
case 13:
|
|
{
|
|
// Elm Club
|
|
if (sResRef=="wblcl002") return "wblcl041";
|
|
if (sResRef=="nw_wblcl001") return "wblcl040";
|
|
if (sResRef=="wblcl003") return "wblcl042";
|
|
// Elm Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs041";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs040";
|
|
if (sResRef=="wdbqs003") return "wdbqs042";
|
|
break;
|
|
}
|
|
case 14:
|
|
{
|
|
// Mahogany Club
|
|
if (sResRef=="wblcl002") return "wblcl044";
|
|
if (sResRef=="nw_wblcl001") return "wblcl043";
|
|
if (sResRef=="wblcl003") return "wblcl045";
|
|
// Mahogany Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs044";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs043";
|
|
if (sResRef=="wdbqs003") return "wdbqs045";
|
|
break;
|
|
}
|
|
case 15:
|
|
{
|
|
// Oak Club
|
|
if (sResRef=="wblcl002") return "wblcl047";
|
|
if (sResRef=="nw_wblcl001") return "wblcl046";
|
|
if (sResRef=="wblcl003") return "wblcl048";
|
|
// Oak Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs047";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs046";
|
|
if (sResRef=="wdbqs003") return "wdbqs048";
|
|
break;
|
|
}
|
|
case 16:
|
|
{
|
|
// Yew Club
|
|
if (sResRef=="wblcl002") return "wblcl050";
|
|
if (sResRef=="nw_wblcl001") return "wblcl049";
|
|
if (sResRef=="wblcl003") return "wblcl051";
|
|
// Yew Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs050";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs049";
|
|
if (sResRef=="wdbqs003") return "wdbqs051";
|
|
break;
|
|
}
|
|
case 17:
|
|
{
|
|
// Redwood Club
|
|
if (sResRef=="wblcl002") return "wblcl053";
|
|
if (sResRef=="nw_wblcl001") return "wblcl052";
|
|
if (sResRef=="wblcl003") return "wblcl054";
|
|
// Redwood Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs053";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs052";
|
|
if (sResRef=="wdbqs003") return "wdbqs054";
|
|
break;
|
|
}
|
|
case 18:
|
|
{
|
|
// Ironwood Club
|
|
if (sResRef=="wblcl002") return "wblcl056";
|
|
if (sResRef=="nw_wblcl001") return "wblcl055";
|
|
if (sResRef=="wblcl003") return "wblcl057";
|
|
// Ironwood Quarterstaff
|
|
if (sResRef=="wdbqs002") return "wdbqs056";
|
|
if (sResRef=="nw_wdbqs001") return "wdbqs055";
|
|
if (sResRef=="wdbqs003") return "wdbqs057";
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
return sResRef;
|
|
break;
|
|
}
|
|
}
|
|
return sResRef;
|
|
}
|