Addon:Multiboxer (legacy)

From Dual-Boxing Wiki

Revision as of 12:37, 20 March 2008 by Djarid (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

This is the original version of Multiboxer written by user:jdraughn aka Floozy. The portal page for the community driven addon is here

The addon contained 3 files; readme.txt, Multiboxer.toc and Multiboxer.lua

Contents

Code

readme.txt

[ Top ]

If you don't know what multiboxing is then this AddOn is NOT for you. If you want to read about MultiBoxing, check out [http://www.dual-boxing.com].

If you find any bugs or have any other feedback, please e-mail me at jdraughn at gmail.com (remove the spaces and change at to @).

Features:
1. Allows any person in the party to assign who the party leader is (as long as each account is using this addon).
2. Automatic following of party leader. Automatically refollows party leader when leaving combat (if toggled on).
3. Automatic swapping of action bars depending on if your assisting or playing the party leader.
4. Automatic accepting of resurrects, group invites and quest sharing.
5. This is a first release.  As such it's not really configurable (unless you open up the code and change variables yourself).  A GUI to change options is on the way depending on if the demand is there.  As it stands right now I am pretty happy just putting /script MyFunctionNameHere() in my macros to run my addon.  I will At the very least add slash commands soon.

Instructions for use:
Once this addon is properly installed, it runs automatically.  All characters in the group must have this installed for it to function correctly.


THE TWO COMMANDS WHICH YOU HAVE TO USE TO OPERATE THIS ADDON ARE:

/script NewLeader("PartyMemberName")
Promotes chosen person to party leader (does not matter who in the party runs the command). Where PartyMember is the name of the person in your party who you want to be leader and who everyone else will follow and assist.

and

/script FollowLeader()
If for someone reason one or more persons in your party have stopped following the leader, running this (from any person in the group) will make them all begin following again.

IN ADDITION TO USING THE TWO COMMANDS LISTED ABOVE, YOU MUST ALSO CONFIGURE YOUR ACTION BARS AS DESCRIBED BELOW.

By default action bar 2 is used for assisting, example:

/assist party1
/cast Curse of Agony

or

/cast {target=party1} Renew


Everyone who is following party1 (The party leader) will use this bar. So by default, if you press 1 and it gets sent to all the WoW windows, everyone who is following party1 will execute the first button on action bar 2, while party1 will execute the first button on action bar 1.

When used with AutoHotkey, you can send a key to execute the ChangeLeader("PartyMember") function automatically whenever you swap WoW windows.  The active window would then automatically become party leader meaning everyone in your group will automatically start following you, and since their action bar is swapped automatically too, they will automatically assist party1 (as long as you have configured their action bars appropriately.

A screenshot is almost worthless since this AddOn is so dynamic, and I am having a hard time trying to record a video of this in action since it's multiple directx windows. Fraps will only record one source at a time.  Might try to use a normal video camera and just record my screen.

-----------------------------------------------------------------------------------------

My personal setup is a single computer running 5 World of Warcraft accounts simutaneously and I use AutoHotkey [http://www.autohotkey.com] to broadcast my keystrokes to all my WoW windows.

I am currently playing 1 Paladin and 4 Priests.

My computer's hardware consists of:
1. An Intel Q6600 processor (4 CPU's running at 2.4Ghz each).
2. 3 GB of ram (2 GB seemed to be enough when running 4 game windows, but the 5th pushed it over the edge and I experience extreme slowdowns until I added another Gigabyte of ram.
3. Windows Vista 32bit
4. GeForce 8800GTS 320MB.

With this setup I am able to get very playable framerates, even running in 1920x1080 in windowed mode maximized.  By default however WoW will only run on the first two cores of your system, so if you have a quad core, make sure you change the affinity of your wow.exe's so they are using all 4 cores.

I use a program called process [http://www.beyondlogic.org/solutions/processutil/processutil.htm] in combination with AHK to automatically change the priority's of my wow windows whenever I swap screens so the foreground window gets it's cpu priority set to "High" while at the same time, any other wow windows get their priority set to "Below Normal".

Multiboxer.toc

[ Top ]

## Interface: 20200
## Title: MultiBoxer
## Version: .01
## Author: Floozy
## Notes: A Collection of Multiboxing utilties
MultiBoxer.lua

Multiboxer.lua

[ Top ]

local AssistingBarID = 1
local MainBarID = 2
local AutomaticallyFollow = true
local AutomaticallyAcceptQuests = true
local AutomaticallyChangeLootingToFFA = true



function MultiBoxer_OnEvents()
    if (event=="ADDON_LOADED") then         -- load saved variables
        -- load saved variables
    elseif (event=="PLAYER_REGEN_ENABLED") then 
         if (AutomaticallyFollow==true) then
             if (not UnitIsPartyLeader("player")) then
                 FollowLeader();
             end
         end
    elseif (event=="PARTY_INVITE_REQUEST") then -- make sure the person inviting is on your "trusted" list.
--        for i = 1,getn(TrustedPlayers) do
--            if (string.lower(arg1)==string.lower(TrustedPlayers[i])) then
                AcceptGroup();
                StaticPopup1:Hide();
--            end
--        end
    elseif (event=="PARTY_LEADER_CHANGED") then
        if (UnitIsPartyLeader("player")) then -- if party leader changed, and your the leader, then lead (others will follow YOU now).
            Lead();
        end 
    elseif (event=="QUEST_DETAIL") then
        AcceptQuest();
    elseif (event=="QUEST_ACCEPT_CONFIRM") then -- ESCORT QUESTS
        AcceptQuest();
    elseif (event=="PLAYER_XP_UPDATE") then
        SendAddonMessage("MultiBoxer", "ExpUpdated:- "..UnitName("player")..":- "..UnitXP("player")..":- "..UnitXPMax("player"), "PARTY");
    elseif (event=="RESURRECT_REQUEST") then
        AcceptResurrect();
    elseif (event=="UNIT_COMBAT") then
        SendAddonMessage("MultiBoxer", "TakingDamage:-", "PARTY");    
    elseif (event=="CHAT_MSG_ADDON") then 
        if (arg1=="MultiBoxer") then 
           local startPos, endPos, TheCommand, TheMessage = string.find( arg2, "(%w+)[%s%p]*(.*)");
           if (TheCommand=="Followme") then
                if (arg4~=UnitName("player")) then
                    FollowLeader();
                end
           elseif (TheCommand=="InfoMessage") then
               if (arg4~=UnitName("player")) then
                   WhisperYourself(TheMessage); -- NEED A BETTER WAY TO MESSAGE OTHER THEN WHISPERING
               end
           elseif (TheCommand=="PromoteToLeader") then
               if (UnitIsPartyLeader("player")) then -- if your leader, then pass leadership
                   PromoteToLeader(TheMessage);
               end
           elseif (TheCommand=="TakingDamage") then
               if (not UnitIsPartyLeader("player")) then
                  --  AlertLeader(arg4.." IS TAKING DAMAGE!")
               end
           elseif (TheCommand=="FollowLeader") then
               if (not UnitIsPartyLeader("player")) then
                   FollowUnit("party1");  
                   ChangeActionBarPage(AssistingBarID); 
               end
           end
        end

    end
end

function AlertLeader(TheMessage)
    SendChatMessage(TheMessage, "WHISPER", GetDefaultLanguage("player"), UnitName("party1"));
end

function WhisperYourself(TheMessage)
    SendChatMessage(TheMessage, "WHISPER", GetDefaultLanguage("player"), UnitName("player"));
end

function AddTrustedPlayer(TrustedPlayer)
               tinsert(TrustedPlayers, TheMessage)
end

function RemoveTrustedPlayer(TrustedPlayer)
               for i = 1,getn(TrustedPlayers) do
                   if (strlower(TrustedPlayers[i])==strlower(TheMessage)) then
                       SendChatMessage(tremove(TrustedPlayers, i).." was sucessfully removed from your TrustedPlayers list.");    
                   end
               end

end

function ListTrustedPlayers()
    for i = 1,getn(TrustedPlayers) do
       WhisperYourself(TrustedPlayers[i])
    end
end

function Lead()
    SendAddonMessage("MultiBoxer", "Followme:-", "PARTY");
    ChangeActionBarPage(MainBarID);
end

function FollowLeader()
    SendAddonMessage("MultiBoxer", "FollowLeader:-", "PARTY");
end

function NewLeader(PartyMember)
    SendAddonMessage("MultiBoxer", "PromoteToLeader:-".." "..PartyMember, "PARTY");
end

local frame = CreateFrame("Frame");
  frame:SetScript("OnEvent", MultiBoxer_OnEvents);
  frame:RegisterEvent("PLAYER_REGEN_ENABLED");
  frame:RegisterEvent("CHAT_MSG_ADDON");
  frame:RegisterEvent("PARTY_INVITE_REQUEST");
  frame:RegisterEvent("PARTY_LEADER_CHANGED");
  frame:RegisterEvent("QUEST_DETAIL");
  frame:RegisterEvent("QUEST_ACCEPT_CONFIRM");
  frame:RegisterEvent("PLAYER_XP_UPDATE");
  frame:RegisterEvent("RESURRECT_REQUEST");
  frame:RegisterEvent("UNIT_COMBAT"); -- FIRES WHEN AN NPC OR PLAYER IS IN COMBAT AND TAKES DAMAGE