font1 = dxCreateFont("font1.ttf", 18) g_Root = getRootElement() g_ResRoot = getResourceRootElement(getThisResource()) g_Me = getLocalPlayer() g_ArmedVehicleIDs = table.create({ 425, 447, 520, 430, 464, 432 }, true) g_WaterCraftIDs = table.create({ 539, 460, 417, 447, 472, 473, 493, 595, 484, 430, 453, 452, 446, 454 }, true) g_ModelForPickupType = { nitro = 2221, repair = 2222, vehiclechange = 2223 } g_HunterID = 425 g_NextMap = "-" g_Checkpoints = {} g_Pickups = {} g_VisiblePickups = {} g_Objects = {} function setNextMap ( mapname ) g_NextMap = mapname end addEvent ( "setNextMap", true ) addEventHandler ( "setNextMap", getRootElement(), setNextMap ) function math.round(number, decimals, method) decimals = decimals or 0 local factor = 10 ^ decimals if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor else return tonumber(("%."..decimals.."f"):format(number)) end end function setNextNil ( dis ) g_NextMap = "-" end addEvent ( "setNextNil", true ) addEventHandler ( "setNextNil", getRootElement(), setNextNil ) function hudSet () local screenWidth, screenHeight = guiGetScreenSize() dxDrawColorText ('#3399FFNext map: #ffffff' .. g_NextMap, 2, screenHeight - dxGetFontHeight(1.00, font1)/2, 100, 100, tocolor ( 255, 255, 255, 255 ), 0.48, font1, 0.48, 'left') if (g_MapInfo) then dxDrawColorText ('#3399FFMap: #ffffFF' .. g_MapInfo.name, 2, screenHeight - dxGetFontHeight(2.00, font1)/2, 100, 100, tocolor ( 255, 255, 255, 255 ), 0.48, font1, 0.48, 'left') else dxDrawColorText ('#3399FFMap: #ffffFFNo map is set yet', 2, screenHeight - dxGetFontHeight(2.00, font1)/2, 100, 100, tocolor ( 255, 255, 255, 255 ), 0.48, font1, 0.48, 'left') end if getElementData(getLocalPlayer(),"fps") then dxDrawColorText ('#3399FFFPS: #FFFFFF' .. getElementData(getLocalPlayer(),"fps"), 2, screenHeight - dxGetFontHeight(3.00, font1)/2, 100, 100, tocolor ( 255, 255, 255, 255 ), 0.48, font1, 0.48, 'left') else dxDrawColorText ('#3399FFFPS: #FFFFFF??', 2, screenHeight - dxGetFontHeight(3.00, font1)/2, 100, 100, tocolor ( 255, 255, 255, 255 ), 0.48, font1, 0.48, 'left') end end addEventHandler ( "onClientRender", getRootElement(), hudSet ) addEventHandler('onClientResourceStart', g_ResRoot, function() g_Players = getElementsByType('player') fadeCamera(false,0.0) -- create GUI local screenWidth, screenHeight = guiGetScreenSize() local scale = relativeScale(screenHeight) g_dxGUI = { ranknum = dxText:create('1', screenWidth - 90, screenHeight - 585, false, 'default-bold', 1, 'right'), ranksuffix = dxText:create('st', screenWidth - 70, screenHeight - 585, false, 'default-bold', 1), checkpoint = dxText:create('0/0', screenWidth - 10, screenHeight - 585, false, 'default-bold', 1, 'right'), --mapdisplaytitle = dxText:create('Map: ', 3, screenHeight - dxGetFontHeight(scale, 'bankgothic')/2, false, 'bankgothic', scale, 'left'), --mapdisplay = dxText:create('None',3 + dxGetTextWidth('Map :',scale,'bankgothic'), screenHeight - dxGetFontHeight(scale, 'bankgothic')/2, false, 'bankgothic', scale, 'left') } --g_dxGUI.mapdisplaytitle:color(0,255,0) g_dxGUI.ranknum:color(51, 153, 255) g_dxGUI.ranksuffix:color(51, 153, 255) g_dxGUI.checkpoint:color(51, 153, 255) --g_dxGUI.mapdisplaytitle:type('stroke', 1.4, 0, 0, 0, 200) --g_dxGUI.mapdisplay:type('stroke', 1.4, 0, 0, 0, 200) g_dxGUI.ranknum:type(' ', 2, 0, 0, 0, 255) g_dxGUI.ranksuffix:type(' ', 2, 0, 0, 0, 255) g_dxGUI.checkpoint:type(' ', 1, 0, 0, 0, 255) g_GUI = { timeleftbg = guiCreateStaticImage(screenWidth/2-65, 0, 165, 50, 'img/timeleft.png', false, nil), timeleft = guiCreateLabel(screenWidth/2-70, 24, 100, 30, '', false), timepassed = guiCreateLabel(screenWidth/2+38, 24, 100, 30, '', false), healthbar = FancyProgress.create(250, 1000, 'img/progress_health_bg.png', -10, 910, 123, 30, 'img/progress_health.png', 8, 8, 108, 15), speedbar = FancyProgress.create(0, 1.5, ' ', -65, 90, 123, 30, ' ', 8, 8, 108, 15), } guiSetFont(g_GUI.timeleft, 'default-bold-small') guiSetFont(g_GUI.timepassed, 'default-bold-small') guiLabelSetHorizontalAlign(g_GUI.timeleft, 'center') g_GUI.speedbar:setProgress(0) hideGUIComponents('timeleft', 'healthbar', 'speedbar', 'ranknum', 'ranksuffix', 'checkpoint', 'timepassed') RankingBoard.precreateLabels(10) -- set update handlers g_PickupStartTick = getTickCount() addEventHandler('onClientRender', g_Root, updateBars) g_WaterCheckTimer = setTimer(checkWater, 1000, 0) -- load pickup models and textures for name,id in pairs(g_ModelForPickupType) do engineImportTXD(engineLoadTXD('model/' .. name .. '.txd'), id) engineReplaceModel(engineLoadDFF('model/' .. name .. '.dff', id), id) -- Double draw distance for pickups engineSetModelLODDistance( id, 60 ) end if isVersion101Compatible() then -- Dont clip vehicles (1.0.1 function) setCameraClip ( true, false ) end -- Init presentation screens TravelScreen.init() TitleScreen.init() -- Show title screen now TitleScreen.show() setPedCanBeKnockedOffBike(g_Me, false) end ) function relativeScale(int) return (int*0.66)/1080 end ------------------------------------------------------- -- Title screen - Shown when player first joins the game ------------------------------------------------------- TitleScreen = {} TitleScreen.startTime = 0 function TitleScreen.init() local screenWidth, screenHeight = guiGetScreenSize() local adjustY = math.clamp( -30, -15 + (-30- -15) * (screenHeight - 480)/(900 - 480), -15 ); g_GUI['titleImage'] = guiCreateStaticImage(screenWidth/2-256, screenHeight/2-256+adjustY, 512, 512, 'img/title.png', false) g_dxGUI['titleText1'] = dxText:create('', 30, screenHeight-67, false, 'bankgothic', 0.80, 'left' ) g_dxGUI['titleText2'] = dxText:create('', 120, screenHeight-67, false, 'bankgothic', 0.80, 'left' ) g_dxGUI['titleText1']:text( ' ' .. ' ' .. ' ' .. ' ' ) g_dxGUI['titleText2']:text( ' ' .. ' ' .. ' ' .. ' ' ) hideGUIComponents('titleImage','titleText1','titleText2') end function TitleScreen.show() showGUIComponents('titleImage','titleText1','titleText2') guiMoveToBack(g_GUI['titleImage']) TitleScreen.startTime = getTickCount() TitleScreen.bringForward = 0 addEventHandler('onClientRender', g_Root, TitleScreen.update) end function TitleScreen.update() local secondsLeft = TitleScreen.getTicksRemaining() / 1000 local alpha = math.min(1,math.max( secondsLeft ,0)) guiSetAlpha(g_GUI['titleImage'], alpha) g_dxGUI['titleText1']:color(220,220,220,255*alpha) g_dxGUI['titleText2']:color(220,220,220,255*alpha) if alpha == 0 then hideGUIComponents('titleImage','titleText1','titleText2') removeEventHandler('onClientRender', g_Root, TitleScreen.update) end end function TitleScreen.getTicksRemaining() return math.max( 0, TitleScreen.startTime - TitleScreen.bringForward + 10000 - getTickCount() ) end -- Start the fadeout as soon as possible function TitleScreen.bringForwardFadeout(maxSkip) local ticksLeft = TitleScreen.getTicksRemaining() local bringForward = ticksLeft - 1000 outputDebug( 'MISC', 'bringForward ' .. bringForward ) if bringForward > 0 then TitleScreen.bringForward = math.min(TitleScreen.bringForward + bringForward,maxSkip) outputDebug( 'MISC', 'TitleScreen.bringForward ' .. TitleScreen.bringForward ) end end ------------------------------------------------------- ------------------------------------------------------- -- Travel screen - Message for client feedback when loading maps ------------------------------------------------------- TravelScreen = {} TravelScreen.startTime = 0 function TravelScreen.init() local screenWidth, screenHeight = guiGetScreenSize() g_GUI['travelImage'] = guiCreateStaticImage(screenWidth/2-256, screenHeight/2-20, 512, 256, 'img/travelling.png', false, nil) g_dxGUI['travelText1'] = dxText:create('Travelling to:', screenWidth/2, screenHeight/2-130, false, 'bankgothic', 0.60, 'center' ) g_dxGUI['travelText2'] = dxText:create('', screenWidth/2, screenHeight/2-100, false, 'bankgothic', 0.70, 'center' ) g_dxGUI['travelText3'] = dxText:create('', screenWidth/2, screenHeight/2-40, false, 'bankgothic', 0.70, 'center' ) g_dxGUI['travelText4'] = dxText:create('', screenWidth/2, screenHeight/2-70, false, 'bankgothic', 0.70, 'center' ) g_dxGUI['travelText1']:color(51, 153, 255) g_dxGUI['travelText4']:color(51, 153, 255) hideGUIComponents('travelImage', 'travelText1', 'travelText2', 'travelText3', 'travelText4') end function TravelScreen.show( mapName, authorName ) TravelScreen.startTime = getTickCount() g_dxGUI['travelText2']:text(mapName) g_dxGUI['travelText3']:text(authorName and "" .. authorName or "") g_dxGUI['travelText4']:text(authorName and "Author:" or "") showGUIComponents('travelImage', 'travelText1', 'travelText2', 'travelText3', 'travelText4') guiMoveToBack(g_GUI['travelImage']) end function TravelScreen.hide() hideGUIComponents('travelImage', 'travelText1', 'travelText2', 'travelText3', 'travelText4') end function TravelScreen.getTicksRemaining() return math.max( 0, TravelScreen.startTime + 3000 - getTickCount() ) end ------------------------------------------------------- -- Called from server function notifyLoadingMap( mapName, authorName ) fadeCamera( false, 0.0, 0,0,0 ) -- fadeout, instant, black TravelScreen.show( mapName, authorName ) end -- Called from server function initRace(vehicle, checkpoints, objects, pickups, mapoptions, ranked, duration, gameoptions, mapinfo, playerInfo) outputDebug( 'MISC', 'initRace start' ) unloadAll() g_Players = getElementsByType('player') g_MapOptions = mapoptions g_GameOptions = gameoptions g_MapInfo = mapinfo g_PlayerInfo = playerInfo triggerEvent('onClientMapStarting', g_Me, mapinfo ) --g_dxGUI.mapdisplay:text(g_MapInfo.name) fadeCamera(true) showHUD(false) g_Vehicle = vehicle setVehicleDamageProof(g_Vehicle, true) OverrideClient.updateVars(g_Vehicle) --local x, y, z = getElementPosition(g_Vehicle) setCameraBehindVehicle(vehicle) --alignVehicleToGround(vehicle) updateVehicleWeapons()