acp___(PL) Posted October 25, 2009 Posted October 25, 2009 (edited) Working on a script that will give points for the drift, will take into account: angle in the corner and speed. Speed is not the problem ..., but angle yes ... my way is not working like I wanted ... local gMe = getLocalPlayer() local screenWidth, screenHeight = guiGetScreenSize() local screenPlayerWidth = screenWidth / 1280 local screenPlayerHeight = screenHeight / 1024 local g_rot = getRootElement() local myX, myY = getElementPosition(gMe) local driftX1 = myX local driftY1 = myY function uruchomDriftMeter() if getVehicleType(getPedOccupiedVehicle(gMe)) == "Automobile" then myX, myY = getElementPosition(gMe) local driftX0 = driftX1 local driftY0 = driftY1 driftX1 = myX driftY1 = myY local myRX, myRY, myRZ = getElementRotation(getPedOccupiedVehicle(gMe)) local distVectorNorth = getDistanceBetweenPoints2D(driftX0, driftY0, driftX0, driftY1) local distVectorSpeed = getDistanceBetweenPoints2D(driftX0, driftY0, driftX1, driftY1) local cosinusDrift = distVectorNorth / distVectorSpeed local angelDriftBezwzgledny = math.acos(cosinusDrift) local angelDriftAbs = angelDriftBezwzgledny * (180 / math.pi) local angelDrift = math.floor(math.abs(angelDriftAbs - myRZ)) if driftY1 < driftY0 and driftX1 < driftX0 then angelDrift = angelDrift + 90 elseif driftY1 < driftY0 and driftX1 > driftX0 then angelDrift = angelDrift + 180 elseif driftY1 > driftY0 and driftX1 > driftX0 then angelDrift = angelDrift + 270 end dxDrawText( "Drift angel: " ..angelDrift, math.floor(5*screenPlayerWidth), math.floor(580*screenPlayerHeight), screenWidth, screenHeight, tocolor ( 0, 255, 0, 255 ), 1, "default-bold" ) dxDrawText( "angelDriftAbs: " ..angelDriftAbs, math.floor(5*screenPlayerWidth), math.floor(555*screenPlayerHeight), screenWidth, screenHeight, tocolor ( 0, 255, 0, 255 ), 1, "default-bold" ) dxDrawText( "myRZ: " ..myRZ, math.floor(5*screenPlayerWidth), math.floor(530*screenPlayerHeight), screenWidth, screenHeight, tocolor ( 0, 255, 0, 255 ), 1, "default-bold" ) end end addEventHandler("onClientResourceStart", g_rot, addEventHandler ('onClientRender', g_rot, uruchomDriftMeter) ) Edited January 11, 2011 by Guest 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
Buffalo Posted October 25, 2009 Posted October 25, 2009 local speedx,speedy = getElementVelocity(vehicle) local px,py = getElementPosition(vehicle) local nx,ny = speedx * 50 + px, speedy * 50 + py local staticRot = ( 360 - math.deg ( math.atan2 ( ( nx - px ), ( ny - py ) ) ) ) % 360 local _,_,currRot = getVehicleRotation(vehicle) local driftAngle = math.abs(staticRot - currRot) Powered by Kimsufi© ☢ ZHP on Facebook ☢ ZHP on Youtube ☢ Support us ☢
acp___(PL) Posted November 5, 2009 Author Posted November 5, 2009 thanks Buffalo, this is a much simpler way, but it works the same and in both cases are some angle extent is difficult to eliminate confusion ... Now I use the mix of the two method local driftPlayerVehicle = getPedOccupiedVehicle(gMe) if getVehicleType(driftPlayerVehicle) == "Automobile" then myX, myY = getElementPosition(gMe) local speedXdrift, speedYdrift, speedZdrift = getElementVelocity (driftPlayerVehicle) local driftSpeed = math.sqrt(speedXdrift^2 + speedYdrift^2 + speedZdrift^2) * 161 --2paq method local driftX0 = driftX1 local driftY0 = driftY1 driftX1 = myX driftY1 = myY local myRX, myRY, myRZ = getElementRotation(driftPlayerVehicle) local distVectorNorth = getDistanceBetweenPoints2D(driftX0, driftY0, driftX0, driftY1) local distVectorSpeed = getDistanceBetweenPoints2D(driftX0, driftY0, driftX1, driftY1) local cosinusDrift = distVectorNorth / distVectorSpeed local angelDriftBezwzgledny = math.acos(cosinusDrift) local angelDriftAbs = angelDriftBezwzgledny * (180 / math.pi) --Inclusion of a quadrant of the coordinate system if driftY1 < driftY0 and driftX1 < driftX0 then angelDriftAbs = 180 - angelDriftAbs elseif driftY1 < driftY0 and driftX1 > driftX0 then angelDriftAbs = 180 + angelDriftAbs elseif driftY1 > driftY0 and driftX1 > driftX0 then angelDriftAbs = 360 - angelDriftAbs end local angelDrift = math.floor(math.abs(myRZ - angelDriftAbs)) --Inclusion of a quadrant of the coordinate system and direction of drifting if angelDrift > 5 then if driftY1 > driftY0 and driftX1 < driftX0 and myRZ > 180 then angelDrift = angelDrift - 180 elseif driftY1 > driftY0 and driftX1 > driftX0 and myRZ < 180 then angelDrift = angelDrift - 180 end end --Buffalo method local nxDrift,nyDrift = speedXdrift * 50 + myX, speedYdrift * 50 + myY local staticRotInDrift = ( 360 - math.deg ( math.atan2 ( ( nxDrift - myX ), ( nyDrift - myY ) ) ) ) % 360 local angelDriftBuffalo = math.floor(math.abs(staticRotInDrift - myRZ)) --Restrictions 2paq method if driftSpeed <= 25 or (angelDrift/driftSpeed) >= 1.5 then angelDrift = 0 elseif angelDrift <= 5 then angelDrift = 0 end --Restrictions Buffalo method if driftSpeed <= 25 or (angelDriftBuffalo/driftSpeed) >= 1.5 then angelDriftBuffalo = 0 elseif angelDriftBuffalo <= 5 then angelDriftBuffalo = 0 end --Restrictions if math.abs(angelDriftBuffalo - angelDrift) > 15 then angelDrift = 0 end if myRX > 30 or myRY > 30 then angelDrift = 0 end angelDrift = ( angelDrift + angelDriftBuffalo ) / 2 if driftSpeed < 1 or driftSpeed > 350 then driftSpeed = 0 end --Time interval between drifts ~3s (limit FPS = 36) if angelDrift >= 18 then driftTime = 150 elseif angelDrift > 5 then driftTimeTP = 150 end if driftTime >= 0 then driftTime = driftTime - 1 end if driftTimeTP >= 0 then driftTimeTP = driftTimeTP - 1 end --Reset factor and temporary points after a time if driftTime == 0 or driftTimeTP == 0 then if bestDriftPoints < driftPointsTEMP then bestDriftPoints = driftPointsTEMP end driftFactor = 1 driftPointsTEMP = 0 driftKolorR = 255 driftKolorG = 255 driftKolorB = 0 --Icrement factor 1s after last drift (limit FPS = 36) elseif driftTime == 132 and driftCpTimer > 0 and driftFactor <= 12 then driftFactor = driftFactor + 1 if driftFactor > 11 then driftKolorR = 255 driftKolorB = 0 elseif driftFactor > 8 then driftKolorB = driftKolorB + 51 elseif driftFactor > 6 then driftKolorB = driftKolorB + 51 driftKolorG = driftKolorG - 51 elseif driftFactor > 3 then driftKolorG = driftKolorG - 51 driftKolorR = driftKolorR - 51 elseif driftFactor > 1 then driftKolorR = driftKolorR - 51 end end if driftCpTimer > 0 then driftCpTimer = driftCpTimer - 1 else driftFactor = 0 end --Restriction against donuts one way if ((myRZ > 55 and myRZ < 65) or (myRZ > 175 and myRZ < 185) or (myRZ > 295 and myRZ < 305)) and math.abs(myRZ_poprzedni - myRZ) > 2 then if myRZ_poprzedni > myRZ then antyBonczek = antyBonczek + 1 else antyBonczek = antyBonczek - 1 end end -- dxDrawText( "antyBonczek: " ..antyBonczek, math.floor(40*screenPlayerWidth), math.floor(200*screenPlayerHeight), screenWidth, screenHeight, tocolor ( 0, 255, 0, 255 ), 1, "pricedown") myRZ_poprzedni = myRZ if math.abs(antyBonczek) > 14 then driftFactorAntyBonczek = 0 antyBonczekTimer = 36 * 60 antyBonczek = 0 driftFactor = 0 driftPointsTEMP = 0 end if antyBonczekTimer > 0 then antyBonczekTimer = antyBonczekTimer - 1 dxDrawText( "DRIFT x0 (" ..antyBonczekTimer.. ")", math.floor(5*screenPlayerWidth), math.floor(557*screenPlayerHeight), screenWidth, screenHeight, tocolor ( 255, 255, 0, 255 ), 1, "pricedown") end if antyBonczekTimer == 2 then antyBonczek = 0 driftFactorAntyBonczek = 1 end --points to view and remember local vehDriftHealth = getElementHealth(getPedOccupiedVehicle(gMe)) if vehDriftHealth and vehDriftHealth > 1 and playerIsNotSpawn == 1 then local thisRenderDriftPoints = (driftSpeed * angelDrift * driftFactor * driftFactorAntyBonczek)/850 driftPointsTEMP = driftPointsTEMP + thisRenderDriftPoints driftPoints = driftPoints + (thisRenderDriftPoints/333) allDriftPoints = allDriftPoints + thisRenderDriftPoints end 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
Guest Posted December 6, 2009 Posted December 6, 2009 hello Buffalo i add ur drift meter in a .lua file but it wont work can u help me??
acp___(PL) Posted January 9, 2011 Author Posted January 9, 2011 Now I trying to develop my script, I want to add a table of results combined with a map How to save a two-dimensional table ">>>newtableDriftRecords<<<" to the database? See the third part of code line 32 addEvent('onMapStarting') addEventHandler('onMapStarting', g_rot, function(mapInfo) thisDriftMapName = "drift_records-" ..mapInfo.name executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) end ) addEvent('onThisIsMyDriftPoints', true) addEventHandler('onThisIsMyDriftPoints', g_rot , function (allPlayerDriftPoints, bestPlayerDriftPoints, the_source) local namePlayerDM = getPlayerName ( the_source ) local playerDriftRecords = executeSQLSelect( thisDriftMapName, "drift_record", "best_drift", "record_day", "player_nick='"..namePlayerDM.."'" ) if ( type( playerDriftRecords ) == "table" and #playerDriftRecords == 0 ) or not playerDriftRecords then writeRecordToTable(namePlayerDM, allPlayerDriftPoints, bestPlayerDriftPoints, 0) elseif type( playerDriftRecords ) == "table" then if allPlayerDriftPoints > playerDriftRecords[1]['drift_record']then writeRecordToTable(namePlayerDM, allPlayerDriftPoints, bestPlayerDriftPoints, 1) end end end ) function writeRecordToTable(driftNick, allDriftPoints, bestDrift, old_record) local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick", "drift_record", "best_drift", "record_day" ) local newtableDriftRecords = tableDriftRecords if ( type( tableDriftRecords ) == "table" and #tableDriftRecords == 0 ) or not tableDriftRecords then outputConsole("nie ma tabeli tableDriftRecords" ) elseif type( tableDriftRecords ) == "table" then local i = 1 while tableDriftRecords[i]['drift_record'] > allDriftPoints do i = i + 1 end local playerIdOldRecord = -1 if old_record == 1 then playerIdOldRecord = 1 while tableDriftRecords[i]['player_nick'] ~= driftNick do playerIdOldRecord = playerIdOldRecord + 1 end end newtableDriftRecords[i]['player_nick'] = driftNick newtableDriftRecords[i]['drift_record'] = allDriftPoints newtableDriftRecords[i]['best_drift'] = bestDrift newtableDriftRecords[i]['record_day'] = getRealDateTimeNowString() local k while tableDriftRecords[i] do i = i + 1 k = i - 1 if playerIdOldRecord == k then break end newtableDriftRecords[i]['player_nick'] = newtableDriftRecords[k]['player_nick'] newtableDriftRecords[i]['drift_record'] = newtableDriftRecords[k]['drift_record'] newtableDriftRecords[i]['best_drift'] = newtableDriftRecords[k]['best_drift'] newtableDriftRecords[i]['record_day'] = newtableDriftRecords[k]['record_day'] end This table ">>>[b]newtableDriftRecords[/b]<<<" to database! --NEED HELP end end function getRealDateTimeNowString() return getRealDateTimeString( getRealTime() ) end function getRealDateTimeString( time ) return string.format( '%04d-%02d-%02d %02d:%02d:%02d' ,time.year + 1900 ,time.month + 1 ,time.monthday ,time.hour ,time.minute ,time.second ) end 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 10, 2011 Author Posted January 10, 2011 I want to save the table this way: executeSQLDropTable( thisDriftMapName ) local n = 1 while newtableDriftRecords[n] do executeSQLInsert( thisDriftMapName, "'"..newtableDriftRecords[n]['player_nick'].."','"..newtableDriftRecords[n]['drift_record'].."','"..newtableDriftRecords[n]['best_drift'].."','"..newtableDriftRecords[n]['record_day'].."'" ) n = n + 1 end I can't check it because appeared an error: ERROR: 2paq_driftmeter\driftmeter_s.lua:46: Database query failed: near "-": syntax error second part of code line 5 (earlier post) local playerDriftRecords = executeSQLSelect( thisDriftMapName, "drift_record", "best_drift", "record_day", "player_nick='"..namePlayerDM.."'" ) ERROR: 2paq_driftmeter\driftmeter_s.lua:109: Database query failed: near "-": syntax error third part of code line 2 (earlier post) local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick", "drift_record", "best_drift", "record_day" ) I have also question, how the function works: getMapName() I used it here and returns "none" addEventHandler('onResourceStart', g_ResRoot, function() thisDriftMapName = "drift_records-" ..getMapName() executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) end Resource starts by running from file "meta.xml" map 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 11, 2011 Author Posted January 11, 2011 Why does the following function from a table in the database returns "nil"? local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick", "drift_record", "best_drift", "record_day" ) How to read an entire table from the database? 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 12, 2011 Author Posted January 12, 2011 ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:>>>11<<<: attempt to concatenate field 'drift_record' (a nil value) addEvent('onMapStarting') addEventHandler('onMapStarting', g_rot, function(mapInfo, mapOptions, gameOptions) thisDriftMapName = "drift_records_on_map_" ..mapInfo.name executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) end ) function writeRecordToTable(driftNick, allDriftPoints, bestDrift, old_record) local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick", "drift_record", "best_drift", "record_day" ) if type( tableDriftRecords ) == "table" and #tableDriftRecords > 0 then outputDebugString("Test: " ..tableDriftRecords[1]['drift_record'], 3, 0, 255, 255) end end Edit: local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick, drift_record, best_drift, record_day" ) 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 13, 2011 Author Posted January 13, 2011 Why do something that works if checking the "outputDebug", in the loop "while" dosen't? outputDebugString("Wartość [1].drift_record: " ..tableDriftRecords[1].drift_record, 3, 0, 255, 255) [2011-01-13 18:56:01] INFO: Wartość [1].drift_record: 15836.505859375 local i = 1 outputDebugString("Wartość [i][drift_record]: " ..tableDriftRecords[i]['drift_record'], 3, 0, 255, 255) [2011-01-13 18:56:01] INFO: Wartość [drift_record]: 15836.505859375 local i = 1 local playerIdOldRecord = -1 while tableDriftRecords[i]['drift_record'] > allDriftPoints do i = i + 1 end [2011-01-13 18:56:01] ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:>>>3 line(code above)<<<: attempt to index field '?' (a nil value) 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 15, 2011 Author Posted January 15, 2011 1. I change something in one table (copy of original), and this change also my second table (original)?!?! 2. Why only one repeat loops "repeat-until"? function writeRecordToTable(driftNick, allDriftPoints, bestDrift, old_record) --wczytanie tabeli dwuwymiarowej outputDebugString("Algorytm wpisu do BD", 3, 0, 0, 255) local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick, drift_record, best_drift, record_day" ) if not tableDriftRecords then outputDebugString("Brak tabeli z rekordami driftowymi!!!", 3, 255, 0, 0) elseif type( tableDriftRecords ) == "table" then local newtableDriftRecords = {} if #tableDriftRecords > 0 then outputDebugString("Ilosc wierszy w bazie danych: " ..#tableDriftRecords, 3, 0, 255, 255) outputDebugString("Wartość allDriftPoints: " ..allDriftPoints, 3, 0, 255, 255) newtableDriftRecords = tableDriftRecords local i = 1 outputDebugString("Wartość [i][drift_record]: " ..tableDriftRecords[i]['drift_record'], 3, 0, 255, 255) local playerIdOldRecord = -1 --początek procedury testowej for i_key, i_value in pairs(tableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w tableDriftRecords (IPT)", 3, 0, 255, 255) end for i_key, i_value in pairs(newtableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w newtableDriftRecords (IPT)", 3, 0, 255, 255) end --koniec procedury testowej for i_key, i_value in pairs(tableDriftRecords) do if i_value['drift_record'] < allDriftPoints then i = i_key outputDebugString("Znaleziono i=" ..i, 3, 0, 255, 255) break end outputDebugString(i_value['player_nick'].. " ma więcej punktów!", 3, 0, 255, 255) end if old_record == 1 then outputDebugString("Szukam old_record", 3, 0, 255, 255) for j_key, j_value in pairs(tableDriftRecords) do if j_value['player_nick'] == driftNick then playerIdOldRecord = j_key outputDebugString("Znaleziono playerIdOldRecord=" ..playerIdOldRecord, 3, 0, 255, 255) break end end end newtableDriftRecords[i]['player_nick'] = driftNick newtableDriftRecords[i]['drift_record'] = allDriftPoints newtableDriftRecords[i]['best_drift'] = bestDrift newtableDriftRecords[i]['record_day'] = getRealDateTimeNowString() --początek procedury testowej for i_key, i_value in pairs(tableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w tableDriftRecords (IIPT)", 3, 0, 255, 255) end for i_key, i_value in pairs(newtableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w newtableDriftRecords (IIPT)", 3, 0, 255, 255) end --koniec procedury testowej local k repeat outputDebugString("newtableDriftRecords[i][player_nick]: " ..newtableDriftRecords[i]['player_nick'], 3, 0, 255, 255) k = i i = i + 1 outputDebugString("tableDriftRecords[k][player_nick]: " ..tableDriftRecords[k]['player_nick'], 3, 0, 255, 255) outputDebugString("k=" ..k.. " & i=" ..i.. " (wierszy: " ..#tableDriftRecords.. ")", 3, 0, 255, 255) if playerIdOldRecord == k then break end if not newtableDriftRecords[i] then newtableDriftRecords[i] = { ['player_nick'] = tableDriftRecords[k]['player_nick'], ['drift_record'] = tableDriftRecords[k]['drift_record'], ['best_drift'] = tableDriftRecords[k]['best_drift'], ['record_day'] = tableDriftRecords[k]['record_day'] } else newtableDriftRecords[i]['player_nick'] = tableDriftRecords[k]['player_nick'] newtableDriftRecords[i]['drift_record'] = tableDriftRecords[k]['drift_record'] newtableDriftRecords[i]['best_drift'] = tableDriftRecords[k]['best_drift'] newtableDriftRecords[i]['record_day'] = tableDriftRecords[k]['record_day'] end until k <= #tableDriftRecords --początek procedury testowej for i_key, i_value in pairs(tableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w tableDriftRecords (IIIPT)", 3, 0, 255, 255) end for i_key, i_value in pairs(newtableDriftRecords) do outputDebugString(i_value['player_nick'].. " to " ..i_key.. " nick w newtableDriftRecords (IIIPT)", 3, 0, 255, 255) end --koniec procedury testowej executeSQLDropTable( thisDriftMapName ) executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) local n = 1 while newtableDriftRecords[n] do executeSQLInsert( thisDriftMapName, "'"..newtableDriftRecords[n]['player_nick'].."','"..newtableDriftRecords[n]['drift_record'].."','"..newtableDriftRecords[n]['best_drift'].."','"..newtableDriftRecords[n]['record_day'].."'" ) outputDebugString("Wpis nr: " ..n.. " do tabeli: " ..newtableDriftRecords[n]['player_nick'], 3, 0, 255, 0) n = n + 1 end else outputDebugString("Wpis bezpośredni", 3, 0, 255, 0) executeSQLInsert( thisDriftMapName, "'"..driftNick.."','"..allDriftPoints.."','"..bestDrift.."','"..getRealDateTimeNowString().."'" ) end end end [2011-01-15 20:04:23] Creating new DB table drift_records_on_map_Drift[2011-01-15 20:06:19] INFO: Nowy wpis [2011-01-15 20:06:19] INFO: Algorytm wpisu do BD [2011-01-15 20:06:19] INFO: Ilosc wierszy w bazie danych: 6 [2011-01-15 20:06:19] INFO: Wartość allDriftPoints: 7580.720703125 [2011-01-15 20:06:19] INFO: Wartość [drift_record]: 6000 [2011-01-15 20:06:19] INFO: Keny Block to 1 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Polody to 2 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w tableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Keny Block to 1 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Polody to 2 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w newtableDriftRecords (IPT) [2011-01-15 20:06:19] INFO: Znaleziono i=1 [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 1 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Polody to 2 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w tableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 1 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Polody to 2 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w newtableDriftRecords (IIPT) [2011-01-15 20:06:19] INFO: newtableDriftRecords[player_nick]: [2RT]acp___(PL) [2011-01-15 20:06:19] INFO: tableDriftRecords[k][player_nick]: [2RT]acp___(PL) [2011-01-15 20:06:19] INFO: k=1 & i=2 (wierszy: 6) [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 1 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 2 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w tableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 1 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: [2RT]acp___(PL) to 2 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: Wojak to 3 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: demon to 4 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: DeTeR to 5 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] INFO: Trystek to 6 nick w newtableDriftRecords (IIIPT) [2011-01-15 20:06:19] Dropping DB table drift_records_on_map_Drift [2011-01-15 20:06:19] Creating new DB table drift_records_on_map_Drift [2011-01-15 20:06:19] INFO: Wpis nr: 1 do tabeli: [2RT]acp___(PL) [2011-01-15 20:06:19] INFO: Wpis nr: 2 do tabeli: [2RT]acp___(PL) [2011-01-15 20:06:19] INFO: Wpis nr: 3 do tabeli: Wojak [2011-01-15 20:06:19] INFO: Wpis nr: 4 do tabeli: demon [2011-01-15 20:06:19] INFO: Wpis nr: 5 do tabeli: DeTeR [2011-01-15 20:06:19] INFO: Wpis nr: 6 do tabeli: Trystek 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 16, 2011 Author Posted January 16, 2011 Text shows me when clicked , but it will not disappear after the next , you need a few times clicked function showMeDriftScoreFromDB() if not renderujeTabeleTopDriftersDB then triggerServerEvent ( "giveMeDriftScoreFromDB", g_rot, gMe ) renderujeTabeleTopDriftersDB = true else removeEventHandler('onClientRender', g_rot, pokazTopDriftersFromDB) setTimer( function() renderujeTabeleTopDriftersDB = false end, 1000, 1) end end 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted January 22, 2011 Author Posted January 22, 2011 I need to replace characters: " ", "[", "]" in the name of the map addEvent('onMapStarting') addEventHandler('onMapStarting', g_rot, function(mapInfo, mapOptions, gameOptions) thisDriftMapName = string.gsub( "drift_records_on_map_" ..mapInfo.name, " ", "_" ) thisDriftMapName = string.gsub( thisDriftMapName, "[", "_" ) thisDriftMapName = string.gsub( thisDriftMapName, "]", "_" ) executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) setTimer(selectDriftScoreFromDB, 1000, 1, "all") end ) [2011-01-22 19:01:40] ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:5: malformed pattern (missing ']') What am I doing wrong? 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
Aibo Posted January 22, 2011 Posted January 22, 2011 [ and ] are special characters, you need to escape them with \ thisDriftMapName = string.gsub( thisDriftMapName, "\[", "_" ) thisDriftMapName = string.gsub( thisDriftMapName, "\]", "_" ) ?
acp___(PL) Posted January 22, 2011 Author Posted January 22, 2011 unfortunately, that has nothing changed - log file says the same: ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:5: malformed pattern (missing ']') 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
SDK Posted January 22, 2011 Posted January 22, 2011 I tried to play around with removing [ and ] with gsub and it seems that it expects a real pattern when using [ or ] ... Try this: addEvent('onMapStarting') addEventHandler('onMapStarting', g_rot, function(mapInfo, mapOptions, gameOptions) thisDriftMapName = string.gsub( "drift_records_on_map_" ..mapInfo.name, " ", "_" ) thisDriftMapName = string.gsub( thisDriftMapName, "[\]\[]", "_" ) executeSQLCreateTable ( thisDriftMapName, "player_nick TEXT, drift_record INTEGER, best_drift INTEGER, record_day TEXT" ) setTimer(selectDriftScoreFromDB, 1000, 1, "all") end ) Learn Lua - Learn to script - GUI scripting Scripter tools - Find/fix errors yourself(!) Don't pm me for scripting help, keep it for the Scripting subforum!
acp___(PL) Posted January 23, 2011 Author Posted January 23, 2011 It works! If someone wanted to use this (replace character in string), it better (looks better) to remove the sign: thisDriftMapName = "[TR]Musles" thisDriftMapName = string.gsub( thisDriftMapName, "[\]\[]", "" ) outputDebugString( "string.gsub [\]\[]: " ..thisDriftMapName, 3, 155, 155, 155) ) INFO: string.gsub [][]: TRMuscles Solving the problem with copying tables I change something in one table (copy of original), and this change also my second table (original)?!?! viewtopic.php?p=334970#p334970 A table is always anonymous. There is no fixed relationship between a variable that holds a table and the table itself: a = {} a["x"] = 10 b = a -- `b' refers to the same table as `a' print(b["x"]) --> 10 b["x"] = 20 print(a["x"]) --> 20 a = nil -- now only `b' still refers to the table b = nil -- now there are no references left to the table When a program has no references to a table left, Lua memory management will eventually delete the table and reuse its memory. local tableDriftRecords = executeSQLSelect( thisDriftMapName, "player_nick, drift_record, best_drift, record_day" ) local newtableDriftRecords = {} for i_key, i_value in pairs(tableDriftRecords) do newtableDriftRecords[i_key] = { ['player_nick'] = i_value['player_nick'], ['drift_record'] = i_value['drift_record'], ['best_drift'] = i_value['best_drift'], ['record_day'] = i_value['record_day'] } end 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted February 12, 2011 Author Posted February 12, 2011 How to read time from a database stored by race_toptimes resource? I have no clue how to refer to the table, how to piece this name Algorithm 1) Start a map 2) Start a script 3) The script reads from the database with running map table, the top 10 times click image to enlarge 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
SDK Posted February 12, 2011 Posted February 12, 2011 (edited) This should get it, but I'm not sure local name = the_map_name -- fill in this bit local times = executeSQLQuery("race maptimes Sprint " .. name, "timeMS") That should have been executeSQLSelect ^ Edited February 13, 2011 by Guest Learn Lua - Learn to script - GUI scripting Scripter tools - Find/fix errors yourself(!) Don't pm me for scripting help, keep it for the Scripting subforum!
acp___(PL) Posted February 12, 2011 Author Posted February 12, 2011 what about the characters in the name of the map: " ", "-", "[", "]", a few posts above to create a table with the points for the drift, I had to get rid of them because I the script did not run properly 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
SDK Posted February 12, 2011 Posted February 12, 2011 well, I took a quick look in race_toptimes and this is how it creates the table names: function SMaptimes:makeDatabaseTableName( raceModeName, mapName ) return 'race maptimes ' .. raceModeName .. ' ' .. mapName end raceModeName and mapName are received from the onMapStarting event from race, so I don't think there are any problems with it (I never had problems with it) The problem you had was with gsub, [ and ] are used in patterns Learn Lua - Learn to script - GUI scripting Scripter tools - Find/fix errors yourself(!) Don't pm me for scripting help, keep it for the Scripting subforum!
acp___(PL) Posted February 12, 2011 Author Posted February 12, 2011 yes, but I change characters: " ", "-", "[", "]", because didn't want to create me a table in the database as the name of table contained this characters 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
acp___(PL) Posted February 13, 2011 Author Posted February 13, 2011 It is exactly as I thought , it's not so easy to read this table How in resource race-toptimes they create, read and write table with special characters: " ", "-", "[", "]" local g_rot = getRootElement() local sprintMapTimes = 0 addEventHandler('onMapStarting', g_rot, function(mapInfo, mapOptions, gameOptions) timesFromSprintTop10 = executeSQLQuery("race maptimes Sprint " ..mapInfo.name, "timeMS") if not timesFromSprintTop10 then sprintMapTimes = false outputDebugString("No TopTimes table!!!", 3, 255, 0, 0) elseif type( timesFromSprintTop10 ) == "table" and #timesFromSprintTop10 > 0 then for top_key, top_value in pairs(timesFromSprintTop10) do if top_key == 11 then break end sprintMapTimes = sprintMapTimes + top_value if not timesFromSprintTop10[top_key + 1]['timeMS'] then sprintMapTimes = sprintMapTimes / top_key end outputDebugString("sprintMapTimes = " ..sprintMapTimes, 3, 0, 255, 255) end else sprintMapTimes = false outputDebugString("No rows in table TopTimes!!!", 3, 255, 0, 0) end ) ERROR: 2paq_driftmeter\driftmeter_s.lua:6: Database query failed: near "race": syntax error INFO: No TopTimes table!!! 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
MTA Team ccw Posted February 13, 2011 MTA Team Posted February 13, 2011 The usage of executeSQLQuery is explained here: https://wiki.multitheftauto.com/wiki/ExecuteSQLQuery So to get the top times for example: local tableName = "race maptimes Sprint " .. mapInfo.name local result = executeSQLQuery("SELECT * FROM ?", tableName )
SDK Posted February 13, 2011 Posted February 13, 2011 Oops, my bad, I meant to use executeSQLSelect in my post... So it's like ccw says, or using executeSQLSelect: local tableName = "race maptimes Sprint " .. mapInfo.name local result = executeSQLSelect( tableName, "timeMS" ) Learn Lua - Learn to script - GUI scripting Scripter tools - Find/fix errors yourself(!) Don't pm me for scripting help, keep it for the Scripting subforum!
acp___(PL) Posted February 13, 2011 Author Posted February 13, 2011 Oops, my bad, I meant to use executeSQLSelect in my post...So it's like ccw says, or using executeSQLSelect: local tableName = "race maptimes Sprint " .. mapInfo.name local result = executeSQLSelect( tableName, "timeMS" ) I also should notice that it should be executeSQLSelect, but it does not work ... ERROR: 2paq_driftmeter\driftmeter_s.lua:12: Database query failed: near "Sprint": syntax error local tableName = "race maptimes Sprint " ..mapInfo.name timesFromSprintTop10 = executeSQLQuery( "SELECT * FROM ?", tableName ) work, but I do not know yet what it returns I know that table - but do not know how to indexed for top_key, top_value in pairs(timesFromSprintTop10) do if top_key == 11 then break end sprintMapTimes = sprintMapTimes + top_value['timeMS'] if not timesFromSprintTop10[top_key + 1]['timeMS'] then sprintMapTimes = sprintMapTimes / top_key end outputDebugString("sprintMapTimes = " ..sprintMapTimes, 3, 0, 255, 255) end ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:3: attempt to perform arithmetic on field 'timeMS' (a nil value) Edit: I added a line debugger outputDebugString("rowid 1 timeMS timesFromSprintTop10: " ..timesFromSprintTop10[1]['timeMS'], 3, 0, 255, 255) ERROR: unzipped\2paq_driftmeter\driftmeter_s.lua:1: attempt to concatenate field 'timeMS' (a nil value) 2paq MTA:SA Race Serwer PL [http://www.2paq.ugu.pl] YouTube HD - advertisement my server: [ ]Polski wątek mojego serwera na forum.mtasa.com [http://forum.mtasa.com/viewtopic.php?f=124&t=31657]
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