@@ -21,6 +21,10 @@ function gameModeInit(player)
2121 toggleAllControls (player , false , true , false )
2222 clientCall (player , ' showIntroScene' )
2323 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 = {}
2428 if g_PlayerClasses [0 ] then
2529 g_Players [playerID ].viewingintro = true
2630 g_Players [playerID ].doingclasssel = true
@@ -83,9 +87,6 @@ function joinHandler(player)
8387 end
8488 g_Players [playerID ].updatetimer = setTimer (procCallOnAll , 100 , 0 , ' OnPlayerUpdate' , playerID )
8589
86- g_Players [playerID ].pvars = {}
87-
88-
8990 if playerJoined then
9091 if getRunningGameMode () then
9192 gameModeInit (player )
@@ -315,7 +316,17 @@ addEventHandler('onPlayerWasted', root,
315316 procCallOnAll (' OnPlayerDeath' , playerID , killerID , weapon )
316317 if g_Players [playerID ].returntoclasssel then
317318 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+ )
319330 else
320331 setTimer (spawnPlayerBySelectedClass , 3000 , 1 , source , false )
321332 end
@@ -339,6 +350,11 @@ addEventHandler('onPlayerQuit', root,
339350 amx .playerobjects [source ] = nil
340351 end
341352 local playerID = getElemID (source )
353+
354+ for i ,playerdata in pairs (g_Players ) do
355+ playerdata .streamedPlayers [playerID ] = nil
356+ end
357+
342358 procCallOnAll (' OnPlayerDisconnect' , playerID , quitReasons [reason ])
343359 if g_Players [playerID ].blip then
344360 destroyElement (g_Players [playerID ].blip )
@@ -383,13 +399,11 @@ addEventHandler('onVehicleEnter', root,
383399 local pedID = getElemID (player )
384400 g_Bots [pedID ].vehicle = source
385401 setBotState (player , seat == 0 and PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER )
386- procCallOnAll (' OnBotEnterVehicle' , pedID , vehID , seat ~= 0 and 1 or 0 )
387402 return
388403 end
389404 local playerID = getElemID (player )
390405 g_Players [playerID ].vehicle = source
391406 setPlayerState (player , seat == 0 and PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER )
392- procCallInternal (amx , ' OnPlayerEnterVehicle' , playerID , vehID , seat ~= 0 and 1 or 0 )
393407
394408 if amx .vehicles [vehID ] and amx .vehicles [vehID ].respawntimer then
395409 killTimer (amx .vehicles [vehID ].respawntimer )
@@ -398,6 +412,23 @@ addEventHandler('onVehicleEnter', root,
398412 end
399413)
400414
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+
401432addEventHandler (' onVehicleExit' , root ,
402433 function (player , seat , jacker )
403434 local amx = getElemAMX (source )
@@ -410,13 +441,11 @@ addEventHandler('onVehicleExit', root,
410441 local pedID = getElemID (player )
411442 g_Bots [pedID ].vehicle = nil
412443 setBotState (player , PLAYER_STATE_ONFOOT )
413- procCallOnAll (' OnBotExitVehicle' , pedID , vehID )
414444 return
415445 end
416446
417447 local playerID = getElemID (player )
418448 g_Players [playerID ].vehicle = nil
419- procCallOnAll (' OnPlayerExitVehicle' , playerID , vehID )
420449 setPlayerState (player , PLAYER_STATE_ONFOOT )
421450
422451 for i = 0 ,getVehicleMaxPassengers (source ) do
@@ -433,10 +462,26 @@ addEventHandler('onVehicleExit', root,
433462)
434463
435464addEventHandler (' 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+
437472 if g_RCVehicles [getElementModel (source )] then
438473 cancelEvent ()
474+ return
475+ end
476+
477+ if isPed (player ) then
478+ local pedID = getElemID (player )
479+ procCallOnAll (' OnBotExitVehicle' , pedID , vehID )
480+ return
439481 end
482+
483+ local playerID = getElemID (player )
484+ procCallOnAll (' OnPlayerExitVehicle' , playerID , vehID )
440485 end
441486)
442487
@@ -594,3 +639,48 @@ addEventHandler('onPlayerChangeNick', root,
594639 cancelEvent ()
595640 end
596641)
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