Aschbourne_PRC8/_module/_skin_corpse.nss
GetOffMyYarn 8622e5ce08 Area Changes and other fixes
added areas and ccoh,
fixed some areas to work with crafting
fixed some on death issues
added server entry/ooc
2024-08-30 10:38:04 -04:00

165 lines
6.2 KiB
Plaintext

//#include "_persist_01a"
void CreateAnObject(string sResource, object oPC);
void CreatePlaceable(string sObject, location lPlace, float fDuration);
void main()
{
if (GetLocalInt(OBJECT_SELF,"sIAmUsed") != 0) return;
SetLocalInt(OBJECT_SELF,"sIAmUsed",99);
object oPC = GetLastUsedBy();
object oSelf = OBJECT_SELF;
location lSelf = GetLocation(oSelf);
object oTool = GetItemPossessedBy(oPC,"SkinningKnife");
if (oTool == OBJECT_INVALID)
{
SetLocalInt(OBJECT_SELF,"sIAmUsed",0);
FloatingTextStringOnCreature("You must have a skinning knife to skin this corpse",oPC,FALSE);
return;
}
string sPeltTag = GetLocalString(OBJECT_SELF,"sPelt");
string sMeatTag = GetLocalString(OBJECT_SELF,"sMeat");
object oCorpse = GetLocalObject(OBJECT_SELF,"oCorpse");
int iSkinPenalty = GetLocalInt(OBJECT_SELF,"iPenalty");
//int iSkinSkill = GetTokenPair(oPC,14,8);
int iSkinSkill = GetCampaignInt("UOACraft","iSkinningSkill",oPC);
int iSkinChance = iSkinSkill;
if (iSkinChance < 350)
{
iSkinChance = GetAbilityScore(oPC,ABILITY_DEXTERITY)*5;
iSkinChance = iSkinChance+(GetAbilityScore(oPC,ABILITY_STRENGTH)*3);
iSkinChance = iSkinChance+(GetAbilityScore(oPC,ABILITY_INTELLIGENCE)*2);
iSkinChance = iSkinChance*3;
if (iSkinChance >350) iSkinChance = 350;
if (iSkinSkill > iSkinChance) iSkinChance = iSkinSkill;
}
iSkinChance = iSkinChance - iSkinPenalty;
if (iSkinChance <1)
{
FloatingTextStringOnCreature("You have no idea how to properly skin this corpse",oPC,FALSE);
SetLocalInt(OBJECT_SELF,"sIAmUsed",0);
return;
}
iSkinChance = iSkinChance+200;
int iRandom = Random(1000);
if (iRandom > iSkinChance)
{
//SendMessageToPC(oPC,"SkinChance: "+IntToString(iSkinChance));
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,6.0));
AssignCommand(oPC,DelayCommand(5.0,FloatingTextStringOnCreature("You mangle the pelt while trying to skin this creature.",oPC,FALSE)));
AssignCommand(oPC,DelayCommand(2.5,CreatePlaceable("plc_pileskulls",lSelf,30.0)));
AssignCommand(oPC,DelayCommand(2.0,CreatePlaceable("plc_bloodstain",lSelf,60.0)));
AssignCommand(oCorpse,DelayCommand(2.0,ExecuteScript("_kill_corpse",oCorpse)));
DestroyObject(OBJECT_SELF);
return;
}
iRandom = Random(1000);
int iSkillGain = 0;
if (iRandom > (iSkinSkill - iSkinPenalty))iSkillGain = 1;
int iPeltQty = 1;
int iMeatQty = 1;
//SendMessageToPC(oPC,"iSkinSkill : "+IntToString(iSkinSkill));
//SendMessageToPC(oPC,"iSkinPenalty : "+IntToString(iSkinPenalty));
//SendMessageToPC(oPC,"iRandom : "+IntToString(iRandom));
//SendMessageToPC(oPC,"iSkillGaiin : "+IntToString(iSkillGain));
// Determine 1-4 meat and/or pelts based on skill level and random determination checks.
if (iSkinSkill>=500)
{
if (Random(1000)<=iSkinChance) iPeltQty++;
if (Random(1000)<=iSkinChance) iMeatQty++;
}
if (iSkinSkill>=750)
{
if (Random(1000)<=iSkinChance) iPeltQty++;
if (Random(1000)<=iSkinChance) iMeatQty++;
}
if (iSkinSkill>=950)
{
if (Random(1000)<=iSkinChance) iPeltQty++;
if (Random(1000)<=iSkinChance) iMeatQty++;
}
if (iSkinSkill>999)
{
iPeltQty++;
iMeatQty++;
}
string sPCMessage1 = "You carefully skin the creature, collecting "+IntToString(iPeltQty)+" pelt";
string sPCMessage2 = "You also collect "+IntToString(iMeatQty)+" portion";
if (iPeltQty >1) sPCMessage1 = sPCMessage1+"s";
if (iMeatQty >1) sPCMessage2 = sPCMessage2+"s";
sPCMessage1 = sPCMessage1+".";
sPCMessage2 = sPCMessage2+" of meat.";
AssignCommand(oPC,DelayCommand(5.0,FloatingTextStringOnCreature(sPCMessage1,oPC,FALSE)));
AssignCommand(oPC,DelayCommand(6.0,FloatingTextStringOnCreature(sPCMessage2,oPC,FALSE)));
float fPause =0.0;
for (iPeltQty; iPeltQty > 0; iPeltQty--)
{
AssignCommand(oPC,DelayCommand(4.0+fPause,CreateAnObject(sPeltTag,oPC)));
fPause = fPause+0.3;
}
for (iMeatQty; iMeatQty > 0; iMeatQty--)
{
AssignCommand(oPC,DelayCommand(4.0+fPause,CreateAnObject(sMeatTag,oPC)));
fPause = fPause+0.3;
}
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,6.0));
AssignCommand(oPC,DelayCommand(2.5,CreatePlaceable("plc_pileskulls",lSelf,300.0)));
AssignCommand(oPC,DelayCommand(2.0,CreatePlaceable("plc_bloodstain",lSelf,600.0)));
//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);
AssignCommand(oPC,DelayCommand(10.0,SetLocalInt(oPC,"iSkillGain",0)));
}
}
if (iSkillGain ==1)
{
string sOldSkill = "";
string sOldSkill2 = "";
iSkinSkill++;
sOldSkill2 = IntToString(iSkinSkill);
sOldSkill = "."+GetStringRight(sOldSkill2,1);
if (iSkinSkill > 9)
{
sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill;
}
else
{
sOldSkill = "0"+sOldSkill;
}
if (iSkinSkill <= 1000)
{
//DelayCommand(5.0,SetTokenPair(oPC,14,8,iSkinSkill));
DelayCommand(5.0,SetCampaignInt("UOACraft","iSkinningSkill",iSkinSkill,oPC));
AssignCommand(oPC,DelayCommand(7.0,SendMessageToPC(oPC,"================================")));
AssignCommand(oPC,DelayCommand(7.0,SendMessageToPC(oPC,"Your Skinning skill has gone up!")));
AssignCommand(oPC,DelayCommand(7.0,SendMessageToPC(oPC,"Current Skinning skill : "+ sOldSkill+"%")));
AssignCommand(oPC,DelayCommand(7.0,SendMessageToPC(oPC,"================================")));
if (GetLocalInt(GetModule(),"_UOACraft_XP")!=0) AssignCommand(oPC,DelayCommand(6.9,GiveXPToCreature(oPC,GetLocalInt(GetModule(),"_UOACraft_XP"))));
}
}
AssignCommand(oCorpse,DelayCommand(2.0,ExecuteScript("_kill_corpse",oCorpse)));
DestroyObject(OBJECT_SELF,6.0);
}
void CreateAnObject(string sResource, object oPC)
{
CreateItemOnObject(sResource,oPC,1);
return;
}
void CreatePlaceable(string sObject, location lPlace, float fDuration)
{
object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE,sObject,lPlace,FALSE);
if (fDuration != 0.0)
DestroyObject(oPlaceable,fDuration);
}