Generalstuff.mac (6.0.1) May, 2009 UPDATE

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

Fabolous1
a ghoul
a ghoul
Posts: 134
Joined: Sun Jun 27, 2004 12:44 am

Generalstuff.mac (6.0.1) May, 2009 UPDATE

Post by Fabolous1 » Fri May 08, 2009 9:45 pm

I am posting my Generalstuff.mac, a macro for MacroQuest.

Features:
  • 1. Experience Tracker
  • 1a. Solo Experience
  • 1b. Group Experience
  • 1c. Raid Experience
  • 1d. AA Experience
  • 1e. Average Experience Per Kill
  • 1f. Total Experience Per Kill
  • 2. Auto-Forage
  • 2a. Specify what you want in Forage.ini
  • 2b. -1 gets all, 0 destroys all, 1 or higher will get all until you get that much and destroy the rest.
  • 3. Auto-Stick
  • 4. Time-System
  • 4a. Time running
  • 4b. Time between kills
  • 4c. Average Time Between Kills
  • 5. Auto-Skill Train
Commands:
  • /GSHelp
  • /GSForage
  • /GSForageOn
  • /GSForageOff
  • /GSStick
  • /Autostick
  • /GSTimeStuff
  • /GSTimeInfoOn
  • /GSTimeInfoOff
May 12th, 2009
This update added the feature of aliases, so you can use in-game commands such as /GSHelp

May 8th, 2009
This update includes fixes to update gained exp even after you ding or ping, instead of incorrectly displaying a negative amount gained (negative experience change from 99% to 1% of next level).

If you would like to see another module in this please say so.

Generalstuff.mac

Code: Select all

||-- Generalstuff.mac (6.0.1)
|-- By: Fabolous1 AKA Fabolous10
|-- Version 6.0.1 :: May 12th, 2009 11:27 PM EST
|-- Version 5.0.0 :: July 1st, 2005  7:31 PM EST
|-- Usage: /macro Generalstuff.mac
|-- Files: Generalstuff.mac, Forage.ini, Skill_Routines.inc, Skill_Routines.ini
|----------------------------------------------------
|-- Macro will track the immediate experience gained after each gain,
|-- as well as keep a running total and average experience per mob.
|-- Also have added Auto-Forage support and Auto-Stick support. Start the macro and /echo Help to see more."
|----------------------------------------------------

#turbo 40
#include Skill_Routines.inc

#event SoloExp "You gain experience#*#"
#event GroupExp "You gain party experience#*#"
#event RaidExp "You gained raid experience#*#"
#event GroupLeaderExp "You gain group leadership experience#*#"
#event RaidLeaderExp "You gain raid leadership experience#*#"
#event Help "#*#[MQ2] Help#*#"
#event Forage "#*#[MQ2] Forage#*#"
#event Stick "[MQ2] Stick#*#"
#event StickToTarget "[MQ2] Autostick#*#"
#event TimeStuff "[MQ2] Time Stuff#*#"
#event TimeInfoOn "[MQ2] Time Info On#*#"
#event TimeInfoOff "[MQ2] Time Info Off#*#"
#event ForageOFF "#*#You can not use this skill while on a mount#*#"
#event ForageOFF "#*#[MQ2] Forage off#*#"
#event ForageON "#*#[MQ2] Forage on#*#"
#event Busy "#*#You can't use that command while casting#*#"
#event Busy "#*#You can't use that command right now#*#"
#event Busy "#*#Try attacking someone other than yourself, it's more productive.#*#"

