//#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); }