Jump to content

Problème visibilité markers/blips


Recommended Posts

Bonsoir à tous,

Oui c'est encore moi, avec un petit problème....

En fait, je souhaite tout bêtement créer des blips pour chaque joueurs, mais visibles seulement par les coéquipiers (team).

Les teams sont bien créées.

J'ai fais un test en créant un bot à côté du joueur :

local x, y, z = getElementPosition(player) 
x = x + 5 
local pedid = createPed(0, x, y, z) 

Ensuite je créé le blip et l'attache sur le bot :

local r, v, b = getTeamColor(getPlayerTeam(player)) 
local blip = createBlipAttachedTo(pedid, 0, 2, r, v, b) 

Jusque là, tout va bien, le blip est affiché pour tout le monde, avec la couleur de la team du joueur.

Et là, j'ai testé pas mal de méthodes pour ne l'afficher que pour une team.

En modifiant la création du blip :

local _team = getPlayerTeam(player) 
local r, v, b = getTeamColor(_team) 
local blip = createBlipAttachedTo(pedid, 0, 2, r, v, b, 255, 0, 65535, _team) 

Cela n'affiche plus le blip.

Et pareil avec la fonction setElementVisibleTo, et un marker au lieu d'un blip (testé pour les deux) :

local x, y, z = getElementPosition(player) 
x = x + 5 
myMarker = createMarker ( x, y, z ) 
setElementVisibleTo(myMarker, getRootElement(), false) 
setElementVisibleTo(myMarker, getPlayerTeam(player), true) 

Code repris du wiki, qui ne fonctionne pas pour moi :/

Ne fonctionne pas non plus en retirant la ligne :

setElementVisibleTo(myMarker, getRootElement(), false) 

Franchement, je ne sais plus quoi faire...

Link to comment

ok, j'ai pas beaucoup de temps donc je te met sur la piste, si j'ai le temps je te ferai ça demain.

Sinon voila comment je procederai :

voila essaye de la sorte :

local taTeam =  createTeam("Team verte") 

  
        if getPlayerTeam(source) == taTeam then 
            local players = getPlayersInTeam(taTeam) 
            for i, player in ipairs(players) do 
                blip = createBlipAttachedTo(player, 0, 2, 0, 255, 0) 
                setElementVisibleTo(blip, player, true) 
            end 
        end 
  

Tiens moi au jus ;)

Link to comment

J'y avais pensé justement, mais ça voudrait dire qu'à chaque connexion de joueur, il faudra parcourir tous les joueurs de la team et mettre à jour les blips...

Enfin si les fonctions ne sont pas complètement fonctionnelles, il va bien falloir.

Mais si j'ai bien compris ton code, et qu'il y'a bien une erreur sur la ligne :

setElementVisibleTo(blip, player, true) 

et que la bonne réponse est :

setElementVisibleTo(blip, source, true) 

Cela voudrait dire que chaque joueur a autant de blips que de joueurs dans la team ?

Après, pour les détruire, j'ai déjà ce bout de code :

for _, v in ipairs (getAttachedElements(source)) do 
    destroyElement(v); 
end 

Donc oui, pourquoi pas, je testerais ça demain.

Mais logiquement, la fonction setElementVisibleTo doit pouvoir prendre en paramètre un élement Team et diffuser l'effet à ses "enfants", donc les joueurs de la team... Bizarre non ?

Link to comment

Salut salut,

Mon bout de code était bon mais j'ai réfléchit au probleme avec un amis et on a trouvé un meilleur moyen que voici :

COTE CLIENT

Si tu veux que le blip soit également visible sur toi :

local playerBlip = {} 
  
function displayPlayerBlip() 
    local players = getElementsByType("player") 
    for i, player in ipairs(players) do 
        if getPlayerTeam(getLocalPlayer()) == getPlayerTeam(player) then 
            if not isElement(playerBlip[player]) then 
                playerBlip[player] = createBlipAttachedTo(player, 0, 2, 0, 255, 0) 
            end 
        elseif isElement(playerBlip[player]) then -- Destruction du blip si un joueur change de team 
            destroyElement(playerBlip[player]) 
            playerBlip[player] = nil 
        end 
    end 
    for player, blip in ipairs(playerBlip) do -- Destruction des blip des joueurs qui quittent la partie 
        if not isElement(player) then 
            destroyElement(blip) 
            playerBlip[player] = nil 
        end 
    end 
end 
addEventHandler("onClientRender", getRootElement(), displayPlayerBlip) 

Si tu veux qu'il n'y ai pas de blip sur toi mais que les autres de ton équipe te vois tout de même :

COTE CLIENT

local playerBlip = {} 
  
function displayPlayerBlip() 
    local players = getElementsByType("player") 
    for i, player in ipairs(players) do 
        if player ~= getLocalPlayer() and getPlayerTeam(getLocalPlayer()) == getPlayerTeam(player) then 
            if not isElement(playerBlip[player]) then 
                playerBlip[player] = createBlipAttachedTo(player, 0, 2, 0, 255, 0) 
            end 
        elseif isElement(playerBlip[player]) then -- Destruction du blip si un joueur change de team 
            destroyElement(playerBlip[player]) 
            playerBlip[player] = nil 
        end 
    end 
    for player, blip in ipairs(playerBlip) do -- Destruction des blip des joueurs qui quittent la partie 
        if not isElement(player) then 
            destroyElement(blip) 
            playerBlip[player] = nil 
        end 
    end 
end 
addEventHandler("onClientRender", getRootElement(), displayPlayerBlip) 

Voila voila, testé et fonctionnel ;)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...