Aller au contenu
Rechercher dans
  • Plus d’options…
Rechercher les résultats qui contiennent…
Rechercher les résultats dans…
Bienvenue Invité!

Rejoignez la communauté pour avoir accès à l'entièreté du site! Une fois que vous serez enregistré, vous pourrez créer, aider, partager et discuter avec les membres de la communauté et également participer à l'amélioration du site. Alors, qu'attendez vous ? Enregistrez-vous !

  • 0
MrTheo

résolu Deux zones d'achat pour les concessionaires

Question

MrTheo

Quelle OS utilisez vous sur votre machine ? : Windows en local sur mon PC
Sur quel framework travaillez vous? (ESX/VRP/ES/Autre) : ESX

Quel est le script que vous utilisez (+version)? esx_vehicleshop ( la dernière ) 
Qu'avez vous essayer auparavant ? (Vider votre cache, installation du script au propre etc...): Oui
Êtes vous sûr d'avoir la dernière version de votre framework ? : Oui

Explication de votre problème : Donc en gros , j'ai modifié le vehicle shop , pour qu'il y ai deux points d'achats des vehicules , les deux points sont clairement visible et fonctionne , sauf que le soucis est que lorsque j'achète dans le bureau 1 quand je resort du menu d'achat je réparait dans le bureau 2 , je vous joint le fichier client que j'ai modifié et qui fonctionne , j'ai essayé de trouvé une solution mais je vous avoue que la je seche ^^ 

Lien vers vos logs de l'erreur sur pastebin/hastebin client+serveur : https://pastebin.com/eZvhbLua mon côté client est comme çà .

Partager ce message


Lien à poster
Partager sur d’autres sites

Messages recommandés

  • 0
Kanda Sorata

Bon, voilà j'ai regarder de plus près, et effectivement, il y a un point que je n'avais pas pour comprendre le non fonctionnement de ce que je t'ai donné, je vais t'expliquer pas à pas ce qu'il faut faire dans ta ressource que tu m'as donné (je pars donc depuis l'archive que tu m'as envoyée, pour les lignes)

 

Citation

Étape 1 :

Dirige toi à la ligne 150 de ton fichier client.lua pour y ajouter ceci :

 

local Zone1 = nil --On défini une variable nil que l'on pourra utiliser (nous la difinissons nil pour la reset et éviter qu'elle garde l'ancienne valeur)
if LastZone == 'ShopEntering' then --On vérifie si la zone du joueur correspond à la zone ShopEntering dans le config.lua
	Zone1 = true --Si il est dans la zone, on défini la variable sur true
else
	Zone1 = false --Si il n'est pas dans la zone choisie, on défini la variable sur false
end

 

Ceci permettra de savoir si tu es dans ton premier marqueur, ou second, puisque effectivement, la première méthode que je t'ai donnée ne pouvais fonctionner puisqu'au moment où tu achètes le véhicule, ton joueur n'est plus sur un marqueur ShopEntering ou ShopEntering2 mais sur le marqueur ShopInside (puisque tu es dans le véhicule pour le prévisualisé), ce qui effectivement faussé la condition.

 

Citation

Étape 2 :

 

Direction ensuite la ligne 235 qui correspond à ce que je t'ai donnée plus tôt :

 

if LastZone == ShopEntering2 then
	SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)
else
	SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)
end

Tu remplaces ce bout de code par ceci :

 

if Zone1 then --On vérifie si le booléen est <<true>> donc, dans le marqueur défini à l'étape précédent
	SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)
  --Il est à l'intérieur, donc on le TP sur le marqueur 1
else
	SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)
  --Le booléen est <<false>> il n'est donc pas dans le marqueur 1, alors on le TP dans le marqueur 2
end

 

Ceci permet donc de téléporter le joueur dans le marqueur où il est entrer dans le menu, défini à l'étape 1 une fois qu'il a acheté le véhicule

 

Citation

Étape 3 :

 

Maintenant, on se rend à la ligne 396 pour y ajouter le même bout de code que l'étape précédente, c'est à dire :

 

if Zone1 then --On vérifie si le booléen est <<true>> donc, dans le marqueur défini à l'étape précédent
	SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)
  --Il est à l'intérieur, donc on le TP sur le marqueur 1
else
	SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)
  --Le booléen est <<false>> il n'est donc pas dans le marqueur 1, alors on le TP dans le marqueur 2
end

Cette partie défini la position du joueur, lorsqu'il quitte le menu sans acheter

 

