feat(Core): Add clustering support (#16832)
Co-authored-by: 3kynox <thierry.prost@gmail.com> Co-authored-by: nox <nox@noxen.net> Co-authored-by: Ludwig <sudlud@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
f23ac046ab
commit
6f0ba8e896
+55
@@ -0,0 +1,55 @@
|
||||
#include "battleground-api.h"
|
||||
|
||||
static BattlegroundStartHandler battlegroundStartHandler;
|
||||
void SetBattlegroundStartHandler(BattlegroundStartHandler h) {
|
||||
battlegroundStartHandler = h;
|
||||
}
|
||||
|
||||
BattlegroundStartResponse CallBattlegroundStartHandler(BattlegroundStartRequest* request) {
|
||||
if (battlegroundStartHandler == 0) {
|
||||
BattlegroundStartResponse resp;
|
||||
resp.errorCode = BattlegroundErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return battlegroundStartHandler(request);
|
||||
}
|
||||
|
||||
static BattlegroundAddPlayersHandler battlegroundAddPlayersHandler;
|
||||
void SetBattlegroundAddPlayersHandler(BattlegroundAddPlayersHandler h) {
|
||||
battlegroundAddPlayersHandler = h;
|
||||
}
|
||||
|
||||
BattlegroundErrorCode CallBattlegroundAddPlayersHandler(BattlegroundAddPlayersRequest* request) {
|
||||
if (battlegroundAddPlayersHandler == 0) {
|
||||
return BattlegroundErrorCodeNoHandler;
|
||||
}
|
||||
|
||||
return battlegroundAddPlayersHandler(request);
|
||||
}
|
||||
|
||||
static CanPlayerJoinBattlegroundQueueHandler canPlayerJoinBattlegroundQueueHandler = 0;
|
||||
|
||||
void SetCanPlayerJoinBattlegroundQueueHandler(CanPlayerJoinBattlegroundQueueHandler h) {
|
||||
canPlayerJoinBattlegroundQueueHandler = h;
|
||||
}
|
||||
|
||||
BattlegroundJoinCheckErrorCode CallCanPlayerJoinBattlegroundQueueHandler(uint64_t playerGuid) {
|
||||
if (canPlayerJoinBattlegroundQueueHandler == 0) {
|
||||
return BattlegroundJoinCheckErrorCodeNoHook;
|
||||
}
|
||||
return canPlayerJoinBattlegroundQueueHandler(playerGuid);
|
||||
}
|
||||
|
||||
static CanPlayerTeleportToBattlegroundHandler canPlayerTeleportToBattlegroundHandler = 0;
|
||||
|
||||
void SetCanPlayerTeleportToBattlegroundHandler(CanPlayerTeleportToBattlegroundHandler h) {
|
||||
canPlayerTeleportToBattlegroundHandler = h;
|
||||
}
|
||||
|
||||
BattlegroundJoinCheckErrorCode CallCanPlayerTeleportToBattlegroundHandler(uint64_t playerGuid) {
|
||||
if (canPlayerTeleportToBattlegroundHandler == 0) {
|
||||
return BattlegroundJoinCheckErrorCodeNoHook;
|
||||
}
|
||||
return canPlayerTeleportToBattlegroundHandler(playerGuid);
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
#ifndef __BATTLEGROUND_API__
|
||||
#define __BATTLEGROUND_API__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef enum BattlegroundErrorCode {
|
||||
BattlegroundErrorCodeNoError = 0,
|
||||
BattlegroundErrorCodeNoHandler = 1,
|
||||
BattlegroundErrorFailedToCreateBG = 2,
|
||||
BattlegroundErrorBattlegroundNotFound = 3,
|
||||
} BattlegroundErrorCode;
|
||||
|
||||
typedef struct {
|
||||
uint8_t battlegroundTypeID;
|
||||
uint32_t arenaType;
|
||||
bool isRated;
|
||||
uint32_t mapID;
|
||||
uint8_t bracketLvl;
|
||||
uint64_t *hordePlayersToAdd;
|
||||
int hordePlayersToAddSize;
|
||||
uint64_t *alliancePlayersToAdd;
|
||||
int alliancePlayersToAddSize;
|
||||
uint64_t *randomBGPlayers;
|
||||
int randomBGPlayersSize;
|
||||
} BattlegroundStartRequest;
|
||||
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
uint64_t instanceID;
|
||||
uint64_t instanceClientID;
|
||||
} BattlegroundStartResponse;
|
||||
|
||||
typedef BattlegroundStartResponse (*BattlegroundStartHandler) (BattlegroundStartRequest* request);
|
||||
void SetBattlegroundStartHandler(BattlegroundStartHandler h);
|
||||
BattlegroundStartResponse CallBattlegroundStartHandler(BattlegroundStartRequest* request);
|
||||
|
||||
typedef struct {
|
||||
uint8_t battlegroundTypeID;
|
||||
uint64_t instanceID;
|
||||
uint64_t *hordePlayersToAdd;
|
||||
int hordePlayersToAddSize;
|
||||
uint64_t *alliancePlayersToAdd;
|
||||
int alliancePlayersToAddSize;
|
||||
uint64_t *randomBGPlayers;
|
||||
int randomBGPlayersSize;
|
||||
} BattlegroundAddPlayersRequest;
|
||||
|
||||
typedef BattlegroundErrorCode (*BattlegroundAddPlayersHandler) (BattlegroundAddPlayersRequest* request);
|
||||
void SetBattlegroundAddPlayersHandler(BattlegroundAddPlayersHandler h);
|
||||
BattlegroundErrorCode CallBattlegroundAddPlayersHandler(BattlegroundAddPlayersRequest* request);
|
||||
|
||||
typedef enum BattlegroundJoinCheckErrorCode {
|
||||
BattlegroundJoinCheckErrorCodeOK = 0,
|
||||
BattlegroundJoinCheckErrorCodeNoHook = 1,
|
||||
BattlegroundJoinCheckErrorCodeResponseIsFalse = 2,
|
||||
BattlegroundJoinCheckErrorCodePlayerNotFound = 3,
|
||||
} BattlegroundJoinCheckErrorCode;
|
||||
|
||||
typedef BattlegroundJoinCheckErrorCode (*CanPlayerJoinBattlegroundQueueHandler)(uint64_t playerGuid);
|
||||
void SetCanPlayerJoinBattlegroundQueueHandler(CanPlayerJoinBattlegroundQueueHandler h);
|
||||
BattlegroundJoinCheckErrorCode CallCanPlayerJoinBattlegroundQueueHandler(uint64_t playerGuid);
|
||||
|
||||
typedef BattlegroundJoinCheckErrorCode (*CanPlayerTeleportToBattlegroundHandler)(uint64_t playerGuid);
|
||||
void SetCanPlayerTeleportToBattlegroundHandler(CanPlayerTeleportToBattlegroundHandler h);
|
||||
BattlegroundJoinCheckErrorCode CallCanPlayerTeleportToBattlegroundHandler(uint64_t playerGuid);
|
||||
|
||||
#endif
|
||||
Vendored
+117
@@ -0,0 +1,117 @@
|
||||
#include "events-group.h"
|
||||
|
||||
// OnGroupCreatedHook
|
||||
OnGroupCreatedHook groupCreatedHook;
|
||||
void SetOnGroupCreatedHook(OnGroupCreatedHook h) {
|
||||
groupCreatedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGroupCreatedHook(EventObjectGroup *group) {
|
||||
if (groupCreatedHook == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupCreatedHook(group);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
// GroupMemberAdded
|
||||
static OnGroupMemberAddedHook groupMemberAddedHook;
|
||||
void SetOnGroupMemberAddedHook(OnGroupMemberAddedHook h) {
|
||||
groupMemberAddedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGroupMemberAddedHook(uint32_t guid, uint64_t newMemberGuid) {
|
||||
if (groupMemberAddedHook == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupMemberAddedHook(guid, newMemberGuid);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
// GroupMemberRemoved
|
||||
static OnGroupMemberRemovedHook groupMemberRemovedHook;
|
||||
void SetOnGroupMemberRemovedHook(OnGroupMemberRemovedHook h) {
|
||||
groupMemberRemovedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGroupMemberRemovedHook(uint32_t guid, uint64_t removedMemberGuid, uint64_t newLeaderGuid) {
|
||||
if (groupMemberRemovedHook == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupMemberRemovedHook(guid, removedMemberGuid, newLeaderGuid);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
|
||||
typedef void (*OnGroupDisbandedHook) (uint32_t guid);
|
||||
void SetOnGroupDisbandedHook(OnGroupDisbandedHook h);
|
||||
int CallOnGroupDisbandedHook(uint32_t guid);
|
||||
|
||||
static OnGroupDisbandedHook groupDisbandedHook;
|
||||
void SetOnGroupDisbandedHook(OnGroupDisbandedHook h) {
|
||||
groupDisbandedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGroupDisbandedHook(uint32_t guid) {
|
||||
if (groupDisbandedHook == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupDisbandedHook(guid);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
static OnGroupLootTypeChangedHook groupLootTypeChanged;
|
||||
void SetOnGroupLootTypeChangedHook(OnGroupLootTypeChangedHook h) {
|
||||
groupLootTypeChanged = h;
|
||||
}
|
||||
|
||||
int CallOnGroupLootTypeChangedHook(uint32_t guid, uint8_t lootMethod, uint64_t looter, uint8_t lootThreshold) {
|
||||
if (groupLootTypeChanged == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupLootTypeChanged(guid, lootMethod, looter, lootThreshold);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
static OnGroupDungeonDifficultyChangedHook groupDungeonDifficultyChanged;
|
||||
void SetOnGroupDungeonDifficultyChangedHook(OnGroupDungeonDifficultyChangedHook h) {
|
||||
groupDungeonDifficultyChanged = h;
|
||||
}
|
||||
|
||||
int CallOnGroupDungeonDifficultyChangedHook(uint32_t guid, uint8_t difficulty) {
|
||||
if (groupDungeonDifficultyChanged == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupDungeonDifficultyChanged(guid, difficulty);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
static OnGroupRaidDifficultyChangedHook groupRaidDifficultyChanged;
|
||||
void SetOnGroupRaidDifficultyChangedHook(OnGroupRaidDifficultyChangedHook h) {
|
||||
groupRaidDifficultyChanged = h;
|
||||
}
|
||||
|
||||
int CallOnGroupRaidDifficultyChangedHook(uint32_t guid, uint8_t difficulty) {
|
||||
if (groupRaidDifficultyChanged == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupRaidDifficultyChanged(guid, difficulty);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
|
||||
typedef void (*OnGroupConvertedToRaidHook) (uint32_t guid);
|
||||
void SetOnGroupConvertedToRaidHook(OnGroupConvertedToRaidHook h);
|
||||
int CallOnGroupConvertedToRaidHook(uint32_t guid);
|
||||
|
||||
static OnGroupConvertedToRaidHook groupConvertedToRaid;
|
||||
void SetOnGroupConvertedToRaidHook(OnGroupConvertedToRaidHook h) {
|
||||
groupConvertedToRaid = h;
|
||||
}
|
||||
|
||||
int CallOnGroupConvertedToRaidHook(uint32_t guid) {
|
||||
if (groupConvertedToRaid == 0) {
|
||||
return GroupHookStatusNoHook;
|
||||
}
|
||||
groupConvertedToRaid(guid);
|
||||
return GroupHookStatusOK;
|
||||
}
|
||||
Vendored
+58
@@ -0,0 +1,58 @@
|
||||
#ifndef __EVENT_GROUP__
|
||||
#define __EVENT_GROUP__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
enum GroupStatus {
|
||||
GroupHookStatusOK = 0,
|
||||
GroupHookStatusNoHook = 1
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint32_t guid;
|
||||
uint64_t leader;
|
||||
uint8_t lootMethod;
|
||||
uint64_t looterGuid;
|
||||
uint8_t lootThreshold;
|
||||
uint8_t groupType;
|
||||
uint8_t difficulty;
|
||||
uint8_t raidDifficulty;
|
||||
uint64_t masterLooterGuid;
|
||||
uint64_t *members;
|
||||
uint8_t membersSize;
|
||||
} EventObjectGroup;
|
||||
|
||||
typedef void (*OnGroupCreatedHook) (EventObjectGroup *group);
|
||||
void SetOnGroupCreatedHook(OnGroupCreatedHook h);
|
||||
int CallOnGroupCreatedHook(EventObjectGroup *group);
|
||||
|
||||
typedef void (*OnGroupMemberAddedHook) (uint32_t guid, uint64_t newMemberGuid);
|
||||
void SetOnGroupMemberAddedHook(OnGroupMemberAddedHook h);
|
||||
int CallOnGroupMemberAddedHook(uint32_t guid, uint64_t newMemberGuid);
|
||||
|
||||
typedef void (*OnGroupMemberRemovedHook) (uint32_t guid, uint64_t removedMemberGuid, uint64_t newLeaderGuid);
|
||||
void SetOnGroupMemberRemovedHook(OnGroupMemberRemovedHook h);
|
||||
int CallOnGroupMemberRemovedHook(uint32_t guid, uint64_t removedMemberGuid, uint64_t newLeaderGuid);
|
||||
|
||||
typedef void (*OnGroupDisbandedHook) (uint32_t guid);
|
||||
void SetOnGroupDisbandedHook(OnGroupDisbandedHook h);
|
||||
int CallOnGroupDisbandedHook(uint32_t guid);
|
||||
|
||||
typedef void (*OnGroupLootTypeChangedHook) (uint32_t guid, uint8_t lootMethod, uint64_t looter, uint8_t lootThreshold);
|
||||
void SetOnGroupLootTypeChangedHook(OnGroupLootTypeChangedHook h);
|
||||
int CallOnGroupLootTypeChangedHook(uint32_t guid, uint8_t lootMethod, uint64_t looter, uint8_t lootThreshold);
|
||||
|
||||
typedef void (*OnGroupDungeonDifficultyChangedHook) (uint32_t guid, uint8_t difficulty);
|
||||
void SetOnGroupDungeonDifficultyChangedHook(OnGroupDungeonDifficultyChangedHook h);
|
||||
int CallOnGroupDungeonDifficultyChangedHook(uint32_t guid, uint8_t difficulty);
|
||||
|
||||
typedef void (*OnGroupRaidDifficultyChangedHook) (uint32_t guid, uint8_t difficulty);
|
||||
void SetOnGroupRaidDifficultyChangedHook(OnGroupRaidDifficultyChangedHook h);
|
||||
int CallOnGroupRaidDifficultyChangedHook(uint32_t guid, uint8_t difficulty);
|
||||
|
||||
typedef void (*OnGroupConvertedToRaidHook) (uint32_t guid);
|
||||
void SetOnGroupConvertedToRaidHook(OnGroupConvertedToRaidHook h);
|
||||
int CallOnGroupConvertedToRaidHook(uint32_t guid);
|
||||
|
||||
#endif
|
||||
Vendored
+43
@@ -0,0 +1,43 @@
|
||||
#include "events-guild.h"
|
||||
|
||||
// GuildMemberAddedHook
|
||||
OnGuildMemberAddedHook guildMemberAddedHook;
|
||||
void SetOnGuildMemberAddedHook(OnGuildMemberAddedHook h) {
|
||||
guildMemberAddedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGuildMemberAddedHook(uint64_t guild_id, uint64_t player_guid) {
|
||||
if (guildMemberAddedHook == 0) {
|
||||
return GuildHookStatusNoHook;
|
||||
}
|
||||
guildMemberAddedHook(guild_id, player_guid);
|
||||
return GuildHookStatusOK;
|
||||
}
|
||||
|
||||
// GuildMemberLeft
|
||||
static OnGuildMemberLeftHook guildMemberLeftHook;
|
||||
void SetOnGuildMemberLeftHook(OnGuildMemberLeftHook h) {
|
||||
guildMemberLeftHook = h;
|
||||
}
|
||||
|
||||
int CallOnGuildMemberLeftHook(uint64_t guild_id, uint64_t player_guid) {
|
||||
if (guildMemberLeftHook == 0) {
|
||||
return GuildHookStatusNoHook;
|
||||
}
|
||||
guildMemberLeftHook(guild_id, player_guid);
|
||||
return GuildHookStatusOK;
|
||||
}
|
||||
|
||||
// GuildMemberRemoved
|
||||
static OnGuildMemberRemovedHook guildMemberRemovedHook;
|
||||
void SetOnGuildMemberRemovedHook(OnGuildMemberRemovedHook h) {
|
||||
guildMemberRemovedHook = h;
|
||||
}
|
||||
|
||||
int CallOnGuildMemberRemovedHook(uint64_t guild_id, uint64_t player_guid) {
|
||||
if (guildMemberRemovedHook == 0) {
|
||||
return GuildHookStatusNoHook;
|
||||
}
|
||||
guildMemberRemovedHook(guild_id, player_guid);
|
||||
return GuildHookStatusOK;
|
||||
}
|
||||
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
#ifndef __EVENT_GUILD__
|
||||
#define __EVENT_GUILD__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
enum GuildHookStatus {
|
||||
GuildHookStatusOK = 0,
|
||||
GuildHookStatusNoHook = 1
|
||||
};
|
||||
|
||||
typedef void (*OnGuildMemberAddedHook) (uint64_t /*guild_id*/, uint64_t /*player_guid*/);
|
||||
void SetOnGuildMemberAddedHook(OnGuildMemberAddedHook h);
|
||||
int CallOnGuildMemberAddedHook(uint64_t guild_id, uint64_t player_guid);
|
||||
|
||||
typedef void (*OnGuildMemberLeftHook) (uint64_t /*guild_id*/, uint64_t /*player_guid*/);
|
||||
void SetOnGuildMemberLeftHook(OnGuildMemberLeftHook h);
|
||||
int CallOnGuildMemberLeftHook(uint64_t guild_id, uint64_t player_guid);
|
||||
|
||||
typedef void (*OnGuildMemberRemovedHook) (uint64_t /*guild_id*/, uint64_t /*player_guid*/);
|
||||
void SetOnGuildMemberRemovedHook(OnGuildMemberRemovedHook h);
|
||||
int CallOnGuildMemberRemovedHook(uint64_t guild_id, uint64_t player_guid);
|
||||
|
||||
#endif
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
#include "events-servers-registry.h"
|
||||
|
||||
// MapsReassignedHook
|
||||
OnMapsReassignedHook mapsReassignedHook;
|
||||
void SetOnMapsReassignedHook(OnMapsReassignedHook h) {
|
||||
mapsReassignedHook = h;
|
||||
}
|
||||
|
||||
int CallOnMapsReassignedHook(uint32_t* maps_added, int maps_added_size, uint32_t* maps_removed, int maps_removed_size) {
|
||||
if (mapsReassignedHook == 0) {
|
||||
return ServersRegistryHookStatusNoHook;
|
||||
}
|
||||
mapsReassignedHook(maps_added, maps_added_size, maps_removed, maps_removed_size);
|
||||
return ServersRegistryHookStatusOK;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
#ifndef __EVENT_SERVERS_REGISTRY__
|
||||
#define __EVENT_SERVERS_REGISTRY__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
enum ServersRegistryStatus {
|
||||
ServersRegistryHookStatusOK = 0,
|
||||
ServersRegistryHookStatusNoHook = 1
|
||||
};
|
||||
|
||||
typedef void (*OnMapsReassignedHook) (uint32_t* /*maps_added*/, int /*maps_added_size*/, uint32_t* /*maps_removed*/, int /*maps_removed_size*/);
|
||||
void SetOnMapsReassignedHook(OnMapsReassignedHook h);
|
||||
int CallOnMapsReassignedHook(uint32_t* maps_added, int maps_added_size, uint32_t* maps_removed, int maps_removed_size);
|
||||
|
||||
#endif
|
||||
Vendored
+138
@@ -0,0 +1,138 @@
|
||||
#include "libsidecar.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void panicWithTC9Unavailable(const char* message) {
|
||||
fprintf(stderr, "Tried to call '%s', but using stub for libsidecar. Use -DUSE_REAL_LIBSIDECAR=ON in cmake to use the real one.\n", message);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// TC9SetBattlegroundStartHandler sets handler for starting battleground.
|
||||
//
|
||||
extern void TC9SetBattlegroundStartHandler(BattlegroundStartHandler h) { panicWithTC9Unavailable("TC9SetBattlegroundStartHandler"); }
|
||||
|
||||
// TC9SetBattlegroundAddPlayersHandler sets handler for adding players to battleground.
|
||||
//
|
||||
extern void TC9SetBattlegroundAddPlayersHandler(BattlegroundAddPlayersHandler h) { panicWithTC9Unavailable("TC9SetBattlegroundAddPlayersHandler"); }
|
||||
|
||||
void TC9SetOnGroupCreatedHook(OnGroupCreatedHook h) { panicWithTC9Unavailable("TC9SetOnGroupCreatedHook"); }
|
||||
|
||||
// TC9SetOnGroupMemberAddedHook sets hook for member added event.
|
||||
//
|
||||
void TC9SetOnGroupMemberAddedHook(OnGroupMemberAddedHook h) { panicWithTC9Unavailable("TC9SetOnGroupMemberAddedHook"); }
|
||||
|
||||
// TC9SetOnGroupMemberRemovedHook sets hook for member left/kicked event.
|
||||
//
|
||||
void TC9SetOnGroupMemberRemovedHook(OnGroupMemberRemovedHook h) { panicWithTC9Unavailable("TC9SetOnGroupMemberRemovedHook"); }
|
||||
|
||||
// TC9SetOnGroupDisbandedHook sets hook for group disbanded event.
|
||||
//
|
||||
void TC9SetOnGroupDisbandedHook(OnGroupDisbandedHook h) { panicWithTC9Unavailable("TC9SetOnGroupDisbandedHook"); }
|
||||
|
||||
// TC9SetOnGroupLootTypeChangedHook sets hook for group loot type changed event.
|
||||
//
|
||||
void TC9SetOnGroupLootTypeChangedHook(OnGroupLootTypeChangedHook h) { panicWithTC9Unavailable("TC9SetOnGroupLootTypeChangedHook"); }
|
||||
|
||||
// TC9SetOnGroupDungeonDifficultyChangedHook sets hook for group dungeon difficulty changed event.
|
||||
//
|
||||
void TC9SetOnGroupDungeonDifficultyChangedHook(OnGroupDungeonDifficultyChangedHook h) { panicWithTC9Unavailable("TC9SetOnGroupDungeonDifficultyChangedHook"); }
|
||||
|
||||
// TC9SetOnGroupRaidDifficultyChangedHook sets hook for group raid difficulty changed event.
|
||||
//
|
||||
void TC9SetOnGroupRaidDifficultyChangedHook(OnGroupRaidDifficultyChangedHook h) { panicWithTC9Unavailable("TC9SetOnGroupRaidDifficultyChangedHook"); }
|
||||
|
||||
// TC9SetOnGroupConvertedToRaidHook sets hook for group converted to raid event.
|
||||
//
|
||||
void TC9SetOnGroupConvertedToRaidHook(OnGroupConvertedToRaidHook h) { panicWithTC9Unavailable("TC9SetOnGroupConvertedToRaidHook"); }
|
||||
|
||||
void TC9SetOnGuildMemberAddedHook(OnGuildMemberAddedHook h) { panicWithTC9Unavailable("TC9SetOnGuildMemberAddedHook"); }
|
||||
|
||||
// TC9SetOnGuildMemberRemovedHook sets hook for guild member removed (kicked) event.
|
||||
void TC9SetOnGuildMemberRemovedHook(OnGuildMemberRemovedHook h) { panicWithTC9Unavailable("TC9SetOnGuildMemberRemovedHook"); }
|
||||
|
||||
// TC9SetOnGuildMemberLeftHook sets hook for guild member left event.
|
||||
void TC9SetOnGuildMemberLeftHook(OnGuildMemberLeftHook h) { panicWithTC9Unavailable("TC9SetOnGuildMemberLeftHook"); }
|
||||
|
||||
// TC9ProcessEventsHooks calls all events hooks.
|
||||
void TC9ProcessEventsHooks() { panicWithTC9Unavailable("TC9ProcessEventsHooks"); }
|
||||
|
||||
// TC9ProcessGRPCOrHTTPRequests calls all grpc or http handlers in queue.
|
||||
//
|
||||
void TC9ProcessGRPCOrHTTPRequests() { panicWithTC9Unavailable("TC9ProcessGRPCOrHTTPRequests"); }
|
||||
|
||||
// TC9GetNextAvailableCharacterGuid returns next available characters GUID. Thread unsafe.
|
||||
uint64_t TC9GetNextAvailableCharacterGuid(int realmID) { panicWithTC9Unavailable("TC9GetNextAvailableCharacterGuid"); return 0; }
|
||||
|
||||
// TC9GetNextAvailableItemGuid returns next available item GUID. Thread unsafe.
|
||||
uint64_t TC9GetNextAvailableItemGuid(int realmID) { panicWithTC9Unavailable("TC9GetNextAvailableItemGuid"); return 0; }
|
||||
|
||||
// TC9GetNextAvailableInstanceGuid returns next available dungeon/raid instance GUID. Thread unsafe.
|
||||
uint64_t TC9GetNextAvailableInstanceGuid(int realmID) { panicWithTC9Unavailable("TC9GetNextAvailableInstanceGuid"); return 0; }
|
||||
|
||||
// TC9InitLib inits lib by starting services like grpc and healthcheck.
|
||||
// Adds game server to the servers registry that will make this server visible for game load balancer.
|
||||
//
|
||||
void TC9InitLib(uint16_t port, uint32_t realmID, uint8_t isCrossRealm, char* availableMaps, uint32_t** assignedMaps, int* assignedMapsSize) { panicWithTC9Unavailable("TC9InitLib"); }
|
||||
|
||||
// TC9GracefulShutdown gracefully stops all running services.
|
||||
//
|
||||
void TC9GracefulShutdown() { panicWithTC9Unavailable("TC9GracefulShutdown"); }
|
||||
|
||||
// TC9ReadyToAcceptPlayersFromMaps notifies servers registry that this server
|
||||
// loaded maps related data and ready to accept players from those maps.
|
||||
//
|
||||
void TC9ReadyToAcceptPlayersFromMaps(uint32_t* maps, int mapsLen) { panicWithTC9Unavailable("TC9ReadyToAcceptPlayersFromMaps"); }
|
||||
|
||||
// TC9SetCanPlayerInteractWithNPCAndFlagsHandler sets handler for can player interact with NPC and with given NPC flags request.
|
||||
//
|
||||
void TC9SetCanPlayerInteractWithNPCAndFlagsHandler(CanPlayerInteractWithNPCAndFlagsHandler h) { panicWithTC9Unavailable("TC9SetCanPlayerInteractWithNPCAndFlagsHandler"); }
|
||||
|
||||
// TC9SetCanPlayerInteractWithGOAndTypeHandler sets handler for can player interact with GameObject and with given object type request.
|
||||
//
|
||||
void TC9SetCanPlayerInteractWithGOAndTypeHandler(CanPlayerInteractWithGOAndTypeHandler h) { panicWithTC9Unavailable("TC9SetCanPlayerInteractWithGOAndTypeHandler"); }
|
||||
|
||||
// TC9SetGetPlayerItemsByGuidsHandler sets handler for getting players item by guids request.
|
||||
void TC9SetGetPlayerItemsByGuidsHandler(GetPlayerItemsByGuidsHandler h) { panicWithTC9Unavailable("TC9SetGetPlayerItemsByGuidsHandler"); }
|
||||
|
||||
// TC9SetRemoveItemsWithGuidsFromPlayerHandler sets handler for removing items by guids from player request.
|
||||
void TC9SetRemoveItemsWithGuidsFromPlayerHandler(RemoveItemsWithGuidsFromPlayerHandler h) { panicWithTC9Unavailable("TC9SetRemoveItemsWithGuidsFromPlayerHandler"); }
|
||||
|
||||
// TC9SetAddExistingItemToPlayerHandler sets handler for adding item to player request.
|
||||
void TC9SetAddExistingItemToPlayerHandler(AddExistingItemToPlayerHandler h) { panicWithTC9Unavailable("TC9SetAddExistingItemToPlayerHandler"); }
|
||||
|
||||
// TC9SetGetMoneyForPlayerHandler sets handler for getting money for player request.
|
||||
//
|
||||
void TC9SetGetMoneyForPlayerHandler(GetMoneyForPlayerHandler h) { panicWithTC9Unavailable("TC9SetGetMoneyForPlayerHandler"); }
|
||||
|
||||
// TC9SetModifyMoneyForPlayerHandler sets handler for modify money for given player request.
|
||||
//
|
||||
void TC9SetModifyMoneyForPlayerHandler(ModifyMoneyForPlayerHandler h) { panicWithTC9Unavailable("TC9SetModifyMoneyForPlayerHandler"); }
|
||||
|
||||
|
||||
// TC9SetOnMapsReassignedHook sets hook for maps reassigning by servers registry event.
|
||||
//
|
||||
void TC9SetOnMapsReassignedHook(OnMapsReassignedHook h) { panicWithTC9Unavailable("TC9SetOnMapsReassignedHook"); }
|
||||
|
||||
// TC9SetMonitoringDataCollectorHandler sets handler for getting data to handle monitoring request.
|
||||
//
|
||||
void TC9SetMonitoringDataCollectorHandler(MonitoringDataCollectorHandler h) { panicWithTC9Unavailable("TC9SetMonitoringDataCollectorHandler"); }
|
||||
|
||||
// TC9NatsPublish/Subscribe generic NATS pub/sub for in-process extensions
|
||||
int TC9NatsPublish(const char* subject, const char* payload, int payloadLen) { panicWithTC9Unavailable("TC9NatsPublish"); return -1; }
|
||||
int TC9NatsSubscribe(const char* subject, TC9NatsMessageHandler handler) { panicWithTC9Unavailable("TC9NatsSubscribe"); return -1; }
|
||||
|
||||
// TC9PlayerLeftBattleground notifies matchmaking server that player left battleground
|
||||
//
|
||||
void TC9PlayerLeftBattleground(uint64_t playerGUID, uint32_t realmID, uint32_t instanceID) { panicWithTC9Unavailable("TC9PlayerLeftBattleground"); }
|
||||
|
||||
// TC9BattlegroundStatusChanged notifies matchmaking server that battleground status changed
|
||||
//
|
||||
void TC9BattlegroundStatusChanged(uint32_t instanceID, uint8_t status) { panicWithTC9Unavailable("TC9BattlegroundStatusChanged"); }
|
||||
|
||||
// TC9SetCanPlayerJoinBattlegroundQueueHandler sets handler for checking if player can join to battleground queue.
|
||||
//
|
||||
void TC9SetCanPlayerJoinBattlegroundQueueHandler(CanPlayerJoinBattlegroundQueueHandler h) { panicWithTC9Unavailable("TC9SetCanPlayerJoinBattlegroundQueueHandler"); }
|
||||
|
||||
// TC9SetCanPlayerTeleportToBattlegroundHandler sets handler for checking if player can teleport to battleground.
|
||||
//
|
||||
void TC9SetCanPlayerTeleportToBattlegroundHandler(CanPlayerTeleportToBattlegroundHandler h) { panicWithTC9Unavailable("TC9SetCanPlayerTeleportToBattlegroundHandler"); }
|
||||
Vendored
+84
@@ -0,0 +1,84 @@
|
||||
#ifndef __LIBSIDECAR_H__
|
||||
#define __LIBSIDECAR_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/* Include all API headers */
|
||||
#include "battleground-api.h"
|
||||
#include "events-group.h"
|
||||
#include "events-guild.h"
|
||||
#include "events-servers-registry.h"
|
||||
#include "monitoring.h"
|
||||
#include "player-interactions-api.h"
|
||||
#include "player-items-api.h"
|
||||
#include "player-money-api.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Main library functions */
|
||||
void TC9InitLib(uint16_t port, uint32_t realmID, uint8_t isCrossRealm, char* availableMaps, uint32_t** assignedMaps, int* assignedMapsSize);
|
||||
void TC9GracefulShutdown();
|
||||
void TC9ProcessGRPCOrHTTPRequests();
|
||||
void TC9ProcessEventsHooks();
|
||||
|
||||
/* GUID generation */
|
||||
uint64_t TC9GetNextAvailableCharacterGuid(int realmID);
|
||||
uint64_t TC9GetNextAvailableItemGuid(int realmID);
|
||||
uint64_t TC9GetNextAvailableInstanceGuid(int realmID);
|
||||
|
||||
/* Map loading notification */
|
||||
void TC9ReadyToAcceptPlayersFromMaps(uint32_t* maps, int mapsLen);
|
||||
|
||||
/* Generic NATS pub/sub for in-process extensions. Subscribe callbacks run
|
||||
* on the thread that calls TC9ProcessEventsHooks. Call after TC9InitLib.
|
||||
* Both return 0 on success, -1 on error. */
|
||||
typedef void (*TC9NatsMessageHandler)(const char* subject, const char* payload, int payloadLen);
|
||||
int TC9NatsPublish(const char* subject, const char* payload, int payloadLen);
|
||||
int TC9NatsSubscribe(const char* subject, TC9NatsMessageHandler handler);
|
||||
|
||||
/* Matchmaking notifications */
|
||||
void TC9PlayerLeftBattleground(uint64_t playerGUID, uint32_t realmID, uint32_t instanceID);
|
||||
void TC9BattlegroundStatusChanged(uint32_t instanceID, uint8_t status);
|
||||
|
||||
/* Event hooks registration */
|
||||
void TC9SetOnGroupCreatedHook(OnGroupCreatedHook h);
|
||||
void TC9SetOnGroupMemberAddedHook(OnGroupMemberAddedHook h);
|
||||
void TC9SetOnGroupMemberRemovedHook(OnGroupMemberRemovedHook h);
|
||||
void TC9SetOnGroupDisbandedHook(OnGroupDisbandedHook h);
|
||||
void TC9SetOnGroupLootTypeChangedHook(OnGroupLootTypeChangedHook h);
|
||||
void TC9SetOnGroupDungeonDifficultyChangedHook(OnGroupDungeonDifficultyChangedHook h);
|
||||
void TC9SetOnGroupRaidDifficultyChangedHook(OnGroupRaidDifficultyChangedHook h);
|
||||
void TC9SetOnGroupConvertedToRaidHook(OnGroupConvertedToRaidHook h);
|
||||
|
||||
void TC9SetOnGuildMemberAddedHook(OnGuildMemberAddedHook h);
|
||||
void TC9SetOnGuildMemberRemovedHook(OnGuildMemberRemovedHook h);
|
||||
void TC9SetOnGuildMemberLeftHook(OnGuildMemberLeftHook h);
|
||||
|
||||
void TC9SetOnMapsReassignedHook(OnMapsReassignedHook h);
|
||||
|
||||
/* Handler registration for gRPC requests */
|
||||
void TC9SetBattlegroundStartHandler(BattlegroundStartHandler h);
|
||||
void TC9SetBattlegroundAddPlayersHandler(BattlegroundAddPlayersHandler h);
|
||||
void TC9SetCanPlayerJoinBattlegroundQueueHandler(CanPlayerJoinBattlegroundQueueHandler h);
|
||||
void TC9SetCanPlayerTeleportToBattlegroundHandler(CanPlayerTeleportToBattlegroundHandler h);
|
||||
|
||||
void TC9SetMonitoringDataCollectorHandler(MonitoringDataCollectorHandler h);
|
||||
|
||||
void TC9SetCanPlayerInteractWithNPCAndFlagsHandler(CanPlayerInteractWithNPCAndFlagsHandler h);
|
||||
void TC9SetCanPlayerInteractWithGOAndTypeHandler(CanPlayerInteractWithGOAndTypeHandler h);
|
||||
|
||||
void TC9SetGetPlayerItemsByGuidsHandler(GetPlayerItemsByGuidsHandler h);
|
||||
void TC9SetRemoveItemsWithGuidsFromPlayerHandler(RemoveItemsWithGuidsFromPlayerHandler h);
|
||||
void TC9SetAddExistingItemToPlayerHandler(AddExistingItemToPlayerHandler h);
|
||||
|
||||
void TC9SetGetMoneyForPlayerHandler(GetMoneyForPlayerHandler h);
|
||||
void TC9SetModifyMoneyForPlayerHandler(ModifyMoneyForPlayerHandler h);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __LIBSIDECAR_H__ */
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
#include "monitoring.h"
|
||||
|
||||
static MonitoringDataCollectorHandler monitoringDataCollectorHandler;
|
||||
void SetMonitoringDataCollectorHandler(MonitoringDataCollectorHandler h) {
|
||||
monitoringDataCollectorHandler = h;
|
||||
}
|
||||
|
||||
MonitoringDataCollectorResponse CallMonitoringDataCollectorHandler() {
|
||||
if (monitoringDataCollectorHandler == 0) {
|
||||
MonitoringDataCollectorResponse resp;
|
||||
resp.errorCode = MonitoringErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return monitoringDataCollectorHandler();
|
||||
}
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
#ifndef __MONITORING__
|
||||
#define __MONITORING__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef enum MonitoringErrorCode {
|
||||
MonitoringErrorCodeNoError = 0,
|
||||
MonitoringErrorCodeNoHandler = 1,
|
||||
} MonitoringErrorCode;
|
||||
|
||||
// MonitoringDataCollectorResponse request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
uint32_t connectedPlayers;
|
||||
uint32_t diffMean;
|
||||
uint32_t diffMedian;
|
||||
uint32_t diff95Percentile;
|
||||
uint32_t diff99Percentile;
|
||||
uint32_t diffMaxPercentile;
|
||||
} MonitoringDataCollectorResponse;
|
||||
|
||||
typedef MonitoringDataCollectorResponse (*MonitoringDataCollectorHandler)();
|
||||
void SetMonitoringDataCollectorHandler(MonitoringDataCollectorHandler h);
|
||||
MonitoringDataCollectorResponse CallMonitoringDataCollectorHandler();
|
||||
|
||||
#endif
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
#include "player-interactions-api.h"
|
||||
|
||||
static CanPlayerInteractWithNPCAndFlagsHandler canPlayerInteractWithNPCAndFlagsHandler;
|
||||
void SetCanPlayerInteractWithNPCAndFlagsHandler(CanPlayerInteractWithNPCAndFlagsHandler h) {
|
||||
canPlayerInteractWithNPCAndFlagsHandler = h;
|
||||
}
|
||||
|
||||
CanPlayerInteractWithNPCAndFlagsResponse CallCanPlayerInteractWithNPCAndFlagsHandler(uint64_t player_guid, uint64_t npc_guid, uint32_t npc_flags) {
|
||||
if (canPlayerInteractWithNPCAndFlagsHandler == 0) {
|
||||
CanPlayerInteractWithNPCAndFlagsResponse resp;
|
||||
resp.errorCode = PlayerInteractionErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return canPlayerInteractWithNPCAndFlagsHandler(player_guid, npc_guid, npc_flags);
|
||||
}
|
||||
|
||||
static CanPlayerInteractWithGOAndTypeHandler canPlayerInteractWithGOAndTypeHandler;
|
||||
void SetCanPlayerInteractWithGOAndTypeHandler(CanPlayerInteractWithGOAndTypeHandler h) {
|
||||
canPlayerInteractWithGOAndTypeHandler = h;
|
||||
}
|
||||
|
||||
CanPlayerInteractWithGOAndTypeResponse CallCanPlayerInteractWithGOAndTypeHandler(uint64_t player_guid, uint64_t go_guid, uint8_t go_type) {
|
||||
if (canPlayerInteractWithGOAndTypeHandler == 0) {
|
||||
CanPlayerInteractWithGOAndTypeResponse resp;
|
||||
resp.errorCode = PlayerInteractionErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return canPlayerInteractWithGOAndTypeHandler(player_guid, go_guid, go_type);
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
#ifndef __PLAYER_INTERACTIONS_API__
|
||||
#define __PLAYER_INTERACTIONS_API__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef enum PlayerInteractionErrorCode {
|
||||
PlayerInteractionErrorCodeNoError = 0,
|
||||
PlayerInteractionErrorCodeNoHandler = 1,
|
||||
PlayerInteractionErrorCodeCodePlayerNotFound = 2,
|
||||
} PlayerInteractionErrorCode;
|
||||
|
||||
// CanPlayerInteractWithNPCAndFlags request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
bool canInteract;
|
||||
} CanPlayerInteractWithNPCAndFlagsResponse;
|
||||
|
||||
typedef CanPlayerInteractWithNPCAndFlagsResponse (*CanPlayerInteractWithNPCAndFlagsHandler) (uint64_t /*playerGUID*/, uint64_t /*npcGUID*/, uint32_t /*npcFlags*/);
|
||||
void SetCanPlayerInteractWithNPCAndFlagsHandler(CanPlayerInteractWithNPCAndFlagsHandler h);
|
||||
CanPlayerInteractWithNPCAndFlagsResponse CallCanPlayerInteractWithNPCAndFlagsHandler(uint64_t player_guid, uint64_t npc_guid, uint32_t npc_flags);
|
||||
|
||||
// CanPlayerInteractWithGOAndType request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
bool canInteract;
|
||||
} CanPlayerInteractWithGOAndTypeResponse;
|
||||
|
||||
typedef CanPlayerInteractWithGOAndTypeResponse (*CanPlayerInteractWithGOAndTypeHandler) (uint64_t /*playerGUID*/, uint64_t /*goGUID*/, uint8_t /*goType*/);
|
||||
void SetCanPlayerInteractWithGOAndTypeHandler(CanPlayerInteractWithGOAndTypeHandler h);
|
||||
CanPlayerInteractWithGOAndTypeResponse CallCanPlayerInteractWithGOAndTypeHandler(uint64_t player_guid, uint64_t go_guid, uint8_t go_type);
|
||||
|
||||
#endif
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
#include "player-items-api.h"
|
||||
|
||||
static GetPlayerItemsByGuidsHandler getPlayerItemsByGuidsHandler;
|
||||
void SetGetPlayerItemsByGuidsHandler(GetPlayerItemsByGuidsHandler h) {
|
||||
getPlayerItemsByGuidsHandler = h;
|
||||
}
|
||||
|
||||
GetPlayerItemsByGuidsResponse CallGetPlayerItemsByGuidsHandler(uint64_t player_guid, uint64_t* items_guids, int items_guids_size) {
|
||||
if (getPlayerItemsByGuidsHandler == 0) {
|
||||
GetPlayerItemsByGuidsResponse resp;
|
||||
resp.errorCode = PlayerItemErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return getPlayerItemsByGuidsHandler(player_guid, items_guids, items_guids_size);
|
||||
}
|
||||
|
||||
static RemoveItemsWithGuidsFromPlayerHandler removeItemsWithGuidsFromPlayerHandler;
|
||||
void SetRemoveItemsWithGuidsFromPlayerHandler(RemoveItemsWithGuidsFromPlayerHandler h) {
|
||||
removeItemsWithGuidsFromPlayerHandler = h;
|
||||
}
|
||||
|
||||
RemoveItemsWithGuidsFromPlayerResponse CallRemoveItemsWithGuidsFromPlayerHandler(uint64_t player_guid, uint64_t* items_guids, int items_guids_size, uint64_t assign_player_guid) {
|
||||
if (removeItemsWithGuidsFromPlayerHandler == 0) {
|
||||
RemoveItemsWithGuidsFromPlayerResponse resp;
|
||||
resp.errorCode = PlayerItemErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return removeItemsWithGuidsFromPlayerHandler(player_guid, items_guids, items_guids_size, assign_player_guid);
|
||||
}
|
||||
|
||||
static AddExistingItemToPlayerHandler addExistingItemToPlayerHandler;
|
||||
void SetAddExistingItemToPlayerHandler(AddExistingItemToPlayerHandler h) {
|
||||
addExistingItemToPlayerHandler = h;
|
||||
}
|
||||
|
||||
PlayerItemErrorCode CallAddExistingItemToPlayerHandler(AddExistingItemToPlayerRequest *r) {
|
||||
if (addExistingItemToPlayerHandler == 0) {
|
||||
return PlayerItemErrorCodeNoHandler;
|
||||
}
|
||||
|
||||
return addExistingItemToPlayerHandler(r);
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
#ifndef __PLAYER_ITEMS_API__
|
||||
#define __PLAYER_ITEMS_API__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef enum PlayerItemErrorCode {
|
||||
PlayerItemErrorCodeNoError = 0,
|
||||
PlayerItemErrorCodeNoHandler = 1,
|
||||
PlayerItemErrorCodePlayerNotFound = 2,
|
||||
PlayerItemErrorNoInventorySpace = 3,
|
||||
PlayerItemErrorUnknownTemplate = 4,
|
||||
PlayerItemErrorFailedToCreateItem = 5
|
||||
} PlayerItemErrorCode;
|
||||
|
||||
// GetPlayerItemsByGuids request.
|
||||
typedef struct {
|
||||
uint64_t guid;
|
||||
uint32_t entry;
|
||||
uint64_t owner;
|
||||
uint8_t bagSlot;
|
||||
uint8_t slot;
|
||||
bool isTradable;
|
||||
uint32_t count;
|
||||
uint16_t flags;
|
||||
uint8_t durability;
|
||||
int8_t randomPropertyID;
|
||||
const char* text;
|
||||
} PlayerItem;
|
||||
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
PlayerItem* items;
|
||||
int itemsSize;
|
||||
} GetPlayerItemsByGuidsResponse;
|
||||
|
||||
typedef GetPlayerItemsByGuidsResponse (*GetPlayerItemsByGuidsHandler) (uint64_t /*player_guid*/, uint64_t* /*items_guids*/, int /*items_guids_size*/);
|
||||
void SetGetPlayerItemsByGuidsHandler(GetPlayerItemsByGuidsHandler h);
|
||||
GetPlayerItemsByGuidsResponse CallGetPlayerItemsByGuidsHandler(uint64_t player_guid, uint64_t* items_guids, int items_guids_size);
|
||||
|
||||
// RemoveItemsWithGuidsFromPlayer request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
uint64_t* updatedItems;
|
||||
int updatedItemsSize;
|
||||
} RemoveItemsWithGuidsFromPlayerResponse;
|
||||
|
||||
typedef RemoveItemsWithGuidsFromPlayerResponse (*RemoveItemsWithGuidsFromPlayerHandler) (uint64_t /*player_guid*/, uint64_t* /*items_guids*/, int /*items_guids_size*/, uint64_t /*assign_player_guid*/);
|
||||
void SetRemoveItemsWithGuidsFromPlayerHandler(RemoveItemsWithGuidsFromPlayerHandler h);
|
||||
RemoveItemsWithGuidsFromPlayerResponse CallRemoveItemsWithGuidsFromPlayerHandler(uint64_t player_guid, uint64_t* items_guids, int items_guids_size, uint64_t assign_player_guid);
|
||||
|
||||
// AddExistingItemToPlayer request.
|
||||
typedef struct {
|
||||
uint64_t playerGuid;
|
||||
uint64_t itemGuid;
|
||||
uint32_t itemEntry;
|
||||
uint32_t itemCount;
|
||||
uint16_t itemFlags;
|
||||
uint8_t itemDurability;
|
||||
int8_t itemRandomPropertyID;
|
||||
} AddExistingItemToPlayerRequest;
|
||||
|
||||
typedef PlayerItemErrorCode (*AddExistingItemToPlayerHandler) (AddExistingItemToPlayerRequest*);
|
||||
void SetAddExistingItemToPlayerHandler(AddExistingItemToPlayerHandler h);
|
||||
PlayerItemErrorCode CallAddExistingItemToPlayerHandler(AddExistingItemToPlayerRequest*);
|
||||
|
||||
#endif
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
#include "player-money-api.h"
|
||||
|
||||
static GetMoneyForPlayerHandler getMoneyForPlayerHandler;
|
||||
void SetGetMoneyForPlayerHandler(GetMoneyForPlayerHandler h) {
|
||||
getMoneyForPlayerHandler = h;
|
||||
}
|
||||
|
||||
GetMoneyForPlayerResponse CallGetMoneyForPlayerHandler(uint64_t player_guid) {
|
||||
if (getMoneyForPlayerHandler == 0) {
|
||||
GetMoneyForPlayerResponse resp;
|
||||
resp.errorCode = PlayerMoneyErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return getMoneyForPlayerHandler(player_guid);
|
||||
}
|
||||
|
||||
static ModifyMoneyForPlayerHandler modifyMoneyForPlayerHandler;
|
||||
void SetModifyMoneyForPlayerHandler(ModifyMoneyForPlayerHandler h) {
|
||||
modifyMoneyForPlayerHandler = h;
|
||||
}
|
||||
|
||||
ModifyMoneyForPlayerResponse CallModifyMoneyForPlayerHandler(uint64_t player_guid, int32_t amount) {
|
||||
if (modifyMoneyForPlayerHandler == 0) {
|
||||
ModifyMoneyForPlayerResponse resp;
|
||||
resp.errorCode = PlayerMoneyErrorCodeNoHandler;
|
||||
return resp;
|
||||
}
|
||||
|
||||
return modifyMoneyForPlayerHandler(player_guid, amount);
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
#ifndef __PLAYER_MONEY_API__
|
||||
#define __PLAYER_MONEY_API__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef enum PlayerMoneyErrorCode {
|
||||
PlayerMoneyErrorCodeNoError = 0,
|
||||
PlayerMoneyErrorCodeNoHandler = 1,
|
||||
PlayerMoneyErrorCodePlayerNotFound = 2,
|
||||
PlayerMoneyErrorCodeTooMuchMoney = 3,
|
||||
} PlayerMoneyErrorCode;
|
||||
|
||||
// GetMoneyForPlayer request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
uint32_t money;
|
||||
} GetMoneyForPlayerResponse;
|
||||
|
||||
typedef GetMoneyForPlayerResponse (*GetMoneyForPlayerHandler) (uint64_t /*player_guid*/);
|
||||
void SetGetMoneyForPlayerHandler(GetMoneyForPlayerHandler h);
|
||||
GetMoneyForPlayerResponse CallGetMoneyForPlayerHandler(uint64_t player_guid);
|
||||
|
||||
// ModifyMoneyForPlayer request.
|
||||
typedef struct {
|
||||
int errorCode;
|
||||
uint32_t newMoneyValue;
|
||||
} ModifyMoneyForPlayerResponse;
|
||||
|
||||
typedef ModifyMoneyForPlayerResponse (*ModifyMoneyForPlayerHandler) (uint64_t /*player_guid*/, int32_t /*amount*/);
|
||||
void SetModifyMoneyForPlayerHandler(ModifyMoneyForPlayerHandler h);
|
||||
ModifyMoneyForPlayerResponse CallModifyMoneyForPlayerHandler(uint64_t player_guid, int32_t amount);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user