DeadTeamRacing Posted February 28, 2011 Share Posted February 28, 2011 (edited) Hey I scripted Toptimes so i need to know if this is right so please help addEvent( "onPlayerPickUpRacePickup", true ) function onPlayerPickUpRacePickup(pickupID,pickupType,vehicleModel) if pickupType == "vehiclechange" and vehicleModel == 425 then outputChatBox("#0000ff*#ffffff"..getPlayerName(source).. ' Has got a new Toptime #ff000 Rank: ' .. newPos .. " #ff6600 | Time:"..msToTimeStr(newTime)) outputChatBox("#ffffff* #ff6600 Disabling Ghostmode in 10 seconds...") setTimer(gmoff, 10000, 1) g_SToptimesManager:playerFinished( source, exports.race:getTimePassed()) end end addEventHandler( "onPlayerPickUpRacePickup", getRootElement(), onPlayerPickUpRacePickup) Edited March 1, 2011 by Guest Link to comment
Moderators Citizen Posted February 28, 2011 Moderators Share Posted February 28, 2011 Hi DeadTeamRacing, Before replace this: outputChatBox("#0000ff*#ffffff"..getPlayerName(source).. ' Has got a new Toptime #ff000 Rank: ' .. newPos .. " #ff6600 | Time:"..msToTimeStr(newTime)) by this: outputChatBox("#0000ff*#ffffff"..getPlayerName(source).." Has got a new Toptime #ff000 Rank: " .. newPos .. " #ff6600 | Time:"..msToTimeStr(newTime)) Except that, it might works but I unknow this function ( msToTimeStr ) so I can't say if it's works: But why you can't try it yourself ? Link to comment
DeadTeamRacing Posted March 1, 2011 Author Share Posted March 1, 2011 [2011-03-01 01:12:40] Starting race_toptimes [2011-03-01 01:12:40] SCRIPT ERROR: race_toptimes/toptimes_server.lua:36: unexpected symbol near ')' [2011-03-01 01:12:40] WARNING: Loading script failed: race_toptimes/toptimes_server.lua:36: unexpected symbol near ')' it shows that and toptimes say please wait Link to comment
diegofkda Posted March 1, 2011 Share Posted March 1, 2011 [2011-03-01 01:12:40] Starting race_toptimes[2011-03-01 01:12:40] SCRIPT ERROR: race_toptimes/toptimes_server.lua:36: unexpected symbol near ')' [2011-03-01 01:12:40] WARNING: Loading script failed: race_toptimes/toptimes_server.lua:36: unexpected symbol near ')' it shows that and toptimes say please wait Check if there is nothing wrong at line 36 Link to comment
Moderators Citizen Posted March 1, 2011 Moderators Share Posted March 1, 2011 There is an extra ) in your line 36. If you are not sure show us your line 36 Link to comment
DeadTeamRacing Posted March 1, 2011 Author Share Posted March 1, 2011 that problem solved (thanks:)) but now it says this error [2011-03-01 15:14:00] SCRIPT ERROR: race_toptimes/toptimes_server.lua:420: ')' expected (to close '(' at line 405) near 'addEvent' [2011-03-01 15:14:00] WARNING: Loading script failed: race_toptimes/toptimes_server.lua:420: ')' expected (to close '(' at line 405) near 'addEvent' Link to comment
proracer Posted March 1, 2011 Share Posted March 1, 2011 Post the code so we can help you ... Link to comment
Moderators Citizen Posted March 1, 2011 Moderators Share Posted March 1, 2011 lol here a ) is missing to close the addEvent at line 405 Link to comment
DeadTeamRacing Posted March 1, 2011 Author Share Posted March 1, 2011 Well i am wishing if u can find all possible errors -- -- 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", true ) function onPlayerPickUpRacePickup(pickupID,pickupType,vehicleModel) if pickupType == "vehiclechange" and vehicleModel == 425 then outputChatBox("#0000ff*#ffffff"..getPlayerName(source).." Has got a new Toptime #ff000 Rank: " .. newPos .. " #ff6600 | Time:"..msToTimeStr(newTime)) setTimer(gmoff, 10000, 1) g_SToptimesManager:playerFinished( source, exports.race:getTimePassed()) end end addEventHandler( "onPlayerPickUpRacePickup", getRootElement(), onPlayerPickUpRacePickup) 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 -- Read top rows from map toptimes table and send to all players who want to know self.toptimesDataForMap = self.mapTimes:getToptimes( self.displayTopCount ) self.serverRevision = self.serverRevision + Link to comment
proracer Posted March 1, 2011 Share Posted March 1, 2011 Change line 405 from: addEventHandler('onSettingChange'), g_ResRoot, to: addEventHandler('onSettingChange', g_ResRoot, Link to comment
DeadTeamRacing Posted March 1, 2011 Author Share Posted March 1, 2011 all other fixeds but this message shows [2011-03-01 22:21:52] ERROR: Client triggered serverside event onLoadedAtClient_tt, but event is not added serverside ..... ..... ..... .... [2011-03-01 22:22:01] ERROR: Client triggered serverside event onClientRequestToptimesUpdates, but event is not added serverside ........ ........ ........ [2011-03-01 22:22:11] ERROR: Client triggered serverside event onClientRequestToptimesUpdates, but event is not added [2011-03-01 22:22:40] ERROR: Client triggered serverside event onClientRequestToptimesUpdates, but event is not added serverside [2011-03-01 22:22:50] ERROR: Client triggered serverside event onClientRequestToptimesUpdates, but event is not added serverside Link to comment
Moderators Citizen Posted March 1, 2011 Moderators Share Posted March 1, 2011 What ? That's very strange ! Because all events are added ! Are you sure that your code is loaded ? ( maybe in the meta.xml ?) Link to comment
DeadTeamRacing Posted March 1, 2011 Author Share Posted March 1, 2011 this is my meta <meta> <info name="Toptimes" description="Toptimes addon for Race" author="ccw" type="script" addon="race" version="0.0.3" build="r472 02Oct09"/> <script src="_common_tt.lua" type="server"/> <script src="util_tt_server.lua" type="server"/> <script src="databasetable_server.lua" type="server"/> <script src="maptimes_server.lua" type="server"/> <script src="toptimes_server.lua" type="server"/> <script src="_common_tt.lua" type="client"/> <script src="util_tt_client.lua" type="client"/> <script src="toptimes_client.lua" type="client"/> <file src="img/timepassedbg.png"/> <file src="img/blank.png"/> <settings> <!-- ***************************************************** All these settings are adjustable in the Admin Panel: 1. start admin 2. press 'p' 3. select Resources tab 4. double click on 'race_toptimes' ***************************************************** --> <setting name="*numtimes" value="8" friendlyname="Number of top times" group="Setting" accept="1-30" desc="The number of top times to show." /> <setting name="*startshow" value="false" friendlyname="Show at start" group="Setting" accept="false,true" desc="Set to true to show the table at the start of each race." /> <setting name="*gui_x" value="0.7" friendlyname="Table position X" group="Interface" accept="0.00-1.00" desc="The position of the table on the screen." /> <setting name="*gui_y" value="0.02" friendlyname="Table position Y" group="Interface" accept="0.00-1.00" desc="The position of the table on the screen." /> <setting name="*admingroup" value="Admin,SuperModerator" friendlyname="Admin group list" group="_Advanced" accept="*" examples="Admin,Moderator,SuperModerator" desc="To issue certain commands, the player must belong to one of the groups listed." /> </settings> </meta> Link to comment
Moderators Citizen Posted March 1, 2011 Moderators Share Posted March 1, 2011 That's strange, the toptimes_server.lua is in your meta.xml at line 8: <script src="toptimes_server.lua" type="server"/> Maybe put it in first place ?? Otherwise I don't know maybe Solidsnake or another scripter can help you on this error Link to comment
proracer Posted March 1, 2011 Share Posted March 1, 2011 I think it doesn't matter on which line it is placed in meta.xml ... Link to comment
Moderators Citizen Posted March 1, 2011 Moderators Share Posted March 1, 2011 I know but I have no idea so .... ^^ Link to comment
Dre-+- Posted March 3, 2011 Share Posted March 3, 2011 This script have alot of errors: Line 362,363: outputChatBox( "Top time"..placeText.." from " .. tostring(row.playerName) .. " deleted by " .. getPlayerName(player), 255,55,00 ) outputServerLog( "INFO: Top time"..placeText.." from " ..tostring(row.playerName).. " (" ..tostring(row.timeText).. " in " ..mapName.. ") deleted by " .. getAdminNameForLog(player) ) Line 388: addEventHandler("onSettingChange", g_ResRoot, Line 399: end) BTW: Full debugged script: -- -- 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", true ) function onPlayerPickUpRacePickup(pickupID,pickupType,vehicleModel) if pickupType == "vehiclechange" and vehicleModel == 425 then outputChatBox("#0000ff*#ffffff"..getPlayerName(source).." Has got a new Toptime #ff000 Rank: " .. newPos .. " #ff6600 | Time:"..msToTimeStr(newTime)) setTimer(gmoff, 10000, 1) g_SToptimesManager:playerFinished( source, exports.race:getTimePassed()) end end addEventHandler( "onPlayerPickUpRacePickup", getRootElement(), onPlayerPickUpRacePickup) 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 -- Read top rows from map toptimes table and send to all players who want to know self.toptimesDataForMap = self.mapTimes:getToptimes( self.displayTopCount ) self.serverRevision = self.serverRevision + Link to comment
DeadTeamRacing Posted March 4, 2011 Author Share Posted March 4, 2011 wow thank you very much Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now