void DoDig(object oPC, location lChest, int iMapLevel, object oMap); void DoFailDig(object oPC, object oMap, location lTemp); void DoChest(object oPC, location lTemp, int iMapLevel, object oMap); void CreatePlaceable(location lTemp, string sResRef, float fDelay); void CreatePlaceable2(location lTemp, string sResRef, float fDelay, int iMapLevel, object oPC); void main() { object oPC = OBJECT_SELF; if (GetLocalInt(oPC,"iAmDiggingMap")!=0) { FloatingTextStringOnCreature("You are already digging a treasure map!",oPC,FALSE); return; } object oMapUsed = GetLocalObject(oPC,"oMapUsed"); if (GetStringLeft(GetResRef(oMapUsed),10)!="_uoa_tmap_") { FloatingTextStringOnCreature("That is not a decoded treasure map!",oPC,FALSE); DeleteLocalObject(oPC,"oMapUsed"); return; } SetLocalInt(oPC,"iAmDiggingMap",99); AssignCommand(GetArea(oPC),DelayCommand(31.0,DeleteLocalInt(oPC,"iAmDiggingMap"))); DeleteLocalObject(oPC,"oMapUsed"); if (GetLocalInt(oMapUsed,"iAmInUse")!=0) return; SetLocalInt(oMapUsed,"iAmInUse",99); AssignCommand(oMapUsed,DelayCommand(30.1,DeleteLocalInt(oMapUsed,"iAmInUse"))); //Determine Skills and chances int iDigSkill = GetCampaignInt("UOACraft","iDigSkill",oPC); int iDigChance=iDigSkill; if (iDigChance < 350) { iDigChance = GetAbilityScore(oPC,ABILITY_STRENGTH)*5; iDigChance = iDigChance + (GetAbilityScore(oPC,ABILITY_CONSTITUTION)*3); iDigChance = iDigChance + (GetAbilityScore(oPC,ABILITY_DEXTERITY)*2); iDigChance = iDigChance*3; if (iDigChance >350) iDigChance = 350; if (iDigSkill>iDigChance)iDigChance=iDigSkill; } //////////////////////////////////////////////////////////////// int iMapLevel = StringToInt(GetStringRight(GetResRef(oMapUsed),2)); int iDigChanceNeeded = iMapLevel*100; if (iDigChance<iDigChanceNeeded) { FloatingTextStringOnCreature("You are not skilled enough in digging to unearth this treasure!",oPC,FALSE); return; } string sMapTag = GetTag(oMapUsed); string sTemp; sMapTag = GetStringRight(sMapTag,GetStringLength(sMapTag)-10); sTemp ="0000"+sMapTag; sMapTag = GetStringRight(sTemp,4); string sMapWaypointTag = "_UOA_TCHEST_NUMBER_"+sMapTag; object oMapWaypoint = GetWaypointByTag(sMapWaypointTag); if (oMapWaypoint==OBJECT_INVALID) { SendMessageToPC(oPC,"Chest location not valid!"); SendMessageToAllDMs(GetName(oPC)+" cannot locate treasure map location do to invalid location: "+sMapWaypointTag); return; } object oPCArea = GetArea(oPC); object oMapArea = GetArea(oMapWaypoint); if (oPCArea!=oMapArea) { DoFailDig(oPC,oMapUsed,GetLocation(oPC)); return; } location lChestLocation = GetLocation(oMapWaypoint); location lPCLocation = GetLocation(oPC); float fDistance = GetDistanceBetweenLocations(lChestLocation,lPCLocation); AssignCommand(oMapUsed,DelayCommand(0.1,DoDig(oPC,lChestLocation,iMapLevel,oMapUsed))); } void DoDig(object oPC, location lChest, int iMapLevel, object oMap) { object oArea = GetArea(oPC); object oTemp; location lTemp = GetLocation(oPC); int iCanDigChest = 0; float fMaxDigDistance = IntToFloat(11-iMapLevel)*1.2; if (GetDistanceBetweenLocations(lChest,lTemp)<=fMaxDigDistance) iCanDigChest=99; DoFailDig(oPC, oMap, lTemp); if (iCanDigChest==99) DoChest(oPC,lTemp,iMapLevel,oMap); return; } void DoFailDig(object oPC, object oMap, location lTemp) { //Digging animation for the hole AssignCommand(oPC,DelayCommand(0.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(0.2,PlaySound("as_cv_chiseling1"))); AssignCommand(oPC,DelayCommand(0.3,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(0.6,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(0.9,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(1.2,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(1.5,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(2.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oMap,DelayCommand(3.0,CreatePlaceable(lTemp,"_uoa_thole001",13.0))); AssignCommand(oPC,DelayCommand(3.2,PlaySound("as_cv_chiseling1"))); AssignCommand(oPC,DelayCommand(3.3,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(3.6,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(4.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(6.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(6.2,PlaySound("as_cv_mineshovl1"))); AssignCommand(oPC,DelayCommand(8.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(10.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(12.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(12.2,PlaySound("as_cv_mineshovl1"))); AssignCommand(oPC,DelayCommand(14.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oMap,DelayCommand(15.0,CreatePlaceable(lTemp,"uoa_thole_002",1800.0))); AssignCommand(oPC,DelayCommand(16.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(18.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(18.2,PlaySound("as_cv_mineshovl1"))); AssignCommand(oPC,DelayCommand(20.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(22.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(24.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(24.2,PlaySound("as_cv_mineshovl1"))); AssignCommand(oPC,DelayCommand(26.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,2.0))); AssignCommand(oPC,DelayCommand(28.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); AssignCommand(oPC,DelayCommand(30.1,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0))); return; } void DoChest(object oPC, location lTemp, int iMapLevel, object oMap) { //Chest Animation for success location lTemp2; vector vTemp2 = GetPositionFromLocation(lTemp); vTemp2.z = vTemp2.z+0.1; lTemp2 = Location(GetArea(oPC),vTemp2,GetFacingFromLocation(lTemp)); AssignCommand(oMap,DelayCommand(24.0,CreatePlaceable(lTemp,"_uoa_unuse_chest",3.5))); AssignCommand(oMap,DelayCommand(20.1,PlaySound("as_cv_woodframe1"))); AssignCommand(oMap,DelayCommand(21.1,PlaySound("as_cv_woodframe1"))); AssignCommand(oMap,DelayCommand(22.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(26.0,CreatePlaceable(lTemp2,"_uoa_unuse_chest",3.5))); AssignCommand(oMap,DelayCommand(23.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(24.1,PlaySound("as_cv_woodframe1"))); AssignCommand(oMap,DelayCommand(25.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(28.0,CreatePlaceable(lTemp,"_uoa_unuse_ch001",4.5))); AssignCommand(oPC,DelayCommand(28.3,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oPC,DelayCommand(28.6,SetFacingPoint(GetPositionFromLocation(lTemp)))); AssignCommand(oMap,DelayCommand(26.1,PlaySound("as_cv_woodframe1"))); AssignCommand(oMap,DelayCommand(27.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(28.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(29.1,PlaySound("as_cv_woodframe1"))); AssignCommand(oMap,DelayCommand(30.0,CreatePlaceable2(lTemp2,"_uoa_treas_chest",2100.0,iMapLevel,oPC))); AssignCommand(oMap,DelayCommand(30.1,PlaySound("as_cv_woodframe2"))); AssignCommand(oMap,DelayCommand(35.0,DestroyObject(oMap,1.0))); return; } void CreatePlaceable(location lTemp, string sResRef, float fDelay) { object oTemp = CreateObject(OBJECT_TYPE_PLACEABLE,sResRef,lTemp,FALSE); if (fDelay!=0.0) DestroyObject(oTemp,fDelay); AssignCommand(oTemp,DelayCommand(0.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(0.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(2.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(2.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(4.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(4.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); if (GetResRef(oTemp)=="_uoa_thole001") { AssignCommand(oTemp,DelayCommand(6.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(6.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(8.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(8.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(10.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(10.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(12.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(12.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); } if (GetResRef(oTemp)=="uoa_thole_002") { AssignCommand(oTemp,DelayCommand(6.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(6.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); AssignCommand(oTemp,DelayCommand(8.1,PlaySound("as_na_x2iccrmb7"))); AssignCommand(oTemp,DelayCommand(8.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_COM_CHUNK_STONE_SMALL,FALSE),GetLocation(OBJECT_SELF)))); } return; } void CreatePlaceable2(location lTemp, string sResRef, float fDelay, int iMapLevel, object oPC) { object oTemp = CreateObject(OBJECT_TYPE_PLACEABLE,sResRef,lTemp,FALSE); if (fDelay!=0.0) DestroyObject(oTemp,fDelay); SetLocalInt(oTemp,"iChestLevel",iMapLevel); SetLocalObject(oTemp,"oDiggingPC",oPC); SetLocalInt(oTemp,"iAmTrapped",99); SetLocalInt(oTemp,"iAmLocked",99); AssignCommand(oTemp,ExecuteScript("_map_chst_spawn",oTemp)); AssignCommand(oTemp,DelayCommand(2.0,ExecuteScript("_open_tchest",oTemp))); return; }