Sub Main
   /echo Generalstuff.mac...
   /echo /GSHelp (For help)
   /echo /GSForage (For help on the Forage System)
   /echo Make sure you have forage in ability window.
   /echo If you get off your mount and want to forage, /Forage On
   /echo /GSStick (For help on the new Stick System)
   /echo /GSTimeStuff (For help on the Time System)
   /echo ***********************************

   /squelch /alias /GSHelp           /echo Help
   /squelch /alias /GSForage         /echo Forage
   /squelch /alias /GSForageOn	     /echo Forage On
   /squelch /alias /GSForageOff      /echo Forage Off
   /squelch /alias /GSStick          /echo Stick
   /squelch /alias /Autostick        /echo Auto Stick
   /squelch /alias /GSTimeStuff      /echo Time Stuff
   /squelch /alias /GSTimeInfoOn     /echo Time Info On
   /squelch /alias /GSTimeInfoOff    /echo Time Info Off

   /declare ShowTimeStuff int outer
   /varset ShowTimeStuff 1

   /declare Forage int outer
   /varset Forage 1

   /declare StickFighting int outer
   /varset StickFighting 0

   /declare Timer float outer
   /declare OverallRunningTime float outer

   /declare wasSitting    bool outer FALSE
   /declare wasAttacking  bool outer FALSE
   /declare totForage     int  outer 0
   /declare newForage     int  outer 0

   /declare MobCount int outer
   /declare AAMobCount int outer

   /declare StandardSoloOldExp float outer
   /declare StandardSoloNewExp float outer
   /declare StandardSoloGainedExp float outer
   /declare TotalStandardSoloGainedExp float outer

   /declare StandardGroupOldExp float outer
   /declare StandardGroupNewExp float outer
   /declare StandardGroupGainedExp float outer
   /declare TotalStandardGroupGainedExp float outer

   /declare StandardRaidOldExp float outer
   /declare StandardRaidNewExp float outer
   /declare StandardRaidGainedExp float outer
   /declare TotalStandardRaidGainedExp float outer

   /declare TotalStandardAbsoluteGainedExp float outer

   /declare AAOldExp float outer
   /declare AANewExp float outer
   /declare AAGainedExp float outer
   /declare TotalAAGainedExp float outer

   /declare GroupLeaderOldExp float outer
   /declare GroupLeaderNewExp float outer
   /declare GroupLeaderGainedExp float outer
   /declare TotalGroupLeaderGainedExp float outer

   /declare RaidLeaderOldExp float outer
   /declare RaidLeaderNewExp float outer
   /declare RaidLeaderGainedExp float outer
   /declare TotalRaidLeaderGainedExp float outer

   /varset StandardSoloOldExp ${Me.PctExp}
   /varset StandardSoloNewExp 0
   /varset StandardSoloGainedExp 0

   /varset StandardGroupOldExp ${Me.PctExp}
   /varset StandardGroupNewExp 0
   /varset StandardGroupGainedExp 0

   /varset StandardRaidOldExp ${Me.PctExp}
   /varset StandardRaidNewExp 0
   /varset StandardRaidGainedExp 0

   /varset TotalStandardAbsoluteGainedExp 0

   /varset AAOldExp ${Me.PctAAExp}
   /varset AANewExp 0
   /varset AAGainedExp 0

   /varset GroupLeaderOldExp ${Me.PctGroupLeaderExp}
   /varset GroupLeaderNewExp 0
   /varset GroupLeaderGainedExp 0

   /varset RaidLeaderOldExp ${Me.PctGroupLeaderExp}
   /varset RaidLeaderNewExp 0
   /varset RaidLeaderGainedExp 0

   /varset Timer 0
   /varset OverallRunningTime 0

