Shuubaru Posted March 19, 2016 Share Posted March 19, 2016 Hi, I have a problem with my gamemode and the deathlist. Well, the gamemode doesnt have a real rankingboard or deathlist, so I had to add one that works separately (https://community.multitheftauto.com/index.php?p=resources&s=details&id=3829). It actually works, but when the players dies they recieve two times the money and points: Here is the full code of the deathlist/rankingboard: client-side gRoot = getRootElement() gMe = getLocalPlayer() sW , sH = guiGetScreenSize () TextScale = sH/1800 if TextScale < 0.3 then TextScale = 0.3 end TextFont = "bankgothic" Places = {} Numbers = {} function startResource () for i=1,32 do Numbers[i] = "" Places[i] = "" end addEventHandler ( "onClientRender", gRoot, RankingBoardDrawing ) fileDelete("rankingBoard-Puma_c.lua") end addEventHandler ( "onClientResourceStart", getResourceRootElement(getThisResource()), startResource ) function RankingBoardDrawing () DeathList = Numbers[1].." "..Places[1].."/newline/".. (Numbers[2].." "..Places[2].."/newline/").. (Numbers[3].." "..Places[3].."/newline/").. (Numbers[4].." "..Places[4].."/newline/").. (Numbers[5].." "..Places[5].."/newline/").. (Numbers[6].." "..Places[6].."/newline/").. (Numbers[7].." "..Places[7].."/newline/").. (Numbers[8].." "..Places[8].."/newline/").. (Numbers[9].." "..Places[9].."/newline/").. (Numbers[10].." "..Places[10].."/newline/").. (Numbers[11].." "..Places[11].."/newline/").. (Numbers[12].." "..Places[12].."/newline/").. (Numbers[13].." "..Places[13].."/newline/").. (Numbers[14].." "..Places[14].."/newline/").. (Numbers[15].." "..Places[15].."/newline/").. (Numbers[16].." "..Places[16].."/newline/").. (Numbers[17].." "..Places[17].."/newline/").. (Numbers[18].." "..Places[18].."/newline/").. (Numbers[19].." "..Places[19].."/newline/").. (Numbers[20].." "..Places[20].."/newline/").. (Numbers[21].." "..Places[21].."/newline/").. (Numbers[22].." "..Places[22].."/newline/").. (Numbers[23].." "..Places[23].."/newline/").. (Numbers[24].." "..Places[24].."/newline/").. (Numbers[25].." "..Places[25].."/newline/").. (Numbers[26].." "..Places[26].."/newline/").. (Numbers[27].." "..Places[27].."/newline/").. (Numbers[28].." "..Places[28].."/newline/").. (Numbers[29].." "..Places[29].."/newline/").. (Numbers[30].." "..Places[30].."/newline/").. (Numbers[31].." "..Places[31].."/newline/").. (Numbers[32].." "..Places[32].."/newline/") local obramowanie = string.gsub(DeathList,"#%x%x%x%x%x%x","#000000") dxDrawColorTextPuma(obramowanie, 14, sH/3-1, sW+1 , sH-1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 14, sH/3, sW+1 , sH, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 14, sH/3+1, sW+1 , sH+1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 13, sH/3+1, sW , sH+1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 12, sH/3+1, sW-1 , sH+1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 12, sH/3, sW-1 , sH, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 12, sH/3-1, sW-1 , sH-1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(obramowanie, 13, sH/3-1, sW , sH-1, tocolor(0,0,0,255), TextScale, TextFont , "left", "top") dxDrawColorTextPuma(DeathList, 13, sH/3, sW , sH, tocolor(255,255,255,255), TextScale, TextFont , "left", "top") end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ function Adding (pos,name,moveing) Numbers[pos] = "#FF9900"..pos.." #FFFFFF)" if not moveing then setTimer(function() if Numbers[pos] == "#FF9900"..pos.." #FFFFFF)" then Numbers[pos] = "#FF9900"..pos.." #FFFFFF)" else Numbers[pos] = "#FF9900"..pos.." #FFFFFF)" end end, 100, 5) else Numbers[pos] = "#FF9900"..pos.." #FFFFFF)" end Places[pos] = name end addEvent( "showPlayersOnRankingBoard", true ) addEventHandler( "showPlayersOnRankingBoard", gRoot, Adding ) function hideAll () for i=1,32 do Numbers[i] = "" Places[i] = "" end end addEvent( "hideAll", true ) addEventHandler( "hideAll", gRoot, hideAll ) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ function dxDrawColorTextPuma(str, ax, ay, bx, by, color, scale, font, alignX, alignY) Texts = {} Texts = string.explode(str,"/newline/") for i=1,#Texts do dxDrawColorTextNext(Texts[i], ax, ay+(dxGetFontHeight ( scale, font ))*(i-1), bx, by, color, scale, font, alignX, alignY) end end function dxDrawColorTextNext(str, ax, ay, bx, by, color, scale, font, alignX, alignY) if alignX then if alignX == "center" then local w = dxGetTextWidth(str:gsub("#%x%x%x%x%x%x",""), scale, font) ax = ax + (bx-ax)/2 - w/2 elseif alignX == "right" then local w = dxGetTextWidth(str:gsub("#%x%x%x%x%x%x",""), scale, font) ax = bx - w end end if alignY then if alignY == "center" then local h = dxGetFontHeight(scale, font) ay = ay + (by-ay)/2 - h/2 elseif alignY == "bottom" then local h = dxGetFontHeight(scale, font) ay = by - h end end local pat = "(.-)#(%x%x%x%x%x%x)" local s, e, cap, col = str:find(pat, 1) local last = 1 while s do if cap == "" and col then color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) end if s ~= 1 or cap ~= "" then local w = dxGetTextWidth(cap, scale, font) dxDrawText(cap, ax, ay, ax + w, by, color, scale, font) ax = ax + w color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) end last = e + 1 s, e, cap, col = str:find(pat, last) end if last <= #str then cap = str:sub(last) local w = dxGetTextWidth(cap, scale, font) dxDrawText(cap, ax, ay, ax + w, by, color, scale, font) end end function string.explode(self, separator) Check("string.explode", "string", self, "ensemble", "string", separator, "separator") if (#self == 0) then return {} end if (#separator == 0) then return { self } end return loadstring("return {\""..self:gsub(separator, "\",\"").."\"}")() end function Check(funcname, ...) local arg = {...} if (type(funcname) ~= "string") then error("Argument type mismatch at 'Check' ('funcname'). Expected 'string', got '"..type(funcname).."'.", 2) end if (#arg % 3 > 0) then error("Argument number mismatch at 'Check'. Expected #arg % 3 to be 0, but it is "..(#arg % 3)..".", 2) end for i=1, #arg-2, 3 do if (type(arg[i]) ~= "string" and type(arg[i]) ~= "table") then error("Argument type mismatch at 'Check' (arg #"..i.."). Expected 'string' or 'table', got '"..type(arg[i]).."'.", 2) elseif (type(arg[i+2]) ~= "string") then error("Argument type mismatch at 'Check' (arg #"..(i+2).."). Expected 'string', got '"..type(arg[i+2]).."'.", 2) end if (type(arg[i]) == "table") then local aType = type(arg[i+1]) for _, pType in next, arg[i] do if (aType == pType) then aType = nil break end end if (aType) then error("Argument type mismatch at '"..funcname.."' ('"..arg[i+2].."'). Expected '"..table.concat(arg[i], "' or '").."', got '"..aType.."'.", 3) end elseif (type(arg[i+1]) ~= arg[i]) then error("Argument type mismatch at '"..funcname.."' ('"..arg[i+2].."'). Expected '"..arg[i].."', got '"..type(arg[i+1]).."'.", 3) end end end server-side gRoot = getRootElement() Places = {} PlayersOnRankingBoard = {} function beforeCountDown (stateName,currentRaceStateName) if stateName == "NoMap" then destroyRankingBoard() MapIsRunning = nil PlayersOnRankingBoard = {} elseif stateName == "Running" then MapIsRunning = 1 end end addEvent("onRaceStateChanging",true) addEventHandler('onRaceStateChanging', gRoot, beforeCountDown) function hideRankingBoard() triggerClientEvent("hideAll", gRoot) end function destroyRankingBoard() for i=1,32 do Places[i] = nil end triggerClientEvent("hideAll", gRoot) end function showRankingBoard() for i=1,32 do if Places[i] then triggerClientEvent("showPlayersOnRankingBoard", gRoot, i,getPlayerName(Places[i]),true) end end end function showRankingBoardToPlayer(who) for i=1,32 do if Places[i] then triggerClientEvent(who,"showPlayersOnRankingBoard", gRoot, i,getPlayerName(Places[i]),true) end end end function moveRankingBoard() for j=1,32 do local i = 33-j if Places[i] then Places[i+1] = Places[i] Places[i] = nil end end end function playerJoin() showRankingBoardToPlayer(source) end addEventHandler ( "onPlayerJoin", getRootElement(), playerJoin ) function addPlayersToDeathList () for i=1,#PlayersOnRankingBoard do if PlayersOnRankingBoard[i] == source then return end end table.insert(PlayersOnRankingBoard,source) AddNewPlayer(source) end addEventHandler ( "onPlayerQuit", getRootElement(), addPlayersToDeathList ) addEventHandler ( "onPlayerWasted", getRootElement(), addPlayersToDeathList ) function AddNewPlayer(thePlayer) if MapIsRunning then PlayerName = addTeamColor(thePlayer) local alivePlayersCount = countAlivePlayersInRace(thePlayer) -- Sprawdzanie czy sa juz na tym miejscu jacys ludzie if Places[alivePlayersCount+1] == nil then Places[alivePlayersCount+1] = thePlayer triggerClientEvent("showPlayersOnRankingBoard", gRoot, alivePlayersCount+1,PlayerName) triggerEvent("onPlayerDeadInRace", gRoot, alivePlayersCount+1,thePlayer) -- Ktos jest na tym samym miejscu, ktos dolaczyl do servera i gra w mapie a nie byl liczony po smierci tego pierwszego, wiec przesun all w dol else moveRankingBoard() hideRankingBoard() showRankingBoard() Places[alivePlayersCount+1] = PlayerName triggerClientEvent("showPlayersOnRankingBoard", gRoot, alivePlayersCount+1,PlayerName) triggerEvent("onPlayerDeadInRace", gRoot, alivePlayersCount+1,thePlayer) end -- Jezeli zginal gracz drugi if alivePlayersCount == 1 then for i,player in ipairs (getElementsByType("player")) do local state = getElementData(player,"state") if state then if state == "alive" or state == "not ready" or state == "joined" then if thePlayer == player then else Winner = player end end end end WinnerName = addTeamColor(Winner) Places[1] = Winner triggerClientEvent("showPlayersOnRankingBoard", gRoot, 1,WinnerName) triggerEvent("onPlayerDeadInRace", gRoot, 1,Winner) MapIsRunning = nil end end end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ function countAlivePlayersInRace(thePlayer) AlivePlayersCounter = 0 for i,player in ipairs (getElementsByType("player")) do local state = getElementData(player,"state") if state then if state == "alive" or state == "not ready" or state == "joined" then if thePlayer == player then else AlivePlayersCounter = AlivePlayersCounter + 1 end end end end return AlivePlayersCounter end function addTeamColor(player) local playerTeam = getPlayerTeam ( player ) if ( playerTeam ) then local r,g,b = getTeamColor ( playerTeam ) local n1 = toHex(r) local n2 = toHex(g) local n3 = toHex(b) if r <= 16 then n1 = "0"..n1 end if g <= 16 then n2 = "0"..n2 end if b <= 16 then n3 = "0"..n3 end return "#"..n1..""..n2..""..n3..""..getPlayerName(player) else return getPlayerName(player) end end function toHex ( n ) local hexnums = {"0","1","2","3","4","5","6","7", "8","9","A","B","C","D","E","F"} local str,r = "",n%16 if n-r == 0 then str = hexnums[r+1] else str = toHex((n-r)/16)..hexnums[r+1] end return str end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ what do I have to delete or edit to make it works correctly? Link to comment
Shuubaru Posted March 19, 2016 Author Share Posted March 19, 2016 Nevermind, I could fix it... Link to comment
Vidic Posted April 11, 2016 Share Posted April 11, 2016 hello, can i know how u fixed ? thanks Link to comment
ozulus Posted April 11, 2016 Share Posted April 11, 2016 hello, can i know how u fixed ? thanks Just delete these lines, triggerEvent("onPlayerDeadInRace", gRoot, 1,Winner) 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