Shares.mac
From CLUMP
Description
Shares is an expansion of the default /share command to accept multiple names, to speed sharing groups of people. This newer version of thank sharers 2.x has full thank list building and thanking built in.
Dependencies
Optional Dependency on "/set debug" command in alternate default
Usage
just type in sh <name> <name> <name> <name> <name> to share up to you maximum number of people.
Noteworthy Techniques
Use of arrays.
Credits
Noivad
message "*Shares Macro Loaded"
/* -------------------------------------------------------------------------
| shareMultiple Version 1.1.3 | ThankGroup Version 2.5.3 |
------------------------------- Description -----------------------------
Shares is an expansion of the default /share command to accept multiple names, to ease sharing and thanking groups of people.
---------------------------------- Usage --------------------------------
##### type "/th?" for online help
type:
sh [name*] [name] [name] [name] [name]
to share up to your maximum number of people.
*You can type partial names as you can with the default share command.
/ths
to build thank list of shares in and out
/tn
to thank the next person on the list
/ath
to automatically thank and set through the list
---------------------------------- Setup ----------------------------------
Add the line below to your default macro file:
include "Shares.txt"
Note: to work properly you might have to remove the line
"sh" "/share " @text "\r" from your default macros file.
or you can use other built in triggers:
"shm" & "/shm"
------------------------------ Feedback/Info ------------------------------
This macro makes a list of people to thank numerous ways. Then you can call the AutoThank if you want to thank a person every 4 minutes (set with "delay" global. the delay by default is just over 4 minutes, 1200 Frames).
The Default Triggers are listed below, feel free to edit them. A short description is listed next to each trigger.
** Thank Options controls several options. including just a number ("/tho 3") will set the person at that position in the list (3 in this case) as the next exile to thank. With "debug" set to 0 or 1 it will allow debug messages to show up and allow you to load a default list of people to thank into the ThankGroup by activating the default share shortcut,"sh", which you can set in listA below. With the "off" option ("/tho off") it turns off the AutoThank loop.
*The v.2.1.3 comment format is as follows:
<<m_macroname>> (default trigger|s <required text> [optional text]) short description.
** the single less than some text and greater than denotes strings so when you see "/thg [message]"
** the vertical bar "|" is used to denote valid options (arguments) the macro accepts
** all macros are prefixed with "m_" in the file for quick searching and avoiding false hits from "call <macro>"
** global variable have their type & [:specific function] in tech speak
along with a short description
If you find any bugs or have suggestions, contact noivad either in game or
at his mac dot com address. This macro is "/Thank-ware."
------------------------- version change notes --------------------------
v.2.1.2 "ThankRandom" was added by request of Rroot (REMOVED 2.5)
v.2.1.3 *fixed a small bug that threw an error, but didn't stop the macro
*Added <<tags>> to functions and comments
*Added ThankHelp macro
v.2.1.4 Added ability to remove a person from the list with /thgc <number>
*Added ThankGroup Help "/thh" or "/thgh"
v2.1.5 bug fixes to list behavior broken in 2.1.4 feature addition
v.2.1.6-7 bug fix for increment not working.
v2.3 fixes moveUp bug. ThankRandom is Broken & has been
v.2.5.2 & 1.1.2 won't add people that are already on list
----------------------------------------------------------------------- */
/****** Share Triggers ******/
"sh" call shareMultiList //changes /share to add multiple people
"/shm" call shareMultiList // also adds to myTG
"shm" call shareMultiList //Template:M shareMultiList
/****** Thank Group Triggers ******/
"/moveup" call moveUp //removes players who are now offline
"/th?" call ThankHelp //Online ThankGroup command help
"/ath" call AutoThank //Starts an Automatic thank loop | "off" to stop
"/thb" call BuildDefault //Builds the default or saved list
"/thg" call ThankGroup //Thanks the next person on the list
"/thga" call AddToThankGroup // Adds a person to ThankGroup list
"/thgwho" call WhoAmIThanking // Shows the ThankGroup list
"/thg?" call WhoAmIThanking //
"/thgc" call ClearThankGroup //Clears out ThankGroup
"/thgh" call ThankHelp //Online ThankGroup command help
"/thgm" call ThankMessage //sets the message given with karma
"/thm" call ThankMessage
"/thh" call ThankHelp //Online ThankGroup command help
"/thn" call ThankNext // Thanks next person in the list
"/tho" call ThankOptions // see ** Above or Template:M ThankOptions below
//"/thr" call ThankRandom // BROKEN: See * Above
"/ths" call ThankSharers //loads shares into thank list
"/tn" call ThankNext //Thanks the next person on list
set debug 0 //<<debug>> (bool:toggle) turns on and off debugging
set modeverbose 1 //first trigger will remind people how to use. set to 0 to turn off
set theMessage " Thank you " //<<EditMe>> your default message
set myThankGroup[0] "" //in case thankTarget is set to 0
set listA "Talin Silky Klur Natas Shadowfire" //EDIT to your friends
/* ---- Do not Edit below this line if not Familiar with Macros ---- */
set slotG 1 //<<slotG>> (int:index) is the pointer for the list
set currentIndex 1 //which slot is current
set thankTarget 1 //internal current index
set thankTotal 0 //<<thankTotal>> (int:sum) <<!=DO_NOT_EDIT>> {?}Number in list
set ATH 0 //<<ATH>> (bool:toggle) controls automatic thanking
set delay 1201 //<<delay>> (int:timer) controls pause between Template:M AutoThank
set ht[0] "There is no entry here"
set ent 0
set initSwitch 0
/* ******************** shareMultiple v1.1.3 *********************** */
//<<m_shareMultiList>> (sh|/shm|shm <name> [name]) shares & adds to list
shareMultiList
{
setglobal ht[sh] "*'sh|/shm|shm <name> [name]' shares & adds exiles to list"
setglobal ht[1] "*'sh|/shm|shm <name> [name]' shares & adds exiles to list"
if slotG < 1
setglobal slotG 1
end if
if @text != ""
set count 0
label LOOP
if count <= @text.num_words
"/select " @text.word[count] " \r"
if @selplayer.simple_name == ""
set count + 1
goto LOOP
end if
"/share " @selplayer.simple_name " \r"
if debug == 1
message "*attempted share with " @text.word[count] " in LOOP"
end if
pause 1
if "No player named " < @env.textLog
set count + 1
goto LOOP
end if
set i 1
LABEL COMPARELOOP
//ADDED 20220625 EXPERIMENTAL trying to search array for string
if myThankGroup != ""
//message "myThankGroup:" myThankGroup
if myThankGroup < @selplayer.simple_name
message @selplayer.simple_name "in myThankGroup"
end if
end if
//ABOVE ADDED
if myThankGroup[i] == @selplayer.simple_name
message "* " @selplayer.name " already in list SKIPPING"
set count + 1
pause 25
goto LOOP
else
if i < thankTotal
set i + 1
goto COMPARELOOP
end if
setglobal myThankGroup[slotG] @selplayer.simple_name
pause 1
if debug == 1
message "* [" slotG "]" myThankGroup[slotG] " added to thank group."
end if
setglobal slotG + 1
setglobal thankTotal + 1
if count < @text.num_words
set count + 1
end if
pause 25
goto LOOP
end if
end if
else
"/share\r"
end if
label END
}
/************************ Thank Group v2.5.3 *************************/
//<<m_ThankGroup>> (/thg [message]) Thanks exile|s in list (activates AutoThank)
ThankGroup
{
setglobal ht[thg] "'/thg [message]' Sets the default message & activates AutoThank (i.e '/thg thanks for the hunt!'). '/thg /reset' clears the list."
setglobal ht[2] "'/thg [message]' Sets the default message & activates AutoThank (i.e '/thg thanks for the hunt!'). '/thg /reset' clears the list."
if @text == "reset"
call ClearThankGroup
goto END
else if @text == "/reset"
call ClearThankGroup
goto END
else if @text == ?
message thga
message theMessage
else
if @text != ""
setglobal theMessage @text
end if
end if
pause 1
call AutoThank
message ending thanks
label END
}
//<<m_AddToThankGroup>> (/thga <name> [name]) adds exile|s to list
AddToThankGroup
{
setglobal ht[thga] "'/thga <name> [name]' adds exile|s to list"
setglobal ht[3] "'/thga <name> [name]' adds exile|s to list"
set num_people @text.num_words //gets the number of names to add (only use one word names for accuracy)
set slot 0 //must start one less than total to add
if debug == 1
message "slotG=" slotG
end if
if @text == ?
message ht[thga]
end if
label ADDLOOP
if slot <= num_people
"/select " @text.word[slot] "\r"
if debug == 1
message "@selplayer.simple_name: " @selplayer.simple_name
end if
pause 1
if @env.textLog < "No player named "
if debug == 1
message "* " @text.word[slot] " NOT FOUND"
end if
set slot + 1
goto ADDLOOP
else if @selplayer.simple_name == ""
if debug == 1
message "* " @text.word[slot] " EMPTY"
end if
set slot + 1
goto ADDLOOP
else
set i 0
LABEL COMPARELOOP
if myThankGroup[i] == @selplayer.simple_name
message "* " @selplayer.name " already in list SKIPPING"
set slot + 1
goto ADDLOOP
else
if i < thankTotal
set i + 1
goto COMPARELOOP
end if
setglobal myThankGroup[slotG] @selplayer.simple_name
if debug == 1
message "*myThankGroup[" slotG "]= " myThankGroup[slotG]
end if
pause 1
set slot + 1
setglobal slotG + 1
setglobal thankTotal + 1
if debug == 1
message "thank total: " thankTotal
end if
goto ADDLOOP
end if
end if
end if
if modeverbose == 1
call WhoAmIThanking
end if
label END
}
//<<m_ClearThankGroup>> (/thgc) clears and resets list
ClearThankGroup
{
setglobal ht[thgc] "'/thgc [num]' clears and resets list, with a number it removes that entry in the list"
setglobal ht[4] "'/thgc [num]' clears and resets list, with a number it removes that entry in the list"
if @text == ""
message "Clearing thank group"
setglobal thankTarget 1
setglobal counted 1 //NEW2021 was 0
setglobal thankTotal 1
setglobal myThankGroup ""
setglobal slotG 1
message thankTarget "*" counted "*thanktotal:" thankTotal "*" myThankGroup "*slotG:" slotG "*"
else if @text == 0
setglobal currentIndex @text
call moveUp
else if @text > 0
if @text <= thankTotal
setglobal currentIndex @text //CurrentIndex used by moveUp
call moveUp
end if
end if
label END
}
//<<m_ThankNext>> (/tn [message]) actually does the thanking
ThankNext
{
if initSwitch == 1
setglobal ht[tn] "/tn [message]' manually thanks the next person and sets the message"
goto END
end if
if thankTotal < 1
message "*ThankNext*no one in thank list, adding shares in (/ths)**"
call ThankSharers
setglobal modeverbose 1
end if
if thankTarget < 1 //protects against out of bounds array calls
setglobal thankTarget 1
else if thankTarget > thankTotal
setglobal thankTarget 1
end if
"/select " myThankGroup[thankTarget] "\r"
if @text == ""
"/select " myThankGroup[thankTarget] "\r"
call ThankMessage
"/thank " @selplayer.name " " theMessage " :)\r"
else
"/thank " myThankGroup[thankTarget] " " @text "\r"
end if
pause 1
set tocheck @env.TextLog
//checks log for failure
if tocheck < "You have no karma to give."
if debug == 1
message "**m_ThankNext:Unable to give karma to " myThankGroup[thankTarget] " holding place."
end if
else if tocheck < "is not in the lands."
if debug == 1
message "*m_ThankNext:Unable to give karma (No Target):Advancing"
end if
setglobal missingTarget 1
call moveUp
if debug == 1
message "tht/tot:" thankTarget ":ThankTotal:" thankTotal
end if
else if thankTarget < thankTotal
call thankFeedback //20220625 EDIT switched order
setglobal thankTarget + 1 //20220625 EDIT switched order
else if thankTarget >= thankTotal
call thankFeedback //20220625 EDIT switched order
setglobal thankTarget 1 //20220625 EDIT switched order
end if
label END
}
thankFeedback
{
if debug == 1
message "*thanking " myThankGroup[thankTarget] "/thh for help"
setglobal modeverbose 0
end if
}
WhoAmIThanking //<<m_WhoAmIThanking>> (/thgwho)|(/thg?) outputs the myTG
{
if initSwitch == 1
setglobal ht[thgwho] "'/thgwho|/thg? [reset|/reset]' shows the list or optionally resets it"
goto END
end if
if @text == "reset"
call ClearThankGroup
else if @text == "/reset"
call ClearThankGroup
end if
if thankTotal < 1
message "**The thank group is empty. Try /ths or /thga <name> [name] to add people"
goto END
else
message "*My thank group is currently: "
setglobal counted 1 //must be 1 for start of array 20220621
label LOOPSTART
if counted <= thankTotal
if counted == thankTarget
message "[" counted "]*" myThankGroup[counted]
else
message "[" counted "]" myThankGroup[counted]
end if
setglobal counted + 1
goto LOOPSTART
end if
end if
label END
}
/****** SHARERS *******/
// <<m_ThankSharers>>
ThankSharers // (/ths) adds all people sharing you to the list
{
if initSwitch == 1
setglobal ht[ths] "'/ths' adds all people sharing you to the list"
goto END
end if
set count 0
set countB 0
set i 0
set j 0
if debug == 1
message "ThankShares In: " @my.shares_in.num_words
message "Shares in are " @my.shares_in
message "ThankShares Out:" @my.shares_out.num_words
message "Shares out are " @my.shares_out
message "thankTotal: " thankTotal
message "myThankGroup:" myThankGroup
end if
label LOOP0
if count <= @my.shares_in.num_words
"/select " @my.shares_in.word[count] " \r"
if @selplayer.simple_name == ""
set count + 1
goto LOOP0
else if debug == 1
message "(L0)Start: select exile" @selplayer.simple_name
end if
pause 1
set i 1
LABEL COMPARELOOP
if debug == 1
//message "(L0C1) ThankGroup[" i "]" myThankGroup[i]
end if
if myThankGroup[i] == @selplayer.simple_name
message "*" @selplayer.name "in list (L0) SKIPPING"
set count + 1
goto LOOP0
else if i < thankTotal
set i + 1
//message "i:" i
goto COMPARELOOP
end if
setglobal myThankGroup[slotG] @selplayer.simple_name
pause 1
if debug == 1
message "* [" slotG "]" myThankGroup[slotG] " added to thank group. (L0)"
end if
setglobal slotG + 1
setglobal thankTotal + 1
if count < @my.shares_in.num_words
set count + 1
goto LOOP0
end if
pause 25
end if
label LOOP2
if countB <= @my.shares_out.num_words
"/select " @my.shares_out.word[countB] " \r"
if @selplayer.simple_name == ""
set countB + 1
goto LOOP2
else
if debug == 1
message "(L2)Start: select exile" @selplayer.simple_name
end if
end if
pause 1
set j 1
LABEL COMPARELOOP2
if debug == 1
//message "(L2C2) ThankGroup[" j "]" myThankGroup[j]
end if
if myThankGroup[j] == @selplayer.simple_name
message "*" @selplayer.name "in list (L2) SKIPPING"
set countB + 1
goto LOOP2
else if j < thankTotal
set j + 1
//message "j:" j
goto COMPARELOOP2
end if
setglobal myThankGroup[slotG] @selplayer.simple_name
pause 1
if debug == 1
message "* [" slotG "]" myThankGroup[slotG] " added to thank group. (L2)"
end if
setglobal slotG + 1
setglobal thankTotal + 1
if countB < @my.shares_out.num_words
set countB + 1
goto LOOP2
end if
pause 25
end if
label END
if debug == 1
call WhoAmIThanking
end if
}
//<<m_ThankOptions>> (/tho) sets tTarget to 0|number or switches debugging on
ThankOptions
{
if initSwitch == 1
setglobal ht[tho] "'/tho [<number>||debug 0|1||off||message <message>]' sets next person thanked to 0|<number>, switches debugging on or off, turns on or off AutoThanking, or sets a new message"
goto END
end if
if @text == ""
setglobal thankTarget 0
call WhoAmIThanking
else if @text.word[0] == "debug"
if @text.word[1] < 2
setglobal debug @text.word[1]
end if
if debug == 1
message "*Debugging is on"
else if debug == 0
message "*Debugging is off"
end if
else if @text.word[0] == "off"
setglobal ATH 0
else if @text.word[0] == "on"
call AutoThank
else
if @text.word[0] > 0
if @text.word[0] <= thankTotal
setglobal thankTarget @text.word[0]
end if
else
message "*That number won't work. The highest number you can set it currently: " thankTarget
pause 7
message "*Blame Polerand! ;)"
end if
else if @text.word[0] == "message"
set words @text.word[count]
set counter 1
label MESSAGEBUILDER
if counter > words
setglobal theMessage interim
message "the message is now: " theMessage
else
set interim.word[counter] @text.word[counter] " "
set counter + 1
goto MESSAGEBUILDER
end if
end if
label END
}
// AutoThank 1.0 "/ath"
AutoThank //<<m_AutoThank>> (/ath ["0"|"off"]) turns on*|off automatic thanks
{
if initSwitch == 1
setglobal ht[ath] "'/ath [0|off]' turns off automatic thanks. With no arguments it turns it on."
goto END
end if
if @text.word[0] == "off"
setglobal ATH 0
goto ENDoff
else if @text.word[0] == "0"
setglobal ATH 0
goto ENDoff
end if
setglobal ATH 1
label LOOPA
if ATH == 1
pause delay
if thankTarget <= thankTotal
call ThankNext
goto LOOPA
else
message "***You are out of people to thank.***"
message "***To Add more type /thga <name> [name] ..."
end if
end if
label ENDoff
message "*AutoThank is Off"
label END
}
//<<m_BuildDefault>> List Building Function
BuildDefault
{
if initSwitch == 1
setglobal ht[thb] "'/thb' builds the thank list using the default in Friends"
goto END
end if
label LOOPA
if count > listA.num_words
setglobal myThankGroup[slotG] listA.word[count]
if debug == 1
pause 1
message "*" myThankGroup[slotG] " added to thankgroup."
end if
set count + 1
setglobal slotG + 1
setglobal thankTotal + 1
pause 20
goto LOOPA
end if
label END
}
// *m_moveUp* Reorganizes the thankgroup List triggered by ClearThankGroup '/thgc 0'
moveUp
{
if thankTotal > 0
setglobal currentIndex thankTarget
message "currentIndex:" currentIndex "exile to thank " myThankGroup[currentIndex]
message "**moving up**thankTotal:" thankTotal "*"
label DECLOOP
setglobal cIndexPlus currentIndex
setglobal cIndexPlus + 1 //CRITICAL: moves to next exile on list
if cIndexPlus > thankTotal
message "*m_moveUp*cIndexPlus Exceeds thankTotal"
//setglobal myThankGroup[currentIndex] "" //20220619 edit from currentIndex //20220703 EDIT bug check!
if debug == 1
message "*Thanklist reorganized* '/thg?' to see it (or '/set debug 1'"
end if
setglobal cIndexPlus thankTotal
else if currentIndex == thankTotal //20220625 ADDED
if myThankGroup[cIndexPlus] != ""
setglobal myThankGroup[currentIndex] myThankGroup[cIndexPlus]
setglobal currentIndex + 1
goto DECLOOP
end if
if thankTarget == currentIndex
message " [" currentIndex "]* " myThankGroup[currentIndex]
else
message " [" currentIndex "] " myThankGroup[currentIndex]
end if
else //overwrites current exile
if myThankGroup[cIndexPlus] != ""
setglobal myThankGroup[currentIndex] myThankGroup[cIndexPlus]
end if
if myThankGroup[currentIndex] == myThankGroup[cIndexPlus]
if thankTarget == currentIndex
message " [" currentIndex "]* " myThankGroup[currentIndex]
else
message " [" currentIndex "] " myThankGroup[currentIndex]
end if
end if
setglobal currentIndex + 1
goto DECLOOP
end if
setglobal thankTotal - 1
setglobal slotG - 1
end if
if thankTotal < currentIndex
if debug == 1
message "mTG[cI]" myThankGroup[currentIndex] currentIndex
end if
setglobal currentIndex 1
end if
}
//<<m_ThankMessage>> (/thm|/thgm) Sets and|or shows the message
setglobal thankMessage 1
ThankMessage
{
if @text == "/m"
message theMessage
else if @text == "/message"
message theMessage
else if @text == "?"
message theMessage
else if @text == ""
random
setglobal theMessage " because why not? "
or
setglobal theMessage " Thanks "
or
setglobal theMessage " Thank you "
or
setglobal theMessage " Thankx "
or
setglobal theMessage " good hunting "
or
setglobal theMessage " thanks a lot "
or
setglobal theMessage " Why? Because we like you "
or
setglobal theMessage " not that it really matters, but here's some good karma "
or
setglobal theMessage " Woo! Woo! "
or
setglobal theMessage " got Karma? "
or
setglobal theMessage " hu! hu! "
or
setglobal theMessage " a GK a day keeps the departs away "
or
setglobal theMessage " GK!GK!"
or
setglobal theMessage " happiness is GK"
or
setglobal theMessage " what's in a GK?"
or
setglobal theMessage " Good Karma is its own reward."
or
setglobal theMessage " this Good Karma brought to you by macros. Yes, macros"
or
setglobal theMessage " did you hear the one about the exile who got too much GK? — Turned ultraviolet"
or
setglobal theMessage " what's in. GK, let me count the ways…"
or
setglobal theMessage " A BK and a GK walk into a bar…"
or
setglobal theMessage " are we blue yet?"
or
setglobal theMessage " oh happy day, GK"
or
setglobal theMessage " GK ‘message and data rates still apply…’"
or
setglobal theMessage " keep healers blue! "
or
setglobal theMessage " Two by two; GK’s coming for you."
or
setglobal theMessage " Wooooooo!"
or
setglobal theMessage " There once was a mighty sailin’ man, a skipper brave and sure…"
or
setglobal theMessage " There are over 30 different good karma messages! Can you collect them all?"
or
setglobal theMessage "Karma Fever: Catch It!"
or
setglobal theMessage "Thanks for hunting with me."
or
setglobal theMessage "Thank you for the hunt."
or
setglobal theMessage "Without you here, it would be a duller world. :)"
end random
else if @text != ""
setglobal theMessage @text
end if
}
//<<m_ThankHelp>> {/thgh|/?th|/thh }Lists how to control macro
ThankHelp
{
setglobal hEntry 0
set initSwitch 1
call InitThG
if @text == "overview"
message "*Shares.txt::ThankGroup builds a list of exiles to thank."
message "*/type '/th? quickstart' for a basic command list"
message "*The <commands> are: sh, ath, thb, thg, thga, thgc, thgwho, tho, thr, ths, tn and are preceded with a slash '/'"
message "type '/th? <command> for more info on each command"
else if @text == "quickstart"
message "*'/thga' and their names (with no spaces) to add people"
message "*'/thg' followed by any message to send to the group."
message "*'/tn' to thank the next person manually"
message "*'/ath 0' or '/tho off' to stop the macro"
message "*'/th? message' see what current message is"
else if @text == "message"
message "*" theMessage
else if @text != ""
if @text == "sh"
message " " ht[1]
else if @text == "thg"
message " " ht[2]
else if @text == "thgc"
message " " ht[4]
else if @text == "th?"
message "*************************"
message "*Universal Self Destruct Activated*"
message "*************************"
message "*10..."
pause 3
message "*Now you've done it!*"
pause 2
message "*9..."
pause 5
message "*8..."
pause 5
message "*7..."
pause 5
message "*6..."
pause 5
message "*5..."
pause 5
message "*4..."
pause 5
message "*3..."
pause 5
message "*2..."
pause 5
message "*1..."
pause 5
message "*0"
message "*BOOM!*"
else
setglobal ent @text
message ht[ent]
end if
else
message "*type '/th? overview' or 'th? quickstart' for instuctions"
message "*more information is available in the macro file 'Shares.txt'"
//message "*thanks for trying this macro. Feedback is welcome"
end if
label END
}
InitThG
{
if initSwitch == 1
call shareMultiList
call AutoThank
call ThankGroup
call AddToThankGroup
call WhoAmIThanking
call ClearThankGroup
call ThankNext
call ThankOptions
// call ThankRandom
call ThankSharers
end if
setglobal initSwitch 0
}
Revisions
- 20100827-NV: