Jump to content

Help to change zombie rank o drift rank


Sil3nT

Recommended Posts

What i have do wrong? Please help!!!!

exports.scoreboard:addScoreboardColumn('Drift Rank') 
  
addEventHandler("onPlayerSpawn",root, 
function() 
    local account = getPlayerAccount(source) 
    local bestdrift = getAccountData(account,"Best Drift") 
if (bestdrift >= 0) and (bestdrift <= 29999) then 
setAccountData ( account, "Drift Rank", "Sucky" ) 
elseif (bestdrift >= 30000) and (bestdrift <= 89999) then 
setAccountData ( account, "Drift Rank", "Newbie" ) 
elseif (bestdrift >= 90000) and (bestdrift <= 149999) then 
setAccountData ( account, "Drift Rank", "Grandpa" ) 
end 
end 
) 

Link to comment
  • Replies 58
  • Created
  • Last Reply

Top Posters In This Topic

Nothing hapened. Its still wont showing those ranks :(

addEventHandler("onPlayerSpawn",root, 
function() 
    local account = getPlayerAccount(source) 
    local bestdrift = getAccountData(account,"Best Drift") 
if (bestdrift >= 0) and (bestdrift <= 29999) then 
setElementData ( account, "Drift Rank", "Sucky" ) 
elseif (bestdrift >= 30000) and (bestdrift <= 89999) then 
setElementData ( account, "Drift Rank", "Newbie" ) 
elseif (bestdrift >= 90000) and (bestdrift <= 149999) then 
setElementData ( account, "Drift Rank", "Grandpa" ) 
end 
end 
) 

I think somthing wrong is with addEventHandler("onPlayerSpawn",root,

Link to comment

Nop Nothing

    addEventHandler("onPlayerSpawn",root, 
    function() 
        local account = getPlayerAccount(source) 
        local bestdrift = getAccountData(account,"Best Drift") 
    if (bestdrift >= 0) and (bestdrift <= 29999) then 
    setElementData ( source, "Drift Rank", "Sucky" ) 
    elseif (bestdrift >= 30000) and (bestdrift <= 89999) then 
    setElementData ( source, "Drift Rank", "Newbie" ) 
    elseif (bestdrift >= 90000) and (bestdrift <= 149999) then 
    setElementData ( source, "Drift Rank", "Grandpa" ) 
    end 
    end 
    ) 

Link to comment
addEventHandler ( "onPlayerSpawn",root, 
    function ( ) 
        local account = getPlayerAccount ( source ) 
        local bestdrift = getAccountData ( account, "Best Drift" ) or 0 
        outputChatBox ( "Your best drift is: ".. tostring ( bestdrift ), source ) 
        if ( bestdrift >= 0 ) and ( bestdrift <= 29999 ) then 
            setElementData ( source, "Drift Rank", "Sucky" ) 
        elseif ( bestdrift >= 30000 ) and ( bestdrift <= 89999 ) then 
            setElementData ( source, "Drift Rank", "Newbie" ) 
        elseif ( bestdrift >= 90000 ) and ( bestdrift <= 149999 ) then 
            setElementData ( source, "Drift Rank", "Grandpa" ) 
        end 
    end 
) 

Use that and see what it says on the chat box. Also, remember that it'll set the rank when you spawn.

Link to comment

Yeah now it works. But my best drift isnt saving :( script fault :( and every time when im going in server there is output chat your best drift is 0 and drift rank is sucky! :(

Then i have problem in drift resource right? i need to do like umm best drift is saving?

Link to comment

I want that! That u do yor best drift then your rank wil change, and when u beat your best drift again, the rank will change too. Then i nee eventhandler onElementDataChange, būt, there is one būt. How can i save best drift. Is there any script or i need to configure existing drift resource?

Link to comment

Replace your entire drift resource with this one:

drft.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("Waiting for server drift data...") 
        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("Best 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, "Last Drift", anterior) 
        total = total+anterior 
        setElementData(player, "Total Drift", total) 
        if score > mejor then 
            mejor = score 
            setElementData(player, "Best 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("Factor: X%d\n%s",mult,mult~=5 and string.format("Gain X%d with %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\nToo Slow!", 20,155,screenWidth,screenHeight, Yellow, 1.2, "sans","left","top", false,true,false) 
    end 
     
    if tick - (idleTime or 0) < 3000 then 
        local temp = "DRIFT" 
        if score >= 100000 then 
            temp = "DRIFT\n\nDrift King!" 
        elseif score >= 50000 then 
            temp = "DRIFT\n\nInsane Drift!" 
        elseif score >= 20000 then 
            temp = "DRIFT\n\nOutrageous!" 
        elseif score >= 15000 then 
            temp = "DRIFT\n\nColossal!" 
        elseif score >= 7000 then 
            temp = "DRIFT\n\nSuberb!" 
        elseif score >= 3000 then 
            temp = "DRIFT\n\nGreat Drift!" 
        elseif score >= 1000 then 
            temp = "DRIFT\n\nGood 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, "Last Drift", anterior) 
    setElementData(player, "Total Drift", total) 
    setElementData(player, "Best 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 
  
    if ( total > 0 ) then 
        triggerServerEvent ( "updatePlayerDrift", localPlayer, total ) 
    end 
end 
addEventHandler("onClientPlayerFinish", rootElem, checkPuntaje) 
addEventHandler("onClientPlayerOutOfTime", rootElem, checkPuntaje) 

drft_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", "Best Drift") 
        call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Last 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("There's no record set on this map", player) 
            else 
                outputChatBox(string.format("The current record is %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("There's no record set on this map") 
    else 
        outputChatBox(string.format("The current record is %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("New drift record! (%d points) (%s)",score,name))  
        drift_mejor = score 
        drift_nombre = name 
        triggerClientEvent(root, "driftActualizarRecord", root, drift_mejor, drift_nombre) 
    end 
end) 
  
addEvent ( "updatePlayerDrift", true ) 
addEventHandler ( "updatePlayerDrift", root, 
    function ( value ) 
        local account = getPlayerAccount ( client ) 
        if ( not isGuestAccount ( account ) ) then 
            local driftPoints = tonumber ( getAccountData ( account, "Best Drift" ) ) or 0 
            if ( value > driftPoints ) then 
                setAccountData ( account, "Best Drift", value ) 
                triggerEvent ( "onPlayerGotBetterDrift", client, value ) 
            end 
        end 
    end 
) 

And then you can use your drift rank script like this:

addEventHandler ( "onPlayerLogin", root, 
    function ( _, account ) 
        local driftPoints = tonumber ( getAccountData ( account, "Best Drift" ) ) or 0 
        checkDrift ( source, driftPoints ) 
    end 
) 
  
addEvent ( "onPlayerGotBetterDrift", true ) 
addEventHandler ( "onPlayerGotBetterDrift", root, 
    function ( value ) 
        checkDrift ( source, value ) 
    end 
) 
  
function checkDrift ( thePlayer, value ) 
    if ( value >= 0 ) and ( value <= 29999 ) then 
        setElementData ( thePlayer, "Drift Rank", "Sucky" ) 
    elseif ( value >= 30000 ) and ( value <= 89999 ) then 
        setElementData ( thePlayer, "Drift Rank", "Newbie" ) 
    elseif ( value >= 90000 ) and ( value <= 149999 ) then 
        setElementData ( thePlayer, "Drift Rank", "Grandpa" ) 
    end 
end 

Link to comment

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