@@ -21,6 +21,10 @@ function gameModeInit(player)
21
21
toggleAllControls (player , false , true , false )
22
22
clientCall (player , ' showIntroScene' )
23
23
clientCall (player , ' TogglePlayerClock' , false , false )
24
+ g_Players [playerID ].pvars = {}
25
+ g_Players [playerID ].streamedActors = {}
26
+ g_Players [playerID ].streamedVehicles = {}
27
+ g_Players [playerID ].streamedPlayers = {}
24
28
if g_PlayerClasses [0 ] then
25
29
g_Players [playerID ].viewingintro = true
26
30
g_Players [playerID ].doingclasssel = true
@@ -83,9 +87,6 @@ function joinHandler(player)
83
87
end
84
88
g_Players [playerID ].updatetimer = setTimer (procCallOnAll , 100 , 0 , ' OnPlayerUpdate' , playerID )
85
89
86
- g_Players [playerID ].pvars = {}
87
-
88
-
89
90
if playerJoined then
90
91
if getRunningGameMode () then
91
92
gameModeInit (player )
@@ -315,7 +316,17 @@ addEventHandler('onPlayerWasted', root,
315
316
procCallOnAll (' OnPlayerDeath' , playerID , killerID , weapon )
316
317
if g_Players [playerID ].returntoclasssel then
317
318
g_Players [playerID ].returntoclasssel = nil
318
- setTimer (putPlayerInClassSelection , 3000 , 1 , source )
319
+ -- setTimer(putPlayerInClassSelection, 3000, 1, source)
320
+ setTimer (
321
+ function ()
322
+ g_Players [playerID ].spawninfo = nil
323
+ g_Players [playerID ].selectedclass = nil
324
+
325
+ if procCallOnAll (' OnPlayerRequestClass' , playerID , 0 ) then
326
+ putPlayerInClassSelection (player )
327
+ end
328
+ end , 3000 , 1 , source
329
+ )
319
330
else
320
331
setTimer (spawnPlayerBySelectedClass , 3000 , 1 , source , false )
321
332
end
@@ -339,6 +350,11 @@ addEventHandler('onPlayerQuit', root,
339
350
amx .playerobjects [source ] = nil
340
351
end
341
352
local playerID = getElemID (source )
353
+
354
+ for i ,playerdata in pairs (g_Players ) do
355
+ playerdata .streamedPlayers [playerID ] = nil
356
+ end
357
+
342
358
procCallOnAll (' OnPlayerDisconnect' , playerID , quitReasons [reason ])
343
359
if g_Players [playerID ].blip then
344
360
destroyElement (g_Players [playerID ].blip )
@@ -383,13 +399,11 @@ addEventHandler('onVehicleEnter', root,
383
399
local pedID = getElemID (player )
384
400
g_Bots [pedID ].vehicle = source
385
401
setBotState (player , seat == 0 and PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER )
386
- procCallOnAll (' OnBotEnterVehicle' , pedID , vehID , seat ~= 0 and 1 or 0 )
387
402
return
388
403
end
389
404
local playerID = getElemID (player )
390
405
g_Players [playerID ].vehicle = source
391
406
setPlayerState (player , seat == 0 and PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER )
392
- procCallInternal (amx , ' OnPlayerEnterVehicle' , playerID , vehID , seat ~= 0 and 1 or 0 )
393
407
394
408
if amx .vehicles [vehID ] and amx .vehicles [vehID ].respawntimer then
395
409
killTimer (amx .vehicles [vehID ].respawntimer )
@@ -398,6 +412,23 @@ addEventHandler('onVehicleEnter', root,
398
412
end
399
413
)
400
414
415
+ addEventHandler (' onVehicleStartEnter' , root ,
416
+ function (player , seat , jacked )
417
+ local vehID = getElemID (source )
418
+ local amx = getElemAMX (source )
419
+ if not amx then
420
+ return
421
+ end
422
+ if isPed (player ) then
423
+ local pedID = getElemID (player )
424
+ procCallOnAll (' OnBotEnterVehicle' , pedID , vehID , seat ~= 0 and 1 or 0 )
425
+ return
426
+ end
427
+ local playerID = getElemID (player )
428
+ procCallInternal (amx , ' OnPlayerEnterVehicle' , playerID , vehID , seat ~= 0 and 1 or 0 )
429
+ end
430
+ )
431
+
401
432
addEventHandler (' onVehicleExit' , root ,
402
433
function (player , seat , jacker )
403
434
local amx = getElemAMX (source )
@@ -410,13 +441,11 @@ addEventHandler('onVehicleExit', root,
410
441
local pedID = getElemID (player )
411
442
g_Bots [pedID ].vehicle = nil
412
443
setBotState (player , PLAYER_STATE_ONFOOT )
413
- procCallOnAll (' OnBotExitVehicle' , pedID , vehID )
414
444
return
415
445
end
416
446
417
447
local playerID = getElemID (player )
418
448
g_Players [playerID ].vehicle = nil
419
- procCallOnAll (' OnPlayerExitVehicle' , playerID , vehID )
420
449
setPlayerState (player , PLAYER_STATE_ONFOOT )
421
450
422
451
for i = 0 ,getVehicleMaxPassengers (source ) do
@@ -433,10 +462,26 @@ addEventHandler('onVehicleExit', root,
433
462
)
434
463
435
464
addEventHandler (' onVehicleStartExit' , root ,
436
- function ()
465
+ function (player , seat , jacked , door )
466
+ local amx = getElemAMX (source )
467
+ local vehID = getElemID (source )
468
+ if not amx then
469
+ return
470
+ end
471
+
437
472
if g_RCVehicles [getElementModel (source )] then
438
473
cancelEvent ()
474
+ return
475
+ end
476
+
477
+ if isPed (player ) then
478
+ local pedID = getElemID (player )
479
+ procCallOnAll (' OnBotExitVehicle' , pedID , vehID )
480
+ return
439
481
end
482
+
483
+ local playerID = getElemID (player )
484
+ procCallOnAll (' OnPlayerExitVehicle' , playerID , vehID )
440
485
end
441
486
)
442
487
@@ -594,3 +639,48 @@ addEventHandler('onPlayerChangeNick', root,
594
639
cancelEvent ()
595
640
end
596
641
)
642
+
643
+ -- Actors
644
+ addEvent (' onAmxClientActorStream' , true )
645
+ addEventHandler (' onAmxClientActorStream' , root ,
646
+ function (actorId , streamed )
647
+ local playerID = getElemID (source )
648
+ if streamed then
649
+ g_Players [playerID ].streamedActors [actorId ] = true
650
+ procCallOnAll (' OnActorStreamIn' , actorId , playerID )
651
+ else
652
+ g_Players [playerID ].streamedActors [actorId ] = nil
653
+ procCallOnAll (' OnActorStreamOut' , actorId , playerID )
654
+ end
655
+ end
656
+ )
657
+
658
+ -- Players
659
+ addEvent (' onAmxClientPlayerStream' , true )
660
+ addEventHandler (' onAmxClientPlayerStream' , root ,
661
+ function (otherId , streamed )
662
+ local playerID = getElemID (source )
663
+ if streamed then
664
+ g_Players [playerID ].streamedPlayers [otherId ] = true
665
+ procCallOnAll (' OnPlayerStreamIn' , otherId , playerID )
666
+ else
667
+ g_Players [playerID ].streamedPlayers [otherId ] = nil
668
+ procCallOnAll (' OnPlayerStreamOut' , otherId , playerID )
669
+ end
670
+ end
671
+ )
672
+
673
+ -- Vehicles
674
+ addEvent (' onAmxClientVehicleStream' , true )
675
+ addEventHandler (' onAmxClientVehicleStream' , root ,
676
+ function (vehicleID , streamed )
677
+ local playerID = getElemID (source )
678
+ if streamed then
679
+ g_Players [playerID ].streamedVehicles [vehicleID ] = true
680
+ procCallOnAll (' OnVehicleStreamIn' , vehicleID , playerID )
681
+ else
682
+ g_Players [playerID ].streamedVehicles [vehicleID ] = nil
683
+ procCallOnAll (' OnVehicleStreamOut' , vehicleID , playerID )
684
+ end
685
+ end
686
+ )
0 commit comments