Citation

Étape 3 :

 

Ensuite, dirige toi à la ligne 830 qui correspond à cette fonction :

 

if Config.EnablePlayerManagement then
	if ESX.PlayerData.job.name == 'cardealer' then
		Config.Zones.ShopEntering.Type = 1

		if ESX.PlayerData.job.grade_name == 'boss' then
			Config.Zones.BossActions.Type = 1
		end

	else
		Config.Zones.ShopEntering.Type = -1
		Config.Zones.BossActions.Type  = -1
	end
end

 

Et tu ajoutes en dessous de

Config.Zones.ShopEntering.Type = 1

ceci :

Config.Zones.ShopEntering2.Type = 1 

afin de définir le marqueur en "visible" si le joueur est bien dans le métier cardealer lorsque la configuration EnablePlayerManagement est sur TRUE

 

AINSI que en dessous de 

Config.Zones.ShopEntering.Type = -1

 ceci :

Config.Zones.ShopEntering2.Type = -1

pour alors cacher le marqueur si le joueur n'est pas dans le métier cardealer

 

Voilà pour l'étape 3.

 

Citation

Étape 4 :

 

Pour l'étape 4, on se rend juste en dessous, à la ligne 846 qui correspond exactement à :

if zone == 'ShopEntering' or 'ShopEntering2' then

et tu le remplaces par :

if zone == 'ShopEntering' or zone == 'ShopEntering2' then

pour "débug" tes marqueurs, puisqu'il ne savait pas à quoi correspondait "ShopEntering2" dans la condition, il a alors appliqué le même résultat pour tous les autres marqueurs de ton script, on défini ici bien que si la zone correspondante est ShopEntering OU la zone ShopEntering2 on ouvre le menu de vente

 

Citation

Étape 5 :

 

Rendez-vous à la ligne 941 qui correspond à ceci :

SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)

et tu peux directement supprimé cette ligne, elle n'est utile que lorsque tu arrêtes la ressources via la commande /stop esx_vehicleshop ou stop esx_vehicleshop dans la console.

 

Citation

Étape 6 : Étape bonus

 

Alors, ceci est optionnel, tu n'es pas obligé de le faire, mais c'est "mieux" en terme d'optimisation. En clair, cela concerne les blips que tu as créer, à la ligne 960 qui correspond à tout ça :

 

-- Create Blips
Citizen.CreateThread(function ()
	local blip = AddBlipForCoord(Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)

	SetBlipSprite (blip, 326)
	SetBlipDisplay(blip, 4)
	SetBlipScale  (blip, 1.0)
	SetBlipAsShortRange(blip, true)

	BeginTextCommandSetBlipName("STRING")
	AddTextComponentString(_U('car_dealer'))
	EndTextCommandSetBlipName(blip)
end)

Citizen.CreateThread(function ()
	local blip2 = AddBlipForCoord(Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)

	SetBlipSprite (blip2, 326)
	SetBlipDisplay(blip2, 4)
	SetBlipScale  (blip2, 1.0)
	SetBlipAsShortRange(blip2, true)

	BeginTextCommandSetBlipName("STRING")
	AddTextComponentString(_U('car_dealer'))
	EndTextCommandSetBlipName(blip2)
end)

tu créer ici deux thread, alors que ce n'est pas nécessaire, tu peux fusionné les deux ensemble, cela ne sera pas un gain significatif de performance, mais c'est toujours ça de gagner, et ça permet également de réduire la taille de ton fichier. Tu peux le transformer de cette façon :

 

-- Create Blips
Citizen.CreateThread(function ()
	local blip = AddBlipForCoord(Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)
	local blip2 = AddBlipForCoord(Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)

	SetBlipSprite (blip, 326)
	SetBlipDisplay(blip, 4)
	SetBlipScale  (blip, 1.0)
	SetBlipAsShortRange(blip, true)

	BeginTextCommandSetBlipName("STRING")
	AddTextComponentString(_U('car_dealer'))
	EndTextCommandSetBlipName(blip)

	--## Blip2
	SetBlipSprite (blip2, 326)
	SetBlipDisplay(blip2, 4)
	SetBlipScale  (blip2, 1.0)
	SetBlipAsShortRange(blip2, true)
	
	BeginTextCommandSetBlipName("STRING")
	AddTextComponentString(_U('car_dealer'))
	EndTextCommandSetBlipName(blip2)
end)

 

------------------------

