Giter Site home page Giter Site logo

corelootmanager / corelootmanager Goto Github PK

View Code? Open in Web Editor NEW
10.0 5.0 36.0 7.68 MB

Robust loot tracking and awarding tool for World of Warcraft

License: Apache License 2.0

Lua 95.75% Shell 3.34% Python 0.91% JavaScript 0.01%
raid addon loot-manager guild wow warcraft wow-addon wow-classic wow-tbc

corelootmanager's Introduction

Core Loot Manager

formerly Classic Loot Manager

Lint Release Issues Discord Patreon

About

Core Loot Manager is a robust Loot Tracking and awarding tool for guilds. It's designed to superseed old DKP and EPGP AddOns and it's derivatives and solves it's biggest painpoints by focusing on optimial communication and storage. CLM implements Event Sourcing and MVC programming models to achieve those targets. All data is synchronised automatically.

Wiki

Be sure to check our Wiki for lots of information.

Point Systems

Core Loot Manager currently supports DKP and EPGP. There are also mechanisms for utilizing DKP as SK which you can run at the same time!

Auto synchronisation within Guild

Cross-guild synchronisation

Multiple roster (teams) support

With CLM unconquered scalability, you can run multiple DKP, EPGP and SK systems in your guild, even at the same time!

Multiple item auction

CLM allows to auction virtually any amount of items during single auction.

Alt-main linking

Profile locking

If you want to block some players from receiving points or being charged for items just lock their profile!

Mulit-level Access Control

  • Managers can control every aspect of the AddOn.
  • Assistants can award loot and DKP but can't control roster settings.

DKP point system

  • Fine-grained configurable awarding and decaying
  • Configurable weekly and hard point caps
  • Zero-Sum Bank mode + inflation
  • Taxation options

EPGP point system

  • All the goodies from DKP and also:
  • Minimum GP configuration

Multiple auction modes

  • Open auction with configurable minimum bid increment and announcements
  • Support for anonymous bidding
  • Closed and Vickrey bid systems
  • Configurable per-slot min and max item values
  • Configurable per-item min and max item values
  • Static (constant) and Ascending item value systems for bidding
  • Tiered bid system, extending min and max values to up to 5 tiers
  • Configurable edge-case handling
  • Configurable award multipliers per class

Named buttons for bidding

  • You can now use named buttons instead of numbers for ease of implementing various loot systems while still keeping the value-based functionalities.

History tracking and management

  • Fine grained point history
  • Item awards with all related information (when, who, how much)

Extensive Auctioning system

Auctioning

  • Configurable Anti-snipe protection
  • Auction from corpse or bag (default: alt-click)
  • Simple item awarding
  • Award item without auction through slash command
  • Optional bid storing and posting to configured channel
  • Item Upgrade information during auction
  • Configurable exceptions to bidding systems

Bidding

  • Value increments (open bid mode only)
  • Alerts and notifications

Automated DKP / EP awards

  • All options are configurable
  • On-time bonus - awarded when starting raid
  • Raid completion bonus - awarded when ending raid
  • Interval bonus - awarded every interval minutes
  • Boss kill bonus - configurable per boss and through global value

Multiple simultaneous Raids management

  • Raid management and auto-creating profiles and filling roster when initializing raid
  • Multi-level logging for better issue handling

Administration

  • Auditing UI - Check and manage all events that happened in the addon
  • Time travel mode - correct errors and add entries in history to keep the data in place

Utilities

  • Built-in migration from MonolithDKP, EssentialDKP, CommunityDKP, BastionLoot and CEPGP
  • Loot tracking queue for fast auctioning
  • Auto-posting loot to raid channel
  • Player role tracking
  • DKP and GP price information on tooltip

External integrations

License

This project is licensed under the Apache License 2.0. See the LICENSE and NOTICE files for more.

corelootmanager's People

Contributors

crimsoncoyote avatar dj-snickels avatar dukeofphilberg avatar elliotmendiola avatar fenixsru avatar gateswong avatar grecaun avatar hespian avatar lantisnt avatar luozm avatar peleccotur avatar psiven avatar sammousa avatar saysor avatar trust-codes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

corelootmanager's Issues

Please allow moving of bidding timer bar after closing bidding window

Is your feature request related to a problem? Please describe.
After you close the bidding window it's no longer possible to move the bidding timer bar

Describe the solution you'd like
Please allow the user to move the bidding timer bar after the bidding window is closed

Describe alternatives you've considered
I don't see any alternative solution

