You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
8.8 KiB
219 lines
8.8 KiB
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE muclient>
|
|
<muclient>
|
|
<plugin
|
|
name="DTrackReports" author="Icecool"
|
|
id="05cd229ae24e869f9da3bf01"
|
|
purpose="Plugin used to report DTRACK data"
|
|
language="Lua" date_written="2019-01-31 00:00:00"
|
|
save_state="n" requires="0.00" version="1.00" > </plugin>
|
|
<aliases>
|
|
<alias regexp = "y" ignore_case="y" enabled="y" echo_alias="y" sequence="95"
|
|
match="^^dre(port)?\s?(?<command>\w+)?\s?(?<channel>\w+)?$$"
|
|
script="ALIAS_report"></alias>
|
|
</aliases>
|
|
<triggers>
|
|
<trigger
|
|
enabled="n" regexp="y" omit_from_output="y" sequence="100" send_to="12" group="dtrack_swings"
|
|
match="^(.*?)$"
|
|
script="TRIGGER_process_dtrack_line" ></trigger>
|
|
<trigger
|
|
enabled="n" regexp="y" omit_from_output="y" sequence="100" send_to="12" group="dtrack_hits"
|
|
match="^(.*?)$"
|
|
script="TRIGGER_process_hits_line" ></trigger>
|
|
</triggers>
|
|
<!-- Get our standard constants -->
|
|
<include name="constants.lua"/>
|
|
<!-- Script -->
|
|
<script>
|
|
<![CDATA[
|
|
--[[ External Resources ]]--
|
|
dofile(GetInfo(60) .. "aardwolf_colors.lua") -- Used to support Aard Colors for the eprint() function
|
|
-- Basic print function that supports aard, xterm, and ANSI color codes [idea from Durel's Inventory script]
|
|
function cnote(string)
|
|
AnsiNote(stylesToANSI(ColoursToStyles(string)))
|
|
end
|
|
function trim(s)
|
|
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
|
end
|
|
function returnStringPosition( item, start, arg ) -- Designed to save on some variable usage in commands
|
|
local position, _ = string.find(arg, item, start, true)
|
|
if position then
|
|
return position
|
|
else
|
|
return -1
|
|
end
|
|
end
|
|
dtrack = { channel="echo" }
|
|
dtrack_track = {
|
|
["Swings Per Round"]="swings",
|
|
["Hit Percentage"]="hitpercent",
|
|
["Damage Per Hit"]="dph",
|
|
["Average"]="trackedavg"
|
|
}
|
|
dtrack_hits = {
|
|
["Hits"]=false,
|
|
["Primary Attack"]=false,
|
|
["Second Attack"]=true,
|
|
["Third Attack"]=true,
|
|
["Fourth Attack"]=true,
|
|
["Fifth Attack"]=false,
|
|
["Sixth Attack"]=false,
|
|
["Dual Wield"]=true,
|
|
["Second Dual"]=false,
|
|
["Third Dual"]=false,
|
|
["Haste Attacks"]=true,
|
|
["Lightspeed"]=false,
|
|
["Unarmed"]=false
|
|
}
|
|
--[[ dtrack swings logic ]]--
|
|
function isTrackedLine(argument)
|
|
return ((argument == "Tracked Spell") or (argument == "Tracked Skill"))
|
|
end
|
|
function returnTracked(argument)
|
|
for index, value in pairs(dtrack_track) do
|
|
if index == argument then
|
|
return value
|
|
end
|
|
end
|
|
return -1
|
|
end
|
|
function TRIGGER_process_dtrack_line(_, line, _, _)
|
|
local columnone = trim(string.sub(line, returnStringPosition(":", 1, line)-12, returnStringPosition(":", 1, line)-1))
|
|
local columntwo = trim(string.sub(line, returnStringPosition(":", 30, line)-20, returnStringPosition(":", 30, line)-1))
|
|
if (trim(line) == "") then
|
|
return
|
|
elseif (string.sub(line, 1, 1) == "-") then
|
|
if not dtrack.regular.start then
|
|
dtrack.regular.start = true
|
|
elseif dtrack.regular.start then
|
|
EnableTriggerGroup("dtrack_swings", false)
|
|
reportSwings()
|
|
end
|
|
elseif (isTrackedLine(trim(string.sub(line,1,13)))) then
|
|
dtrack.regular["sname"] = trim(string.sub(line,returnStringPosition("(",1,line)+1,returnStringPosition("):",1,line)-1))
|
|
else
|
|
if (returnTracked(columnone) ~= -1) then
|
|
dtrack.regular[returnTracked(columnone)] = ("%0.2f"):format(tonumber(trim(string.sub(line, returnStringPosition("[", 1, line)+1, returnStringPosition("]", 1, line)-1))))
|
|
end
|
|
if (returnTracked(columntwo) ~= -1) then
|
|
dtrack.regular[returnTracked(columntwo)] = ("%0.2f"):format(tonumber(trim(string.sub( line, returnStringPosition("[", 30, line)+1, returnStringPosition("]", 30, line)-1))))
|
|
end
|
|
end
|
|
end
|
|
--[[ dtrack hits logic ]]--
|
|
function isHitsAttack(argument)
|
|
local calculate=returnStringPosition(":",1,argument)-(returnStringPosition(":",1,argument)-1)
|
|
local command = trim(string.sub( argument, calculate, returnStringPosition(":",1,argument)-1))
|
|
for index, value in pairs(dtrack_hits) do
|
|
if index == command then
|
|
return true, value, index
|
|
end
|
|
end
|
|
return false, false, index
|
|
end
|
|
function returnAttackNumbers(argument)
|
|
return returnHits(argument), returnInstincts(argument)
|
|
end
|
|
function returnHits(argument)
|
|
return tonumber(trim(string.sub(argument,returnStringPosition("[", 1, argument)+1,returnStringPosition("]", 1, argument)-1)))
|
|
end
|
|
function returnInstincts(argument)
|
|
return tonumber(trim(string.sub(argument,returnStringPosition("(Ins", 1, argument)+9,returnStringPosition(")", 1, argument)-1)))
|
|
end
|
|
function TRIGGER_process_hits_line(_, line, _, _)
|
|
if (string.sub(line, 1, 1) == "-") then
|
|
if not dtrack.hits.start then
|
|
dtrack.hits.start = true
|
|
elseif dtrack.hits.start then
|
|
EnableTriggerGroup("dtrack_hits", false)
|
|
reportHits()
|
|
end
|
|
elseif (trim(line) == "") or (not isHitsAttack(line)) then
|
|
return -- Not a line we care about
|
|
else
|
|
local is_attack, has_instinct, skill = isHitsAttack(line)
|
|
if is_attack and not has_instinct then
|
|
dtrack.hits[skill], _ = returnAttackNumbers(line)
|
|
elseif is_attack and has_instinct then
|
|
dtrack.hits[skill], dtrack.hits["inst_"..skill] = returnAttackNumbers(line)
|
|
end
|
|
end
|
|
end
|
|
function returnPercent( instinct, total )
|
|
if (tonumber(instinct) or tonumber(total)) == nil then
|
|
print( "[ERROR]: Cannot caluclate a percentage on the items provided." )
|
|
return 0
|
|
end
|
|
return (("%0.2f"):format(tonumber(instinct)/tonumber(total)*100))
|
|
end
|
|
function returnTotalInstinctHits()
|
|
return (dtrack.hits["inst_Second Attack"]+dtrack.hits["inst_Third Attack"]+dtrack.hits["inst_Fourth Attack"]+dtrack.hits["inst_Dual Wield"]+dtrack.hits["inst_Haste Attacks"])
|
|
end
|
|
--[[ create report ]]--
|
|
function reportSwings()
|
|
local message = ("%s %s Swings/Round[%0.2f] Hits%%[%0.2f] DPH[%0.2f]"):format(
|
|
dtrack.channel,
|
|
dtrack.regular.prepend,
|
|
dtrack.regular.swings,
|
|
dtrack.regular.hitpercent,
|
|
dtrack.regular.dph)
|
|
if dtrack.regular.sname then
|
|
message = ("%s %s(%0.2f)"):format(message, dtrack.regular.sname, dtrack.regular.trackedavg)
|
|
end
|
|
SendNoEcho( message )
|
|
dtrack.regular = nil
|
|
end
|
|
function reportHits()
|
|
local command = ("%s %s %s(%d) %s(%d/%d [%0.2f%%]) %s(%d/%d [%0.2f%%]) %s(%d/%d [%0.2f%%]) %s(%d/%d [%0.2f%%]) %s(%d) %s(%d) %s(%d/%d [%0.2f%%]) %s(%d) | Total Hits(%d/%d [%0.2f%%])"):format( dtrack.channel,
|
|
dtrack.hits.prepend, "Primary Attack", dtrack.hits["Primary Attack"], "Second Attack", dtrack.hits["Second Attack"], dtrack.hits["inst_Second Attack"], returnPercent(dtrack.hits["inst_Second Attack"], dtrack.hits["Hits"] ), "Third Attack", dtrack.hits["Third Attack"], dtrack.hits["inst_Third Attack"], returnPercent(dtrack.hits["inst_Third Attack"], dtrack.hits["Hits"] ), "Fourth Attack", dtrack.hits["Fourth Attack"], dtrack.hits["inst_Fourth Attack"], returnPercent(dtrack.hits["inst_Fourth Attack"], dtrack.hits["Hits"] ), "Dual Wield", dtrack.hits["Dual Wield"], dtrack.hits["inst_Dual Wield"], returnPercent(dtrack.hits["inst_Dual Wield"], dtrack.hits["Hits"] ), "Second Dual", dtrack.hits["Second Dual"], "Third Dual", dtrack.hits["Third Dual"], "Haste Attacks", dtrack.hits["Haste Attacks"], dtrack.hits["inst_Haste Attacks"], returnPercent(dtrack.hits["inst_Haste Attacks"], dtrack.hits["Hits"] ), "Lightspeed", dtrack.hits["Lightspeed"], dtrack.hits["Hits"], returnTotalInstinctHits(), returnPercent(returnTotalInstinctHits(), dtrack.hits["Hits"]) )
|
|
SendNoEcho( command )
|
|
dtrack.hits = nil
|
|
end
|
|
--[[ ALIAS command ]]--
|
|
function ALIAS_report(name, line, args)
|
|
if not (args.command) then
|
|
cnote( "@CSyntax: @Gdreport @R<@wswings|hits@R> <@wchannel@R>@w" )
|
|
return
|
|
end
|
|
if args.command:lower() == "help" then
|
|
DREPORT_Help()
|
|
return
|
|
end
|
|
if not (args.channel) then
|
|
dtrack.channel = "echo"
|
|
end
|
|
if args.command:lower() == "swings" then
|
|
EnableTriggerGroup("dtrack_swings", true)
|
|
dtrack.regular = { start=false, prepend="[dTrack Swings]: " }
|
|
SendNoEcho( "dtrack" )
|
|
elseif args.command:lower() == "hits" then
|
|
EnableTriggerGroup("dtrack_hits", true)
|
|
dtrack.hits = { start=false, prepend="[dTrack Hits]: " }
|
|
SendNoEcho( "dtrack hits" )
|
|
else
|
|
DREPORT_Help()
|
|
return
|
|
end
|
|
end
|
|
--[[ Help File ]]--
|
|
function DREPORT_Help()
|
|
cnote("@GdTrack Reports@w")
|
|
cnote("@WUsage:@w")
|
|
cnote("@G dreport help @w:@W This menu@w")
|
|
cnote("@G dreport swings <channel> @w:@W Reports the 'dtrack' main screen to a channel@w")
|
|
cnote("@G dreport hits <channel> @w:@W Reports teh 'dtrack hits' screen to a channel@w")
|
|
Note()
|
|
end
|
|
--[[ MUSH Specific functions for saving/loading Plugin information ]]--
|
|
-- Anytime a variable (designed to save over) is modified, call SaveState() function afterwards.
|
|
function OnPluginSaveState ()
|
|
end -- function OnPluginSaveState
|
|
function OnPluginInstall ()
|
|
cnote("@GdTrack Reports@w initialized. Check out 'dtrack help' for more information.@w")
|
|
end -- function OnPluginInstall
|
|
]]>
|
|
|
|
</script>
|
|
</muclient>
|