Skip to content

Commit 7ebce1f

Browse files
committed
feat(citizen-server): add event listeners for routing bucket changes
1 parent 99e94cf commit 7ebce1f

File tree

1 file changed

+41
-3
lines changed

1 file changed

+41
-3
lines changed

code/components/citizen-server-impl/src/state/ServerGameState_Scripting.cpp

+41-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
#include <ServerInstanceBase.h>
44
#include <ServerInstanceBaseRef.h>
55
#include <state/ServerGameState.h>
6-
6+
7+
#include <ResourceEventComponent.h>
78
#include <ResourceManager.h>
89
#include <ScriptEngine.h>
910
#include <ScriptDeprecations.h>
@@ -1600,7 +1601,8 @@ static void Init()
16001601
fx::ScriptEngine::RegisterNativeHandler("SET_PLAYER_ROUTING_BUCKET", MakeClientFunction([](fx::ScriptContext& context, const fx::ClientSharedPtr& client)
16011602
{
16021603
if (context.GetArgumentCount() > 1)
1603-
{
1604+
{
1605+
const char* player = context.GetArgument<char*>(0);
16041606
auto bucket = context.GetArgument<int>(1);
16051607

16061608
if (bucket >= 0)
@@ -1614,7 +1616,11 @@ static void Init()
16141616
// get the server's game state
16151617
auto gameState = instance->GetComponent<fx::ServerGameState>();
16161618

1617-
auto [lock, clientData] = gameState->ExternalGetClientData(client);
1619+
auto [lock, clientData] = gameState->ExternalGetClientData(client);
1620+
1621+
// store old bucket for event
1622+
const auto oldBucket = clientData->routingBucket;
1623+
16181624
gameState->ClearClientFromWorldGrid(client);
16191625
clientData->routingBucket = bucket;
16201626

@@ -1629,6 +1635,21 @@ static void Init()
16291635
{
16301636
playerEntity->routingBucket = bucket;
16311637
}
1638+
1639+
1640+
auto eventManager = resourceManager->GetComponent<fx::ResourceEventManagerComponent>();
1641+
/*NETEV onPlayerBucketChange SERVER
1642+
/#*
1643+
* Triggered when a routing bucket changed for a player on the server.
1644+
*
1645+
* @param player - The id of the player that changed bucket.
1646+
* @param bucket - The new bucket that is placing the player into.
1647+
* @param oldBucket - The old bucket where the player was previously in.
1648+
*
1649+
#/
1650+
declare function onPlayerBucketChange(player: string, bucket: int, oldBucket: int): void;
1651+
*/
1652+
eventManager->TriggerEvent2("onPlayerBucketChange", {}, player, bucket, oldBucket);
16321653
}
16331654
}
16341655

@@ -1644,12 +1665,29 @@ static void Init()
16441665
{
16451666
if (context.GetArgumentCount() > 1)
16461667
{
1668+
char* ent = context.GetArgument<char*>(0);
16471669
auto bucket = context.GetArgument<int>(1);
1670+
int oldBucket = entity->routingBucket;
16481671

16491672
if (bucket >= 0)
16501673
{
16511674
entity->routingBucket = bucket;
16521675
}
1676+
1677+
auto resourceManager = fx::ResourceManager::GetCurrent();
1678+
auto eventManager = resourceManager->GetComponent<fx::ResourceEventManagerComponent>();
1679+
/*NETEV onEntityBucketChange SERVER
1680+
/#*
1681+
* Triggered when a routing bucket changed for an entity on the server.
1682+
*
1683+
* @param entity - The entity id that changed bucket.
1684+
* @param bucket - The new bucket that is placing the entity into.
1685+
* @param oldBucket - The old bucket where the entity was previously in.
1686+
*
1687+
#/
1688+
declare function onEntityBucketChange(entity: string, bucket: int, oldBucket: int): void;
1689+
*/
1690+
eventManager->TriggerEvent2("onEntityBucketChange", {}, ent, bucket, oldBucket);
16531691
}
16541692

16551693
return true;

0 commit comments

Comments
 (0)