Additional context
the bidding timer bar seems to be anchored to the bidding window but the window dissapears after you close it and so does the anchor

Minimum Viable Product

Some UIs that need to be in a first version:

  • 1. Award UI (ML) #5
  • 2. Bidding UI (raider) #4
  • 3. Standings UI (raider) #3

Marking bids as invalid

In bid window right click on bids to mark them as invalid.
Invalid bids need to be grayed out.
All the max/2nd price calculation should skip those

Right-click on Raid when Raid is already selected removes selection

Describe the bug
If you click a raid in the Raid Manager UI, then right-click the same raid to start/end/join the raid, the raid becomes deselected and the start/end/join buttons do not work because no raid is selected. If you try to left-click the raid to select it again, the context menu goes behind the Raid Manager UI and cannot be clicked.

To Reproduce
Steps to reproduce the behavior:

  1. Create a raid in the Raid Manager
  2. Left-click the raid to select it
  3. Right-click the selected raid
  4. Attempt to start the raid

Expected behavior
A selected raid in the Raid Manager should remain selected when right-clicked.

AddOn and Game Version:
CLM 0.7.0

Support zero sum DKP

Zerosum DKP was requested via discord.

We have some settings for it, but no implementing code yet.

Additional context
Requested by Rashaka from [Critical Mass] on [Atiesh]

Make 'Max' button on bid screen work with a users current dkp standings

The 'Max' button on the bid screen is based on the maximum dkp cost configured for an item in Ascending auction mode. However, the default value for this, and probably most commonly used(?), is 0, in order to not set a max bid value, but rather let users bid as much as they want/have. In this situation, a user might expect the 'Max' button to auto-bid with all their DKP. In reality, sets the value to/tries to bid 0.

As a solution to this, I believe it would be better if the button worked as such:
if ( item_max = 0) bid_value = user_dkp
else bid_value = min(item_max, user_dkp)

I.e., make the max bid work with the user's current dkp standings, and, if a max value has been defined, restrict the bid within the allowed range.

This would also go a bit along the way to deal with #76 .

CLM interacts badly with some addons

Describe the bug
CLM misbehaves (no multi-selecting and lua errors when selecting) when paired with other addon using lib-st

Known addons: RCLootCouncil, Classic Loot Assist

Add confirmation dialog with actual bid value when submitting bid

Is your feature request related to a problem? Please describe.
We've had a couple instances where bidders thought they were bidding a value other than the base value, or weren't sure if their bid was submitted since the bid UI doesn't change after a bid. Users frequently seem to miss the small "Okay" button on the value field in the bid interface to lock in their change and will click "bid" with just the base value. The chat message that says a bid is accepted is not obvious enough, especially if the chat window is busy, and can result in "wait I thought I bid X not Y!"

Describe the solution you'd like
I would like to see a dialog pop up when clicking one of the bidding options to submit a bid that says something like "Submit X bid for Y item" with submit/cancel buttons.

Describe alternatives you've considered

  • Update the bidding UI to show whether or not a bid is accepted and for how much
  • Possibly remove the "Okay" to update the bid value and instead just take whatever bid value is in the bid field when selecting the "bid" button, especially if a confirm bid dialog is added

Make confirmations context sensitive

Is your feature request related to a problem? Please describe.
Tooltips are not context sensitive, for example:

This will remove the selected players, are all players if none selected, from the roster

Describe the solution you'd like
Ideally I'd see contextual information:

This will remove ALL players from the roster
This will remove players X, Y and Z
This will remove n players from the roster

Demoting player is not propagated properly

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Demote player to untrusted rank
  2. Player can still create events and player still advertises

Expected behavior
Player cannot create events and stop advertising.

AddOn and Game Version:

  • v0.3.9

Workaround:
Demoted player needs to do /reload afterwards or should be quild-kicked instead of demoted and then reinvited.

Rework Raid management

Raid management should be moved to be ledger based.
Raid will be a creation in the addon and will be conceptually related to the ingame raid. Purpose of this change is to enable easy raid management across multiple raids happening in the same time, with a disconnect protection.

This change will consist of 3 modules (MVC):

  1. Raid Manager Module (Controller)
  2. Raid object Model
  3. Raid Manager GUI (View)

