Juxtheft Posted June 14, 2016 Share Posted June 14, 2016 (edited) Bonjour/Bonsoir, Voilà je vous explique mon problème, quand je créer une team, elle s'affiche je peux la rejoindre et la quitter et elle apparait bien dans le scoreboard mais quand je déconnectes ou reconnecte le compte, je ne suis plus dans la team alors que la team est toujours présente sur le scoreboard et dans le paneladmin, je ne comprends donc pas d'où ça vient ! Merci de m'éclairer sur le sujet !! Et deuxième problème j'ai le scoredrift avec multiplicateur (le jaune, pas le blanc avec les combo) l'autre celui ou il y a marqué "best drift : N/A - 0" en bas à gauche tous fonctionne dans le scoreboard les drifts s'enregistrent mais dans le "best drifft" ainsi que mon "recordsDrift.xml" rien ne se sauvegarde... Merci de m'aider sur ce bug. qui me prends la tête après plusieurs recherche et tentative je viens donc vous demander de l'aide. Script de mon scoredrift = -drift.lua --these are the banned vehicle ids where you cannot get drift points. local BannedIDs = { 432, 532 } local rootElem = getRootElement() local thisRoot = getResourceRootElement(getThisResource()) local player = getLocalPlayer() local vehicle local size = 1.2 local modo = 0.01 local score = 0 local screenScore = 0 local tick local idleTime local multTime local driftTime local Yellow = tocolor(255,232,25) local Red = tocolor(234,0,3) local TempCol = Yellow local mult = 1 local tablamult = {350,1400,4200,11200} local anterior = 0 local mejor = 0 local total = 0 local global_mejor = 0 local global_nombre = "N/A" local screenWidth, screenHeight = guiGetScreenSize() local x1,y1,x2,y2 = screenWidth*0.2,screenHeight*0.1,screenWidth*0.8,screenHeight*0.8 addEventHandler("onClientResourceStart", thisRoot, function() addEventHandler("onClientRender", rootElem, showText) outputChatBox("Recherche du record de Drift sur ce serveur...") triggerServerEvent("driftClienteListo", rootElem, player) end ) addEventHandler("onClientResourceStop", thisRoot, function() removeEventHandler("onClientRender", rootElem, showText) end ) function isValidVehicle() local temp = getPedOccupiedVehicle(player) if not temp or getVehicleOccupant(temp,0) ~= player or getVehicleType(temp) ~= "Automobile" then return false end local vehID = getElementModel(temp) for k,v in ipairs(BannedIDs) do if vehID == v then return false end end return temp end function showText() dxDrawText(string.format("Meilleur Drift : %s - %d",global_nombre,global_mejor),44,screenHeight-43,screenWidth,screenHeight,Yellow,1,"pricedown") vehicle = isValidVehicle() if not vehicle then return end if size > 1.3 then modo = -0.01 elseif size < 1.2 then modo = 0.01 end size = size + modo tick = getTickCount() local angulo,velocidad = angle() local tempBool = tick - (idleTime or 0) < 750 if not tempBool and score ~= 0 then anterior = score setElementData(player, "Petit Drift", anterior) total = total+anterior setElementData(player, "Total Drift", total) if score > mejor then mejor = score setElementData(player, "Gros Drift", mejor) end triggerEvent("onVehicleDriftEnd", rootElem, tick-driftTime-750) score = 0 end if angulo ~= 0 then if score == 0 then triggerEvent("onVehicleDriftStart", rootElem) driftTime = tick end if tempBool then score = score + math.floor(angulo*velocidad)*mult else score = math.floor(angulo*velocidad)*mult end if TempCol == Red then TempCol = Yellow end screenScore = score idleTime = tick end local temp2 = string.format("Multiplicateur : X%d\n%s",mult,mult~=5 and string.format("Gain X%d avec %d",mult+1,tablamult[mult]) or "MAX") dxDrawText(temp2, 20,155,screenWidth,screenHeight, Yellow, 1.2, "sans","left","top", false,true,false) if velocidad <= 0.3 and mult ~= 1 then dxDrawText("\n\nTrop Lent !", 20,155,screenWidth,screenHeight, Yellow, 1.2, "sans","left","top", false,true,false) end if tick - (idleTime or 0) < 3000 then local temp = "--SCORE FINAL--" if score >= 350000 then temp = "-- MONSTER KILL --\n\nMonster Drifter ! Like That YESS !" elseif score >= 100000 then temp = "-- FUCK ME --\n\nDrift King ! YES !" elseif score >= 50000 then temp = "-- BADASS --\n\nFurious Drift BABY!" elseif score >= 25000 then temp = "-- HARDCORE --\n\nEnooorme et SEC !" elseif score >= 15000 then temp = "-- YEAHHH --\n\nColossal Drift!" elseif score >= 9000 then temp = "-- MOUAI --\n\nFunny Drift !" elseif score >= 3000 then temp = "-- BOF --\n\nDrift Junior !" elseif score >= 350 then temp = "-- NOOB --\n\nBaby Drift !" end dxDrawText(temp, x1,y1,x2,y2, TempCol, 2.2, "sans","center","top", false,true,false) dxDrawText(string.format("\n%d",screenScore), x1,y1-10,x2,y2, TempCol, size, "pricedown","center","top", false,true,false) end end function angle() local vx,vy,vz = getElementVelocity(vehicle) local modV = math.sqrt(vx*vx + vy*vy) if not isVehicleOnGround(vehicle) then return 0,modV end local rx,ry,rz = getElementRotation(vehicle) local sn,cs = -math.sin(math.rad(rz)), math.cos(math.rad(rz)) local deltaT = tick - (multTime or 0) if mult~= 1 and modV <= 0.3 and deltaT > 750 then mult = mult-1 multTime = tick elseif deltaT > 1500 then local temp = 1 if score >= 11200 then temp = 5 elseif score >= 4200 then temp = 4 elseif score >= 1400 then temp = 3 elseif score >= 350 then temp = 2 end if temp>mult then mult = temp multTime = tick end end if modV <= 0.2 then return 0,modV end --speed over 40 km/h local cosX = (sn*vx + cs*vy)/modV if cosX > 0.966 or cosX < 0 then return 0,modV end --angle between 15 and 90 degrees return math.deg(math.acos(cosX))*0.5, modV end addEvent("driftCarCrashed", true) addEventHandler("driftCarCrashed", rootElem, function() if score ~= 0 then score = 0 mult = 1 TempCol = Red triggerEvent("onVehicleDriftEnd", rootElem, 0) end end ) addEvent("driftActualizarRecord", true) addEventHandler("driftActualizarRecord", rootElem, function(score, name) global_mejor = score global_nombre = name end ) function resetScore() anterior,mejor,total = 0,0,0 setElementData(player, "Petit Drift", anterior) setElementData(player, "Total Drift", total) setElementData(player, "Gros Drift", mejor) end addEvent("driftResetAllScores", true) addEventHandler("driftResetAllScores", rootElem, resetScore) addCommandHandler("resetdrift", resetScore) function checkPuntaje() if total > global_mejor then triggerServerEvent("driftNuevoRecord", rootElem, total, getPlayerName(player)) end end addEventHandler("onClientPlayerFinish", rootElem, checkPuntaje) addEventHandler("onClientPlayerOutOfTime", rootElem, checkPuntaje) -drift_server.lua local root = getRootElement() local thisResourceRoot = getResourceRootElement(getThisResource()) local drift_records = {} local drift_mejor = 0 local drift_nombre = "N/A" addEventHandler ( "onResourceStart", thisResourceRoot, function() call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Gros Drift") call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Petit Drift") call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Total Drift") executeSQLCreateTable("recordsDrift","pista TEXT, nombre TEXT, score INTEGER") addEvent("driftClienteListo", true) addEventHandler("driftClienteListo", root, function(player) triggerClientEvent(player, "driftActualizarRecord", root, drift_mejor, drift_nombre) if drift_mejor == 0 then outputChatBox("Il n'y a pas de record enregistré sur cette map", player) else outputChatBox(string.format("Le record actuelle est %d points (%s)", drift_mejor, drift_nombre), player) end end) end ) addEventHandler ( "onResourceStop", thisResourceRoot, function() call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Best Drift") call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Last Drift") call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Total Drift") end ) addEventHandler ( "onGamemodeMapStart", root, function(mapResource) local mapname = getResourceInfo(mapResource, "name") or getResourceName(mapResource) local command = string.format("pista='%s'",mapname) local record = executeSQLSelect("recordsDrift","nombre, score",command) if #record == 0 then executeSQLInsert("recordsDrift",string.format("'%s', 'N/A', 0",mapname)) drift_mejor = 0 drift_nombre = "N/A" else drift_mejor = record[1]["score"] drift_nombre = record[1]["nombre"] end triggerClientEvent(root, "driftActualizarRecord", root, drift_mejor, drift_nombre) triggerClientEvent(root, "driftResetAllScores", root) if drift_mejor == 0 then outputChatBox("Aucun record enregistrer sur cette map !") else outputChatBox(string.format("Le record actuelle est %d points (%s)", drift_mejor, drift_nombre)) end end) addEventHandler ( "onGamemodeMapStop", root, function(mapResource) local mapname = getResourceInfo(mapResource, "name") or getResourceName(mapResource) if not mapname then return end local command = string.format("pista='%s'",mapname) executeSQLUpdate("recordsDrift",string.format("nombre = '%s', score = %d", drift_nombre, drift_mejor), command) end) addEventHandler("onVehicleDamage", root, function() thePlayer = getVehicleOccupant(source, 0) if thePlayer then triggerClientEvent(thePlayer, "driftCarCrashed", root, source) end end) addEvent("driftNuevoRecord", true) addEventHandler("driftNuevoRecord", root, function(score, name) if score > drift_mejor then outputChatBox(string.format("Nouveau record de drift ! (%d points) (%s)",score,name)) drift_mejor = score drift_nombre = name triggerClientEvent(root, "driftActualizarRecord", root, drift_mejor, drift_nombre) end end) Edited June 15, 2016 by Guest Link to comment
Moderators Citizen Posted June 14, 2016 Moderators Share Posted June 14, 2016 Problème #1 je ne comprends donc pas d'où ça vient ! Bah en fait c'est le comportement normal Si tu veux faire ça, il faut le coder: 1 - Lorsque le joueur se déconnecte, tu essayes de récupérer sa team 2 - S'il en a une, tu la stock quelque part avec son nom pour être capable de récupérer la bonne team s'il se reconnecte 3 - Lorsqu'un joueur se connecte, tu récupères son nom et tu vérifies si t'as stocké une team pour ce nom là 4 - Si c'est le cas assigner la team, (sinon afficher le menu de sélection de team ?) Problème #2 Je n'ai pas trouvé de problème avec ce script mais en tout cas ça ne stock rien en xml, ça se sauvegarde dans la base de données sqlite registry.db qui se trouve dans ton dossier deathmatch. S'il y a un nouveau record de drift sur une map, il sera annoncé à la fin de la map (je sais pas si t'as bien attendu avant de dire que ça marchait pas). Sinon il me faut les erreurs serveurs ET clients car il doit sûrement y en avoir. Pour avoir les 2 types d'erreurs il te faut te login en tant qu'administrateur et taper dans ta console (F8) debugscript 3 Link to comment
Juxtheft Posted June 15, 2016 Author Share Posted June 15, 2016 Bonsoir, merci pour vos réponses mais du coup j'ai quelques questions ! J'ai essayer ça pour sauvegarder les teams : Normalement, si j'ai bien compris ce que vous m'avez dis ça devrait ressembler à ceci = function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) if not (isGuestAccount (getPlayerAccount (source))) then local accountData = getAccountData (theCurrentAccount, "team") if (accountData) then setPlayerTeam(source,accountData) end end end addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) function onQuit (quitType, reason, responsibleElement,thePreviousAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler ("onPlayerQuit", getRootElement(), onQuit) function onLogout(prevAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler("onPlayerLogout", getRootElement(), onLogout) Avec ce meta : "Jux" version="1.0" type="script" description="Sauvegarde Team Quit/logout" /> Et pour le scoredrift, je vois donc pourquoi il ne se passe rien car enfaite le script est peux être prévu pour le gamemode "race" qui est une suite de map changeante mais moi je suis en gamemode "freeroam" personnalisé. Donc si je veux que mes score s'actualisent en freeroam à chaque fois qu'une personne fait un score plus élevé que le score déjà enregistré "best drift" (et aussi que ça utilise le xml ?) ?! Je dois faire comment ?! Je vois pas du tous ce que je dois modifier, merci d'avance de me répondre !!! [EDIT] : Je vais voir pour les erreurs ! [EDIT 2] : Voici l'image du debugscript 3 Link to comment
Moderators Citizen Posted June 15, 2016 Moderators Share Posted June 15, 2016 Normalement, si j'ai bien compris ce que vous m'avez dis ça devrait ressembler à ceci = function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) if not (isGuestAccount (getPlayerAccount (source))) then local accountData = getAccountData (theCurrentAccount, "team") if (accountData) then setPlayerTeam(source,accountData) end end end addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) function onQuit (quitType, reason, responsibleElement,thePreviousAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler ("onPlayerQuit", getRootElement(), onQuit) function onLogout(prevAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler("onPlayerLogout", getRootElement(), onLogout) Oui ce code devrait marcher mais à condition que les utilisateurs peuvent s'enregistrer (/register) sur ton serveur et se connecter à leur compte (/login). Ça ne fonctionnera pas la team pour un joueur n'étant pas connecté à un compte. Avec ce meta : "Jux" version="1.0" type="script" description="Sauvegarde Team Quit/logout" /> Heuu oui sauf qu'il ne faut pas faire de retours à la ligne en plein milieu de la définition d'un tag (). Le serveur te sortira une erreur sinon et ne te chargera pas la ressource (impossible de la lancer). Pour ton scoredrift, je me demande vraiment pourquoi tu tiens à utiliser un fichier xml, c'est système de stockage plus lent, moins fiable et demande plus de ressources CPU que SQLite. Si c'est pour pouvoir consulter les records et/ou les modifier, il suffit d'utiliser SQLite Browser et tu ouvres le fichier internal.db. Sinon pour que ça annonce un nouveau record n'importe quand sur ton freeroam, je pense qu'il suffit d'ajouter cette ligne dans ton drift.lua à la fin de ce que tu m'as montré (après les 2 autres addEventHandler) addEventHandler("onVehicleDriftEnd", root, checkPuntaje) Citizen Link to comment
Juxtheft Posted June 16, 2016 Author Share Posted June 16, 2016 Oui ce code devrait marcher mais à condition que les utilisateurs peuvent s'enregistrer (/register) sur ton serveur et se connecter à leur compte (/login). Ça ne fonctionnera pas la team pour un joueur n'étant pas connecté à un compte. - Pourtant j'ai essayer en étant login avec l'auto-login et la team "Admins" créer avec le panel Admin et ça ne fonctionne pas, je ne suis pas remis dans la team au moment de la reconnexion, c'est étrange.. Heuu oui sauf qu'il ne faut pas faire de retours à la ligne en plein milieu de la définition d'un tag ().Le serveur te sortira une erreur sinon et ne te chargera pas la ressource (impossible de la lancer). - La ressource se lance normalement sans erreurs mais ne fait pas son travaille, elle ne veux pas me remettre dans ma team "Admins" créer avec le Panel Admin "P". C'est embêtant Pour ton scoredrift, je me demande vraiment pourquoi tu tiens à utiliser un fichier xml, c'est système de stockage plus lent, moins fiable et demande plus de ressources CPU que SQLite. - J'abandonne l'idée du "xml", je ne savais pas que c'étais plus lent, laissons tomber le xml. Sinon pour que ça annonce un nouveau record n'importe quand sur ton freeroam, je pense qu'il suffit d'ajouter cette ligne dans ton drift.lua à la fin de ce que tu m'as montré (après les 2 autres addEventHandler) addEventHandler("onVehicleDriftEnd", root, checkPuntaje) Ok merci, j'ai donc modifier mon "drift.lua" ce qui me donne normalement ceci (si je n'ai pas fais d'erreur) : function checkPuntaje() if total > global_mejor then triggerServerEvent("driftNuevoRecord", rootElem, total, getPlayerName(player)) end end addEventHandler("onClientPlayerFinish", rootElem, checkPuntaje) addEventHandler("onClientPlayerOutOfTime", rootElem, checkPuntaje) addEventHandler("onVehicleDriftEnd", root, checkPuntaje) C'est a la fin du script drift.lua, on est d'accord ! Toujours, le même problème, le score reste bloquer sur "Meilleur drift : N/A - 0" [EDIT : Voici l'image du bug.] Link to comment
Moderators Citizen Posted June 18, 2016 Moderators Share Posted June 18, 2016 Normalement, si j'ai bien compris ce que vous m'avez dis ça devrait ressembler à ceci = function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) if not (isGuestAccount (getPlayerAccount (source))) then local accountData = getAccountData (theCurrentAccount, "team") if (accountData) then setPlayerTeam(source,accountData) end end end addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) function onQuit (quitType, reason, responsibleElement,thePreviousAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler ("onPlayerQuit", getRootElement(), onQuit) function onLogout(prevAccount) if not (isGuestAccount (getPlayerAccount (source))) then account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler("onPlayerLogout", getRootElement(), onLogout) Oui ce code devrait marcher mais à condition que les utilisateurs peuvent s'enregistrer (/register) sur ton serveur et se connecter à leur compte (/login). En fait non, ça ne fonctionnera pas, j'ai lu un peu vite ton code. Dans la partie enregistrement de la team, tu enregistres le nom de la team en faisant un getTeamName sur la team du joueur puis un setAccountData. Puis dans la partie "restauration" de la team, tu récupères la donnée enregistrée, c'est à dire le nom de la team, puis tu essayes de faire un setPlayerTeam en utilisant le nom de cette team. Hors ce n'est pas possible. Il faut d'abord récupérer la team via son nom en utilisant getTeamFromName, puis appeler setPlayerTeam avec la team trouvée. function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) if not (isGuestAccount (theCurrentAccount)) then local teamName = getAccountData (theCurrentAccount, "team") -- Le nom de la team if (teamName) then local team = getTeamFromName(teamName) -- La team via son nom if (team) then setPlayerTeam(source, team) -- Replacement dans la team end end end end addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) En ce qui concerne les 2 fonctions onQuit et onLogout, comme c'est le même code à l’intérieur et que tu n'utilises pas les paramètres de ces fonctions dans le code, tu peux le faire en une seule fonction avec les deux addEventHandler qui appellent cette seule fonction: function savePlayerTeam() if not (isGuestAccount (getPlayerAccount (source))) then local account = getPlayerAccount (source) if (account) then local team = getPlayerTeam(source) local teamname = getTeamName(team) setAccountData (account, "team", teamname) end end end addEventHandler ("onPlayerQuit", getRootElement(), savePlayerTeam) addEventHandler("onPlayerLogout", getRootElement(), savePlayerTeam) Concernant la partie sur le drift, peux-tu me passer le lien vers le téléchargement de cette ressource drift ? Je pensais que l'event onVehicleDriftEnd était appelé à chaque fois que tu terminais un drift, mais ça n'a pas l'air d'être le cas. Il faut que je regarde plus en détail cette ressource pour comprendre son fonctionnement. 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