EQ2 Track -> Beta

nathanh

Active Member
;-----------------------------------------------------------------------------------------------
; EQ2Track.iss Version 1.0.2a Updated: 05/11/08 by Equidis
;-----------------------------------------------------------------------------------------------
; EQ2 Track Created by Equidis
;-----------------------------------------------------------------------------------------------

; ** Additional credits to Karye & Blazer: Some of the UI & Elements & Coding
; used were taken from previous version of EQ2BotCommand **

********************************************
TO GET EQ2TRACK PLEASE USE THE SVN

--> In the SVN -> Scripts-> Download the following to use this script:

Scripts\EQ2Track\
Scripts\EQ2Track.iss

Places the EQ2Track folder and EQ2Track.iss file in your innersapce\scripts directory,

and

then go to your EQ2 Innerspace Command Line and type: run eq2track

********************************************
********************************************

EQ2 Track is an alternate to the Radar system used. It's not as visual, it's more informative, and the best part is, we can all add to this bot, unlike radar (making it what we want it to be, and how we think it should work).

This is a community project, so if you make additions to this script, please upload them to this forum, and if your edition of the script has better changes, those changes will be posted over the original as updates.

Upcoming Edits & Features:

Go to Target
Create Waypoint
Drop-down for Types (NPC, NamedNPC, Resource, etc)
Colorize List Items by Con
Somehow show items which are in the same encounter.

Features Included:

Aggro Checkbox (Things appearing on track should be Aggro only)
Filter String (This filters list items required to contain the text you provide)
Level Range (Level range only applies to object which have levels)

I understand this is a rough copy, but I hope to have more things added soon.

Happy hunting

-Equidis
 

ajeati

Active Member
Thanks for making this...

what is the max range?

I used a filter of (PC) and got rid of everything but player characters thanks for the hard work.
 

Amadeus

The Maestro
Staff member
When you filter something, you're removing it, not removing everything BUT it. I keep telling people this is why radar works as it does, even though everyone wants it to be so that when you add a custom filter, it erases everything but that thing.

Anyway, if it's working as intended by the author (which is probable), then he should call it a reverse-filter, so it make sense.
 

Amadeus

The Maestro
Staff member
I updated the UI xml file in SVN to be a bit prettier and easier to understand.

I've been kindof thinking of doing this for a long time, so I'll be working on it as I go as well.


EDIT:

Updated the script too ....didn't change anything, but just formatted it in a way that is easier to read.
 

nathanh

Active Member
Thanks for your interest Amadeus :)

Yes, it would be a reverse filter. Perhaps I can call it something else, like Search or something to make it more friendly. Reverse Filter isn't as friendly as it can be.

The desired effect is, if you're looking for a deer in enchanted lands, you type deer in the box, it will only show results which deer come up in.

VikingKing introduced the idea of a bearing arrow to show which direction to go to get to the target, since it's not as visual as Radar. We are going to be adding that soon, we have an experimental script called Face which gives a text bearing based on your targets heading.

-Equidis
 

nathanh

Active Member
Thanks for making this...

what is the max range?

I used a filter of (PC) and got rid of everything but player characters thanks for the hard work.
There is no max range set in the CustomActor Array, so it's whatever your char can see. I normally pick things up 185 meters away, etc. You pick up group members across the zone tho, I'm not sure what the distance on that is.

Further more, placing (PC) in the text box, will show only (PC) types. IE: you can put (NPC) or (NamedNPC).

Lets say I want an NPC that is grove badger:

I would put in the box:

(NPC) a grove badger


Now all the grove badgers are in display. Since theres not too many grove badgers, you necessarily dont need to put NPC, you can just put... grove or grove badg

:)
 

SiliconeClone

Active Member
I just wanted to say keep up the good work. I can see with some polish this thing replacing the Radar for me :) It feels more like normal track. Though nothing beats the radar for harvesting heh.
 

mycroft

Script Author: MyPrices
How about more options , by distance , by name , by level...

I did start to change a bit of the code to make the screen updates more 'instant' but decided to just make suggestions instead 8)
 

mycroft

Script Author: MyPrices
Hope you don't mind...I was looking at your code and couldn't resist optimising it a bit....


