Added CCOH and missing areas Changed some areas to be craftable, Fixed some on death issues, Fixed the Gaurd
213 lines
11 KiB
Plaintext
213 lines
11 KiB
Plaintext
|
|
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;
|
|
}
|