Skip to content

Commit 4428363

Browse files
authored
Make PlayerRequestControl cancelable (#823)
1 parent 3afe6f3 commit 4428363

File tree

6 files changed

+28
-11
lines changed

6 files changed

+28
-11
lines changed

api/AltV.Net.Async/AsyncCore.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -724,9 +724,9 @@ await ServerStartedAsyncEventHandler.CallAsync(@delegate =>
724724
});
725725
}
726726

727-
public override void OnPlayerRequestControlEvent(IEntity target, IPlayer player)
727+
public override void OnPlayerRequestControlEvent(IntPtr eventPtr, IEntity target, IPlayer player)
728728
{
729-
base.OnPlayerRequestControlEvent(target, player);
729+
base.OnPlayerRequestControlEvent(eventPtr, target, player);
730730

731731
if (!PlayerRequestControlAsyncEventHandler.HasEvents()) return;
732732
Task.Run(async () =>

api/AltV.Net.CApi/Native/AltV.Resource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ internal delegate void VehicleHornDelegate(IntPtr eventPointer, IntPtr targetPoi
100100

101101
internal delegate void ServerStartedDelegate();
102102

103-
internal delegate void PlayerRequestControlDelegate(IntPtr target, BaseObjectType targetType, IntPtr player);
103+
internal delegate void PlayerRequestControlDelegate(IntPtr eventPtr, IntPtr target, BaseObjectType targetType, IntPtr player);
104104
internal delegate void PlayerChangeAnimationDelegate(IntPtr target, uint oldDict, uint newDict, uint oldName, uint newName);
105105
internal delegate void PlayerChangeInteriorDelegate(IntPtr target, uint oldIntLoc, uint newIntLoc);
106106
internal delegate void PlayerDimensionChangeDelegate(IntPtr player, int oldDimension, int newDimension);

api/AltV.Net/Alt.RegisterEvents.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,12 @@ public static void RegisterEvents(object target)
621621
{
622622
scriptFunction.Set(entity);
623623
scriptFunction.Set(player);
624-
scriptFunction.Call();
624+
if (scriptFunction.Call() is bool value)
625+
{
626+
return value;
627+
}
628+
629+
return true;
625630
};
626631
break;
627632
}

api/AltV.Net/Core.Events.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,7 +1433,7 @@ public virtual void OnServerStartedEvent()
14331433
}
14341434
}
14351435

1436-
public virtual void OnPlayerRequestControl(IntPtr targetPtr, BaseObjectType targetType, IntPtr playerPtr)
1436+
public virtual void OnPlayerRequestControl(IntPtr eventPtr, IntPtr targetPtr, BaseObjectType targetType, IntPtr playerPtr)
14371437
{
14381438
var target = (IEntity)PoolManager.Get(targetPtr, targetType);
14391439
if (target is null)
@@ -1449,16 +1449,20 @@ public virtual void OnPlayerRequestControl(IntPtr targetPtr, BaseObjectType targ
14491449
return;
14501450
}
14511451

1452-
OnPlayerRequestControlEvent(target, player);
1452+
OnPlayerRequestControlEvent(eventPtr, target, player);
14531453
}
14541454

1455-
public virtual void OnPlayerRequestControlEvent(IEntity target, IPlayer player)
1455+
public virtual void OnPlayerRequestControlEvent(IntPtr eventPtr, IEntity target, IPlayer player)
14561456
{
1457+
var cancel = false;
14571458
foreach (var @delegate in PlayerRequestControlHandler.GetEvents())
14581459
{
14591460
try
14601461
{
1461-
@delegate(target, player);
1462+
if (!@delegate(target, player))
1463+
{
1464+
cancel = true;
1465+
}
14621466
}
14631467
catch (TargetInvocationException exception)
14641468
{
@@ -1469,6 +1473,14 @@ public virtual void OnPlayerRequestControlEvent(IEntity target, IPlayer player)
14691473
Alt.Log("exception at event:" + "OnPlayerRequestControlEvent" + ":" + exception);
14701474
}
14711475
}
1476+
1477+
if (cancel)
1478+
{
1479+
unsafe
1480+
{
1481+
Alt.Core.Library.Shared.Event_Cancel(eventPtr);
1482+
}
1483+
}
14721484
}
14731485

14741486
public virtual void OnPlayerChangeAnimation(IntPtr playerPtr, uint oldDict, uint newDict, uint oldName,

api/AltV.Net/Events/Events.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public delegate WeaponDamageResponse WeaponDamageDelegate(IPlayer player, IEntit
8787

8888
public delegate void ServerStartedDelegate();
8989

90-
public delegate void PlayerRequestControlDelegate(IEntity target, IPlayer player);
90+
public delegate bool PlayerRequestControlDelegate(IEntity target, IPlayer player);
9191

9292
public delegate void PlayerChangeAnimationDelegate(IPlayer player, uint oldDict, uint newDict, uint oldName, uint newName);
9393

api/AltV.Net/ModuleWrapper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,9 @@ public static void OnServerStarted()
398398
_core.OnServerStarted();
399399
}
400400

401-
public static void OnPlayerRequestControl(IntPtr target, BaseObjectType targetType, IntPtr player)
401+
public static void OnPlayerRequestControl(IntPtr eventPtr, IntPtr target, BaseObjectType targetType, IntPtr player)
402402
{
403-
_core.OnPlayerRequestControl(target, targetType, player);
403+
_core.OnPlayerRequestControl(eventPtr, target, targetType, player);
404404
}
405405

406406
public static void OnPlayerChangeAnimation(IntPtr player, uint oldDict, uint newDict, uint oldName, uint newName)

0 commit comments

Comments
 (0)