Jump to content

Quelques petits soucis...


Recommended Posts

Bonjour/Bonsoir, donc me revoici avec quelques petits soucis...

Le 1er, c'est que n'étant pas scripteur (mais sais tout de même arranger quelques soucis sois même hormis ceux là), j'aimerais savoir que faudrait t-il rajouter et ou faudrait t-il ajouter le "morceau" de script qui permet aux joueurs de récupérer leur skins (auquel ils auront acheter) une fois respawn après avoir était tuer. Je précise que j'utilise le gamemode Play (j'ai également modifier le Freeroam en enlevant les Blips, le panel qui permet de se procurer des skin, vehicules etc... puisque je fait un serveur Resident Evil) et donc tout les joueurs, qu'ils aient acheter des skins ou non, ne les récupéreront pas mais reviendront au spawn avec le skin de base, l'ID 242 (que j'ai moi même choisi)...

function spawn(player) 
    if not isElement(player) then return end 
    if get("spawnreset") == "onSpawn" then 
        spawnpoint = getRandomSpawnPoint() 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) 
    repeat until setElementModel(player, 242) 
    fadeCamera(player, true) 
    setCameraTarget(player, player) 
    showChat(player, true) 
end 

Le second, c'est que j'ai quelques script qui ont des "bad argument", j'en montre un exemple:

addEventHandler("onBotWasted", getRootElement) 

le "bad argument" est: " addEventHandler" (viens du fichier "bosss.lua" du script "nemesisboss")

Comment arranger ce genre de soucis facilement moi même sans venir demander aux scripteur de me le faire? :/

Link to comment
  • Moderators
Bonjour/Bonsoir, donc me revoici avec quelques petits soucis...

Le 1er, c'est que n'étant pas scripteur (mais sais tout de même arranger quelques soucis sois même hormis ceux là), j'aimerais savoir que faudrait t-il rajouter et ou faudrait t-il ajouter le "morceau" de script qui permet aux joueurs de récupérer leur skins (auquel ils auront acheter) une fois respawn après avoir était tuer. Je précise que j'utilise le gamemode Play (j'ai également modifier le Freeroam en enlevant les Blips, le panel qui permet de se procurer des skin, vehicules etc... puisque je fait un serveur Resident Evil) et donc tout les joueurs, qu'ils aient acheter des skins ou non, ne les récupéreront pas mais reviendront au spawn avec le skin de base, l'ID 242 (que j'ai moi même choisi)...

function spawn(player) 
    if not isElement(player) then return end 
    if get("spawnreset") == "onSpawn" then 
        spawnpoint = getRandomSpawnPoint() 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) 
    repeat until setElementModel(player, 242) 
    fadeCamera(player, true) 
    setCameraTarget(player, player) 
    showChat(player, true) 
end 

L'achat de skin est-il déjà fonctionnel ? si oui, enregistres-tu cette donnée dans une base de donnée (les account datas ou mysql) ?

Parce que toutes les données que tu ne sauvegardes pas dans une base de donnée sera obligatoirement perdu après un redémarrage du serveur.