This
Code:
            ;------------------------------------------
            ; byLevel Filtering Procedure
            ;------------------------------------------	
            
            if ${useFilters[1]}
            {
            	if ${CustomActor[${tcount}].Level} > 0
            	{
            		if ${CustomActor[${tcount}].Level} > ${minLevel} && ${CustomActor[${tcount}].Level} < ${maxLevel}
            			passedFilters[1]:Set[TRUE]
            		else
            			passedFilters[1]:Set[FALSE]
            	}
            	else
            	{
            		; Actor has no level, automatically byPass level checking, and approve the item for listing
            		passedFilters[1]:Set[TRUE]
            	}
            }
            else
            	passedFilters[1]:Set[TRUE]
            
            ;------------------------------------------
            ; byAggro Filtering Procedure
            ;------------------------------------------	
            
            if ${useFilters[2]}
            {
            	if ${CustomActor[${tcount}].IsAggro} || ${bypassAggro}
            		passedFilters[2]:Set[TRUE]
            	else
            		passedFilters[2]:Set[FALSE]
            }
            else
            	passedFilters[2]:Set[TRUE]
            
            ;------------------------------------------
            ; type Filter Filtering Procedure
            ;------------------------------------------	
            if ${useFilters[3]}
            {
            	if ${itemInfo.Find[${filter}]}
            		passedFilters[3]:Set[TRUE]
            	else
            		passedFilters[3]:Set[FALSE]
            }
            else
            	passedFilters[3]:Set[TRUE]
            
            ;------------------------------------------
            ; Final Conditions Reviewed
            ;------------------------------------------	
            
            ccount:Set[1]
            conditionsPassed:Set[FALSE]
          
            do
            {
            	if ${passedFilters[${ccount}]}
            	{
            		; Condition Passed. 
            		conditionsPassed:Set[TRUE]
            	}
            	else	
            	{
            		; A condition has not passed.
            		conditionsPassed:Set[FALSE]
            		break
            	}
            }
            while ${ccount:Inc}<=3


became this

Code:
            ;------------------------------------------
            ; byLevel Filtering Procedure
            ;------------------------------------------	

            conditionsPassed:Set[TRUE]

            if ${useFilters[1]}
            {
            	if ${CustomActor[${tcount}].Level} > 0
            	{
            		if ${CustomActor[${tcount}].Level} => ${minLevel} && ${CustomActor[${tcount}].Level} <= ${maxLevel}
            			conditionsPassed:Set[TRUE]
            		else
            			conditionsPassed:Set[FALSE]
            	}
            }
            
            ;------------------------------------------
            ; byAggro Filtering Procedure
            ;------------------------------------------	
            
            if ${useFilters[2]} && ${conditionsPassed}
            {
            	if ${CustomActor[${tcount}].IsAggro} || ${bypassAggro}
            		conditionsPassed:Set[TRUE]
            	else
            		conditionsPassed:Set[FALSE]
            }
            
            ;------------------------------------------
            ; type Filter Filtering Procedure
            ;------------------------------------------	
            if ${useFilters[3]} && ${conditionsPassed}
            {
            	if !${itemInfo.Find[${filter}]}
            		conditionsPassed:Set[FALSE]
            }
            
            ;------------------------------------------
            ; If conditions are met....
            ;------------------------------------------
            if ${conditionsPassed}
            {
            	if ${CustomActor[${tcount}](exists)}
            	    UIElement[TrackItems@EQ2 Track]:AddItem[${itemInfo}]
            }
 
Last edited:

Amadeus

The Maestro
Staff member
I should redo all of this using GetActors ...so you all can see how that works and start to use it instead of CustomActor ..lol. Maybe next week.
 

mycroft

Script Author: MyPrices
I have a version that uses getactors and it DOES work a lot smoother , but for some reason it won't filter by distance....

When I step through the actors they don't seem to be sorted by distance at all..

I tried using just ${EQ2.GetActors[Actors]} as in the update notes , but they weren't sorted by distance either...