:Main
/delay 1s
/varcalc Timer (${Timer} + 1)
/varcalc OverallRunningTime (${OverallRunningTime} + 1)
/doevents
/call Skill_Routines
   /if ((${Forage}>0) && (${Me.AbilityReady["Forage"]} && !${Window[BigBankWnd].Open} && !${Merchant.Open} && !${Window[TradeWnd].Open})) {
         /autoinv
         /autoinv
         /autoinv
         /autoinv
         /autoinv

         /varset wasSitting FALSE
         /varset wasAttacking FALSE

         /if (${Me.Combat}) {
            /varset wasAttacking TRUE
            /attack off
         }

         /if (${Me.Sitting}) {
            /varset wasSitting TRUE
            /stand
         }

         /delay 5
         /doability "Forage"

         /if (${wasAttacking}) /attack on
         /if (${wasSitting}) /sit

         /delay 2s

         /if (${Cursor.ID}) {

            /if (${Ini[forage_stats.log,${Zone.Name},"Total Forages"].Equal["NULL"]}) {
               /varset totForage 0
            } else {
               /varset totForage ${Ini[forage_stats.log,${Zone.Name},"Total Forages"]}
            }

            /if (${Ini[forage_stats.log,${Zone.Name},${Cursor.Name}].Equal["NULL"]}) {
               /varset newForage 0
            } else {
               /varset newForage ${Ini[forage_stats.log,${Zone.Name},${Cursor.Name}]}
            }

            /varset totForage ${Math.Calc[${totForage}+1]}
            /varset newForage ${Math.Calc[${newForage}+1]}

            /ini "forage_stats.log" "${Zone.Name}" "Total Forages" "${totForage}"
            /ini "forage_stats.log" "${Zone.Name}" "${Cursor.Name}" "${newForage}"

            /if (${Ini[forage.ini,${Zone.Name},${Cursor.Name}].Equal["-1"]} || ${Ini[forage.ini,"Global",${Cursor.Name}].Equal["-1"]}) {
               /autoinventory
               /autoinventory
            } else /if (${Ini[forage.ini,${Zone.Name},${Cursor.Name}].Equal["0"]} || ${Ini[forage.ini,"Global",${Cursor.Name}].Equal["0"]}) {
               /destroy
            } else /if (${Ini[forage.ini,${Zone.Name},${Cursor.Name},NULL].Equal[NULL]} || ${Ini[forage.ini,"Global",${Cursor.Name},NULL].Equal[NULL]}) {
               /ini "forage.ini" "${Zone.Name}" "${Cursor.Name}" "0"
               /destroy
            } else {
               /if (${FindItemCount[=${Cursor.Name}]}>${Ini[forage.ini,${Zone.Name},${Cursor.Name},99]} || ${FindItemCount[=${Cursor.Name}]}>${Ini[forage.ini,"Global",${Cursor.Name},99]}) {
                  /destroy
               } else {
                  /autoinventory
                  /autoinventory
		  /autoinventory
               }
            }

         }

      }
   }
/goto :Main
/return

Sub CheckAAChange
   /varset AANewExp ${Me.PctAAExp}
   /if (${AANewExp}!=${AAOldExp}) {
      /varcalc AAMobCount ${AAMobCount} + 1
      /call CalculateAAExpChange
      /echo AA Gained: ${AAGainedExp}
      /echo AA Total: ${TotalAAGainedExp}
      /echo AA Average: ${Math.Calc[${TotalAAGainedExp}/${AAMobCount}]}% Exp (AA Mobs: ${AAMobCount})
   }
/return
     
Sub CalculateStandardSoloExpChange
   /varset StandardSoloNewExp ${Me.PctExp}
   /if (${StandardSoloNewExp}<${StandardSoloOldExp}) {
      /varcalc StandardSoloGainedExp (${StandardSoloNewExp} + 100.00)
   }
   /varcalc StandardSoloGainedExp (${StandardSoloNewExp}-${StandardSoloOldExp})
   /varcalc TotalStandardSoloGainedExp (${TotalStandardSoloGainedExp}+${StandardSoloGainedExp})
   /varset StandardSoloOldExp ${Me.PctExp}
   /call CheckAAChange
/return

Sub CalculateStandardGroupExpChange
   /varset StandardGroupNewExp ${Me.PctExp}
   /if (${StandardGroupNewExp}<${StandardGroupOldExp}) {
      /varcalc StandardGroupGainedExp (${StandardGroupNewExp} + 100.00)
   }
   /varcalc StandardGroupGainedExp (${StandardGroupNewExp}-${StandardGroupOldExp})
   /varcalc TotalStandardGroupGainedExp (${TotalStandardGroupGainedExp}+${StandardGroupGainedExp})
   /varset StandardGroupOldExp ${Me.PctExp}
   /call CheckAAChange
/return

Sub CalculateStandardRaidExpChange
   /varset StandardRaidNewExp ${Me.PctExp}
   /if (${StandardRaidNewExp}<$${StandardRaidOldExp}) {
      /varcalc StandardRaidGainedExp (${StandardRaidNewExp} + 100.00)
   }
   /varcalc StandardRaidGainedExp (${StandardRaidNewExp}-${StandardRaidOldExp})
   /varcalc TotalStandardRaidGainedExp (${TotalStandardRaidGainedExp}+${StandardRaidGainedExp})
   /varset StandardRaidOldExp ${Me.PctExp}
   /call CheckAAChange