Pour déterminer la façon la plus simple de rajouter cette fonctionnalité, il me faudrait le register et le login (en enlevant les données sensibles du style login/mdp dans le cas d'une base de donnée en MySQL).

Le second, c'est que j'ai quelques script qui ont des "bad argument", j'en montre un exemple:
addEventHandler("onBotWasted", getRootElement) 

le "bad argument" est: " addEventHandler" (viens du fichier "bosss.lua" du script "nemesisboss")

Comment arranger ce genre de soucis facilement moi même sans venir demander aux scripteur de me le faire? :/

Bah là c'est parce que la fonction addEventHandler nécessite 3 arguments et qu'on ne lui en donne que deux à savoir "onBotWasted" et getRootElement. (d'ailleurs c'est getRootElement() et non pas getRootElement).

Les 3 arguments dont il a besoin sont:

1 - le nom de l'évenement (ici "onPedWasted")

2 - une sorte de filtre pour dire quel(s) élément(s) peuvent être à l'origine de cet événement (getRootElement() retourne l'élément racine de tous les éléments du jeu, donc ça veut dire tous les éléments peuvent en être à l'origine. En gros c'est pas filtré vu qu'on accepte tout).

3 - la fonction à exécuter lorsque cet événement est déclenché. (Donc là faut lui donner le nom de la fonction qui doit faire des choses lorsqu'un bot meurt). Si tu as décidé de supprimer la fonction, il faut aussi supprimer la ligne du addEventHandler.

Voilà j'attends ton retour.

Cordialement,

Citizen

Link to comment

Salut Citizen,

Pour le Skin Shop, je viens de fouiller les fichiers Lua et rien ne parle de Mysql, et je ne vois pas non plus de "getAccountData" ou autre :/

Edit: J'ai aussi un autre soucis:

local spawnpoint 
  
addEventHandler("onResourceStart", resourceRoot, 
    function() 
        spawnpoint = getRandomSpawnPoint() 
        resetMapInfo() 
        for i,player in ipairs(getElementsByType("player")) do 
            spawn(player) 
        end 
    end 
) 
  
function spawn(player) 
    if not isElement(player) then return end 
    if get("spawnreset") == "onSpawn" then 
        spawnpoint = getRandomSpawnPoint() 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) 
    repeat until setElementModel(player, 242) 
    fadeCamera(player, true) 
    setCameraTarget(player, player) 
    showChat(player, true) 
end 
  
function getRandomSpawnPoint () 
    local spawnpoints = getElementsByType("spawnpoint") 
    return spawnpoints[math.random(1,#spawnpoints)] 
end 
  
addEventHandler("onPlayerJoin", root, 
    function() 
        spawn(source) 
    end 
) 
  
addEventHandler("onPlayerQuit",root, 
    function () 
        if getPlayerCount() == 1 and get("spawnreset") == "onServerEmpty" then 
            spawnpoint = getRandomSpawnPoint() 
        end 
    end 
) 
  
addEventHandler("onPlayerWasted", root, 
    function() 
        setTimer(spawn, 1800, 1, source) 
    end 
) 

Voici le Broph.lua, et voici ce que j'ai dans Broph.map (que je vais tout de même placer entre crochets "lua":

    "Parabole" interior="0" dimension="0" posX="-365.353" posY="1583.281" posZ="76.357" rotX="0" rotY="0" rotZ="135" /> 
    "area51" interior="0" dimension="0" posX="217.409" posY="1857.780" posZ="13.140625" rotX="0" rotY="0" rotZ="90" /> 

Le soucis c'est qu'en fait, le joueur spawnera toujours au même ID hormis les deux possibilité... Par exemple si il spawn a la base 51 et qu'il meurt plus tard, il reviendra toujours à ce spawnpoint... J'ai fouiller et rien trouver à ce soucis, j'aimerais que tout joueur qui meurt, respawn au hasard sur la map avec mes propres coordonnées. :(

Link to comment
  • Moderators
Pour le Skin Shop, je viens de fouiller les fichiers Lua et rien ne parle de Mysql, et je ne vois pas non plus de "getAccountData" ou autre :/

Oui donc justement, il faut que tu enregistres ça quelque part. Mais il faut que je sache comment les joueurs s'enregistrent et se connectent sur ton serveur, enfin ce qu'utilise ton système de compte (mysql ou account data ?).

ça sert à rien que je te propose du code utilisant les account data si tout fonctionne en MySQL ou SQLite et inversement.

Pour ton autre problème, déjà évite de mélanger plein de problèmes dans le même topic surtout lorsque le 1er n'est même pas encore résolu !

Fais en un autre pour le prochain pour éviter de perdre le fil.

Ton problème est que, dans ta meta.xml, tu dois mettre la valeur de spawnreset à "onSpawn".

Comment je le sais ? C'est écrit dans le code:

function spawn(player) 
    [...] 
    if get("spawnreset") == "onSpawn" then -- là !  
        spawnpoint = getRandomSpawnPoint() -- Définit un nouveau spawnpoint 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) -- fait spawn sur  
    [...] 
end 

Lorsque le serveur demande à faire spawn le joueur en appelant cette fonction, on "get" un "random spawn point" que si la valeur de du setting "spawnreset" vaut "onSpawn".

Y avait vraiment rien de compliqué et normalement il devait y avoir un petit readme quand même ou des commentaires dans la meta.xml qui devait expliquer ça.

Les différentes valeurs possibles du setting "spawnreset":

- "onSpawn": Définira un nouveau spawnpoint à chaque fois que quelqu'un voudra spawn.

- "onServerEmpty": Définira un nouveau spawnpoint lorsque le dernier joueur sur le serveur quitte ce serveur (quand on passe de 1 à 0 joueur sur le serveur).

Je suppose donc que dans ta meta.xml ce setting est sur "onServerEmpty" au lieu de "onSpawn"

Cordialement,

Citizen

Link to comment

J'ai biens ris pour le "Là ! XD" lol mais heureusement j'ai préciser que j'étais pas scripteur ^^' (j'essaye d'en apprendre plus au fur et à mesure pour arranger mes soucis tout seul, j'ai cependant arranger les Bad Arguments)

Et oui en ce qui concerne les problèmes mais je voulais éviter de refaire un topic chaques jours ^^

Merci de ton aide, je vais essayer ça tantôt et dire quoi pour les données :)

Link to comment

Me revoilà ^^

Donc j'ai fouiller 2 meta en fait, celui du spawnmanager et j'ai trouver que ça dedans:

    

et celui du gamemode qui est pour base "Play" (la ressource map est en fait le freeroam modifier par moi même^^):

    "Broph" type="script" /> 
    resource="map" /> 
    resource="spawnmanager" /> 
     
    "broph.map" /> 
    

et je n'ai pas trouver la valeur à remplacer :-( (ou alors je suis si idiot que ça?)

En ce qui concerne les joueurs pouvant s'enregistrer, j'ai un login panel, et je pense qu'il utilise les accounts datas d'après ce que je vois:

-- Generate the XML file name 
function getServerName() 
    triggerServerEvent("onClientLoginLoaded",getLocalPlayer()) 
end 
addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),getServerName) 
  