High level features that are expected from the Raid Manager:

  • Everyone should be able to access the list of currenty active raids
  • Assistants should be able to create raids. Creator becomes the Raid Manager (RM) (naming unclear - TBD?)
  • Raids should be named (or have a description) for further reference
  • Raid creation should require a roster selection and the raid should be tied to a roster (multiple raids should be able to use same roster)
  • On creation Raid should be populated with players in current raid (if creator is in raid). Missing profiles and adding to roster should happen automatically.
  • One player can be only present in only one raid
  • "RAID_ROSTER_UPDATE", "GROUP_ROSTER_UPDATE" events should be used to detect change in group roster (players joined/left raid) and update the raid roster and if a change is detected then the Raid needs to be updated. Worth being aware that this events may come often and in huge numbers so bucketing them might be worth consideration (check EventManager). This should be handled only by RM.
  • Assistants should be able to take over Raid Manager role anytime if current RM is not in the mentioned raid or is offline as a failsafe. The new RM needs to be in the raid to overtake
  • We assume that we are in specific Raid if at least 5 other players in current raid are same as the stored player information - review this requirement TBD. This is needed to connect current game status with the stored information
  • Raid Manager becomes the only person that can award raid-based points (on kill, interval, on time, end time, standby bonuses)
  • Items may be auctioned by any of:
  1. Master Looter if one is present and is an Assistant
  2. Raid Leader if no master looter is present and he is Assistant
  3. Raid Manager
  • Only the Raid Manager can end the Raid

Backend mechanisms

  • Raid creation / changes / starting/ending should be stored in the ledger
  • Raid could be in multiple states (TBD): Created -- state change --> In Progress -- state change --> Ended. This type should be derived from the events in ledger

Ledger changes

  • Add Ledger entries for:
  1. Raid creation, containing:
  • List of players (integer GUID) in raid (can be empty if not in raid),
  • raid name/description
  • selected roster id (what happens if roster gets deleted during raid? - TBD)
  • [optional?] modified configs if using different than roster default
  1. Raid update containing (assuming batch update):
  • Raid UUID
  • List of joining user iGUIDs
  • List of leaving user iGUIDs
  1. Raid end
  • Raid UUID
  1. Raid Manager overtake:
  • Raid UUID
  • New manager iGUID (integer GUID)
  1. Point Updates for raid:
  • player iGUID list
  • raid UUID
  • value
  1. Modify loot to have optional raid UUID to connect loot to a raid

GUI

Easiest approach here would be to copy-paste the profile GUI and implement it in simlar way.

  • There should be a list of raids
  • Hovering over raid should show current RM and Players in that raid
  • There should be management options (either dropdown menu or ace options like in profiles)
  • Players should have option to singup to a Standby list to a raid - TBD

Standby flow is still undefined: Should it be also stored in ledger or should it be temporary?
How many raids should player be able to sign bench to? Should this limit be related to raids or rosters used by raids?

Error when changing roster in loot history

Describe the bug
A clear and concise description of what the bug is.

image

To Reproduce
Steps to reproduce the behavior:

  1. Loot History
  2. Change the roster

Expected behavior
I expect to see loot for the selected roster

Screenshots
If applicable, add screenshots to help explain your problem.

AddOn and Game Version:

  • master

Open auction mode

Implement open auction mode.
This mode is relevant only for ascending price item value system.
In this mode, auctioneer, after receiving bid should (after accepting it):

  1. Announce new highest bidder through /rw
  2. Send addon message to players about the new bid
  3. Update minimum accepted bid value in the UI to the new highest bid
  4. Display the highest bidder with bid value in the UI for bidders

Zero-Sum Bank mode + inflation

Add suppot for Zero-Sum bank mode + inflation

  1. In zero-sum bank mode the price paid by player for an item is distributed evenly amongst all other players (excluding payer)
  2. Inflation is understood as an additional static value given to other players

Add all auto-dkp management during raid

  1. Add support for:

  2. On Time bonus on raid initialization

  3. Boss Kill bonus on boss kill - this will require adding support of boss kill event detection (leverage from other addon / lib?)

  4. Raid finish bonus on raid end

All of the above should be configurable in the GUI + should be able to have 2 modificators:

  1. Online only - only online people will get the points
  2. Include standby - include people on the standby list also when giving points

Both of the modificators are additivie so if you select both people that are on standby list but are online will get the points.

Additionaly there needs to be GUI added:

  1. Boss kill bonus (leverage encounter / boss id from lib) configuration in roster config
  2. Option to select / deselect (temporary) options during raid initialization in case of reinitializing and not wanting to award the points again

GUI fixes to be more content aware

  1. Review current GUI windows
  2. Add restriction and sanity checks wherever possible
  3. Disable windows dynamically dependent on the modes, configuration etc