/return

Sub CalculateAAExpChange
   /if (${AANewExp}<${AAOldExp}) {
      /varcalc AANewExp (${AANewExp} + 100.00)
   }
   /varcalc AAGainedExp (${AANewExp}-${AAOldExp})
   /varcalc TotalAAGainedExp (${TotalAAGainedExp}+${AAGainedExp})
   /varset AAOldExp ${Me.PctAAExp}
/return

Sub CalculateGroupLeaderExpChange
   /varset GroupLeaderNewExp ${Me.PctGroupLeaderExp}
   /if (${GroupLeaderNewExp}<${GroupLeaderOldExp}) {
      /varcalc GroupLeaderNewExp ({GroupLeaderNewExp} + 100.00)
   }
   /varcalc GroupLeaderGainedExp (${GroupLeaderNewExp}-${GroupLeaderOldExp})
   /varcalc TotalGroupLeaderGainedExp (${TotalGroupLeaderGainedExp}+${GroupLeaderGainedExp})
   /varset GroupLeaderOldExp ${Me.PctGroupLeaderExp}
/return

Sub CalculateRaidLeaderExpChange
   /varset RaidLeaderNewExp ${Me.PctRaidLeaderExp}
   /if (${RaidLeaderNewExp}<${RaidLeaderOldExp}) {
      /varcalc RaidLeaderNewExp ({RaidLeaderNewExp} + 100.00)
   }
   /varcalc RaidLeaderGainedExp (${RaidLeaderNewExp}-${RaidLeaderOldExp})
   /varcalc TotalRaidLeaderGainedExp (${TotalRaidLeaderGainedExp}+${RaidLeaderGainedExp})
   /varset RaidLeaderOldExp ${Me.PctRaidLeaderExp}
/return

Sub AddSoloGroupRaidStandardExp
   /varcalc TotalStandardAbsoluteGainedExp (${TotalStandardSoloGainedExp}+${TotalStandardGroupGainedExp}+${TotalStandardRaidGainedExp})
/return

