diff --git a/[gamemodes]/[race]/[addons]/race_delay_indicator/delayindicator_client.lua b/[gamemodes]/[race]/[addons]/race_delay_indicator/delayindicator_client.lua index 1732605ad..2af4975ed 100644 --- a/[gamemodes]/[race]/[addons]/race_delay_indicator/delayindicator_client.lua +++ b/[gamemodes]/[race]/[addons]/race_delay_indicator/delayindicator_client.lua @@ -1,50 +1,60 @@ +local g_screenX,g_screenY = guiGetScreenSize() +local g_Root = getRootElement() +local g_ResRoot = getResourceRootElement(getThisResource()) +local g_Me = getLocalPlayer() + local DISTANCE_FRONT_BEHIND = 0.03 -local SCALE = 2 local TIME_TO_DISPLAY = 2000 +local SCALE = 1 +if g_screenY > 768 then SCALE = 1.5 end local frontTick local behindTick -local delayDisplayFront = dxText:create("", 0.5, 0.37, true, "default", SCALE) -local delayDisplayBehind = dxText:create("", 0.5, 0.43, true, "default", SCALE) -delayDisplayFront:color(255, 0, 0) -delayDisplayBehind:color(0, 255, 0) +local delayDisplayFront = dxText:create("", 0.5, 0.87, true, "default-bold", SCALE) +local delayDisplayBehind = dxText:create("", 0.5, 0.93, true, "default-bold", SCALE) +delayDisplayFront:color(248,28,11) +delayDisplayBehind:color(80,233,11) +delayDisplayFront:type("shadow",1) +delayDisplayBehind:type("shadow",1) +delayDisplayFront:colorCode(true) +delayDisplayBehind:colorCode(true) addEvent("showDelay", true) -addEventHandler("showDelay", root, +addEventHandler("showDelay", g_Root, function(delayTime, optional) if tonumber(optional) then - local cps = getElementData(localPlayer, "race.checkpoint") - optional + local cps = getElementData(g_Me, "race.checkpoint") - optional if cps < 2 then cps = "" else cps = "(-"..cps.."CPs) " end - delayDisplayBehind:text("-"..msToTimeStr(delayTime).." "..cps..string.gsub(getPlayerName(source), "#%x%x%x%x%x%x", "")) + delayDisplayBehind:text("-"..msToTime(delayTime).." "..cps.."#FFFFFF"..addTeamColor(source)) delayDisplayBehind:visible(true) behindTick = getTickCount() setTimer(hideDelayDisplay, TIME_TO_DISPLAY, 1, false) elseif type(optional) == "table" then if delayTime < 0 then -- outputChatBox("-"..msToTimeStr(-delayTime).." current record") - delayDisplayFront:text("+"..msToTimeStr(-delayTime).." record #"..optional[1]) + delayDisplayFront:text("+"..msToTime(-delayTime).." record #"..optional[1]) delayDisplayFront:color(255, 255, 0) elseif delayTime > 0 then -- outputChatBox("+"..msToTimeStr(delayTime).." current record") - delayDisplayFront:text("-"..msToTimeStr(delayTime).." record #"..optional[1]) + delayDisplayFront:text("-"..msToTime(delayTime).." record #"..optional[1]) delayDisplayFront:color(0, 255, 255) end delayDisplayFront:visible(true) frontTick = getTickCount() setTimer(hideDelayDisplay, TIME_TO_DISPLAY, 1, true) else - local cps = getElementData(source, "race.checkpoint") - getElementData(localPlayer, "race.checkpoint") + local cps = getElementData(source, "race.checkpoint") - getElementData(g_Me, "race.checkpoint") if cps < 2 then cps = "" else cps = "(+"..cps.."CPs) " end - delayDisplayFront:text("+"..msToTimeStr(delayTime).." "..cps..string.gsub(getPlayerName(source), "#%x%x%x%x%x%x", "")) - delayDisplayFront:color(255, 0, 0) + delayDisplayFront:text("+"..msToTime(delayTime).." "..cps.."#FFFFFF"..addTeamColor(source)) + delayDisplayFront:color(248,28,11) delayDisplayFront:visible(true) frontTick = getTickCount() setTimer(hideDelayDisplay, TIME_TO_DISPLAY, 1, true) @@ -77,7 +87,7 @@ function hideDelayDisplay(front) end end -addEventHandler('onClientResourceStart', resourceRoot, +addEventHandler('onClientResourceStart', g_ResRoot, function() local settingsFile = xmlLoadFile("settings.xml") if settingsFile then @@ -87,7 +97,7 @@ addEventHandler('onClientResourceStart', resourceRoot, else settingsFile = xmlCreateFile("settings.xml","settings") xmlNodeSetAttribute(settingsFile,"x",0.5) - xmlNodeSetAttribute(settingsFile,"y",0.4) + xmlNodeSetAttribute(settingsFile,"y",0.9) end xmlSaveFile(settingsFile) xmlUnloadFile(settingsFile) @@ -139,3 +149,69 @@ function msToTimeStr(ms) local minutes = tostring(math.floor(s / 60)) return minutes .. ':' .. seconds .. ':' .. centiseconds end + + +-- Exported function for settings menu, KaliBwoy + +function showCPDelays() + triggerServerEvent( "onClientShowCPDelays", resourceRoot ) +end + +function hideCPDelays() + triggerServerEvent( "onClientHideCPDelays", resourceRoot ) +end + +------------------------------------------------------------------------------------------------------------------------- +function addTeamColor(player) + local customNick = getElementData(player, "vip.colorNick") + if customNick then return customNick end + 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..""..getPlayerNametagText(player) + else + return getPlayerNametagText(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 + +function onClientResourceStart() + showCPDelays() +end +addEventHandler("onClientResourceStart",resourceRoot,onClientResourceStart) + +function msToTime(ms) + if not ms then + return '' + end +local centiseconds = tostring(math.floor(math.fmod(ms, 1000))) + if #centiseconds == 1 then + centiseconds = '00' .. centiseconds + elseif #centiseconds == 2 then + centiseconds = '0' .. centiseconds + end +local s = math.floor(ms / 1000) +local seconds = tostring(math.fmod(s, 60)) + if #seconds == 1 then + seconds = '0' .. seconds + end +local minutes = tostring(math.floor(s / 60)) + if #minutes == 1 then + minutes = '' .. minutes + end +return minutes .. ':' .. seconds .. ':' .. centiseconds +end