Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

254676 Messages dans 14036 Fils de discussion- par 6616 Membres - Dernier membre: louloufcb

22 Mai 2012 à 16:17:37
GTAOnline.frMulti Theft AutoScripting MTA [lua Center] (Modérateur: Citizen)[RÉSOLU]Objet dans un maker
Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: [RÉSOLU]Objet dans un maker  (Lu 189 fois)
0 Membres et 1 Invité sur ce fil de discussion.
~CG~FatalTerror
Hors ligne Hors ligne

Criminel entrainé
*

Messages: 38


« 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:
Code:
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  Huh?

Donc je voudrait savoir si c'est possible de faire cela ou je rêve trop ? Blink
« Dernière édition: 29 Mai 2011 à 18:31:22 par ~CG~FatalTerror » Journalisée
Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 109


WWWtvrmntcn1

« Répondre #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)
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)
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)
triggerClientEvent( "resetGOAL", getRootElement() )
Sinon on ne pourra pas marqué de but  Roulement d'yeux

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
Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
~CG~FatalTerror
Hors ligne Hors ligne

Criminel entrainé
*

Messages: 38


« Répondre #2 le: 28 Mai 2011 à 16:30:33 »

Oh super merci !  laugh
Journalisée
Pages: [1]   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.134 secondes avec 23 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com | Contact