• 28 Mars 2024, 16:40:51


Auteur Sujet: [Résolu]Deux ou trois problemes  (Lu 3143 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
[Résolu]Deux ou trois problemes
« le: 04 Avril 2011, 14:05:39 »
Bonjour

Ce matin je fessait une petite map dans le thème de Mario Bros   :-[

Mon premier probleme c'est la camera:

Code: (lua) [Sélectionner]
root = getRootElement ()
function updateCamera ()
local x, y, z = getElementPosition ( getLocalPlayer () )
setCameraMatrix ( x, y, z + 10, x, y, z, 90, 90 )
end
addEventHandler ( "onClientPreRender", root, updateCamera )
addEventHandler ( "onResourceStart", getRootElement(), updateCamera )

J'ai passé plus d'une heure sur la camera et j'ai pas réussi a la régler  :wall
Je ne sais pas comment la mettre sur la vu de coté, comme quand on appui sur E.


Et mon deuxième problème c'est le push:

Code: (lua) [Sélectionner]
function pushBouton()
local targetPlayerName = getPlayerName(source)
local hisCar = getPedOccupiedVehicle( targetPlayerName )
local x, y, z = getElementVelocity ( hisCar )
setElementVelocity ( hisCar, x , y, z + 0.4 )
end
function press()
bindKey ( "m", "down", pushBouton )
end
addEventHandler ("onResourceStart",getRootElement(),press)

Ce que je veux faire c'est quand on appui sur M le joueur est poussé vers le haut, mais la ça ne marche pas  :wall


Si quelqu'un pouvais m'aider, sa serait super  :D


Thx, FatalTerror :blink
« Modifié: 20 Juin 2011, 17:22:25 par ~CG~FatalTerror »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Deux ou trois problemes
« Réponse #1 le: 04 Avril 2011, 19:35:01 »
Salut FatalTerror,
Alors pour commencer il faut savoir que dans un serveur MTA il y a 2 parties, la partie serveur( server-side ) et la partie client ( client-side )
Donc tu n'as pas le droit de mélanger des events clients ( je penses à ton onClientPreRender ) et des events serveurs ( ton onResourceStart ) ceci est aussi valable pour les fonctions
D'après ce que je vois, c'est du client-side voici ce que j'ai fais:

Code: (lua) [Sélectionner]
root = getRootElement ()
function updateCamera ()
local veh = getPedOccupiedVehicle( getLocalPlayer() ) -- on récupère le véhicule dans lequel est le joueur
if ( veh ~= false ) then -- si le joueur n'est pas sans vehicule ( => donc s'il est dans un véhicule ) sinon sa sert à rien
local distance = 0.2 -- on dit à quelle distance on veut mettre la caméra par rapport au véhicule
local x, y, z = getElementPosition( veh ) -- on récupère la position du véhicule
local rx, ry, rz = getElementRotation( veh )
local a = rz-90 -- on dit de quel coté on veut mettre la caméra ( ici à droite )
-- on se met en radian pour utiliser math.sin et math.cos
local a2 = math.rad(a)
-- on écarte la caméra du véhicule
local x2 = x+(distance * math.deg(math.sin(-a2)))
local y2 = y+(distance * math.deg(math.cos(-a2)))
-- on place la caméra
setCameraMatrix ( x2, y2, z, x, y, z )
end
end
addEventHandler ( "onClientPreRender", root, updateCamera )
A toi de régler la distance comme tu le souhaites.

Ensuite pour ton 2ème code, il faut savoir que la majorité des fonctions requièrent ( en argument ) le joueur en tant qu’élément ( playerElement )! En client, on le récupère avec getLocalPlayer()
Dans le wiki, lorsqu'une fonction a besoin du playerElement en argument, il est mentionné comme ceci ( exemple concret ):


ou alors si la fonction peut s'utiliser sur un ped ou un player:


ou encore si une fonction peut s'utiliser sur un element quelconque ( objet, véhicule, player, ped, marker, pickup, blip ou encore un sond ):

Voilà ce que ça donne:
Code: (lua) [Sélectionner]
function pushBouton( )
local hisCar = getPedOccupiedVehicle( getLocalPlayer() ) -- ici on veut le playerElement et non pas son nom ( en client on peut le récupérer avec [b]getLocalPlayer()[/b] )
local x, y, z = getElementVelocity ( hisCar )
setElementVelocity ( hisCar, x , y, z+0.4 )
end
bindKey ( "m", "down", pushBouton ) -- lorsque le bindkey est comme ceci ( en-dehors d'une fonction quelconque ) le [b]bindKey [/b]est exécuté lorsque le script est "chargé"

A mon avis pour se que tu veux obtenir, ton +0.4 en velocity z est parfait ( j'ai testé  :P )

Si tu as des questions n'hésite pas  ;)
« Modifié: 04 Avril 2011, 19:38:27 par Citizen »
The rEvolution is coming ...

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : Deux ou trois problemes
« Réponse #2 le: 04 Avril 2011, 21:31:06 »
Cool Grand merci  :laugh

Mais il y a un probleme, comment on limite les sauts ?
Parceque la je peux faire toute la mappe en appuiant sur M  :...

J'ai essayé de faire des setTimer() mais je ne sais pas comment on l'utilise  :'(


Thx, FatalTerror
« Modifié: 05 Avril 2011, 13:27:29 par ~CG~FatalTerror »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Deux ou trois problemes
« Réponse #3 le: 09 Avril 2011, 12:12:34 »
Je te conseil d'utiliser un setElementData avec un setTimer comme ceci:
Code: (lua) [Sélectionner]
function pushBouton( )
if ( getElementData( getLocalPlayer(), "jumping" ) ~= true ) then
local hisCar = getPedOccupiedVehicle( getLocalPlayer() ) -- ici on veut le playerElement et non pas son nom ( en client on peut le récupérer avec [b]getLocalPlayer()[/b] )
local x, y, z = getElementVelocity ( hisCar )
setElementVelocity ( hisCar, x , y, z+0.4 )
setElementData( getLocalPlayer(), "jumping", true )
setTimer( ssetElementData, 3000, 1, getLocalPlayer(), "jumping", true )
end
end
bindKey ( "m", "down", pushBouton )

Si tu as des questions n'hèsite pas  ;)
( PS: ton server RPG est fini ? Je pourrais le voir ? )
The rEvolution is coming ...

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : Deux ou trois problemes
« Réponse #4 le: 09 Avril 2011, 22:42:27 »
WoW vous êtes trop fort  :bangin

(Pour mon serveur RPG: Bientot  fini)

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Deux ou trois problemes
« Réponse #5 le: 09 Avril 2011, 22:44:17 »
Merci
Le mien aussi est pratiquement terminé, je compte l'ouvrir fin juillet.

EDIT:Mais tu es seul pour coder ? Tu as pris un GM déjà existant ( je pense notamment à Paradise ) parce que si tu as fait un server RPG, tu aurais été capable de faire sans sans aucun problème. :blink
« Modifié: 09 Avril 2011, 22:49:10 par Citizen »
The rEvolution is coming ...

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : Deux ou trois problemes
« Réponse #6 le: 09 Avril 2011, 23:05:31 »
Je suis le leader de mon clan et mon co-admin est un gros noob avec tout ce qui est script  :boulz

Et non, je modifie pas le script Paradise  :-\, Je fait mon propre gamemode et il marche bien  :king

PS: Vivement Juillet  :laugh

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : [Nouveaux Problèmes]Deux ou trois problemes
« Réponse #7 le: 15 Juin 2011, 22:05:41 »
Euh me revoila  ???

Merci a Citzen pour toute ses réponses  :cheers .

Voila,
Dans ce script la:
root = getRootElement ()
function updateCamera ()
local veh = getPedOccupiedVehicle( getLocalPlayer() ) -- on récupère le véhicule dans lequel est le joueur
if ( veh ~= false ) then -- si le joueur n'est pas sans vehicule ( => donc s'il est dans un véhicule ) sinon sa sert à rien
local distance = 0.2 -- on dit à quelle distance on veut mettre la caméra par rapport au véhicule
local x, y, z = getElementPosition( veh ) -- on récupère la position du véhicule
local rx, ry, rz = getElementRotation( veh )
local a = rz-90 -- on dit de quel coté on veut mettre la caméra ( ici à droite )
-- on se met en radian pour utiliser math.sin et math.cos
local a2 = math.rad(a)
-- on écarte la caméra du véhicule
local x2 = x+(distance * math.deg(math.sin(-a2)))
local y2 = y+(distance * math.deg(math.cos(-a2)))
-- on place la caméra
setCameraMatrix ( x2, y2, z, x, y, z )
end
end
addEventHandler ( "onClientPreRender", root, updateCamera )

Enfait il marche parfaitement, mais quand le joueur meurt la caméra est n'importe ou.
Alors ce que je voudrai savoir c'est comment on fait quand le joueur est mort mettre la camera par default. (meme chose quand le joueur prend le Hunter  :P )

Voila Voilou :D

Si vous connaisez la réponce merci de me le faire savoir  :-\

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : [Nouveaux Problèmes]Deux ou trois problemes
« Réponse #8 le: 19 Juin 2011, 00:41:54 »
Salut FatalTerror,
Citer
mais quand le joueur meurt la caméra est n'importe ou.
Ah bon ? je viens de le tester et ça marche  ???
J'ai utilisé ça à la place car je n'avais pas race de lancé ( essaye pour voir ):
Code: (lua) [Sélectionner]
addEventHandler ( "onClientPreRender", getRootElement(), updateCamera )
Citer
meme chose quand le joueur prend le Hunter
C'est très simple, il suffit de rajouter la condition: "si le joueur n'est pas dans le hunter(ID: 425)"
Code: (lua) [Sélectionner]
if ( veh ~= false and veh ~= 425 ) then
Après si tu veux aussi l'enlever si un joueur est mort: "... et(and) si le joueur n'est pas( not ) mort "
Code: (lua) [Sélectionner]
if ( veh ~= false and veh ~= 425 and not isPlayerDead ( getLocalPlayer() )) then
Voila voila et désoler pour cette réponse tardive mais je suis en pleines révisions de bac ( à part ce soir ou j'ai soufflé un peu  :happy )
The rEvolution is coming ...

Hors ligne ~CG~FatalTerror

  • *
  • Criminel
  • Messages: 41
    • Voir le profil
Re : [Nouveaux Problèmes]Deux ou trois problemes
« Réponse #9 le: 20 Juin 2011, 17:21:37 »
Oh super Citizen !
Et bonne chance pour le BAC  :P

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Re : [Nouveaux Problèmes]Deux ou trois problemes
« Réponse #10 le: 20 Juin 2011, 19:18:47 »
Oh super Citizen !
Et bonne chance pour le BAC  :P
Merci, pour l'instant tout se passe bien ( a part l’épreuve de philosophie mais bon je me rattrape sur les autres matières )
The rEvolution is coming ...