Jump to content

[HELP] Help Hex


MitnickP56

Recommended Posts

Hi, I have big problem. I can't add hex on the rankingboard.

RankingBoard = {} 
RankingBoard.__index = RankingBoard 
  
RankingBoard.instances = {} 
  
local screenWidth, screenHeight = guiGetScreenSize() 
local topDistance = 250 
local bottomDistance = 0.23*screenHeight 
local posLeftDistance = 30 
local nameLeftDistance = 60 
local labelHeight = 20 
local maxPositions = math.floor((screenHeight - topDistance - bottomDistance)/labelHeight) 
  
function RankingBoard.create(id) 
    RankingBoard.instances[id] = setmetatable({ id = id, direction = 'down', labels = {}, position = 0 }, RankingBoard) 
end 
  
function RankingBoard.call(id, fn, ...) 
    RankingBoard[fn](RankingBoard.instances[id], ...) 
end 
  
function RankingBoard:setDirection(direction,plrcount) 
    self.direction = direction 
    if direction == 'up' then 
        self.highestPos = plrcount 
        self.position = self.highestPos + 1 
    end 
end 
  
  
function getPlayerFromPartialName(name) 
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil 
    if name then 
        for _, player in ipairs(getElementsByType("player")) do 
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() 
            if name_:find(name, 1, true) then 
                return player 
            end 
        end 
    end 
end 
function RankingBoard:add(name, time) 
    local position 
    local y 
    local doBoardScroll = false 
    if self.direction == 'down' then 
        self.position = self.position + 1 
        if self.position > maxPositions then 
            return 
        end 
        y = topDistance + (self.position-1)*labelHeight 
    elseif self.direction == 'up' then 
        self.position = self.position - 1 
        local labelPosition = self.position 
        if self.highestPos > maxPositions then 
            labelPosition = labelPosition - (self.highestPos - maxPositions) 
            if labelPosition < 1 then 
                labelPosition = 0 
                doBoardScroll = true 
            end 
        elseif labelPosition < 1 then 
            return 
        end 
        y = topDistance + (labelPosition-1)*labelHeight 
    end 
    local posLabel, posLabelShadow = createShadowedLabelFromSpare(posLeftDistance, y, 20, labelHeight, tostring(self.position) .. ')', 'right') 
    if time then 
        if not self.firsttime then 
            self.firsttime = time 
            time = ': ' .. msToTimeStr(time) 
        else 
            time = ': +' .. msToTimeStr(time - self.firsttime) 
        end 
    else 
        time = '' 
    end 
 killerss = getPlayerName(getElementData(getPlayerFromPartialName(name),"lasthit")) or "" 
alivePlayers = 0 
for i ,v in ipairs (getElementsByType("player")) do 
if getElementData(v,"state") == "alive" then 
alivePlayers = alivePlayers + 1  
end 
end 
if alivePlayers == 1 then 
setElementData(getPlayerFromPartialName(name),"lasthit",nil) 
end 
    local playerLabel, playerLabelShadow = createShadowedLabelFromSpare(nameLeftDistance, y, 250, labelHeight, name .. " ("..killerss..")") 
    table.insert(self.labels, posLabel) 
    table.insert(self.labels, posLabelShadow) 
    table.insert(self.labels, playerLabel) 
    table.insert(self.labels, playerLabelShadow) 
    playSoundFrontEnd(7) 
    if doBoardScroll then 
        guiSetAlpha(posLabel, 0) 
        guiSetAlpha(posLabelShadow, 0) 
        guiSetAlpha(playerLabel, 0) 
        guiSetAlpha(playerLabelShadow, 0) 
        local anim = Animation.createNamed('race.boardscroll', self) 
        anim:addPhase({ from = 0, to = 1, time = 700, fn = RankingBoard.scroll, firstLabel = posLabel }) 
        anim:addPhase({ fn = RankingBoard.destroyLastLabel, firstLabel = posLabel }) 
        anim:play() 
    end 
end 
  