Sub Event_SoloExp
   /varcalc MobCount ${MobCount} + 1
   /call CalculateStandardSoloExpChange
   /call AddSoloGroupRaidStandardExp
   /popup +${StandardSoloGainedExp}% experience.
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Gained: ${StandardSoloGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Total: ${TotalStandardAbsoluteGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Average: ${Math.Calc[${TotalStandardAbsoluteGainedExp}/${MobCount}]}% Exp (Mobs: ${MobCount})
   /if (${ShowTimeStuff}>0) /echo Time Between Mobs: ${Timer} seconds.
   /if (${ShowTimeStuff}>0) /echo Time Running: ${OverallRunningTime}
   /if (${ShowTimeStuff}>0) /echo Time Average Per Mob: ${Math.Calc[${OverallRunningTime}/${MobCount}]} Seconds
   /varset Timer 0
   /echo ***********************************
/return

Sub Event_GroupExp
   /varcalc MobCount ${MobCount} + 1
   /call CalculateStandardGroupExpChange
   /call AddSoloGroupRaidStandardExp
   /popup +${StandardGroupGainedExp}% experience.
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Gained: ${StandardGroupGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Total: ${TotalStandardAbsoluteGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Average: ${Math.Calc[${TotalStandardAbsoluteGainedExp}/${MobCount}]}% Exp (Mobs: ${MobCount})
   /if (${ShowTimeStuff}>0) /echo Time Between Mobs: ${Timer} seconds.
   /if (${ShowTimeStuff}>0) /echo Time Running: ${OverallRunningTime}
   /if (${ShowTimeStuff}>0) /echo Time Average Per Mob: ${Math.Calc[${OverallRunningTime}/${MobCount}]} Seconds
   /varset Timer 0
   /echo ***********************************
/return

Sub Event_RaidExp
   /varcalc MobCount ${MobCount} + 1 
   /call CalculateStandardRaidExpChange
   /call AddSoloGroupRaidStandardExp
   /popup +${StandardRaidGainedExp}% experience.
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Gained: ${StandardRaidGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Total: ${TotalStandardAbsoluteGainedExp}
   /if (${TotalStandardAbsoluteGainedExp}>0) /echo XP Average: ${Math.Calc[${TotalStandardAbsoluteGainedExp}/${MobCount}]}% Exp (Mobs: ${MobCount})
   /if (${ShowTimeStuff}>0) /echo Time Between Mobs: ${Timer} seconds.
   /if (${ShowTimeStuff}>0) /echo Time Running: ${OverallRunningTime}
   /if (${ShowTimeStuff}>0) /echo Time Average Per Mob: ${Math.Calc[${OverallRunningTime}/${MobCount}]} Seconds
   /varset Timer 0
   /echo ***********************************
/return

Sub Event_GroupLeaderExp
   /call CalculateGroupLeaderExpChange
   /echo GL Gained: ${GroupLeaderGainedExp} || GL Total: ${TotalGroupLeaderGainedExp}
/return

Sub Event_RaidLeaderExp
   /call CalculateRaidLeaderExpChange
   /echo RL Gained: ${RaidLeaderGainedExp} || RL Total: ${TotalRaidLeaderGainedExp}
/return

Sub Event_Help
   /echo -={ Generalstuff.mac }=-
   /echo 1. Auto-Forage System. (/echo Forage for help)
   /echo 2. Auto-Stick System. (/echo Stick for help)
   /echo 3. Experience Track System.
   /echo 4. Auto-Skill Train System.
/return

Sub Event_Forage
   /echo -={ Generalstuff.mac }=- :: Auto-Forage System
   /echo Macros/Forage.ini is where you configure everything.
   /echo -1 Means you will loot all of those specified.
   /echo 0 Means you will destroy that item specified.
   /echo 1+ Any number higher or equal to 1, will loot that many.
   /echo Macros/Forage_Stats.log is where everything is stored.
   /echo Make sure you have Forage in an ability spot in your Action's window.
/return

Sub Event_Stick
   /echo -={ Generalstuff.mac }=- :: Auto-Stick System
   /echo This Auto-Stick System is still being worked on.
   /echo To start sticking to your target type: /echo Autostick
   /echo To stop sticking to your target lose your target or press: ESC
/return

Sub Event_TimeStuff
   /echo /echo "Time Info On" or "Time Info Off" to turn Time Information off or on.
   /echo This macro has been running ${OverallRunningTime} seconds.
/return

Sub Event_TimeInfoOff
   /if (${ShowTimeStuff}>0) /varset ShowTimeStuff 0
   /echo Time information off.
/return

Sub Event_TimeInfoOn
   /if (${ShowTimeStuff}<1) /varset ShowTimeStuff 1
   /echo Time information on.
/return

Sub Event_StickToTarget
   /echo Lose your target (ESC) to cancel Auto-Stick!
   /varset StickFighting 1
   :Loop
   /if (!${Target.ID}) {
   /keypress back
   /varset StickFighting 0
   /attack off
   /return
   }
   /if ((${Target.Distance}<11)&&(${StickFighting}>0)) /goto :Combat
   /if ((${Target.Distance}>10)&&(${StickFighting}>0)) /goto :MoveCloser
   /goto :Loop

   :Combat
   /keypress back
   /face fast ${Target}
   /attack on
   /goto :Loop

   :MoveCloser
   /attack off
   /face fast
   /if (${Target.Distance}>10) {
   /keypress forward HOLD
   } else {
   /keypress forward
   }
   /goto :Loop
/return

Sub Event_LFG
  /varset LFG 1
  /shout (${Me.Level}) (${Me.Class}) looking for a group, PST.
/return

Sub Event_LFGOff
  /varset LFG 0
/return

Sub Event_GroupLeaderExp
   /call CalculateGroupLeaderExpChange
   /echo GL Gained: ${GroupLeaderGainedExp} || GL Total: ${TotalGroupLeaderGainedExp}
/return

Sub Event_RaidLeaderExp
   /call CalculateRaidLeaderExpChange
   /echo RL Gained: ${RaidLeaderGainedExp} || RL Total: ${TotalRaidLeaderGainedExp}
/return

Sub Event_Help
   /echo -={ Generalstuff.mac }=-
   /echo 1. Experience Tracking.
   /echo 2. Auto-Forage System (/GSForage for help)
   /echo 3. Auto-Stick System (/GSStick for help)
   /echo 4. Time Stuff (/GSTimeStuff for help)
   /echo 5. Auto-Skill Train System
/return

Sub Event_Forage
   /echo -={ Generalstuff.mac }=- :: Auto-Forage System
   /echo Macros/Forage.ini is where you configure everything.
   /echo -1 Means you will loot all of those specified.
   /echo 0 Means you will destroy that item specified.
   /echo 1+ Any number higher or equal to 1, will loot that many.
   /echo Macros/Forage_Stats.log is where everything is stored.
   /echo Make sure you have Forage in your ability part of Actions Window
   /echo If you get off your mount and you wanna forage, /GSForageOn
/return

Sub Event_Stick
   /echo -={ Generalstuff.mac }=- :: Auto-Stick System
   /echo This Auto-Stick System is still being worked on.
   /echo To start sticking to your target type: /Autostick
   /echo To stop sticking to your target lose your target or press: ESC
/return

Sub Event_TimeStuff
   /echo /GSTimeInfoOn or /GSTimeInfoOff" to turn Time Information on or off.
   /echo This macro has been running ${OverallRunningTime} seconds.
/return

Sub Event_TimeInfoOff
   /if (${ShowTimeStuff}>0) /varset ShowTimeStuff 0
   /echo Time information off.
/return

Sub Event_TimeInfoOn
   /if (${ShowTimeStuff}<1) /varset ShowTimeStuff 1
   /echo Time information on.
/return

Sub Event_StickToTarget
   /echo Lose your target (ESC) to cancel Auto-Stick!
   /varset StickFighting 1
   :Loop
   /if (!${Target.ID}) {
   /keypress back
   /varset StickFighting 0
   /attack off
   /return
   }
   /if ((${Target.Distance}<11)&&(${StickFighting}>0)) /goto :Combat
   /if ((${Target.Distance}>10)&&(${StickFighting}>0)) /goto :MoveCloser
   /goto :Loop

   :Combat
   /keypress back
   /face fast ${Target}
   /attack on
   /goto :Loop

   :MoveCloser
   /attack off
   /face fast
   /if (${Target.Distance}>10) {
   /keypress forward HOLD
   } else {
   /keypress forward
   }
   /goto :Loop
/return

Sub Event_ForageOFF
   /popup Generalstuff: NOT FORAGING
   /echo NOT FORAGING.
   /echo "/GSForageOn" to turn it back on.
   /varset Forage 0
/return

Sub Event_ForageON
   /popup Generalstuff: FORAGING
   /echo NOW FORAGING.
   /varset Forage 1
/return

Sub Event_Busy
   /delay 1s
/return
Last edited by Fabolous1 on Tue May 12, 2009 11:54 pm, edited 4 times in total.
[url=http://www.macroquest2.com/phpBB2/viewtopic.php?t=16277]CastingBuilderMulti.mac (2.2)[/url]
[url=http://www.macroquest2.com/phpBB2/viewtopic.php?p=143350#143350]Generalstuff.mac (6.0)[/url]

Harden
a hill giant
a hill giant
Posts: 244
Joined: Thu Aug 25, 2005 8:23 pm

Post by Harden » Sat May 09, 2009 11:36 am

Something I've seen in other macro's you might want to add, is a DPS output as well, you have all the stuff for timing kills in it already wouldn't be much more.

I havent tested this, but looks like nice work.
-Harden
I wanna be a Macro Writer when I grow up!

Fabolous1
a ghoul
a ghoul
Posts: 134
Joined: Sun Jun 27, 2004 12:44 am

Post by Fabolous1 » Sat May 09, 2009 1:16 pm

Reupdated the code, I don't think I updated the fix to this one, I'm primarily focusing on the VIP section one.
[url=http://www.macroquest2.com/phpBB2/viewtopic.php?t=16277]CastingBuilderMulti.mac (2.2)[/url]
[url=http://www.macroquest2.com/phpBB2/viewtopic.php?p=143350#143350]Generalstuff.mac (6.0)[/url]