Show bidders how much DKP they have left!

I have another idea to make biding maybe go faster. Somewhere in the bidding window for the raiders to see how much DKP they have, so they don't have to re-open the DKP window. Because as a LM I forgot that they can't see the small window with bids and how much they have, that's only me who can see that. Might speed up the biding if you could see how much they have and maybe how much the others biding have.

Change for CLM Minimap Button

Is your feature request related to a problem? Please describe.
Minimap button for CLM resets to original position after quitting the game.

Describe the solution you'd like
When the minimap button for CLM is moved it should remember the position, like minimap buttons for other addons.

Describe alternatives you've considered
An option in settings to hide the minimap button for CLM.

Additional context
n/a

Decimal DKP values after Decay

Describe the bug
After applying percentage decay, DKP can be a decimal value.

To Reproduce
Steps to reproduce the behavior:

  1. Apply DKP decay to DKP value which doesn't divide evenly

Expected behavior
DKP should be able to be rounded to a whole number. Barring that, a workaround would be needed to grant/remove partial DKP points manually.

AddOn and Game Version:
CLM 0.7.0

Point history GUI + invalid entry removal management

Add GUI for Point History (similar to Loot History) that will display per raid and per player point history.
This might require also a thinking if this history should include loot changes and if yes then extending the point history by including the loot price.

This GUI should also allow managers to remove (invalidate) selected entries.

DKP Bidding UI

Initial version:

  • Show which item is being bid on
  • Show numeric input for entering value

To be decided:

  • Use events via AceEvent-3.0 to trigger the window.
  • Use CLM DKP module API to send the bid.

[nitpick] Bidding UI

  • Can enter negative numbers in field
  • Unclear UX which buttons send my bid and which button just put a value in the box?
  • Can enter a number larger than max in the field

Add event ignoring to various UIs for error correction

  • Add event ignoring or entry for revoking loot (both have same purpose) to Loot History UI. Make sure it propagates the point (DKP) change properly also. Covers #23
  • Add point entry ignoring in point history. Covers #21
  • Add Raid creation event ignoring. This might be tricky as there will be lots of events depedent on that creation so to optimise stuff we could ignore a batch of events
  • Add Inspection UI that lists information about all the events in the ledger and allows ignoring them. Only Managers should be able to do that. UI should show:
  • some basic information (class, name [human readable that we will define just for the UI], time, creator)
  • Ignore events should list (on hover?) events they ignore or show ignored events as grayed out and add option to unignore them
  • Add option for batch ignoring (@SamMousa this will need change in the library that we need to decide upon) where selecting 2 entries would ignore them and everything in between (with library change this would be single IGN entry internally)

Standby list support

Allow users to register to standby list. That list would be then used to either manually or automatically to assign standby DKP.

  1. Create standby submission CLI / GUI for per roster
  2. those players should show up in the Standby filter
  3. people in current raid cant be in standby
  4. standby list shouldbe cleared after the end of raid

Cap on weekly DKP reward

Within Essential, DKP that can be earned per week, is capped to 20 DKP (10 DKP per evening), even if a person would be on the bench for a 3rd night. In TBC, we foresee the possibility of having a cap of 20 DKP even if a person raids 3 nights (2 evenings of Kara, 1 for Gruul).

Could we make it so that that weekly DKP gain is capped to a certain amount?

Example:

  1. Bob gets 10 DKP on Wednesday for joining Kara, first couple bosses
  2. Bob gets 10 DKP on Thursday for joining Gruul.
  3. Bob would get 10 DKP on Monday for joining Kara continuation, but that would be >20 DKP, so he doesn't actually get the DKP added.

The big advantages of this weekly cap are:
A. The DKP-awarder doesn't have to check for every individual in the raid whether he got DKP-to-cap already. Can simply award the same amount of DKP to everybody in the raid.
B. When applying DKP for Bench, it doesn't matter if you accidentally also give to somebody who was also in the raid.

Refactor CLM code

Refactor CLM code to make it more human readable for the community to work on.
Refactor needs to be done in a smart way and only where needed.

Result must be:

  1. Easily readable and understandable. Comments added where needed
  2. Private and Public API must be separated
  3. Functions must have known and constant or nil return type (function can return either type X or nil)
  • ACL
  • Comms
  • Database #73
  • Logger
  • AuctionManager and BiddingManager
  • ConfigManager
  • LedgerManager
  • EventManager
  • History
  • LootManager
  • PointManager
  • ProfileManager
  • RaidManager
  • RosterManager and Standings
  • VersioningManager
  • Core files and directory structure
  • Expose Public APIs for WA integration #85

