LawrenceKnight Posted February 11, 2015 Share Posted February 11, 2015 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 Citizen Posted February 13, 2015 Moderators Share Posted February 13, 2015 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
LawrenceKnight Posted February 14, 2015 Author Share Posted February 14, 2015 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 Citizen Posted February 14, 2015 Moderators Share Posted February 14, 2015 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
LawrenceKnight Posted February 14, 2015 Author Share Posted February 14, 2015 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
LawrenceKnight Posted February 15, 2015 Author Share Posted February 15, 2015 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 Citizen Posted February 15, 2015 Moderators Share Posted February 15, 2015 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
LawrenceKnight Posted February 15, 2015 Author Share Posted February 15, 2015 Super, ça fonctionne Maintenant pour le login panel voici le lien: https://community.multitheftauto.com/in ... ls&id=3722 Link to comment
#MostafaSaadi Posted February 15, 2015 Share Posted February 15, 2015 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 Link to comment
LawrenceKnight Posted February 15, 2015 Author Share Posted February 15, 2015 +1 pour ? lol Link to comment
Moderators Citizen Posted February 15, 2015 Moderators Share Posted February 15, 2015 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
LawrenceKnight Posted February 16, 2015 Author Share Posted February 16, 2015 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 Citizen Posted February 16, 2015 Moderators Share Posted February 16, 2015 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
LawrenceKnight Posted February 16, 2015 Author Share Posted February 16, 2015 voici le lien: https://community.multitheftauto.com/in ... ls&id=9601 Par contre il est préciser (dans la description du script) que ce panel est basé sur un script de weapons shop, donc pas trop s'étonner des images d'armes qui sont rester dedans ^^ Link to comment
Moderators Citizen Posted February 16, 2015 Moderators Share Posted February 16, 2015 Et bim qu'est-ce que j'avais dit ? des boutons ... 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
LawrenceKnight Posted February 16, 2015 Author Share Posted February 16, 2015 Je viens de tester à plusieurs reprise et tout fonctionne correctement, aucun soucis, merci beaucoup Link to comment
Moderators Citizen Posted February 17, 2015 Moderators Share Posted February 17, 2015 Pas de soucis Link to comment
LawrenceKnight Posted February 17, 2015 Author Share Posted February 17, 2015 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 Citizen Posted February 19, 2015 Moderators Share Posted February 19, 2015 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
LawrenceKnight Posted February 19, 2015 Author Share Posted February 19, 2015 Ah j'ai zapper une ligne alors oui Merci je vais faire ça, mais j'ai pris l'habitude quand même lol Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now