Jump to content

problem with race deathlist


Shuubaru

Recommended Posts

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:

nMxED.png

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
  • 4 weeks later...

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