En clair voilà, en suivant toutes ces étapes, ce que tu souhaites fonctionnera, si jamais tu as vraiment du mal et tu es perdu, je peux t'envoyer le fichier modifié (c'est vraiment en cas de dernièèèèère nécessite mais normalement, j'ai fais mon maximum pour bien y expliquer et que ce soit compréhensible ;) )

 

Tiens moi au courant si ça fonctionne ou non !

 

(Je ne sais pas si tu as ton esx_vehicleshop à jour, mais vérifie qu'il soit bien à jour tout de même)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Bonjour, déjà je remarque un problème lorsque j'ai survolé le code, lorsque tu achètes le véhicule ,tu téléportes deux fois le joueur, à  deux positions différentes :

 

SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z)
SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z)

 

C'est déjà un problème puisque le joueur finira toujours au même emplacement donc l'emplacement Config.Zones.ShopEntering2

Pour modifié ça, tu dois créer une condition dans le fichier client  pour les deux natives du style :

 

if LastZone == Config.Zones.ShopEntering2 then -- On vérifie si la variable LastZone est égale à la position du deuxième shop
  SetEntityCoord....(Config.Zones.ShopEntering2..) --Si oui on le téléporte en retour au deuxième shop
else
   SetEntityCoord....(Config.Zones.ShopEntering..) -- Si non, on le téléporte à la position du premier shop
end



LastZone étant déjà une variable "globale" définie en haut de ton fichier client (les variables que j'ai mise dans le bloc sont à titre d'exemple, je te laisse print le résultat de LastZone pour avoir la variable précise qui te sera retournée)

La variable LastZone est définie ici :

  -- Enter / Exit marker events
  Citizen.CreateThread(function ()
      while true do
          Citizen.Wait(0)
  
          local coords      = GetEntityCoords(PlayerPedId())
          local isInMarker  = false
          local currentZone = nil
  
          for k,v in pairs(Config.Zones) do
              if(GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < v.Size.x) then
                  isInMarker  = true
                  currentZone = k
              end
          end
  
          if (isInMarker and not HasAlreadyEnteredMarker) or (isInMarker and LastZone ~= currentZone) then
              HasAlreadyEnteredMarker = true
              LastZone                = currentZone -- On définie la variable LastZone une fois que le joueur est entré dans le marqueur
              TriggerEvent('esx_vehicleshop:hasEnteredMarker', currentZone)
          end
  
          if not isInMarker and HasAlreadyEnteredMarker then
              HasAlreadyEnteredMarker = false
              TriggerEvent('esx_vehicleshop:hasExitedMarker', LastZone)
          end
      end
  end)


Cette erreur est présente aux lignes suivantes : l.229 / l.387 et l.925
 

Une fois corrigé, cela devrait être bon :)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Ok merci de toutes ses explications , je vais essayé ceci , je reviens vers vous au cas ou , ! 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

J'ai réussi a print mais j'ai un truc que j'ai pas compris , j'ai une erreur dans le code

 

if LastZone == Config.Zones.ShopEntering2 then -- On vérifie si la variable LastZone est égale à la position du deuxième shop
  SetEntityCoord....(Config.Zones.ShopEntering2..) --Si oui on le téléporte en retour au deuxième shop
else
   SetEntityCoord....(Config.Zones.ShopEntering..) -- Si non, on le téléporte à la position du premier shop
end

en gros le SetEntityCoord avec les points fais bugué , meme si je l'ai enleve ca va pas x) désolé j'suis debutant

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

C'est normal j'ai abrégé les natives pour facilité la lecture et la compréhension, tu as les natives correctes juste au dessus

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Ok c'est bon j'ai fais çà , mais maintenant il me dis qu'il y a une erreur a la ligne 1020 a cause du "(" xD alors que pourtant tout a l'air bon

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Poste toute la fonction pour voir

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo
if LastZone == Config.Zones.ShopEntering2 then -- On vérifie si la variable LastZone est égale à la position du deuxième shop
  SetEntityCoords(playerPed, Config.Zones.ShopEntering2.Pos.x, Config.Zones.ShopEntering2.Pos.y, Config.Zones.ShopEntering2.Pos.z) --Si oui on le téléporte en retour au deuxième shop
else
   SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos.x, Config.Zones.ShopEntering.Pos.y, Config.Zones.ShopEntering.Pos.z) -- Si non, on le téléporte à la position du premier shop
end

j'ai peut etre fais une erreur 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

L'encodage de ton fichier est bien en UTF-8 ?

Il semble y avoir des caractères spéciaux non reconnus :

