Aschbourne_PRC8/_module/nss/_craft_papermill.nss
Jaysyn904 5d27edafba Major update
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.
2024-09-16 23:40:48 -04:00

258 lines
8.1 KiB
Plaintext

//#include "_persist_01a"
void CreateAnObject(string sResource, object oPC, int iStackSize);
void main()
{
object oPC = GetLastDisturbed();
object oItem = GetInventoryDisturbItem();
object oSelf = OBJECT_SELF;
string sItemTag = GetTag(oItem);
string sItemResRef = GetResRef(oItem);
string sSuccess = "";
string sProduct = "papr_blank_";
int iProduct = 0;
int iDifficulty = 0;
// 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 (GetStringLeft(sItemTag,5)!="pulp_")
{
CopyItem(oItem,oPC,TRUE);
FloatingTextStringOnCreature("This is not bleached pulp...",oPC,FALSE);
DestroyObject(oItem);
return;
}
if (GetStringRight(sItemTag,3)!="001") //pulp_wood_raw001, pulp_rice_raw001, pulp_silk_raw001
{
CopyItem(oItem,oPC,TRUE);
FloatingTextStringOnCreature("You must first bleach this pulp before pressing and baking it into paper.",oPC,FALSE);
DestroyObject(oItem);
return;
}
if (GetLocalInt(OBJECT_SELF,"iAmInUse")!=0)
{
CopyItem(oItem,oPC,TRUE);
FloatingTextStringOnCreature("The paper mill is not yet done with it's current task....",oPC,FALSE);
DestroyObject(oItem);
return;
}
object oItem2 = GetItemPossessedBy(oSelf,GetTag(oItem));
int iStackSize = GetNumStackedItems(oItem2);
//FloatingTextStringOnCreature("STACK = "+IntToString(iStackSize),oPC,FALSE);
if (sItemTag=="pulp_wood_raw001")
{
//Normal Paper
iDifficulty = 250;
sProduct=sProduct+"norma";
sSuccess = "You carefully screen and press the wood pulp into normal paper.";
}
if (sItemTag=="pulp_rice_raw001")
{
//Rice Paper
sProduct=sProduct+"rice";
sSuccess = "You carefully screen and press the rice pulp into rice paper.";
}
if (sItemTag=="pulp_silk_raw001")
{
//Silk Paper
iDifficulty = 500;
sProduct=sProduct+"silk";
sSuccess = "You carefully screen and press the silk and wood pulp into silk paper.";
}
//int iPaperSkill = GetTokenPair(oPC,13,13);
int iPaperSkill = GetCampaignInt("UOACraft","iPaperSkill",oPC);
int iPaperChance = iPaperSkill;
if (iPaperSkill <350)
{
iPaperChance = GetAbilityScore(oPC,ABILITY_DEXTERITY)*5;
iPaperChance = iPaperChance + (GetAbilityScore(oPC,ABILITY_WISDOM)*3);
iPaperChance = iPaperChance + (GetAbilityScore(oPC,ABILITY_INTELLIGENCE)*2);
iPaperChance = iPaperChance *3;
if (iPaperChance>350)iPaperChance = 350;
if (iPaperSkill>iPaperChance) iPaperChance = iPaperSkill;
}
if (iDifficulty>iPaperSkill)
{
FloatingTextStringOnCreature("You have no idea how to process this pulp into paper.",oPC,FALSE);
CopyItem(oItem,oPC,TRUE);
DestroyObject(oItem);
return;
}
SetLocalInt(OBJECT_SELF,"iAmInUse",99);
DelayCommand(31.0,SetLocalInt(OBJECT_SELF,"iAmInUse",0));
location lSelf = GetLocation(OBJECT_SELF);
vector vSelf = GetPosition(OBJECT_SELF);
object oArea = GetArea(OBJECT_SELF);
vector vFire;
int vDirection;
float fSelf;
int iRandom;
float fDistance;
location lFire;
fSelf = GetFacing(OBJECT_SELF)+270.0;
int iLoop = 30;
float fDelay3 = 0.0;
int iPosition = 15;
for (iLoop; iLoop>0; iLoop--)
{
if (iLoop>14)
{
iPosition = iPosition - 1;
}
else
{
iPosition = iPosition+1;
}
if (iLoop==14) fSelf = GetFacing(OBJECT_SELF)+90;
fDelay3 = fDelay3+1.0;
fDistance = (IntToFloat(iPosition)/17.0);
vFire = vSelf + (AngleToVector(fSelf) * fDistance);
vFire.z += 0.5;
lFire = Location(oArea,vFire,fSelf);
DelayCommand(fDelay3,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SMOKE_PUFF),lFire));
}
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,30.0));
PlaySound("al_cv_millwheel1");
DelayCommand(5.9,PlaySound("al_cv_millwheel1"));
DelayCommand(11.9,PlaySound("al_cv_millwheel1"));
DelayCommand(17.9,PlaySound("al_cv_millwheel1"));
DelayCommand(23.9,PlaySound("al_cv_millwheel1"));
PlaySound("al_cv_firetorch1");
DelayCommand(5.9,PlaySound("al_cv_firetorch1"));
DelayCommand(11.9,PlaySound("al_cv_firetorch1"));
DelayCommand(17.9,PlaySound("al_cv_firetorch1"));
DelayCommand(23.9,PlaySound("al_cv_firetorch1"));
PlaySound("al_cv_fanlg1");
DelayCommand(4.9,PlaySound("al_cv_fanlg1"));
DelayCommand(9.9,PlaySound("al_cv_fanlg1"));
DelayCommand(14.9,PlaySound("al_cv_fanlg1"));
DelayCommand(19.9,PlaySound("al_cv_fanlg1"));
DelayCommand(24.9,PlaySound("al_cv_fanlg1"));
PlaySound("al_cv_pump");
DelayCommand(5.9,PlaySound("al_cv_pump"));
DelayCommand(8.9,PlaySound("al_cv_pump"));
DelayCommand(11.9,PlaySound("al_cv_pump"));
DelayCommand(14.9,PlaySound("al_cv_pump"));
DelayCommand(17.9,PlaySound("al_cv_pump"));
DelayCommand(20.9,PlaySound("al_cv_pump"));
DelayCommand(23.9,PlaySound("al_cv_pump"));
DelayCommand(26.9,PlaySound("al_cv_pump"));
DelayCommand(2.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(6.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(10.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(14.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(18.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(22.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(26.0,PlaySound("as_cv_smithbelo1"));
DelayCommand(30.0,PlaySound("as_cv_smithbelo1"));
int iSkillGain=0;
iPaperChance = iPaperChance-iDifficulty;
if (Random(1000)<iPaperChance)
{
if (Random(1000) >= iPaperSkill)
{
if (d10(1)+1 >= iPaperChance/100) iSkillGain = 1;
}
DelayCommand(30.0,CreateAnObject(sProduct,oPC,iStackSize));
DelayCommand(30.0,FloatingTextStringOnCreature(sSuccess,oPC,FALSE));
//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 = "";
iPaperSkill++;
sOldSkill2 = IntToString(iPaperSkill);
sOldSkill = "."+GetStringRight(sOldSkill2,1);
if (iPaperSkill > 9)
{
sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill;
}
else
{
sOldSkill = "0"+sOldSkill;
}
if (iPaperSkill <= 1000)
{
//DelayCommand(30.0,SetTokenPair(oPC,13,13,iPaperSkill));
DelayCommand(30.0,SetCampaignInt("UOACraft","iPaperSkill",iPaperSkill,oPC));
DelayCommand(30.0,SendMessageToPC(oPC,"======================================"));
DelayCommand(30.0,SendMessageToPC(oPC,"Your skill in papermaking has gone up!"));
DelayCommand(30.0,SendMessageToPC(oPC,"Current papermaking skill : "+ sOldSkill+"%"));
DelayCommand(30.0,SendMessageToPC(oPC,"======================================"));
if (GetLocalInt(GetModule(),"_UOACraft_XP")!=0) DelayCommand(29.9,GiveXPToCreature(oPC,GetLocalInt(GetModule(),"_UOACraft_XP")));
}
}
DestroyObject(oItem);
}
else
{
DelayCommand(30.0,FloatingTextStringOnCreature("The paper fails to set properly to the screen and is lost.",oPC,FALSE));
if (iStackSize>1) iStackSize = Random(iStackSize)-1;
if (iStackSize>0)
{
DelayCommand(31.0,FloatingTextStringOnCreature("You manage to recover some of the pulp..",oPC,FALSE));
DelayCommand(31.0,CreateAnObject(sItemTag,oPC,iStackSize));
DestroyObject(oItem);
return;
}
}
DestroyObject(oItem);
}
void CreateAnObject(string sResource, object oPC, int iStackSize)
{
CreateItemOnObject(sResource,oPC,iStackSize);
return;
}