function setXmlFileName(sName) 
    xmlFileName = tostring("login_"..sName..".xml") 
    loginPanel() 
end 
addEvent("onGetServerData",true) 
addEventHandler("onGetServerData",getRootElement(),setXmlFileName) 

Link to comment
  • Moderators

Il n'y avait qu'une meta à inspecter, c'était celle de la ressource de broph.lua et effectivement il n'y a pas la section des settings.

A toi de la rajouter:

<meta> 
    <info author="Broph" type="script" /> 
    <include resource="map" /> 
    <include resource="spawnmanager" /> 
    
    <map src="broph.map" /> 
    <script src="broph.lua"/> 
     
    <settings> 
        <setting name="spawnreset" value="onSpawn" /> 
    </settings> 
</meta> 

j'ai un login panel, et je pense qu'il utilise les accounts datas d'après ce que je vois

Heuu non je vois juste un vulgaire fichier xml mais on est dans du client-side donc j'espère que c'est juste pour l'auto-login et que genre y a pas les logins passwords de tous les joueurs dedans oO.

Y a moyen d'avoir un lien vers ce login panel stp ? J'ai besoin de l'inspecter d'un peu plus près.

Link to comment
Il n'y avait qu'une meta à inspecter, c'était celle de la ressource de broph.lua et effectivement il n'y a pas la section des settings.

A toi de la rajouter:

<meta> 
    <info author="Broph" type="script" /> 
    <include resource="map" /> 
    <include resource="spawnmanager" /> 
    
    <map src="broph.map" /> 
    <script src="broph.lua"/> 
     
    <settings> 
        <setting name="spawnreset" value="onSpawn" /> 
    </settings> 
</meta> 

j'ai un login panel, et je pense qu'il utilise les accounts datas d'après ce que je vois

Heuu non je vois juste un vulgaire fichier xml mais on est dans du client-side donc j'espère que c'est juste pour l'auto-login et que genre y a pas les logins passwords de tous les joueurs dedans oO.

Y a moyen d'avoir un lien vers ce login panel stp ? J'ai besoin de l'inspecter d'un peu plus près.

+1 :D

Link to comment
  • Moderators

Bon j'ai regardé de plus près et c'est effectivement pour l'auto-login (/enableauto et /disableauto).

En regardant du côté serveur, on constate qu'il utilise bien les accounts de base:

function registerPlayer(username,password,passwordConfirm) 
                [...] 
                if password == passwordConfirm then 
                    local account = getAccount (username,password) 
                    if (account == false) then 
                        local accountAdded = addAccount(tostring(username),tostring(password)) 
                        if (accountAdded) then 
                            triggerClientEvent(source,"hideRegisterWindow",getRootElement()) 
                            [...] 
end 

Ducoup il te faut faire 2 choses très simples:

1 - Modifier ton skin shop pour rajouter ces 2 lignes dans la fonction d'achat:

local account = getPlayerAccount() -- on récup l'account du joueur 
setAccountData(account, "shop.skin", ) -- on save l'id du skin dans son compte sous le nom "shop.skin" 

En remplaçant:

- par la variable qui contient le joueur achetant le skin.

- par la variable qui contient l'id du skin.

Pour t'aider à déterminer le nom des deux variables, tu dois sûrement trouver un:

setElementModel(toto, blabla) 

Bah tu remplaceras par toto et par blabla.

2 - Modifier la fonction spawn dans broph.lua:

function spawn(player) 
    if not isElement(player) then return end 
    if get("spawnreset") == "onSpawn" then 
        spawnpoint = getRandomSpawnPoint() 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) 
    local account = getPlayerAccount(player) -- on récup l'account du joueur 
    local skin = getAccountData(account, "shop.skin") or 242 -- on récup la valeur pour "shop.skin" dans son compte, si y a pas, ça sera le 242 
    repeat until setElementModel(player, skin) 
    fadeCamera(player, true) 
    setCameraTarget(player, player) 
    showChat(player, true) 
end 

