You need JASS for trackables.
First you create a trackable with native CreateTrackable takes string trackableModelPath, real x, real y, real facing returns trackable
Like I'm creating here:
set tr = CreateTrackable( "war3mapImported\\InvisiblePlatformSmall.mdl" , ORIGIN_X + 200 , ORIGIN_Y + 32 , 0 )
The x and y are coordinates where you want to create it. The 0 is facing. I'm using invisible platform model extracted from WC3 mpq file.
I guess you can apply a texture on every trackable, but I decided to use images on top of trackables.
native CreateImage takes string file, real sizeX, real sizeY, real sizeZ, real posX, real posY, real posZ, real originX, real originY, real originZ, integer imageType returns image
This creates an image on top of the trackable I just created:
set im = CreateImage( "war3mapImported\\TrackStrength.BLP" , 64 , 64 , 0 , ORIGIN_X + 182 , ORIGIN_Y + 32 - 32 , 0 , 0 , 0 , 0 , 2 )
The coordinates are of the lower left corner of the image, so you must use a bit of offset so it is directly ontop of the trackable.
Then show the image:
call SetImageRenderAlways( im , true )
You can then show/hide images with:
call ShowImage( whichImage , boolean )
Register events for the trackable, specify the function and trackable:
call TriggerRegisterTrackableHitEvent( AbilitySelectionHit , tr )
call TriggerRegisterTrackableTrackEvent( AbilitySelectionTrack , tr )
Then you can code the functions to do whatever you want to do. You can save stuff into a hashtable by using the trackable's handle.
Remember that the images must have invisible border or else they won't show correctly. Google a tutorial.
But there are tutorials for trackables. Check them.