mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-09-05 14:58:27 +00:00
Make loot accurate to the loot drop rates during live. (#216)
* loot fix (broken) * Fixed loot * Update SlashCommandHandler.cpp * Remove debug command * Roll loot command * Remove debug log * Added const references When this commit is applied it adds const references to the loot system avoid some unnecessary copies. Co-authored-by: wincent <wincent.holm@gmail.com> Co-authored-by: Avery <averysumner@gmail.com>
This commit is contained in:
@@ -1,31 +1,61 @@
|
||||
#pragma once
|
||||
|
||||
#include "dCommonVars.h"
|
||||
#include <vector>
|
||||
#include "CDClientManager.h"
|
||||
#include <unordered_map>
|
||||
#include "Singleton.h"
|
||||
|
||||
class Entity;
|
||||
|
||||
struct RarityTableEntry {
|
||||
uint32_t rarity;
|
||||
float randMax;
|
||||
};
|
||||
|
||||
typedef std::vector<RarityTableEntry> RarityTable;
|
||||
|
||||
struct LootMatrixEntry {
|
||||
uint32_t lootTableIndex;
|
||||
uint32_t rarityTableIndex;
|
||||
float percent;
|
||||
uint32_t minDrop;
|
||||
uint32_t maxDrop;
|
||||
};
|
||||
|
||||
typedef std::vector<LootMatrixEntry> LootMatrix;
|
||||
|
||||
struct LootTableEntry {
|
||||
LOT itemID;
|
||||
bool isMissionDrop;
|
||||
};
|
||||
|
||||
typedef std::vector<LootTableEntry> LootTable;
|
||||
|
||||
// used for glue code with Entity and Player classes
|
||||
namespace Loot {
|
||||
struct Info {
|
||||
LWOOBJID id;
|
||||
LOT lot;
|
||||
uint32_t count;
|
||||
};
|
||||
struct Info {
|
||||
LWOOBJID id;
|
||||
LOT lot;
|
||||
uint32_t count;
|
||||
};
|
||||
}
|
||||
|
||||
std::vector<CDLootTable> GetLootOfRarity(const std::vector<CDLootTable> &lootTable, uint32_t rarity);
|
||||
|
||||
void DropActivityLoot(Entity* user, Entity* source, uint32_t activityID, int32_t rating = 0);
|
||||
class LootGenerator : public Singleton<LootGenerator> {
|
||||
public:
|
||||
LootGenerator();
|
||||
|
||||
void GiveActivityLoot(Entity* user, Entity* source, uint32_t activityID, int32_t rating = 0);
|
||||
std::unordered_map<LOT, int32_t> RollLootMatrix(Entity* player, uint32_t matrixIndex);
|
||||
std::unordered_map<LOT, int32_t> RollLootMatrix(uint32_t matrixIndex);
|
||||
void GiveLoot(Entity* player, uint32_t matrixIndex);
|
||||
void GiveLoot(Entity* player, std::unordered_map<LOT, int32_t>& result);
|
||||
void GiveActivityLoot(Entity* player, Entity* source, uint32_t activityID, int32_t rating = 0);
|
||||
void DropLoot(Entity* player, Entity* killedObject, uint32_t matrixIndex, uint32_t minCoins, uint32_t maxCoins);
|
||||
void DropLoot(Entity* player, Entity* killedObject, std::unordered_map<LOT, int32_t>& result, uint32_t minCoins, uint32_t maxCoins);
|
||||
void DropActivityLoot(Entity* player, Entity* source, uint32_t activityID, int32_t rating = 0);
|
||||
|
||||
void CalculateLootMatrix(uint32_t lootMatrixID, Entity* user, std::unordered_map<LOT, int32_t>& result);
|
||||
|
||||
void GiveLoot(Entity* user, uint32_t lootMatrixID);
|
||||
|
||||
void DropLoot(Entity* user, Entity* killedObject, uint32_t lootMatrixID, uint32_t minCoins, uint32_t maxCoins);
|
||||
|
||||
void GiveLoot(Entity* user, std::unordered_map<LOT, int32_t>& result);
|
||||
|
||||
void DropLoot(Entity* user, Entity* killedObject, std::unordered_map<LOT, int32_t>& result, uint32_t minCoins, uint32_t maxCoins);
|
||||
|
||||
void DropItem(Entity* user, Entity* sourceObject, LOT item, int32_t currency, int32_t count, bool useTeam = false, bool freeForAll = false);
|
||||
private:
|
||||
std::unordered_map<uint32_t, uint8_t> m_ItemRarities;
|
||||
std::unordered_map<uint32_t, RarityTable> m_RarityTables;
|
||||
std::unordered_map<uint32_t, LootMatrix> m_LootMatrices;
|
||||
std::unordered_map<uint32_t, LootTable> m_LootTables;
|
||||
};
|
Reference in New Issue
Block a user