summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua178
1 files changed, 178 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua b/Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua
new file mode 100644
index 0000000..18bcf94
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/scoreboard/player.lua
@@ -0,0 +1,178 @@
+--[[
+Object to encapsulate Player battle data
+
+For each mob fought, a separate player instance will be stored. Therefore
+there will be multiple Player instances for each actual player in the game.
+This allows for easier mob filtering.
+]]
+
+local Player = {}
+
+function Player:new (o)
+ o = o or {}
+
+ assert(o.name, "Must pass a name to player constructor")
+ -- attrs should be defined in Player above but due to interpreter bug it's here for now
+ local attrs = {
+ clock = nil, -- specific DPS clock for this player
+ damage = 0, -- total damage done by this player
+ ws = T{}, -- table of all WS and their corresponding damage
+ ws_misses = 0, -- total ws misses
+ m_hits = 0, -- total melee hits
+ m_misses = 0, -- total melee misses
+ m_min = math.huge, -- minimum melee damage
+ m_max = 0, -- maximum melee damage
+ m_avg = 0, -- avg melee damage
+ m_crits = 0, -- total melee crits
+ m_crit_min = math.huge, -- minimum melee crit
+ m_crit_max = 0, -- maximum melee crit
+ m_crit_avg = 0, -- avg melee crit
+ r_hits = 0, -- total ranged hits
+ r_min = math.huge, -- minimum ranged damage
+ r_max = 0, -- maximum ranged damage
+ r_avg = 0, -- avg ranged damage
+ r_misses = 0, -- total ranged misses
+ r_crits = 0, -- total ranged crits
+ r_crit_min = math.huge, -- minimum ranged crit
+ r_crit_max = 0, -- maximum ranged crit
+ r_crit_avg = 0, -- avg ranged crit
+ jobabils = 0, -- total damage from JAs
+ spells = 0, -- total damage from spells
+
+ parries = 0, -- total number of parries
+ blocks = 0, -- total number of blocks/guards
+ nonblocks = 0, -- total number of nonblocks
+ evades = 0, -- total number of evades
+ damage_taken = 0, -- total damage taken by this player
+
+ }
+ attrs.name = o.name
+ o = attrs
+ if o.name:match('^Skillchain%(') then
+ o.is_sc = true
+ else
+ o.is_sc = false
+ end
+
+ setmetatable(o, self)
+ self.__index = self
+
+ return o
+end
+
+
+function Player:add_damage(damage)
+ self.damage = self.damage + damage
+end
+
+
+function Player:add_ws_damage(ws_name, damage)
+ --[[
+ if not self.ws[ws_name] then
+ self.ws[ws_name] = L{}
+ end
+
+ self.ws[ws_name]:append(damage)
+ ]]
+ self.ws:append(damage)
+ self.damage = self.damage + damage
+end
+
+
+function Player:add_m_hit(damage)
+ -- increment hits
+ self.m_hits = self.m_hits + 1
+
+ -- update min/max/avg melee values
+ self.m_min = math.min(self.m_min, damage)
+ self.m_max = math.max(self.m_max, damage)
+ self.m_avg = self.m_avg * (self.m_hits - 1)/self.m_hits + damage/self.m_hits
+
+ -- accumulate damage
+ self.damage = self.damage + damage
+end
+
+
+function Player:add_m_crit(damage)
+ -- increment crits
+ self.m_crits = self.m_crits + 1
+
+ -- update min/max/avg melee values
+ self.m_crit_min = math.min(self.m_crit_min, damage)
+ self.m_crit_max = math.max(self.m_crit_max, damage)
+ self.m_crit_avg = self.m_crit_avg * (self.m_crits - 1)/self.m_crits + damage/self.m_crits
+
+ -- accumulate damage
+ self.damage = self.damage + damage
+end
+
+function Player:incr_m_misses() self.m_misses = self.m_misses + 1 end
+
+function Player:incr_ws_misses() self.ws_misses = self.ws_misses + 1 end
+
+function Player:add_r_hit(damage)
+ -- increment hits
+ self.r_hits = self.r_hits + 1
+
+ -- update min/max/avg melee values
+ self.r_min = math.min(self.r_min, damage)
+ self.r_max = math.max(self.r_max, damage)
+ self.r_avg = self.r_avg * (self.r_hits - 1)/self.r_hits + damage/self.r_hits
+
+ -- accumulate damage
+ self.damage = self.damage + damage
+end
+
+
+function Player:add_r_crit(damage)
+ -- increment crits
+ self.r_crits = self.r_crits + 1
+
+ -- update min/max/avg melee values
+ self.r_crit_min = math.min(self.r_crit_min, damage)
+ self.r_crit_max = math.max(self.r_crit_max, damage)
+ self.r_crit_avg = self.r_crit_avg * (self.r_crits - 1)/self.r_crits + damage/self.r_crits
+
+ -- accumulate damage
+ self.damage = self.damage + damage
+end
+
+
+function Player:incr_r_misses() self.r_misses = self.r_misses + 1 end
+
+-- Returns the name of this player
+function Player:get_name() return self.name end
+
+
+
+return Player
+
+--[[
+Copyright (c) 2013, Jerry Hebert
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Scoreboard nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL JERRY HEBERT BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+]]
+
+