3
3
#include < ServerInstanceBase.h>
4
4
#include < ServerInstanceBaseRef.h>
5
5
#include < state/ServerGameState.h>
6
-
6
+
7
+ #include < ResourceEventComponent.h>
7
8
#include < ResourceManager.h>
8
9
#include < ScriptEngine.h>
9
10
#include < ScriptDeprecations.h>
@@ -1600,7 +1601,8 @@ static void Init()
1600
1601
fx::ScriptEngine::RegisterNativeHandler (" SET_PLAYER_ROUTING_BUCKET" , MakeClientFunction ([](fx::ScriptContext& context, const fx::ClientSharedPtr& client)
1601
1602
{
1602
1603
if (context.GetArgumentCount () > 1 )
1603
- {
1604
+ {
1605
+ const char * player = context.GetArgument <char *>(0 );
1604
1606
auto bucket = context.GetArgument <int >(1 );
1605
1607
1606
1608
if (bucket >= 0 )
@@ -1614,7 +1616,11 @@ static void Init()
1614
1616
// get the server's game state
1615
1617
auto gameState = instance->GetComponent <fx::ServerGameState>();
1616
1618
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
+
1618
1624
gameState->ClearClientFromWorldGrid (client);
1619
1625
clientData->routingBucket = bucket;
1620
1626
@@ -1629,6 +1635,21 @@ static void Init()
1629
1635
{
1630
1636
playerEntity->routingBucket = bucket;
1631
1637
}
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);
1632
1653
}
1633
1654
}
1634
1655
@@ -1644,12 +1665,29 @@ static void Init()
1644
1665
{
1645
1666
if (context.GetArgumentCount () > 1 )
1646
1667
{
1668
+ char * ent = context.GetArgument <char *>(0 );
1647
1669
auto bucket = context.GetArgument <int >(1 );
1670
+ int oldBucket = entity->routingBucket ;
1648
1671
1649
1672
if (bucket >= 0 )
1650
1673
{
1651
1674
entity->routingBucket = bucket;
1652
1675
}
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);
1653
1691
}
1654
1692
1655
1693
return true ;
0 commit comments