Jump to content

luck.

Members
  • Posts

    20
  • Joined

  • Last visited

luck.'s Achievements

Civilian

Civilian (7/54)

0

Reputation

  1. luck.

    GTA User files

    not a script, I say just play the music from any server tracks user and only for me, you know?
  2. luck.

    GTA User files

    hello, sorry if I'm posting this in the wrong area because they do not know what the right area, anyway, I wanted to know how I do to play the music from My Documents \ GTA San Andreas User Files on a server, it is possible? sorry my bad english¬¬
  3. luck.

    Question

    Hi all well my doubt is, How can I edit this line to that smods mods and admins can give redo? Could not do it by acl addCommandHandler('redo', function( player, command, value ) if isPlayerInACLGroup(player, g_GameOptions.admingroup) or isPlayerInACLGroup(player, "Thieves of Soul") or isPlayerInACLGroup(player, "Old Members") then local currentMap = exports.mapmanager:getRunningGamemodeMap() if mapIsAlreadySet == false then if currentMap then outputChatBox("#8DB6CD[REDO] #FFFFFFMap restarted by " .. getPlayerNametagText(player), g_Root, 0, 240, 0, true) callClientFunction(getRootElement(),"removeDxCD") if not exports.mapmanager:changeGamemodeMap (currentMap, nil, true) then problemChangingMap() end else outputRace("You can't restart the map because no map is running", player) end else outputChatBox("#8DB6CD[REDO] #FFFFFFYou can't restart the map because next is set now.",player,255,255,255,true) end else outputRace("You are not an Admin", player) end end )
  4. luck.

    Problem

    Good afternoon, good I have a login window, and I wanted as the mouse passes over it (onClientMouseLeave), she plays a sound is, the more the problem is that the sound does not stop playing when the mouse leaves button, or when the window is hidden. code: wdwLogin_Pannel = {} tabPannel_Main = {} tab_Login = {} tab_Register = {} function open_log_reg_pannel() if not(isElement(wdwLogin_Pannel)) then showChat(false) x,y = guiGetScreenSize() local sWidth,sHeight = guiGetScreenSize() local Width,Height = 350,350 local X = (sWidth/2) - (Width/2) local Y = (sHeight/2) - (Height/2) Login_img = guiCreateStaticImage( X, Y + 120, 350, 350, "login_window.png", false ) guiSetEnabled (Login_img, false) --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! shLogin = guiCreateStaticImage( X + 23, Y + 349, 301, 44, "login.png", false ) addEventHandler("onClientGUIClick",shLogin,onClickBtnLogin) addEventHandler( "onClientMouseEnter",shLogin,LoginSH) addEventHandler("onClientMouseLeave",shLogin,SErem) edit_Login = guiCreateEdit(X + 20,Y + 205,250,35,"",false) edit_password = guiCreateEdit(X + 20,Y + 280,250,35,"",false) guiEditSetMaxLength ( edit_Login,25) guiEditSetMaxLength ( edit_password,25) guiEditSetMasked ( edit_password, true ) lbl_about_legth = guiCreateLabel(142,42,184,18,"",false) guiLabelSetColor(lbl_about_legth,253,255,68) guiLabelSetVerticalAlign(lbl_about_legth,"center") guiLabelSetHorizontalAlign(lbl_about_legth,"center",false) checkbox_save = guiCreateCheckBox(X + 175,Y + 260,100,20,"(Remember me!)",false,false) guiSetFont(checkbox_save,"default-small") login_tab_error_msg = guiCreateLabel(X,Y + 310,364,31,"Error_login_tab",false) guiLabelSetColor(login_tab_error_msg,255,0,0) guiLabelSetVerticalAlign(login_tab_error_msg,"center") guiLabelSetHorizontalAlign(login_tab_error_msg,"center",false) guiSetFont(login_tab_error_msg,"default-bold-small") --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! shGuest = guiCreateStaticImage( X + 23, Y + 401, 143, 45, "guest.png", false ) -- A gomb addEventHandler("onClientGUIClick",shGuest,onClickGuest) addEventHandler( "onClientMouseEnter",shGuest,GuestSH) addEventHandler("onClientMouseLeave",shGuest,SErem) lbl_reg_top_info = guiCreateLabel(X - 70,Y + 380,500,30,"Fill out all fields. Do no't use: (\"!@#$\"%'^&*()\")",false) guiLabelSetColor(lbl_reg_top_info,255,234,55) guiLabelSetVerticalAlign(lbl_reg_top_info,"center") guiLabelSetHorizontalAlign(lbl_reg_top_info,"center",false) guiSetVisible(lbl_reg_top_info,false) edit_account_name = guiCreateEdit(X + 20,Y + 210,250,35,"",false) guiEditSetMaxLength ( edit_account_name,25) guiSetVisible(edit_account_name,false) edit__reg_tab_password = guiCreateEdit(X + 20,Y + 275,250,35,"",false) guiEditSetMaxLength ( edit__reg_tab_password,25) guiEditSetMasked ( edit__reg_tab_password, true ) guiSetVisible(edit__reg_tab_password,false) edit__reg_tab_Repassword = guiCreateEdit(X + 20,Y + 345,250,35,"",false) guiEditSetMaxLength ( edit__reg_tab_Repassword,25) guiEditSetMasked ( edit__reg_tab_Repassword, true ) guiSetVisible(edit__reg_tab_Repassword,false) guiSetEnabled (edit__reg_tab_Repassword, true) --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! shRegister = guiCreateStaticImage( X + 182, Y + 401, 143, 45, "register.png", false ) addEventHandler("onClientGUIClick",shRegister,OnBtnRegister) addEventHandler( "onClientMouseEnter",shRegister,RegisterSH) addEventHandler("onClientMouseLeave",shRegister,SErem) --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! shRegister2 = guiCreateStaticImage( X + 23, Y + 409, 301, 44, "register2.png", false ) addEventHandler("onClientGUIClick",shRegister2,onClickBtnRegister) addEventHandler( "onClientMouseEnter",shRegister2,Register2SH) addEventHandler("onClientMouseLeave",shRegister2,SErem) guiSetVisible(shRegister2,false) reg_tab_error_msg = guiCreateLabel(X,Y + 310,364,31,"Error_reg_ttab",false) guiLabelSetColor(reg_tab_error_msg,255,20,0) guiLabelSetVerticalAlign(reg_tab_error_msg,"center") guiLabelSetHorizontalAlign(reg_tab_error_msg,"center",false) guiSetFont(reg_tab_error_msg,"default-bold-small") showCursor(true) guiSetText(reg_tab_error_msg, "") guiSetText(login_tab_error_msg, "") local username, password = loadLoginFromXML() if not( username == "" or password == "") then guiCheckBoxSetSelected ( checkbox_save, true ) guiSetText ( edit_Login, tostring(username)) guiSetText ( edit_password, tostring(password)) else guiCheckBoxSetSelected ( checkbox_save, false ) guiSetText ( edit_Login, tostring(username)) guiSetText ( edit_password, tostring(password)) end end end function LoginSH () guiStaticImageLoadImage(shLogin, "sh.png" ) playSound("song.mp3", true) end function RegisterSH () guiStaticImageLoadImage(shRegister, "shr.png" ) playSound("song.mp3", true) end function Register2SH () guiStaticImageLoadImage(shRegister2, "shr2.png" ) playSound("song.mp3", true) end function GuestSH () guiStaticImageLoadImage(shGuest, "shg.png" ) playSound("song.mp3", true) end function SErem () guiStaticImageLoadImage(shLogin, "login.png" ) stopSound("song.mp3", true) guiStaticImageLoadImage(shRegister, "register.png" ) stopSound("song.mp3", true) guiStaticImageLoadImage(shGuest, "guest.png" ) stopSound("song.mp3", true) guiStaticImageLoadImage(shRegister2, "register2.png" ) stopSound("song.mp3", true) end function start_cl_resource() open_log_reg_pannel() end addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),start_cl_resource) function loadLoginFromXML() local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if usernameNode and passwordNode then return xmlNodeGetValue(usernameNode), xmlNodeGetValue(passwordNode) else return "", "" end xmlUnloadFile ( xml_save_log_File ) end function saveLoginToXML(username, password) local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end if (username ~= "") then local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) if not usernameNode then usernameNode = xmlCreateChild(xml_save_log_File, "username") end xmlNodeSetValue (usernameNode, tostring(username)) end if (password ~= "") then local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if not passwordNode then passwordNode = xmlCreateChild(xml_save_log_File, "password") end xmlNodeSetValue (passwordNode, tostring(password)) end xmlSaveFile(xml_save_log_File) xmlUnloadFile (xml_save_log_File) end addEvent("saveLoginToXML", true) addEventHandler("saveLoginToXML", getRootElement(), saveLoginToXML) function resetSaveXML() local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end if (username ~= "") then local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) if not usernameNode then usernameNode = xmlCreateChild(xml_save_log_File, "username") end end if (password ~= "") then local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if not passwordNode then passwordNode = xmlCreateChild(xml_save_log_File, "password") end xmlNodeSetValue (passwordNode, "") end xmlSaveFile(xml_save_log_File) xmlUnloadFile (xml_save_log_File) end addEvent("resetSaveXML", true) addEventHandler("resetSaveXML", getRootElement(), resetSaveXML) function onClickBtnLogin(button,state) showChat(true) showCursor(false) guiSetVisible(Image,false) guiSetVisible(shGuest, false) guiSetVisible(Image, false) guiSetVisible(shLogin, false) guiSetVisible(shRegister, false) guiSetVisible(edit_password, false) guiSetVisible(edit_Login, false) guiSetVisible(checkbox_save, false) guiSetVisible(Login_img, false) if(button == "left" and state == "up") then if (source == shLogin) then username = guiGetText(edit_Login) password = guiGetText(edit_password) if guiCheckBoxGetSelected ( checkbox_save ) == true then checksave = true else checksave = false end triggerServerEvent("onRequestLogin",getLocalPlayer(),username,password,checksave) end end end
  5. luck.

    Join Failed

    works, thank you
  6. luck.

    Join Failed

    tried that more does not work
  7. luck.

    Join Failed

    What event can I use? onPlayerLogin?
  8. luck.

    Join Failed

    Sorry for the delay in responding, well I could make join and quit nick worked more login still does not work
  9. luck.

    Join Failed

    sorry, do not know English very well, anyway substitutes "onPlayerJoin" even so messages Join Login and still do not work, now the messages are also frozen on the screen, I can not know what is wrong because the console shows no nothing. function dxDrawColorText(str, ax, ay, bx, by, color, scale, font, left, top, clip, wordbreak, postGUI) 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, left, top, clip, wordbreak, postGUI ) end end local message = {join="",quit="",nick="",login=""} local x,y = guiGetScreenSize() local scaleX = x/1920 local scaleY = y/1080 function renderPlayerJoined ( ) dxDrawColorText("#ffffff".. message.join, 1140*scaleX, 20,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 20,16,16,"icon/join.png",0,-120) end function renderPlayerLeft ( ) dxDrawColorText("#ffffff".. message.quit, 1140*scaleX, 40,573.0,32.0,tocolor(0,0,255,170),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 40,16,16,"icon/quit.png",0,-120) end function renderPlayerNick ( ) dxDrawColorText("#ffffff".. message.nick, 1140*scaleX, 60,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 60,16,16,"icon/nick.png",0,-120) end function renderPlayerLogin ( ) dxDrawColorText("#ffffff".. message.login, 1140*scaleX, 80,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 80,16,16,"icon/login.png",0,-120) end addEvent( "onPlayerJoin", true ) addEventHandler( "onPlayerJoin", root,function( player, ulke ) message.join = "#ffffff"..getPlayerName (player) .. " #ffffffhas joined the game from #00ff00 ".. tostring ( ulke ) addEventHandler ( "onClientRender", root, renderPlayerJoined ) setTimer(removeEventHandler,6000,1,"onClientRender", root, renderPlayerJoined ) end) addEventHandler('onClientPlayerQuit', root,function(reason) message.quit = "#ffffff" ..getPlayerName(source) .. " #ffffffhas left game. [#ffffff" .. reason .. "#ffffff]" addEventHandler ( "onClientRender", root, renderPlayerLeft ) setTimer(removeEventHandler,6000,1,"onClientRender", root, renderPlayerLeft ) end) addEventHandler ( "onClientPlayerChangeNick", root,function ( oldNick, newNick ) message.nick = "#ffffff" ..oldNick.. " #ffffffis now known as #ffffff" ..newNick addEventHandler ( "onClientRender", root, renderPlayerNick ) setTimer(removeEventHandler,6000,1,"onClientRender", root, renderPlayerNick ) end) addEvent( "onPlayerLogin", true ) addEvent( "onPlayerLogout", true ) addEventHandler( "onPlayerLogin", root, function( player ) message.login = "#ffffff"..getPlayerName (player) .. " #ffffffhas successfully logged in!" addEventHandler ( "onClientRender", root, renderPlayerLogin ) setTimer(removeEventHandler,6000,1,"onClientRender", root, renderPlayerLogin ) end) addEventHandler( "onPlayerLogout", root, function( player ) message.login = "#ffffff"..getPlayerName (player) .. " #ffffffhas successfully logged out!" addEventHandler ( "onClientRender", root, renderPlayerLogin ) setTimer(removeEventHandler,6000,1,"onClientRender", root, renderPlayerLogin ) end)
  10. luck.

    Join Failed

    hi all good, I own a joinquit that has 4 functions: join, quit, login, nick, most just quit and nick work, can someone help me? code: function dxDrawColorText(str, ax, ay, bx, by, color, scale, font, left, top, clip, wordbreak, postGUI) 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, left, top, clip, wordbreak, postGUI ) end end local messageJoin = "" local messageQuit = "" local messageNick = "" local messageLogin = "" x,y = guiGetScreenSize() local scaleX = x/1920 local scaleY = y/1080 function renderPlayerJoined ( ) dxDrawColorText("#ffffff".. messageJoin, 1140*scaleX, 20,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 20,16,16,"icon/join.png",0,-120) end function renderPlayerLeft ( ) dxDrawColorText("#ffffff".. messageQuit, 1140*scaleX, 40,573.0,32.0,tocolor(0,0,255,170),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 40,16,16,"icon/quit.png",0,-120) end function renderPlayerNick ( ) dxDrawColorText("#ffffff".. messageNick, 1140*scaleX, 60,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 60,16,16,"icon/nick.png",0,-120) end function renderPlayerLogin ( ) dxDrawColorText("#ffffff".. messageLogin, 1140*scaleX, 80,574.0,20.0,tocolor(200,0,0,255),1,"default-bold","left","top",false,false,false) dxDrawImage (1110*scaleX, 80,16,16,"icon/login.png",0,-120) end function greetingHandler ( player, ulke ) messageJoin = "#ffffff"..getPlayerName (player) .. " #ffffffhas joined the game from #00ff00 ".. tostring ( ulke ) .."" addEventHandler ( "onClientRender", root, renderPlayerJoined ) setTimer ( function ( ) removeEventHandler ( "onClientRender", root, renderPlayerJoined ) end ,6000,1 ) end addEvent( "onJoin", true ) addEventHandler( "onJoin", root, greetingHandler ) addEventHandler('onClientPlayerQuit', root, function(reason) messageQuit = "#ffffff" ..getPlayerName(source) .. " #ffffffhas left game. [#ffffff" .. reason .. "#ffffff]" addEventHandler ( "onClientRender", root, renderPlayerLeft ) setTimer ( function ( ) removeEventHandler ( "onClientRender", root, renderPlayerLeft ) end ,6000,1 ) end ) addEventHandler ( "onClientPlayerChangeNick", root, function ( oldNick, newNick ) messageNick = "#ffffff" ..oldNick.. " #ffffffis now known as #ffffff" ..newNick addEventHandler ( "onClientRender", root, renderPlayerNick ) setTimer ( function ( ) removeEventHandler ( "onClientRender", root, renderPlayerNick ) end ,6000,1 ) end ) function giris ( player ) messageLogin = "#ffffff"..getPlayerName (player) .. " #ffffffhas successfully logged in!" addEventHandler ( "onClientRender", root, renderPlayerLogin ) setTimer ( function ( ) removeEventHandler ( "onClientRender", root, renderPlayerLogin ) end ,6000,1 ) end addEvent( "onPlayerLogin", true ) addEventHandler( "onLogin", root, giris ) function cikis ( player ) messageLogin = "#ffffff"..getPlayerName (player) .. " #ffffffhas successfully logged out!" addEventHandler ( "onClientRender", root, renderPlayerLogin ) setTimer ( function ( ) removeEventHandler ( "onClientRender", root, renderPlayerLogin ) end ,6000,1 ) end addEvent( "onPlayerLogout", true ) addEventHandler( "onLogout", root, cikis )
  11. It worked! Thank you all
  12. error... : [2013-07-10 01:37:49] ERROR: [resources]\race_toptimes\toptimes_server.lua:32: attempt to concatenate global 'source' (a userdata value) Edit: ifahed sorry, had not seen your message will test
  13. No worked new error : [2013-07-10 01:24:27] ERROR: [resources]\race_toptimes\toptimes_server.lua:32: attempt to concatenate global 'source' (a userdata value)
  14. hi all I have a problem in a toptimes, messages deletetime and new team does not appear. code: -- -- toptimes_server.lua -- SToptimesManager = {} SToptimesManager.__index = SToptimesManager SToptimesManager.instances = {} --------------------------------------------------------------------------- -- Server -- Handle events from Race -- -- This is the 'interface' from Race -- --------------------------------------------------------------------------- addEvent('onMapStarting') addEventHandler('onMapStarting', g_Root, function(mapInfo, mapOptions, gameOptions) if g_SToptimesManager then g_SToptimesManager:setModeAndMap( mapInfo.modename, mapInfo.name, gameOptions.statsKey ) end end ) addEvent('onPlayerPickUpRacePickup') addEventHandler('onPlayerPickUpRacePickup', g_Root, function(number, sort, model) if sort == "vehiclechange" then if model == 425 then outputChatBox ( source, "has got the Hunter", getRootElement(), 255, 255, 255, true ) if g_SToptimesManager then g_SToptimesManager:playerFinished( source, exports.race:getTimePassed()) end end end end ) addEvent('onPlayerFinish') addEventHandler('onPlayerFinish', g_Root, function(rank, time) if g_SToptimesManager then g_SToptimesManager:playerFinished( source, time) end end ) addEventHandler('onResourceStop', g_ResRoot, function() if g_SToptimesManager then g_SToptimesManager:unloadingMap() end end ) addEventHandler('onPlayerQuit', g_Root, function() if g_SToptimesManager then g_SToptimesManager:removePlayerFromUpdateList(source) g_SToptimesManager:unqueueUpdate(source) end end ) addEventHandler('onResourceStart', g_ResRoot, function() local raceInfo = getRaceInfo() if raceInfo and g_SToptimesManager then g_SToptimesManager:setModeAndMap( raceInfo.mapInfo.modename, raceInfo.mapInfo.name, raceInfo.gameOptions.statsKey ) end end ) function getRaceInfo() local raceResRoot = getResourceRootElement( getResourceFromName( "race" ) ) return raceResRoot and getElementData( raceResRoot, "info" ) end --------------------------------------------------------------------------- -- -- Events fired from here -- --------------------------------------------------------------------------- addEvent("onPlayerToptimeImprovement") --------------------------------------------------------------------------- --------------------------------------------------------------------------- -- -- SToptimesManager:create() -- -- Create a SToptimesManager instance -- --------------------------------------------------------------------------- function SToptimesManager:create() local id = #SToptimesManager.instances + 1 SToptimesManager.instances[id] = setmetatable( { id = id, playersWhoWantUpdates = {}, updateQueue = {}, serviceQueueTimer = nil, displayTopCount = 12, -- Top number of times to display mapTimes = nil, -- SMaptimes:create() serverRevision = 0, -- To prevent redundant updating to clients }, self ) SToptimesManager.instances[id]:postCreate() return SToptimesManager.instances[id] end --------------------------------------------------------------------------- -- -- SToptimesManager:destroy() -- -- Destroy a SToptimesManager instance -- --------------------------------------------------------------------------- function SToptimesManager:destroy() SToptimesManager.instances[self.id] = nil self.id = 0 end --------------------------------------------------------------------------- -- -- SToptimesManager:postCreate() -- -- -- --------------------------------------------------------------------------- function SToptimesManager:postCreate() cacheSettings() self.displayTopCount = g_Settings.numtimes end --------------------------------------------------------------------------- -- -- SToptimesManager:setModeAndMap() -- -- Called when a new map has been loaded -- --------------------------------------------------------------------------- function SToptimesManager:setModeAndMap( raceModeName, mapName, statsKey ) outputDebug( 'TOPTIMES', 'SToptimesManager:setModeAndMap ' .. raceModeName .. '<>' .. mapName ) -- Reset updatings from the previous map self.playersWhoWantUpdates = {} self.updateQueue = {} if self.serviceQueueTimer then killTimer(self.serviceQueueTimer) end self.serviceQueueTimer = nil -- Remove old map times if self.mapTimes then self.mapTimes:flush() -- Ensure last stuff is saved self.mapTimes:destroy() end -- Get map times for this map self.mapTimes = SMaptimes:create( raceModeName, mapName, statsKey ) self.mapTimes:load() -- Get the toptimes data ready to send self:updateTopText() end --------------------------------------------------------------------------- -- -- SToptimesManager:unloadingMap() -- -- Called when unloading -- --------------------------------------------------------------------------- function SToptimesManager:unloadingMap() if self.mapTimes then self.mapTimes:flush() -- Ensure last stuff is saved end end --------------------------------------------------------------------------- -- -- SToptimesManager:playerFinished() -- -- If time is good enough, insert into database -- --------------------------------------------------------------------------- function SToptimesManager:playerFinished( player, newTime, dateRecorded ) -- Check if top time recording is disabled for this player if getElementData ( player, "toptimes" ) == "off" then return end if not self.mapTimes then outputDebug( 'TOPTIMES', 'SToptimesManager:playerFinished - self.mapTimes == nil' ) return end dateRecorded = dateRecorded or getRealDateTimeNowString() local oldTime = self.mapTimes:getTimeForPlayer( player ) -- Can be false if no previous time local newPos = self.mapTimes:getPositionForTime( newTime, dateRecorded ) -- See if time is an improvement for this player if not oldTime or newTime < oldTime then local oldPos = self.mapTimes:getIndexForPlayer( player ) triggerEvent("onPlayerToptimeImprovement", player, newPos, newTime, oldPos, oldTime, self.displayTopCount, self.mapTimes:getValidEntryCount() ) -- See if its in the top display if newPos <= self.displayTopCount then outputDebug( 'TOPTIMES', getPlayerName(player) .. ' got toptime position ' .. newPos ) end if oldTime then outputDebug( 'TOPTIMES', getPlayerName(player) .. ' new personal best ' .. newTime .. ' ' .. oldTime - newTime ) end self.mapTimes:setTimeForPlayer( player, newTime, dateRecorded ) -- updateTopText if database was changed if newPos <= self.displayTopCount then self:updateTopText() end end outputDebug( 'TOPTIMES', '++ SToptimesManager:playerFinished ' .. tostring(getPlayerName(player)) .. ' time:' .. tostring(newTime) ) end --------------------------------------------------------------------------- -- -- SToptimesManager:updateTopText() -- -- Update the toptimes client data for the current map -- --------------------------------------------------------------------------- function SToptimesManager:updateTopText() if not self.mapTimes then return end -- Update data
×
×
  • Create New...