Code:
function main()
{
    triggerImmunity:Set[TRUE]
    immunityRemaining:Set[20]
    
    Tracking:Set[TRUE]
    
    ui -reload "${LavishScript.HomeDirectory}/Interface/eq2skin.xml"
    ui -reload -skin eq2skin "${LavishScript.HomeDirectory}/Scripts/EQ2Track/UI/EQ2Track.xml"
    
    variable int numactors
    variable int tcount
    variable int ccount
    variable string searchType
    variable index:actor Actors
    ;-------------------------------------
    ; Never-ending Loop
    ;-------------------------------------
    
    do
    {
       ;-------------------------------------
        ; byLevel Filtering Loader
        ;-------------------------------------
        
        minLevel:Set[${UIElement[TrackMinLevel@EQ2 Track].Text}]
        maxLevel:Set[${UIElement[TrackMaxLevel@EQ2 Track].Text}]
    	if ${minLevel} > 0 && ${maxLevel} > 0
    		{
	    		numactors:Set[${EQ2.GetActors[Actors,byDist,Levels,${minLevel},${maxLevel}]}]
		}
		else
		{
	    		numactors:Set[${EQ2.GetActors[Actors,byDist]}]
		}

        ;-------------------------------------
        ; byAggro Filtering Loader
        ;-------------------------------------
        
    	if ${UIElement[TrackAggro@EQ2 Track].Checked}
    		useFilters[2]:Set[TRUE]
	else
    		useFilters[2]:Set[FALSE]
    	
        
        ;------------------------------------------
        ; applyFilter Full Info Filtering Loader
        ;------------------------------------------
        
        filter:Set[${UIElement[TrackFilter@EQ2 Track].Text}]
        
    	if !${filter.Equal[NULL]} || ${filter.Length} > 0
    		useFilters[3]:Set[TRUE]
    	else
    		useFilters[3]:Set[FALSE]

        ;------------------------------------------
        ;------------------------------------------
        ;------------------------------------------
        
        
        ;-------------------------------------
        ; Begin Looping through Tracked Items
        ;-------------------------------------
        tcount:Set[0]
        
       	UIElement[TrackItems@EQ2 Track]:ClearItems

        do
        {
            conditionsPassed:Set[TRUE]
            if ${EQ2.Zoning}
                break

            itemInfo:Set[${Actors.Get[${tcount}].Level}\t (${Actors.Get[${tcount}].Type}) ${Actors.Get[${tcount}].Name} ${Actors.Get[${tcount}].Class} ${Actors.Get[${tcount}].Distance}]

            ;------------------------------------------
            ; byAggro Filtering Procedure
            ;------------------------------------------	
            if ${useFilters[2]}
            {
            	if !${Actors.Get[${tcount}].IsAggro} || ${bypassAggro}
            		conditionsPassed:Set[FALSE]
            }
            
            ;------------------------------------------
            ; type Filter Filtering Procedure
            ;------------------------------------------	

            if ${useFilters[3]} && ${filter.Length}>0
            {
            	if !${itemInfo.Find[${filter}]}
            		conditionsPassed:Set[FALSE]
            }
            
            ;------------------------------------------
            ; If conditions are met....
            ;------------------------------------------
            if ${conditionsPassed}
            {
            	if ${Actors.Get[${tcount}](exists)}
            	    UIElement[TrackItems@EQ2 Track]:AddItem[${itemInfo}]
            }
        }
        while ${tcount:Inc}<=${numactors}
        
        ;------------------------------------------
        ;------------------------------------------
        ;------------------------------------------
        ;------------------------------------------
        
        call zoneWait
        
        ;------------------------------------------
        ; Immunity System
        ;------------------------------------------
        
        if ${triggerImmunity}
        {
            timerDiff:Set[${Time.Timestamp} - ${startTimer}]
        
        	if ${timerDiff} > ${immunityRemaining}
        	{
   	         triggerImmunity:Set[FALSE]
   	         	; Return to Normal Tracking Conditions
  	          	bypassAggro:Set[FALSE]
        	}
        	else
        	{
        	    bypassAggro:Set[TRUE]
        	}
        }
        
        wait 30

    }
    while ${Tracking} && ${ISXEQ2(exists)}
}
 

Contact

Active Member
My #1 feature request for this script would be to get waypoints added... even if it is only a static waypoint for the current location and doesn't automatically update. It would at least (supposedly) get you in the general vicinity of the mob.
 

bjcasey

ISX Specialist
I know it's been a while since someone used this thread, but I have a feature request.

Request: Able to save and load a list of tracks.

Ex. A list of all of the TSO key mobs on one list that can be saved/loaded when I need it.
 
Top Bottom