Hi again!
I have another suggestion for the new xml tags, Giles.
Code:<!-- Beginig of the profile --> <TrinityZoneControl id="Azmodan" enable="1"> <TrinityZoneControl id="KeepsLvl3" enable="1"> <!-- Awful lot of code --> <TrinityZone id="Azmodan"> <!-- Azmodan code--> </TrinityZone> <TrinityZone id="KeepsLvl3"> <!-- KeepsLvl3code--> </TrinityZone>
I think this should be easy enough to implement, and allowing to choose at the start of the profile if you want to do some optional zones or not, will simplify a lot the customization of big/complex profiles for the end users, specially for profiles with a single file, or the ones with variations of a zone.
EDIT: The code inside the zone should be skipped by default if not <TrinityZoneControl id="xxx" enable="1"> is found, so multi-file profiles won't bug if the profile is started from any other file than the one containing the enables (the START_HERE)
1. <Checkpoint>
Whenever bot died will start from last check point in the profile, not very first of the profile.
2.
<FUNC Name=BetrayerCave > </FUNC>
To call the function
<Callfunc Name=BetrayerCave >
Now i have a problem for cave detection. It'll make my script very long due to every possible spawn point i need to put a similar thing like this to check and completed the cave.
If there's 7 possible spawn point, the script will look very messy and possible missed out when editing.<FUNC Name=BetrayerCave >
<TrinityIfSNOInRange snoid="176003" range="150" >
<WaitTimer questId="1" waitTime="500" />
<TrinityUseOnce id="777">
<TrinityMoveToSNO questId="1" snoid="176003" pathPrecision="12" />
<WaitTimer questId="1" waitTime="1000" />
<TrinityInteract snoid="176003" />
<WaitTimer questId="1" waitTime="5000" />
<TrinityIf questId="1" condition="ZetaDia.CurrentWorldId==189259" >
<TrinityLog questId="1" output="Cave Level 1" />
<ExploreArea questId="101758" stepId="1" boxTolerance="0.40" boxSize="18" until="ExitFound" exitNameHash="151580180" />
</TrinityIf>
<TrinityIf questId="1" condition="ZetaDia.CurrentWorldId==189910" >
<TrinityLog questId="1" output="Cave Level 1" />
<ExploreArea questId="101758" stepId="1" boxTolerance="0.40" boxSize="18" until="ExitFound" exitNameHash="-802596186" />
</TrinityIf>
</TrinityUseOnce>
</TrinityIfSNOInRange>
</FUNC>
I would suggest add in function/module call tag.
So i will tag my dungeon activities, just call the module when i need to use them.
3.
<ExploreArea questId="101758" stepId="1" boxTolerance="0.40" boxSize="18" until="FullyExplored" leaveWhenExplored="False" explorex="x,y" explorey="x,y" />
Only check the boxes within the x,y to explore, this can improve the ExploreArea function. We can avoid some narrow part of the map and edge of the map.
Edge of map normally less mobs, and always turned back and wasting time.
Example is whenever we ExploreArea in Rakkis Cross, it can avoid climb up to stair case which improve the whole profiles, same to Field of slaughter.
<Profile>
<Name>[FOS+Caves]</Name>
<KillMonsters>True</KillMonsters>
<PickupLoot>True</PickupLoot>
<GameParams quest="101758" step="1" act="A3" difficulty="Hell" resumeFromSave="True" isPrivate="True" numGames="-1" />
<Order>
<UseWaypoint questId="1" pathPrecision="10" x="1162.295" y="693.0025" z="0.1" levelArea="1999503360" actorId="6442 " waypointNumber="4" />
<Dungeon Name="Icefall" Hash="942020622" execute="passive" >
<WaitTimer questId="1" WaitTime="1500" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<MoveTo questId="1" pathPrecision="10" x="x" y="y" z="z" />
<Calldungeon Name="Icefall" Timeout="60000">
<ExploreArea questId="101758" stepId="1" boxTolerance="0.40" boxSize="18" until="FullyExplored" leaveWhenExplored="true" />
</Calldungeon>
<LeaveGame reason="Route Completed" />
</Order>
</Profile>
4.
<Dungeon Name="Icefall" Hash="942020622" execute="active/passive" > </Dungeon>
This tag is using when i reach the map with possible spawn the cave called Icefall. It'll record the position of the portal when found specify Marker hash.
Hash ==> Hash of the portal
Execute ==> Active will go in on sight, Passive will record the coordinate of portal await for calling.
/Dungeon ==> Will be end the loop of seeking dungeon
<Calldungeon Name="Icefall" Timeout="60000"> </Calldungeon>
This could be use after i explore the fos using moveto / explorearea. In the progress i have found the cave via marker hash, i would like to go into cave as well.
So this Calldungeon will bring back the position saved and navigate to the portal, interact with it.
Timeout will skip this when not able to reach cave.
Example
Dungeon Mode
An improvement i would advice, i could script to check all the possible spawned dungeon, but it's not ideal to go in to dungeon on the spot. I need a variable to record the coordinate of dungeon and after i finished the ground then i will navigate to the dungeon and clear it. I would like to do this because sometimes the dungeon explore not perform as expected, the script could ended early due to stuck.
With this tag, should finish the Moveto tag while battle or reach while any tasks on going.<Skip=True>
I would like the ability to detect quest Sub-Steps from within an <If> tag.
http://www.thebuddyforum.com/demonb...uest-sub-steps-within-profile.html#post752172
<ExploreArea>
<Encoutered actor=sno###">
<!-- do sub quest or enter cave or in general go through an area not part of the main area then return and resume -->
</EncounterActor>
</ExploreArea>
<If condition=" not SavedVariable[clearedCrypts]=True">
<!-- do crypts -->
<SaveVariable name="clearedCrypts" value="True" />
</SavedVariable>
Maybe something like the following would be nice:
<GameParams quest="57337" step="26" act="A2" difficulty="Inferno" resumeFromSave="False" isPrivate="True" numGames="-1" mpLevel="5" />
The green color text is what needs to be added. mpLevel = Monster Power Level
profile tags should have a "timeout" attribute