//#include "_persist_01a" #include "aps_include" void CreatePlaceable(object oPC, string sObject, location lPlace, float fDuration); void CreateAMonster(string sMonster, object oPC, int iNumberOfMonsters); void CreateAnObject(string sResource, object oPC, int iStackSize); void CancelFishing(object oPC, location lCurrent); void DelayText(object oPC, string sMessage); void DelaySkill(object oPC, int iFishingSkill, string sOldSkill); void main() { int iFishingSkill = 0; int iFishingChance = 0; object oPC = OBJECT_SELF; if (GetResRef(oPC) == "fishinghole001") oPC = GetClickingObject(); if (GetLocalInt(oPC,"iAmFishing") != 0) return; if (GetLocalInt(oPC,"iCancelFishing") != 0) { SetLocalInt(oPC,"iCancelFishing",0); return; } object oPole = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); string sPoleTag = "ITEM_FISHINGPOLE"; if (GetRacialType(oPC) == RACIAL_TYPE_HALFLING) sPoleTag = "ITEM_FISHINGROD"; if (GetRacialType(oPC) == RACIAL_TYPE_GNOME) sPoleTag = "ITEM_FISHINGROD"; if (GetRacialType(oPC) == RACIAL_TYPE_DWARF) sPoleTag = "ITEM_FISHINGROD"; if (GetStringLeft(GetTag(oPole),16) != sPoleTag) { oPole = GetItemPossessedBy(oPC,sPoleTag); if (oPole == OBJECT_INVALID) { if (sPoleTag =="ITEM_FISHINGPOLE") { FloatingTextStringOnCreature("You must have a fishing pole in order to catch fish",oPC,FALSE); } else { FloatingTextStringOnCreature("You must have a fishing rod in order to catch fish",oPC,FALSE); } return; } AssignCommand(oPC,ActionEquipItem(oPole,INVENTORY_SLOT_RIGHTHAND)); } SetLocalInt(oPC,"iAmFishing",99); AssignCommand(oPC,DelayCommand(12.0,SetLocalInt(oPC,"iAmFishing",0))); DelayCommand(1.0,FloatingTextStringOnCreature("You cast your pole into the water...",oPC,FALSE)); SetLocalLocation(oPC,"lIWasHere",GetLocation(oPC)); AssignCommand(oPC,DelayCommand(13.0,CancelFishing(oPC,GetLocation(OBJECT_SELF)))); AssignCommand(oPC,DelayCommand(1.0,ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE,1.0,1.0))); AssignCommand(oPC,DelayCommand(4.0,ActionPlayAnimation(ANIMATION_LOOPING_TALK_PLEADING,1.0,6.0))); AssignCommand(oPC,DelayCommand(10.0,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); switch (Random(3)) { case 1:{AssignCommand(oPC,DelayCommand(1.5,PlaySound("as_na_drip4")));break;} case 2:{AssignCommand(oPC,DelayCommand(1.5,PlaySound("as_na_drip5")));break;} default:{AssignCommand(oPC,DelayCommand(1.5,PlaySound("as_na_drip4")));break;} } //iFishingSkill = GetTokenPair(oPC,14,13); //iFishingSkill = GetCampaignInt("UOACraft","iFishingSkill",oPC); iFishingSkill = GetPersistentInt(oPC,"iFishingSkill","UOACraft"); iFishingChance = iFishingSkill; if (iFishingChance <350) { iFishingChance = GetAbilityScore(oPC,ABILITY_CHARISMA)*5; iFishingChance = iFishingChance+(GetAbilityScore(oPC,ABILITY_STRENGTH)*3); iFishingChance = iFishingChance+(GetAbilityScore(oPC,ABILITY_DEXTERITY)*2); iFishingChance = iFishingChance*3; if (iFishingChance >350) iFishingChance = 350; if (iFishingSkill > iFishingChance) iFishingChance = iFishingSkill; } int iFishRange = 6; if (iFishingChance > 500) iFishRange++; // Bluefish if (iFishingChance > 550) iFishRange++; // Fluke if (iFishingChance > 600) iFishRange++; // Striped Bass if (iFishingChance > 650) iFishRange++; // White Marlin if (iFishingChance > 700) iFishRange++; // Blue Shark if (iFishingChance > 750) iFishRange++; // Yellowfin Tuna if (iFishingChance > 800) iFishRange++; // Mako Shark if (iFishingChance > 850) iFishRange++; // Swordfish if (iFishingChance > 900) iFishRange++; // Bluefin Tuna int iRandom = Random(1000); int iSuccess = 0; int iSkillGain = 0; string sFishResRef = ""; string sSuccessMessage = ""; string sFailMessage = "You fish for a while but fail to catch anything."; if (iRandom <= iFishingChance) { iSuccess = 1; } else { AssignCommand(oPC,DelayCommand(11.0,DelayText(oPC,sFailMessage))); } if (iSuccess == 1) { if (Random(1000)<500) { AssignCommand(oPC,DelayCommand(11.0,PlaySound("as_na_splash1"))); } else { AssignCommand(oPC,DelayCommand(11.0,PlaySound("as_na_splash2"))); } iRandom = Random(1000); if (iRandom >= iFishingSkill) { if (d10(1)+1 >= iFishingChance/100) iSkillGain = 1; } int iFishNormalFlag = 0; iRandom = Random(iFishRange); switch (iRandom) { case 1: { sFishResRef = "fish018"; sSuccessMessage = "You manage to catch a flounder."; break; } case 2: { sFishResRef = "fish019"; sSuccessMessage = "You successfully manage to catch a saltwater shad."; break; } case 3: { sFishResRef = "fish020"; sSuccessMessage = "You manage to catch a sea bass."; break; } case 4: { sFishResRef = "fish021"; sSuccessMessage = "You manage to catch a black sea bass."; break; } case 5: { sFishResRef = "fish022"; sSuccessMessage = "You manage to catch a saltwater mackerel."; break; } case 6: { sFishResRef = "fish023"; sSuccessMessage = "You manage to catch a saltwater bluefish."; break; } case 7: { sFishResRef = "fish024"; sSuccessMessage = "You manage to catch a saltwater fluke."; break; } case 8: { sFishResRef = "fish025"; sSuccessMessage = "You manage to catch a saltwater striped bass."; break; } case 9: { sFishResRef = "fish026"; sSuccessMessage = "You manage to catch a white marlin."; break; } case 10: { sFishResRef = "fish027"; sSuccessMessage = "You carefully manage to hook and land a blue shark."; break; } case 11: { sFishResRef = "fish028"; sSuccessMessage = "You manage to catch a yellowfin tuna."; break; } case 12: { sFishResRef = "fish029"; sSuccessMessage = "You carefully manage to hook and land a mako shark."; break; } case 13: { sFishResRef = "fish030"; sSuccessMessage = "You manage to hook and land a swordfish!"; break; } case 14: { sFishResRef = "fish031"; sSuccessMessage = "You successfully hook and land a large bluefin tuna!"; break; } default: { sFishResRef = "fish017"; sSuccessMessage = "You successfully catch a saltwater cod."; break; } } //Assign a 1 in 20 chance of a non-fish retrieval if (d20(1) == 10) { iFishNormalFlag = Random(6); switch (iFishNormalFlag) { case 1: { sFishResRef = "junk001"; AssignCommand(oPC,DelayCommand(11.5,CreateAnObject(sFishResRef,oPC,1))); sSuccessMessage = "You fish for a while and manage to catch an old human skull."; break; } case 2: { sFishResRef = "junk001"; AssignCommand(oPC,DelayCommand(11.5,CreateAnObject(sFishResRef,oPC,1))); sSuccessMessage = "You fish for a while and manage to catch a bundle of oily rags."; break; } case 3: { sFishResRef = "junk001"; AssignCommand(oPC,DelayCommand(11.5,CreateAnObject(sFishResRef,oPC,1))); sSuccessMessage = "You fish for a while and manage to catch a waterlogged corpse."; break; } case 4: { AssignCommand(oPC,DelayCommand(11.0,PlaySound("al_an_bugs1"))); sFishResRef = "btlstink003"; // lesser water beetle if (GetHitDice(oPC) > 6) sFishResRef = "btlstink002"; // water beetle if (GetHitDice(oPC) > 9) sFishResRef = "btlstink001"; // greater water beetle if (Random(1000)<300) sFishResRef = "btlstink003"; if (Random(1000)<100) sFishResRef = "btlstink002"; AssignCommand(oPC,DelayCommand(11.5,CreateAMonster(sFishResRef,oPC,1))); sSuccessMessage = "You have disturbed a water beetle!"; break; } case 5: { AssignCommand(oPC,DelayCommand(11.0,PlaySound("al_an_bugs1"))); sFishResRef = "spidgiant003"; // small water spider if (GetHitDice(oPC) > 6) sFishResRef = "spidgiant004"; // water spider if (GetHitDice(oPC) > 9) sFishResRef = "spidgiant005"; // large water spider if (Random(1000)<300) sFishResRef = "spidgiant003"; if (Random(1000)<100) sFishResRef = "spidgiant004"; AssignCommand(oPC,DelayCommand(11.5,CreateAMonster(sFishResRef,oPC,1))); sSuccessMessage = "You have disturbed a water spider!"; break; } default: { AssignCommand(oPC,DelayCommand(11.5,(CreatePlaceable(oPC, "waterloggedcorps",GetLocation(oPC),600.0)))); sSuccessMessage = "You have pulled a heavy water-soaked corpse from the water!"; break; } } } AssignCommand(oPC,DelayCommand(11.0,DelayText(oPC,sSuccessMessage))); if (iFishNormalFlag == 0) { //chance of fishing up map if (iFishingChance>900) //Minimum skill { if (Random(1000)>950) //1 in 20 chance to have a chance { if (Random(1000)>990) iFishNormalFlag++; if (iFishingChance>925) { if (Random(1000)>990) iFishNormalFlag++; } if (iFishingChance>950) { if (Random(1000)>990) iFishNormalFlag++; } if (iFishingChance>980) { if (Random(1000)>990) iFishNormalFlag++; } if (iFishingChance>999) { if (Random(1000)>990) iFishNormalFlag++; } } } if (iFishNormalFlag==0) { AssignCommand(oPC,DelayCommand(11.5,CreateAnObject(sFishResRef,oPC,1))); } else { string sTempResRef; if (iFishNormalFlag==1) sTempResRef="_undecoded_tmap1"; if (iFishNormalFlag==2) sTempResRef="_undecoded_tmap2"; if (iFishNormalFlag==3) sTempResRef="_undecoded_tmap3"; if (iFishNormalFlag==3) sTempResRef="_undecoded_tmap4"; if (iFishNormalFlag==3) sTempResRef="_undecoded_tmap5"; AssignCommand(oPC,DelayCommand(11.1,DelayText(oPC,sSuccessMessage))); AssignCommand(oPC,DelayCommand(11.5,CreateAnObject(sFishResRef,oPC,1))); AssignCommand(oPC,DelayCommand(11.9,CreateAnObject(sTempResRef,oPC,1))); AssignCommand(oPC,DelayCommand(12.1,DelayText(oPC,"You also pull out a saltwater-encrusted piece of old parchment!"))); } } } //Begin freshwater fish descriptors // fish001 - minnow // fish002 - guppy // fish003 - tadpole // fish004 - bullfrog // fish005 - bluegill // fish006 - crappie // fish007 - carp // fish008 - smallmouth bass // fish009 - largemouth bass // fish010 - rainbow trout // fish011 - Small channel catfish // fish012 - small channel catfish // fish013 - Medium Channel Catfish // fish014 - Medium Channel Catfish // fish015 - Large channel catfish // fish016 - Very Large Channel Catfish // ---------------begin saltwater fish descriptors // fish017 - Cod // fish018 - Flounder // fish019 - shad // fish020 - Sea Bass // fish021 - Black Sea Bass // fish022 - mackerel // fish023 - blue fish // fish024 - fluke // fish025 - striped bass // fish026 - white marlin // fish027 - Blue shark // fish028 - yellowfin tuna // fish029 - mako shark // fish030 - swordfish // fish031 - bluefin tuna //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 = ""; iFishingSkill++; sOldSkill2 = IntToString(iFishingSkill); sOldSkill = "."+GetStringRight(sOldSkill2,1); if (iFishingSkill > 9) { sOldSkill = GetStringLeft(sOldSkill2,GetStringLength(sOldSkill2)-1)+sOldSkill; } else { sOldSkill = "0"+sOldSkill; } if (iFishingSkill <= 1000) { AssignCommand(oPC,DelayCommand(12.0,DelaySkill(oPC,iFishingSkill, sOldSkill))); //DelayCommand(12.0,SetTokenPair(oPC,14,13,iFishingSkill)); //DelayCommand(12.0,SendMessageToPC(oPC,"==================================")); //DelayCommand(12.0,SendMessageToPC(oPC,"Your skill in fishing has gone up!")); //DelayCommand(12.0,SendMessageToPC(oPC,"Current fishing skill : "+ sOldSkill+"%")); //DelayCommand(12.0,SendMessageToPC(oPC,"==================================")); } } } void CreateAnObject(string sResource, object oPC, int iStackSize) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))<0.9) CreateItemOnObject(sResource,oPC,iStackSize); return; } void CreateAMonster(string sMonster, object oPC, int iNumberOfMonsters) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))>0.8) return; object oTemp = OBJECT_INVALID; location lSelf = GetLocation(oPC); vector vSelf = GetPosition(oPC); object oArea = GetArea(oPC); vector vFire; int vDirection; float fSelf; int iRandom; float fDistance; location lFire; for (iNumberOfMonsters; iNumberOfMonsters>0; iNumberOfMonsters--) { SendMessageToPC(oPC,"Oops! You have disturbed something in the water!!"); fSelf = GetFacing(oPC)+Random(360); fDistance = (IntToFloat(Random(100)+1)/10.0); vFire = vSelf + (AngleToVector(fSelf) * fDistance); lFire = Location(oArea,vFire,fSelf); oTemp = CreateObject(OBJECT_TYPE_CREATURE,sMonster,lFire,FALSE); AssignCommand(oTemp,SetFacingPoint(AngleToVector(GetFacing(oPC)))); AssignCommand(oTemp, ActionAttack(oPC,FALSE)); } return; } void CancelFishing(object oPC, location lCurrent) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))>0.4) { SetLocalInt(oPC,"iCancelFishing",99); } if (GetIsDead(oPC)==TRUE) SetLocalInt(oPC,"iCancelFishing",99); if (GetArea(oPC)!=GetAreaFromLocation(GetLocalLocation(oPC,"lIWasHere"))) SetLocalInt(oPC,"iCancelFishing",99); AssignCommand(oPC,ExecuteScript("_craft_fishing2",oPC)); return; } void CreatePlaceable(object oPC, string sObject, location lPlace, float fDuration) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))>0.8) return; object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE,sObject,lPlace,FALSE); if (fDuration != 0.0) DestroyObject(oPlaceable,fDuration); return ; } void DelayText(object oPC, string sMessage) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))>0.8) return; FloatingTextStringOnCreature(sMessage,oPC,FALSE); return; } void DelaySkill(object oPC, int iFishingSkill, string sOldSkill) { if (GetDistanceBetweenLocations(GetLocalLocation(oPC,"lIWasHere"),GetLocation(oPC))>0.8) return; //SetTokenPair(oPC,14,13,iFishingSkill); SetPersistentInt(oPC,"iFishingSkill",iFishingSkill,0,"UOACraft"); SendMessageToPC(oPC,"=================================="); SendMessageToPC(oPC,"Your skill in fishing has gone up!"); SendMessageToPC(oPC,"Current fishing skill : "+ sOldSkill+"%"); SendMessageToPC(oPC,"=================================="); if (GetLocalInt(GetModule(),"_UOACraft_XP")!=0) GiveXPToCreature(oPC,GetLocalInt(GetModule(),"_UOACraft_XP")); return; }