Salut FatalTerror,
Alors j'ai regardé ton code, il est bon mais le problème avec les objets dynamique, c'est que si tu crées la balle à 0, 0, 2 par exemple, même si tu le bouges, la position sera toujours de 0, 0, 2 pour le server.
Et donc par conséquent aucun "onMarkerHIT" possible avec ces type d'objets.
En revanche, comme les objets dynamiques sont gérer par la partie client, la position en client de la balle est correcte même si on le bouge.
Bizarrement, le "onClientMarkerHit" ne marchais pas alors je me suis fait ma propre fonction qui vérifie toutes les 500ms si la balle est dans le marker1 ou le marker2.
Voila ce que ça donne:
SERVER:
franceGol = createMarker ( 0, 0, 2.2164173126221, "cylinder", "7", 0, 255, 0, 255, getRootElement() )
espagneGol = createMarker ( 50, 50, 2.2164173126221, "cylinder", "7", 0, 255, 0, 255, getRootElement() )
balle = createObject ( 1305, 0, -10, 2.9733681678772)
setElementID( franceGol, "franceGol" )
setElementID( espagneGol, "espagneGol" )
setElementID( balle, "balle" )
-- But
addEvent( "onPlayerGoal", true )
function onPlayerGoal( equipe )
----------------- NE PAS TOUCHER ------------------------
triggerClientEvent( "setGOAL", getRootElement() ) -------
---------------------------------------------------------
outputChatBox( equipe..": GOOOOOOOOOOOOOOOOL", getRootElement(), 255, 255, 0 )
setTimer( playAgain, 4000, 1 )
end
addEventHandler( "onPlayerGoal", getRootElement(), onPlayerGoal )
function playAgain()
----------------- NE PAS TOUCHER ------------------------
triggerClientEvent( "resetGOAL", getRootElement() ) -----
---------------------------------------------------------
-- ceci est un exemple, à toi de le modifier comme bon te semble
setElementPosition( balle, 0, -10, 2.9733681678772 )
end
CLIENT:( à ne pas toucher )
GOAL = 0 -- GOAL évite le flood
function markerHIT()
local equipe
local balle = getElementByID( "balle" )
local marker = getElementByID( "franceGol" )
local marker2 = getElementByID( "espagneGol" )
local bool = isElementWithinMarker( balle, marker )
local bool2 = isElementWithinMarker( balle, marker2 )
if bool then equipe = "france" elseif bool2 then equipe = "espagne" end
if ( (bool or bool2) and GOAL == 0)then
GOAL = 1
triggerServerEvent( "onPlayerGoal", getLocalPlayer(), equipe )
end
end
setTimer( markerHIT, 500, 0 )
addEvent("resetGOAL", true )
function resetGOAL()
GOAL = 0
end
addEventHandler("resetGOAL", getRootElement(), resetGOAL )
addEvent("setGOAL", true )
function setGOAL()
GOAL = 1
end
addeventHandler("setGOAL", getRootElement(), setGOAL )
Je l'ai testé et ça marche par contre comme c'est le client qui gère la position de la balle, il se peut que la position balle ne soit pas synchronisé, et donc que chaque joueur voit la balle
à des positions différentes. Mais ça reste à vérifier.
Lorsque tu remets la balle en jeu comme dans l'exemple, n'oublie pas de faire:
triggerClientEvent( "resetGOAL", getRootElement() )
Sinon on ne pourra pas marqué de but ::)
Bon codage !
PS: Si t'as des questions n'hésite pas :happy
PS2: N'oublie pas de changer la position des markers et de la balle pour que ça corresponde à ton mapping