Automated bench DKP

Currently bench DKP is a manual process, it would be nice if this can be automated.

These are the steps that need to be done:

  1. Load list of players on the bench
  2. Verify that each player is eligible for bench DKP.

Eligibility

Eligibility is probably different per guild, but some things come to mind:

  • Must be online at a start time, until an end time. (end time could be end of raid, or just raid full)
  • Must be in the raid zone
  • Must not be AFK

Change cancel to pass and remove close button

Small suggestions I've talked with a friend about it, and we would love to have when auctioning items in the window where you can see the bidders we would like to see everyone in the raid and see who passes on loot by changing the button cancel to Pass and remove the close button. We feel that this will speed up the bidding as I didn't know if there would be any more bids for an item, but if people click pass I know how many are left and willing to bid!
And how to see who passes on loot would be either remove them from the list or give them a red name or something like that
or a text saying "Passed" besides their names. There are some options for it. Also, something I noticed when puging is that the pugs get added to your profiles and roster after starting the raid. Imo and maybe its bugged, but I think people should only get added to the roster if added manually.

Add item awarding without auction

Award item without auction through CLI /clm award itemLink value [playerName]
Player name should be optional and selected target will be used instead. Error if no target.

Add Auctioning from corpse + auto award for Master Looter

Auctioning from corpse requires hooking to the UI. Alt + Click like for the bad would be ideal (can use same function)
Auto award for Master Looter - after awarding item that is looted from corpse and corspe is still open there should be option to auto award that item to person through the addon after clicking award button

Add more tracing

Add missing Log:Trace to functions that are not executed too often for better trace coverage

Auto-Backup During raid start

Before raid start there should be a backup mechanism, that would store the current state in a sideband and then if needed it would roster the state (TBD how).

Evaluate the viability after auditioning is done and works.

Player spec communication mechanism

Add mechanism to request spec (and update if changed) for all profiles we have and are online or in raid (in raid more important). This will result in profile update through ledger entry.

[discussion] Refactor Database module

Currently the database module just offers direct access to a set of tables.

Modules should offer an API instead.

Currently code everywhere has to check structure constantly:

local db = MODULES.Database:Personal()

    if not db.bidding then
        db.bidding = { autoOpen = true }
    end
    self.db = db.bidding

Instead we should offer a more abstract API.

Modules care about setting and retrieving data from the database; proposed API:

    local database = {
        setBoolean = function(name, bool) .. end,
        getBoolean = function(name, default) .. end,
        setString = function(name, string) .. end,
        getString = function(name, default) .. end,
        ...
    }

In most cases modules should avoid nested config tables, but just use namespacing in the name. (LUA handles strings efficiently so it's fine, internally a module could / should use CONSTANTS)

The next challenge is to inject module specific database via name prefixing. This way each module has its own separate storage area and will never interfere with another module. This also enforces modules to never read / write directly to another modules' configuration.

Not sure we want this, this is mostly theoretical / purist rambling

I've created a basic module loader similar to AMD modules in JS.
Function signature would be somewhat like this:

define('myModule', {'dep1', 'dep2'}, function(dep1, dep2) 
  print("Loading myModule")
  return {}
end)

The cool things that this can unlock:

  • We don't care about file inclusion order, the loader fixes that automatically.
  • We can support asynchronous loading, for example if one module wants to wait until some ingame events have fired all modules that depend on it will automatically delay their loading as well.
  • We can extend this to use localized dependencies.

Localized dependencies

Currently when loading modules we use a service locator pattern: CLM.XX.YY.ZZ, this has some known drawbacks.
Alternatively we can use dependency injection using the loader above.
The next step would be to have personalized dependencies, which means that for some modules each dependent module gets a different version.

This would allow us to pass in a different database object (that exposes the data only via an API) to each module.

Naming and command cleanup

Do CLI command cleanup /clm <command> to be more descriptive and clean. Remove Debug from there for official builds.

UI Name/Class Sorting

A suggestion, that within the standings view - whilst when you select Name will sort automatically by alphabetical position. This is not the case elsewhere, clicking on Class whilst grouping by class it neither lists them automatically, nor the names of the players are listed automatically.

Could we have it that the sort is set to alphabetical no matter which sort view you select for ease of use.

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.