luck.
Members-
Posts
20 -
Joined
-
Last visited
luck.'s Achievements
Civilian (7/54)
0
Reputation
-
not a script, I say just play the music from any server tracks user and only for me, you know?
-
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¬¬
-
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 )
-
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
-
What event can I use? onPlayerLogin?
-
Sorry for the delay in responding, well I could make join and quit nick worked more login still does not work
-
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)
-
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 )
-
It worked! Thank you all
-
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
-
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)
-
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