// Treasure Hunting
// Barnabus [SphereServer]
[DEFNAME TreasureHunting]
RandomChestsLevel_1_4 {i_chest_metal 1}
RandomChestsLevel_5_8 {i_chest_wooden_brass 1 i_chest_metal_brass 1}
RandomChestsLevel_8_12 {i_chest_gargoyle 1 i_chest_rarewood 1}
RandomChestsLevel_13 {i_chest_wooden_finished 1}
SpawnChestLevel_1_MobsCount 1
SpawnChestLevel_1_MobsType {c_dark_elf_grunt 1 c_dark_elf_macefighter 1 c_dark_elf_swordsman 1 c_dark_elf_elite_swordsman 1 c_dark_elf_axeman 1}
SpawnChestLevel_2_MobsCount 2
SpawnChestLevel_2_MobsType {c_sprite_elf 1 c_sprte_elf_archer 1 c_sprite_elf_mage 1 c_sprite_elf_sorceress 1}
SpawnChestLevel_3_MobsCount 3
SpawnChestLevel_3_MobsType {c_black_cat 1 c_h_witch_high 1 c_h_warlock 1 c_h_witch 1}
SpawnChestLevel_4_MobsCount 4
SpawnChestLevel_4_MobsType {c_wood_elf_archer 1 c_wood_elf_elite_ranger 1 c_wood_elf_warrior 1 c_wood_elf_fighter 1 c_wood_elf_hunter 1 c_wood_elf_ranger 1}
SpawnChestLevel_5_MobsCount 5
SpawnChestLevel_5_MobsType {c_evilmage 1 c_evilmage 1 c_theophilus 1}
SpawnChestLevel_6_MobsCount 6
SpawnChestLevel_6_MobsType {c_savage_shaman 1 c_savage_warrior_female 1 c_savage_warrior_male 1}
SpawnChestLevel_7_MobsCount 7
SpawnChestLevel_7_MobsType {c_meer_captain 1 c_meer_eternal 1 c_meer_mage 1 c_meer_warrior 1}
SpawnChestLevel_8_MobsCount 8
SpawnChestLevel_8_MobsType {c_minotaur 1 c_tormented_minotaur 1 c_minotaur_Captain 1 c_minotaur_scout 1}
SpawnChestLevel_9_MobsCount 9
SpawnChestLevel_9_MobsType {c_ratman 1 c_ratman_archer 1 c_ratman_w_mage 1 c_ratman_w_sword 1}
SpawnChestLevel_10_MobsCount 10
SpawnChestLevel_10_MobsType {c_scorpion_king 1 c_scorpion_prince 1 c_scorpion_queen 1 c_scorpion_thrall 1}
SpawnChestLevel_11_MobsCount 11
SpawnChestLevel_11_MobsType {c_terathan_avenger 1 c_terathan_drone 1 c_terathan_matriarch 1 c_terathan_warrior 1}
SpawnChestLevel_12_MobsCount 12
SpawnChestLevel_12_MobsType {c_reaper_redux 1 c_treefellow 1 c_reaper 1}
SpawnChestLevel_13_MobsCount 13
SpawnChestLevel_13_MobsType {c_yomotsu_elder 1 c_yomutsu_warrior 1 c_yomotsu_priest 1}
[FUNCTION f_DigUpTreasureChestHere] // Arguements (MapLvl), (Position)
ANIM 20
SFX 1230
IF <ARGV[0]> < 5
SERV.NEWITEM=RandomChestsLevel_1_4
ELIF <ARGV[0]> < 9
SERV.NEWITEM=RandomChestsLevel_5_8
ELIF <ARGV[0]> < 13
SERV.NEWITEM=RandomChestsLevel_8_12
ELSE
SERV.NEWITEM=RandomChestsLevel_13
ENDIF
NEW.P=<P>
NEW.TYPE=t_container_locked
NEW.EFFECT 2,03728,3,20
LOCAL.RandomX=<R1,4>
LOCAL.RandomY=<R1,4>
LOCAL.Counter=0
WHILE (<EVAL <LOCAL.Counter>> < <EVAL SpawnChestLevel_8_MobsCount>)
LOCAL.Counter=<EVAL <LOCAL.Counter>+1>
SERV.NEWNPC SpawnChestLevel_8_MobsType
LOCAL.RandomX1=<EVAL <P.X>+<LOCAL.RandomX>>
LOCAL.RandomY1=<EVAL <P.Y>+<LOCAL.RandomY>>
LOCAL.RandomX2=<EVAL <P.X>-<LOCAL.RandomX>>
LOCAL.RandomY2=<EVAL <P.Y>-<LOCAL.RandomY>>
LOCAL.RandomX=<R<LOCAL.RandomX2>,<LOCAL.RandomX1>>
LOCAL.RandomY=<R<LOCAL.RandomY2>,<LOCAL.RandomY1>>
NEW.P=<EVAL <LOCAL.RandomX>>,<EVAL <LOCAL.RandomY>> //,<EVAL <P.Z>+2>
NEW.HOME=<EVAL <LOCAL.RandomX>>,<EVAL <LOCAL.RandomY>> //,<EVAL <P.Z>+2>
NEW.HOMEDIST=50
NEW.GO=<EVAL <LOCAL.RandomX>>,<EVAL <LOCAL.RandomY>> //,<EVAL <P.Z>+2>
SAY <LOCAL.X> New <NEW.NAME> Location <NEW.P>
NEW.UPDATE
NEW.ATTACK <UID>
ENDWHILE
// ----------------------------------------------------------------------------------------
[FUNCTION f_SpawnATreasureChest]
LOCAL.FoundALocation=0
WHILE (!<LOCAL.FoundALocation>)
LOCAL.PosX=<EVAL RAND(0,5119)>
LOCAL.PosY=<EVAL RAND(0,4095)>
SERV.NEWITEM=i_gold
LOCAL.TempUID=<NEW.UID>
NEW.P=<EVAL <LOCAL.PosX>>,<EVAL <LOCAL.PosY>>
IF (!<SERV.UID.<LOCAL.TempUID>.ISNEARTYPE t_tree 1>) && (<SERV.UID.<LOCAL.TempUID>.ISNEARTYPE t_grass 1>) && (!<SERV.UID.<LOCAL.TempUID>.REGION.GUARDED>) && (<SERV.UID.<LOCAL.TempUID>.REGION.TYPE>!=t_multi) && (<SERV.UID.<LOCAL.TempUID>.REGION.TYPE>!=t_multi_custom)
LOCAL.FoundALocation=1
LOCAL.LocationFound=<NEW.P>
LOCAL.LocationX=<NEW.P.X>
LOCAL.LocationY=<NEW.P.Y>
LOCAL.LocationZ=<NEW.P.Z>
ENDIF
SERV.UID.<LOCAL.TempUID>.REMOVE
ENDWHILE
// ----------------------------------------------------------------------------------------
[ITEMDEF i_DigWithSpade]
DEFNAME=i_DigWithSpade
ID=i_shovel
NAME=I am digging
TYPE=t_eq_script
LAYER=layer_special
ON=@Create
ATTR=attr_newbie|attr_decay|attr_move_never
TAG.UseCount=1
TIMERD=1
ON=@TIMER
LOCAL.MaxUseCount=<EVAL 15 - <CONT.CARTOGRAPHY>/100>
IF ((<EVAL <CONT.CTAG.SpadeStartPosX>>!=<CONT.P.X>) || (<EVAL <CONT.CTAG.SpadeStartPosY>>!=<CONT.P.Y>) || (<EVAL <CONT.CTAG.SpadeStartPosZ>>!=<CONT.P.Z>))
CONT.CTAG.SpadeStartPosX=
CONT.CTAG.SpadeStartPosY=
CONT.CTAG.SpadeStartPosZ=
REMOVE
RETURN 1
ENDIF
DORAND 2
CONT.ANIM 7
CONT.ANIM 8
ENDDO
DORAND 5
CONT.SFX 945
CONT.SFX 946
CONT.SFX 947
CONT.SFX 948
CONT.SFX 949
ENDDO
IF (STRMATCH(*t_normal*,<SERV.MAP(<CONT.P.X>,<CONT.P.Y>,<MAP>).TYPE>))
CONT.SYSMESSAGE @154,,1 You dig in the ground
ELIF (STRMATCH(*t_dirt*,<SERV.MAP(<CONT.P.X>,<CONT.P.Y>,<MAP>).TYPE>))
CONT.SYSMESSAGE @154,,1 You dig in the dirt
ELIF (STRMATCH(*t_grass*,<SERV.MAP(<CONT.P.X>,<CONT.P.Y>,<MAP>).TYPE>))
CONT.SYSMESSAGE @154,,1 You dig up the grass
ELIF (STRMATCH(*t_water*,<SERV.MAP(<CONT.P.X>,<CONT.P.Y>,<MAP>).TYPE>))
CONT.SYSMESSAGE @154,,1 You try digging in the water but its useless!
CONT.CTAG.SpadeStartPosX=
CONT.CTAG.SpadeStartPosY=
CONT.CTAG.SpadeStartPosZ=
REMOVE
RETURN 1
ELSE
CONT.SYSMESSAGE @154,,1 You cant dig in <SERV.MAP(<CONT.P.X>,<CONT.P.Y>,<MAP>).TYPE>
CONT.CTAG.SpadeStartPosX=
CONT.CTAG.SpadeStartPosY=
CONT.CTAG.SpadeStartPosZ=
REMOVE
RETURN 1
ENDIF
IF <EVAL <TAG.UseCount>> > <EVAL <LOCAL.MaxUseCount>>
REF1=<CONT.UID>
LOCAL.Discovered=0
FORCONT <REF1.FINDLAYER.21.UID> 10
IF (STRMATCH(*i_TreasureMapLevel*,<BASEID>))
IF ((<EVAL <TAG.TreasureLocationX>>=<REF1.P.X>) && (<EVAL <TAG.TreasureLocationY>>=<REF1.P.Y>) && (<EVAL <TAG.TreasureLocationZ>>=<REF1.P.Z>))
LOCAL.MapInUseUID=<UID>
LOCAL.Discovered=1
REF1.SFX 1230
ENDIF
ENDIF
ENDFOR
IF <EVAL <LOCAL.Discovered>> > 0
REF1.EMOTE pull something out of the ground
SERV.UID.<LOCAL.MapInUseUID>.COLOR=63
REF1.f_DigUpTreasureChestHere <SERV.UID.<LOCAL.MapInUseUID>.TAG.MapLevel>, <SERV.UID.<LOCAL.MapInUseUID>.TAG.TreasureLocation>
SERV.UID.<LOCAL.MapInUseUID>.TAG.TreasureLocationX=
SERV.UID.<LOCAL.MapInUseUID>.TAG.TreasureLocationY=
SERV.UID.<LOCAL.MapInUseUID>.TAG.TreasureLocationZ=
SERV.UID.<LOCAL.MapInUseUID>.TAG.MapLevel=
ELSE
REF1.SAY @55 There does not seem to be anything here
ENDIF
REMOVE
RETURN 1
ELSE
TAG.UseCount=<EVAL <TAG.UseCount>+1>
TIMER=1
ENDIF
RETURN 1
// ----------------------------------------------------------------------------------------
[ITEMDEF i_spade]
DEFNAME=i_spade
ID=i_shovel
NAME=Spade
TYPE=t_spade
WEIGHT=0.1
VALUE=1
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=Spade
ON=@Create
COLOR=0038d
TAG.Uses=<R8,20>
// ----------------------------------------------------------------------------------------
[ITEMDEF i_map_treasure]
ID=i_map
NAME=An Old Treasure Map
TYPE=t_map
ON=@DClick
REMOVE
NEWITEM=RandomTMap,1,<UID>
RandomTMap {i_TreasureMapLevel_1 1 i_TreasureMapLevel_2 1 i_TreasureMapLevel_3 1 i_TreasureMapLevel_4 1 i_TreasureMapLevel_5 1 i_TreasureMapLevel_6 1 i_TreasureMapLevel_7 1}
[ITEMDEF i_TreasureMapLevel_1]
ID=i_map
NAME=Treasure Map Level 1
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 1
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=1
[ITEMDEF i_TreasureMapLevel_2]
ID=i_map
NAME=Treasure Map Level 2
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 2
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=2
[ITEMDEF i_TreasureMapLevel_3]
ID=i_map
NAME=Treasure Map Level 3
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 3
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=3
[ITEMDEF i_TreasureMapLevel_4]
ID=i_map
NAME=Treasure Map Level 4
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 4
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=4
[ITEMDEF i_TreasureMapLevel_5]
ID=i_map
NAME=Treasure Map Level 5
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 5
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=5
[ITEMDEF i_TreasureMapLevel_6]
ID=i_map
NAME=Treasure Map Level 6
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 6
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=6
[ITEMDEF i_TreasureMapLevel_7]
ID=i_map
NAME=Treasure Map Level 7
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 7
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=7
[ITEMDEF i_TreasureMapLevel_8]
ID=i_map
NAME=Treasure Map Level 8
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 8
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=8
[ITEMDEF i_TreasureMapLevel_9]
ID=i_map
NAME=Treasure Map Level 9
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 9
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=9
[ITEMDEF i_TreasureMapLevel_10]
ID=i_map
NAME=Treasure Map Level 10
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 10
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=10
[ITEMDEF i_TreasureMapLevel_11]
ID=i_map
NAME=Treasure Map Level 11
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 11
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=11
[ITEMDEF i_TreasureMapLevel_12]
ID=i_map
NAME=Treasure Map Level 12
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 12
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=12
[ITEMDEF i_TreasureMapLevel_13]
ID=i_map
NAME=Treasure Map Level 13
TYPE=t_map
RESOURCES=i_map_blank
SKILLMAKE=CARTOGRAPHY 100.0
TEVENTS=t_TreasureMap
CATEGORY=AncientRealms
SUBSECTION=TreasureHunting
DESCRIPTION=MapLevel 13
ON=@Create
MORE1=0
MORE2=0144f0fff
TAG.MapLevel=13
// ----------------------------------------------------------------------------------------
[TYPEDEF t_TreasureMap]
ON=@DClick
IF !<TAG.MapDeciphered>
SRC.CTAG.TreasureMapUID=<UID>
LOCAL.MapDifficulty=<EVAL <TAG.MapLevel> * 10 >
LOCAL.SkillBonus=<EVAL <SRC.CARTOGRAPHY> / 10>
LOCAL.IntBonus=<EVAL <SRC.INT> / 10>
LOCAL.PlayersLuck=<EVAL <SRC.LUCK> / 10>
LOCAL.LawsOfAvergages=<R1,<LOCAL.SkillBonus>>
LOCAL.PlayersLuck=<R<LOCAL.LawsOfAvergages>,<EVAL <LOCAL.PlayersLuck> + <LOCAL.IntBonus> + <LOCAL.SkillBonus>>>
SRC.SYSMESSAGE @,,1 The map requires <EVAL <LOCAL.MapDifficulty>>% cartograpy.
IF <EVAL <LOCAL.PlayersLuck>> > <EVAL <LOCAL.MapDifficulty>-1>
LOCAL.PassedBy=<EVAL <LOCAL.PlayersLuck>-<LOCAL.MapDifficulty>>
SRC.SYSMESSAGE @,,1 You successfully decipher the map passing the requirement by <EVAL <LOCAL.PassedBy>>%
SRC.SFX 1468
LOCAL.LocationX=0
LOCAL.LocationY=0
LOCAL.LocationZ=0
LOCAL.LocationFound=0
CALL f_SpawnATreasureChest
TAG.TreasureLocationX=<LOCAL.LocationX>
TAG.TreasureLocationY=<LOCAL.LocationY>
TAG.TreasureLocationZ=<LOCAL.LocationZ>
TAG.TreasureLocation=<LOCAL.LocationFound>
//------ Rescale Width 5195 - 505 factor 10.29
//------ Rescale Length 4095 - 500 factor 8.19
TAG.TreasureLocationX1=<EVAL (((<LOCAL.LocationX>*100000) / 1029) / 1000)>
TAG.TreasureLocationY1=<EVAL (((<LOCAL.LocationY>*100000) / 819) / 1000)>
PIN=<EVAL <TAG.TreasureLocationX1>>,<EVAL <TAG.TreasureLocationY1>>
IF <SRC.FINDID.i_sextant>
SERV.UID.<SRC.FINDID.i_sextant.UID>.NAME=Treasure <EVAL <TAG.TreasureLocationX>> <EVAL <TAG.TreasureLocationY>> <EVAL <TAG.TreasureLocationZ>>
SERV.UID.<SRC.FINDID.i_sextant.UID>.TAG.TargetPosition=<TAG.TreasureLocation>
SRC.SYSMESSAGE @0095,,1 The target has been set in your sextant
SRC.ARROWQUEST=0
ELSE
SRC.SYSMESSAGE @0029,,1 You need a sextant to get a target
ENDIF
IF <SRC.ISGM>
SRC.GO <EVAL <LOCAL.LocationX>>,<EVAL <LOCAL.LocationY>>,<EVAL <LOCAL.LocationZ>>
ENDIF
SRC.SYSMESSAGE @,,1 The Map Coordinates Read (<EVAL <LOCAL.LocationX>>,<EVAL <LOCAL.LocationY>>,<EVAL <LOCAL.LocationZ>>)
TAG.MapDeciphered=1
ELSE
LOCAL.FailedBy=<EVAL <LOCAL.MapDifficulty>-<LOCAL.PlayersLuck>>
SRC.EMOTE look confused
SRC.SYSMESSAGE @0029,,1 You fail to decipher the map falling short of the required ability by <EVAL <LOCAL.FailedBy>>%
RETURN 1
ENDIF
ELSE
SRC.SYSMESSAGE @0052,,1 This map has been deciphered
IF <SRC.FINDID.i_sextant>
SERV.UID.<SRC.FINDID.i_sextant.UID>.NAME=Treasure <EVAL <TAG.TreasureLocationX>> <EVAL <TAG.TreasureLocationY>> <EVAL <TAG.TreasureLocationZ>>
SRC.ARROWQUEST=0
SRC.SYSMESSAGE @0095,,1 The target has been set in your sextant
SERV.UID.<SRC.FINDID.i_sextant.UID>.TAG.TargetPosition=<TAG.TreasureLocation>
ELSE
SRC.SYSMESSAGE @0029,,1 You need a sextant to get a target
ENDIF
RETURN 0
ENDIF
// ----------------------------------------------------------------------------------------
[TYPEDEF t_sextant]
ON=@DClick
IF <TAG.TargetPosition>
SRC.SYSMESSAGE @55,,1 This sextant has been set to coords <TAG.TargetPosition>
If !<SRC.TAG.ArrowQuest>
SERV.NEWITEM=i_gold
LOCAL.TempUID=<NEW.UID>
NEW.P=<TAG.TargetPosition>
SRC.SYSMESSAGE @55,,1 You turn on the Sextant set to coords <TAG.TargetPosition>
SRC.SYSMESSAGE @64,,1 Target is located in <SERV.UID.<LOCAL.TempUID>.REGION.NAME>
SERV.UID.<LOCAL.TempUID>.REMOVE
SRC.TAG.ArrowQuest=1
SRC.ARROWQUEST <TAG.TargetPosition>
RETURN 1
ELSE
SRC.SYSMESSAGE @55,,1 You turn off the sextant
SRC.TAG.ArrowQuest=
SRC.ARROWQUEST=0
RETURN 0
ENDIF
ELSE
SRC.SYSMESSAGE @55,,1 This sextant is not set.
NAME=Sextant
SRC.TAG.ArrowQuest=
SRC.ARROWQUEST=0
RETURN 0
ENDIF
// ----------------------------------------------------------------------------------------
[TYPEDEF t_spade]
ON=@DClick
SRC.CTAG.SpadeStartPosX=<SRC.P.X>
SRC.CTAG.SpadeStartPosY=<SRC.P.Y>
SRC.CTAG.SpadeStartPosZ=<SRC.P.Z>
TAG.Uses=<TAG.Uses>-1
IF <EVAL <TAG.Uses>> < 1
SRC.SYSMESSAGE @154,,1 The Spade has broken!
SRC.EFFECT=3,037C4,6,15,1
SOUND=SND_SPELL_MAGIC_UNTRAP
REMOVE
RETURN 1
ENDIF
SERV.NEWITEM i_DigWithSpade,1,<SRC.UID>
NEW.LINK=<SRC.UID>
NEW.TIMERD=1
RETURN 1
[EOF]