naotriix Posted November 9, 2014 Share Posted November 9, 2014 Salut, j'ai un soucis avec mon userpanel, dans mon userpanel je peux acheter plusieurs maps a la fois et ils s'ajoutent dans le map queue, malheureusement quand nous faisons un /vr pour restart la map, la map qui suis dans le map queue se supprime et laisse place a la map qui est redo. J'aimerais donc modifié cela pour pouvoir acheté seulement une map a la fois puis quand la map est passé pouvoir en racheté une autre. -- Buy a next map function buyMap(thePlayer,mapName,command) local account = getPlayerAccount(thePlayer) if not (isGuestAccount(account)) then local playerCash = tonumber(getAccountData(account,"cash")) if not (mapName == "") then if playerCash >= mapCost then if command then mapName = getMapName(mapName) else mapName = tostring(mapName) end if not mapTimer[mapName] then table.insert(mapQueue,mapName) local freeMaps = tonumber(getAccountData(account,"freeMaps")) if freeMaps ~= 0 then addStat(account,"freeMaps",-1) else setAccountData(account,"cash",playerCash - mapCost) end addStat(account,"buyedMaps",1) scoreboardRefresh(thePlayer) mapTimer[mapName] = true setTimer(resetMapTimer,1500000,1,mapName) if #mapQueue == 1 then triggerEvent("onUseranelWantSetMap",getRootElement(),mapQueue[1]) end callClientFunction(thePlayer,"setFreeMapPurchase",getAccountData(account,"freeMaps")) unlockAchievement(thePlayer,18) unlockAchievement(thePlayer) outputChatBox("#0099CCNext: #FFFFFF"..getPlayerNametagText(thePlayer).." #FFFFFFbought map "..tostring(mapName).."",getRootElement(),255,255,255,true) callClientFunction(getRootElement(),"updateMapQueueList",mapQueue) else showServerMsg(thePlayer,"Buy nextmap","#FFFFFFYou can't set this map now, wait some time to set!") end else showServerMsg(thePlayer,"Buy nextmap","#FFFFFFYou don't have enough money to set a map!") end else showServerMsg(thePlayer,"Buy nextmap","#FFFFFFPlease select a map from the list first!") end end end Et ma petite question a part, je possède un multigamemode, mais il me manque un fichier qui permet de load les maps, le scripteur ma dit qu'il s'agissait d'un map loader en php, si quelqu'un serait apte a m'aidé sur ce sujet. Et j'ai aussi une question par rapport au downlaod des maps sur un serveur, certains serveurs ou l'on a pas besoin de re dl la musique a chaque fois ce qui acclère le temps de téléchargement de tout les maps. Cordialement Link to comment
Moderators Citizen Posted November 10, 2014 Moderators Share Posted November 10, 2014 J'aimerais donc modifié cela pour pouvoir acheté seulement une map a la fois puis quand la map est passé pouvoir en racheté une autre. Nan c'est débile, pourquoi pas faire plus simple et juste corriger ce bug qui vient de la commande /vr ??? C'est débile parce que si tu fais ça, c'est le plus rapide qui aura le droit d'acheter une map. Autant te dire que ça frustrera pas mal de joueur s'ils sont à chaque fois trop lent. Montre moi la commande /vr. Est-ce que c'est un vote ? (on dirai vu que vr veut sûrement dire vote restart). Si c'est un vote je veux également la partie (qui doit sûrement ce trouver dans une autre fonction) qui se charge de valider le vote et qui se charge également de rajouter la map à la map queue. Cette partie là doit sûrement faire mapQueue[1] = mapName ce qui change la valeur de la là 1ère ligne du tableau par la valeur de mapName et donc remplace la map qui devait suivre. Il faudrait plutôt faire comme ceci: table.insert(mapQueue, mapName, 1) le 3ème argument qui est optionnel précise là position à laquelle elle doit être insérée (ici en 1ère position). Et après ça le vr fonctionnera sans problème. Et ma petite question a part, je possède un multigamemode, mais il me manque un fichier qui permet de load les maps, le scripteur ma dit qu'il s'agissait d'un map loader en php, si quelqu'un serait apte a m'aidé sur ce sujet. Tu aurais dû faire un autre topic pour ça. Mais personne ici ne va travailler pour toi gratuitement (le travail étant de coder un map loader en php et qui doit être compatible avec "ton" multigamemode). Et j'ai aussi une question par rapport au downlaod des maps sur un serveur, certains serveurs ou l'on a pas besoin de re dl la musique a chaque fois ce qui acclère le temps de téléchargement de tout les maps. Idem, un autre topic normalement car rien à voir avec le titre de ce dernier. Et heuuu je vois pas de question dans cette phrase. Comment ils font ? Bah tout simplement en évitant de mettre un nom de map déjà connu (sur d'autre serveurs). Une map étant une ressource (normalement, mais vu que y a un loader php, je pense que ce n'est pas le cas), elle possède un nom. Lorsqu'un joueur charge cette map pour la 1ère fois, il télécharge cette ressource (qui contient les scripts clients, les sons, les images etc) et le stock dans le dossier de cache de MTA. Si le joueur va sur un autre serveur qui lui fait télécharger une ressource qui porte le même nom que ta ressource (la map en question) qui n'est exactement la même, MTA va donc télécharger cette ressource en remplaçant ta map qui était stockée dans le cache de son jeu. Ce qui fait que s'il revient sur ton serveur, et que cette map revient, ça va encore ! la télécharger. En gros faudrait prefixer toutes tes ressources par 2 ou 3 lettres qui représente ton serveur. Genre si ton serveur s'appel "My Awesome Server" tu préfixes toutes tes ressources par "mas_" comme ça si une map s'appelle "hunterrace", tu la renommes en "mas_hunterrace". Avec ce prefix tu peux être sûr que tes joueurs ne téléchargera tes ressources qu'une seule fois. Cordialement, Citizen Link to comment
naotriix Posted November 10, 2014 Author Share Posted November 10, 2014 Salut, merci pour ta reponse rapide, Voila mon voteredo: --- VR --- local playersVoted = 0 local sistaredando = 0 function Votaredo(thePlayer) local currentMap = exports.mapmanager:getRunningGamemodeMap() local mapName = getMapName(currentMap) if getElementData( thePlayer, "havotato" ) == false then if not redo[mapName] then if sistaredando == 0 then playersVoted = playersVoted + 1 outputChatBox("[VR] "..getPlayerName(thePlayer).." #FFFFFFvoted for a redo. ["..playersVoted.."/".. math.floor(getPlayerCount() /2 + 0.5) .."]",getRootElement(),0,136,255, true) setElementData( thePlayer, "havotato", true) if playersVoted >= math.floor(getPlayerCount() /2 + 0.5) then redo[mapName] = setTimer(function(mapName) redo[mapName] = false end,900000,1,mapName) outputChatBox ("[VoteRedo] #FFFFFFThis map will be restarted by vote", thePlayer,0,136,255,true) sistaredando = 1 if #mapQueue ~= 0 then for i=#mapQueue,1 do mapQueue[i+1] = mapQueue[i] end mapQueue[1] = mapName triggerEvent("onUseranelWantSetMap",getRootElement(),mapQueue[1]) else mapQueue[1] = mapName triggerEvent("onUseranelWantSetMap",getRootElement(),mapQueue[1]) end callClientFunction(getRootElement(),"updateMapQueueList",mapQueue) end else showServerMsg(thePlayer,"Voteredo","This map will be redone.") end else showServerMsg(thePlayer,"Voteredo","This map has been already redone.") end else showServerMsg(thePlayer,"Voteredo","You already voted.") end end addCommandHandler ( "vr", Votaredo ) Et serais tu apte a me coder un map loader compatible avec mon multigamemode et pour quel somme environ. Link to comment
Moderators Citizen Posted November 13, 2014 Moderators Share Posted November 13, 2014 Envoi-moi un lien de téléchargement en PM que je regarde un peu comment ça se passe. Un php loader implique la création d'un serveur web et qui devait sûrement contenir un site web pour le serveur avec une section pour gérer les maps. Le plus simple sera sûrement de modifier la ressource pour le faire revenir à un système basique (toutes les maps sont stockées dans leur propre ressource et sont démarrer pour les charger). J'ai pas beaucoup de temps de dispo mais je vais quand même regarder pour voir combien de temps ça prendrait. EDIT: Ah oui et pour le vote redo ! ^^ Comme tu peux le voir, j'avais bien raison mais c'est bizarre que ça ne marche pas comme il faut vu qu'il a bien fait attention que ça ne remplace pas la map suivante car il fait ceci avant: for i=#mapQueue,1 do mapQueue[i+1] = mapQueue[i] end Ce qui à pour effet de décalé toutes les maps de la mapQueue d'un cran vers le bas pour libérer et remplacer sans problème la 1ère place dans cette mapQueue. En gros il a recoder ce que fait: table.insert(mapQueue, mapName, 1) Donc je reste très perplexe. Donc voilà ma version, techniquement c'est EXACTEMENT la même chose mais écrit différemment: --- VR --- local playersVoted = 0 local sistaredando = 0 function Votaredo(thePlayer) local currentMap = exports.mapmanager:getRunningGamemodeMap() local mapName = getMapName(currentMap) if getElementData( thePlayer, "havotato" ) == false then if not redo[mapName] then if sistaredando == 0 then playersVoted = playersVoted + 1 outputChatBox("[VR] "..getPlayerName(thePlayer).." #FFFFFFvoted for a redo. ["..playersVoted.."/".. math.floor(getPlayerCount() /2 + 0.5) .."]",getRootElement(),0,136,255, true) setElementData( thePlayer, "havotato", true) if playersVoted >= math.floor(getPlayerCount() /2 + 0.5) then redo[mapName] = setTimer(function(mapName) redo[mapName] = false end,900000,1,mapName) outputChatBox ("[VoteRedo] #FFFFFFThis map will be restarted by vote", thePlayer,0,136,255,true) sistaredando = 1 table.insert(mapQueue, mapName, 1) triggerEvent("onUseranelWantSetMap", getRootElement(), mapQueue[1]) callClientFunction(getRootElement(),"updateMapQueueList",mapQueue) end else showServerMsg(thePlayer,"Voteredo","This map will be redone.") end else showServerMsg(thePlayer,"Voteredo","This map has been already redone.") end else showServerMsg(thePlayer,"Voteredo","You already voted.") end end addCommandHandler ( "vr", Votaredo ) D'après ce que je lis, ça devrait très bien marché, mais ça aurait aussi dû marcher avec le code d'origine. Est-tu bien sûr que ce vote redo remplace la map qui devait venir après ? Ou n'est-ce pas en réalité un problème d'update de la liste des maps du côté client ? Pour ça vérifie bien que la map qui se lance après ne soit pas celle qui devait normalement être jouée s'il n'y avait pas eu de voteredo. Link to comment
naotriix Posted November 13, 2014 Author Share Posted November 13, 2014 Enfaite, le voteredo decale la map seulement quand il y en a que 1 dans le map queue autrement il remplace. Merci pour le code, je vais essayer pour voir, et je t'ai envoyé le lien du multigamemode en pm. Edit: la le voteredo ne fonctionne plus. Cordialement 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