mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 21:47:24 +00:00
0531365cb5
* 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>
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "dCommonVars.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;
|
|
};
|
|
}
|
|
|
|
|
|
class LootGenerator : public Singleton<LootGenerator> {
|
|
public:
|
|
LootGenerator();
|
|
|
|
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);
|
|
|
|
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;
|
|
}; |