function RankingBoard:scroll(param, phase) 
    local firstLabelIndex = table.find(self.labels, phase.firstLabel) 
    for i=firstLabelIndex,firstLabelIndex+3 do 
        guiSetAlpha(self.labels[i], param) 
    end 
    local x, y 
    for i=0,#self.labels/4-1 do 
        for j=1,4 do 
            x = (j <= 2 and posLeftDistance or nameLeftDistance) 
            y = topDistance + ((maxPositions - i - 1) + param)*labelHeight 
            if j % 2 == 0 then 
                x = x + 1 
                y = y + 1 
            end 
            guiSetPosition(self.labels[i*4+j], x, y, false) 
        end 
    end 
    for i=1,4 do 
        guiSetAlpha(self.labels[i], 1 - param) 
    end 
end 
  
function RankingBoard:destroyLastLabel(phase) 
    for i=1,4 do 
        destroyElementToSpare(self.labels[1]) 
        table.remove(self.labels, 1) 
    end 
    local firstLabelIndex = table.find(self.labels, phase.firstLabel) 
    for i=firstLabelIndex,firstLabelIndex+3 do 
        guiSetAlpha(self.labels[i], 1) 
    end 
end 
  
function RankingBoard:addMultiple(items) 
    for i,item in ipairs(items) do 
        self:add(item.name, item.time) 
    end 
end 
  
function RankingBoard:clear() 
    table.each(self.labels, destroyElementToSpare) 
    self.labels = {} 
end 
  
function RankingBoard:destroy() 
    self:clear() 
    RankingBoard.instances[self.id] = nil 
end 
  
  
  
-- 
-- Label cache 
-- 
  
local spareElems = {} 
local donePrecreate = false 
  
function RankingBoard.precreateLabels(count) 
    donePrecreate = false 
    while #spareElems/4 < count do 
        local label, shadow = createShadowedLabel(10, 1, 20, 10, 'a' ) 
        destroyElementToSpare(label) 
        destroyElementToSpare(shadow) 
    end 
    donePrecreate = true 
end 
  
function destroyElementToSpare(elem) 
    table.insertUnique( spareElems, elem ) 
    guiSetVisible(elem, false) 
end 
  
function createShadowedLabelFromSpare(x, y, width, height, text, align) 
  
    if #spareElems < 2 then 
        if not donePrecreate then 
            outputDebug( 'OPTIMIZATION', 'createShadowedLabel' ) 
        end 
        return createShadowedLabel(x, y, width, height, text, align) 
    else 
        local shadow = table.popLast( spareElems ) 
        guiSetSize(shadow, width, height, false) 
        guiSetText(shadow, text) 
        --guiLabelSetColor(shadow, 0, 0, 0) 
        guiSetPosition(shadow, x + 1, y + 1, false) 
        guiSetVisible(shadow, true) 
  
        local label = table.popLast( spareElems ) 
        guiSetSize(label, width, height, false) 
        guiSetText(label, text) 
        --guiLabelSetColor(label, 255, 255, 255) 
        guiSetPosition(label, x, y, false) 
        guiSetVisible(label, true) 
        if align then 
            guiLabelSetHorizontalAlign(shadow, align) 
            guiLabelSetHorizontalAlign(label, align) 
        else 
            guiLabelSetHorizontalAlign(shadow, 'left') 
            guiLabelSetHorizontalAlign(label, 'left') 
        end 
        return label, shadow 
    end 
end 
  
addEventHandler("onClientVehicleCollision",root, 
    function(hitElement) 
        if source == getPedOccupiedVehicle(localPlayer) then 
            if hitElement and getElementType(hitElement) == 'vehicle' then 
                local driver = getVehicleController(source) 
                local hDriver = getVehicleController(hitElement) 
                if hDriver and driver then 
                    setElementData(driver,"lasthit",hDriver) 
                    if isTimer(timer) then  killTimer(timer) end 
                    timer = setTimer(setElementData,5000,1,driver,"lasthit",nil) 
             
                end 
            end 
        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...