Par contre tes 2 ressources doivent être dans le groupe Admin dans l'ACL pour être autorisées à manipuler les accounts:

<acl> 
    [...] 
    <group name="Admin"> 
        <acl name="Moderator"></acl> 
        <acl name="SuperModerator"></acl> 
        [...] 
        <object name="resource.Play"></object> 
        <object name="resource.nomDeLaRessourceSkinShop"></object> 
    </group> 
    [...] 
</acl> 

Et GaMeR60p, mis à part le fait que je n'ai pas compris l'utilité de ton intervention ni la raison de ton +1, je te conseil de changer d'avatar car c'est l'avatar d'un gros modérateur ici: 50p

Link to comment

Je viens de regarder et en fait je doute un peu, je ne trouve même pas un seul "setElementModel" que ce sois dans le server.lua ou client.lua, mais je pense que ça doit être ça à la place:

addEvent("1",true)  
addEventHandler("1",root,  
function() 
    if ( getPlayerMoney (source) >= 250 ) then 
    takePlayerMoney(source, 250) 
    setPedSkin ( source, 106 ) 
end 
end) 

Je crois que c'est ça?

Link to comment
  • Moderators

Heuuu oui je pense que c'est ça, il utilise setPedSkin qui est une vielle fonction qui est maintenant en "deprecated", ça veut dire que pour l'instant elle existe encore pour que les scripts qui l'utilisent fonctionne toujours mais elle peut/va être supprimée dans une prochaine version de MTA.

Ce que je trouve bizarre par contre c'est que genre l'id du skin est écrit en dur, genre c'est pas une variable qui change selon ce que le joueur à choisis comme skin.

Tu pourrais me filer le lien vers ce skin shop ? on dirait que c'est genre 1 bouton pour 1 skin ou un truc similaire.

Link to comment
  • Moderators

Et bim qu'est-ce que j'avais dit ? des boutons ... :roll:

Le problème avec ce skin shop c'est que tu pourras jamais mettre à dispo un grand nombre de skin.

Là par exemple, y en a que 26 mais si ça te convient, garde celui là.

Donc tu dois mettre ça:

local account = getPlayerAccount(source) 
setAccountData(account, "shop.skin", ) 

après chaque setPedSkin en remplaçant par celui du setPedSkin qui correspond.

J'attends ton retour.

Cordialement,

Citizen

Link to comment

Coucou c'est encore moi lol

En fait juste un petit détail que je viens d’apercevoir ^^, lorsque le joueur veut acheter un skin et qu'il n'à pas l'argent suffisant (j'ai mis 5 000 dollars le skin) il ne l’auras donc pas, mais si le joueur meurt, il spawn avec le skin qui n'a justement pas pû acheter :-( (il l'a gratuit en gros ^^')

Edit: Autant pour moi, j'ai mis:

addEvent("26",true)  
addEventHandler("26",root,  
function() 
local account = getPlayerAccount(source) 
setAccountData(account, "SkinShop", 47) 
    if ( getPlayerMoney (source) >= 5000 ) then 
    takePlayerMoney(source, 5000) 
    setPedSkin ( source, 47 ) 
end 
end) 

Au lieu de:

addEvent("26",true)  
addEventHandler("26",root,  
function() 
    if ( getPlayerMoney (source) >= 5000 ) then 
    takePlayerMoney(source, 5000) 
    setPedSkin ( source, 47 ) 
local account = getPlayerAccount(source) 
setAccountData(account, "SkinShop", 47) 
end 
end) 

^^'

Link to comment
  • Moderators

Heureusement que j'avais dit de le mettre après chaque setPedSkin hein !

Donc tu dois mettre ça:
local account = getPlayerAccount(source) 
setAccountData(account, "shop.skin", ) 

après chaque setPedSkin en remplaçant par celui du setPedSkin qui correspond.

Mais au moins t'as réussi à corriger ton erreur sans mon intervention.

Par contre respecte l'indentation ! (l'espacement du code par rapport à la marge de gauche):

addEvent("26",true) 
addEventHandler("26",root, 
function() 
    if ( getPlayerMoney (source) >= 5000 ) then 
    takePlayerMoney(source, 5000) 
    setPedSkin ( source, 47 ) 
local account = getPlayerAccount(source) 
setAccountData(account, "SkinShop", 47) 
end 
end) 

doit être

addEvent("26",true) 
addEventHandler("26", root, 
function() 
    if ( getPlayerMoney (source) >= 5000 ) then 
        takePlayerMoney(source, 5000) 
        setPedSkin ( source, 47 ) 
        local account = getPlayerAccount(source) 
        setAccountData(account, "SkinShop", 47) 
    end 
end) 

C'est plus facile à lire et ça fait moins noob :)

Cordialement,

Citizen

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...