image.png

image.png

 

Je te renvoi par ici pour en être sur :

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Je l'ai bien save en UTF-8 ^^ image.thumb.png.9fc17441f8c184201071d19be459625c.png

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Essai de ré-écrire "à la main" les deux zones que j'ai screenshot (tu retires 2-3 carac. avant et tu retape la partie)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo
Posté(e) (modifié)

Et beh je viens de le faire , sauf que problème , cela fais encore comme avant  j'achete un vehicule dans le BUREAU 1 ca me met dans le bureau 2 ^^' ^^' 

Modifié par MrTheo

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Aaaah, my bad, j'avais mal compris où ça coinçait, il faut modifié de la même manière que précédemment aux alentours de la ligne 405, dans ce bloc :
 

end, function (data, menu)
		local vehicleData = vehiclesByCategory[data.current.name][data.current.value + 1]
		local playerPed   = PlayerPedId()

		DeleteShopInsideVehicles()
		WaitForVehicleToLoad(vehicleData.model)

		ESX.Game.SpawnLocalVehicle(vehicleData.model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function (vehicle)
			table.insert(LastVehicles, vehicle)
			TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
			FreezeEntityPosition(vehicle, true)
		end)
	end)

	DeleteShopInsideVehicles()
	WaitForVehicleToLoad(firstVehicleData.model)

	ESX.Game.SpawnLocalVehicle(firstVehicleData.model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function (vehicle)
		table.insert(LastVehicles, vehicle)
		TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
		FreezeEntityPosition(vehicle, true)
	end)

 

Il faut ajouter une condition avant ESX.GameSpawnLocalVehicle ce qui devrait ressembler à ceci :

 

end, function (data, menu)
		local vehicleData = vehiclesByCategory[data.current.name][data.current.value + 1]
		local playerPed   = PlayerPedId()

		DeleteShopInsideVehicles()
		WaitForVehicleToLoad(vehicleData.model)

        if LastZone == Config.zone.ShopEntering then --On vérifie dans quelle zone il est, si il est dans la zone1
		-- On spawn le véhicule dans la zone1 et on le tp à l'intérieur
            ESX.Game.SpawnLocalVehicle(vehicleData.model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function (vehicle)
                table.insert(LastVehicles, vehicle)
                TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
                FreezeEntityPosition(vehicle, true)
            end)
        else
  --Sinon, on spawn le véhicule à la zone2 et on le tp dedans
            ESX.Game.SpawnLocalVehicle(firstVehicleData.model, Config.Zones.ShopInside2.Pos, Config.Zones.ShopInside2.Heading, function (vehicle)
                table.insert(LastVehicles, vehicle)
                TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
                FreezeEntityPosition(vehicle, true)
            end)
        end
end)

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Je vais essayé mais c'est pas le vehicule que je veux TP a une autre zone , c'est mon personnage en fait j'achete un véhicule ca m'enleve du menu ca me met dans le vehicule , et ensuite quand il est acheter ca me retp dans l'autre bureau

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Au début de cette fonction il y a ce TP :

function OpenShopMenu()

 

Il faut également ajouter la première condition que je t'ai donné

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Wow je suis perdu la xD tellement de trucs , je vais essayé de comprendre tout

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Partout là ou tu créer le véhicule et téléporte le joueur dedans, tu dois y ajouter la condition que je t'ai donné plus haut, pour le fait que ton personne est téléporté au "bureau1" c'est dans la fonction function OpenShopMenu() au tout début tu as SetEntityCoords, il faut mettre la première condition que je t'ai donné

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Ok merci je vais regardé ca ;)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

image.thumb.png.9f6b9233465d121d249af82cdee75a32.pngMais genre je peux pas mettre comme ca ? Ca va me faire une erreur je sent 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Puis la je viens de reprint , et ya un truc que je comprend pas , quand je rentre pour acheter les vehicules ca me print le ShopEntering2 alors que je suis dans le bureua 1 xD

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

A chaque fois que tu rentres dedans ? Ou uniquement la première foi s?

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

a chaque fois

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Mais du coup ca me fais comme avant j'achete un vehicule dnas le 1 et ca me tp dans le 2 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Kanda Sorata

Tu dois remplacer la variable Config.Zones etc de ta condition par les résultats de tes print correspondant à x zone

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
MrTheo

Ok je vais testé ca ^^

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

En utilisant ce site, vous acceptez les présents règlements Conditions d’utilisation, Politique de confidentialité,Règles.