GTAOnline.net
Multi Theft Auto (mta) => Scripting MTA [Lua Center] => Discussion démarrée par: ~CG~FatalTerror le 26 Mai 2011, 09:15:14
-
Bonjour,
Hier je fessait une map(race) dans le thème du foot, et aujourd'hui je me suis mis a faire les scripts.
Les joueurs étant des Dozer et la balle est la roche dynamique(1305)
J'ai mis 2 marker dans la map, 1 pour représenter l'equipe A et l'autre B.
Ce que je voudrait faire quand le rocher entre dans un des markers sa dise par exemple 'but' :bangin
J'ai essayé de faire ceci:
franceGol = createMarker ( -3196.5256347656, -292.765625, 2.2164173126221, "cylinder", "7", 0, 255, 0, 255, getRootElement() )
balle = createObject ( 1305, -3240.5793457031, -294.15426635742, 4.9733681678772)
-- But France
addEventHandler( "onMarkerHit", franceGol,
function(hitMaker)
if (hitMaker == balle)then
outputChatBox( "GOOOOOOOOOOOOOOOOL", getRootElement(), 255, 255, 0 )
end
end)
mais sans sa ne marche pas ???
Donc je voudrait savoir si c'est possible de faire cela ou je rêve trop ? :blink
-
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
-
Oh super merci ! :laugh