• 29 Mars 2024, 02:45:37


Auteur Sujet: [RÉSOLU]Objet dans un maker  (Lu 1846 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
[RÉSOLU]Objet dans un maker
« 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
« Modifié: 29 Mai 2011, 18:31:22 par ~CG~FatalTerror »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Objet dans un maker
« Réponse #1 le: 28 Mai 2011, 12:01:18 »
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:
Code: (lua) [Sélectionner]
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 )
Code: (lua) [Sélectionner]
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:
Code: (lua) [Sélectionner]
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
The rEvolution is coming ...

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : Objet dans un maker
« Réponse #2 le: 28 Mai 2011, 16:30:33 »
Oh super merci !  :laugh