Skip to content

Commit 478d207

Browse files
committed
feat(citizen-server): add routing bucket event listeners
1 parent 99e94cf commit 478d207

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

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

+20-5
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

@@ -1628,7 +1634,10 @@ static void Init()
16281634
if (playerEntity)
16291635
{
16301636
playerEntity->routingBucket = bucket;
1631-
}
1637+
}
1638+
1639+
auto eventManager = resourceManager->GetComponent<fx::ResourceEventManagerComponent>();
1640+
eventManager->TriggerEvent2("onPlayerBucketChange", {}, player, bucket, oldBucket);
16321641
}
16331642
}
16341643

@@ -1644,12 +1653,18 @@ static void Init()
16441653
{
16451654
if (context.GetArgumentCount() > 1)
16461655
{
1656+
char* ent = context.GetArgument<char*>(0);
16471657
auto bucket = context.GetArgument<int>(1);
1658+
int oldBucket = entity->routingBucket;
16481659

16491660
if (bucket >= 0)
16501661
{
16511662
entity->routingBucket = bucket;
1652-
}
1663+
}
1664+
1665+
auto resourceManager = fx::ResourceManager::GetCurrent();
1666+
auto eventManager = resourceManager->GetComponent<fx::ResourceEventManagerComponent>();
1667+
eventManager->TriggerEvent2("onEntityBucketChange", {}, ent, bucket, oldBucket);
16531668
}
16541669

16551670
return true;

0 commit comments

Comments
 (0)