Merhaba arkadaşlar mapratings hata veriyor script çalışmıyor yardım edebilirmisiniz.
addEvent("onMapStarting",true)
addEventHandler("onMapStarting",getRootElement(),
function (mapInfo)
oynanan = mapInfo.playedCount or "N/A"
end
)
addEventHandler("onMapStarting",getRootElement(),
function(source,cmd)
setTimer(outputChatBox,50,1,"#f0ff00[Harita] #ffffffHarita #f0ff00"..tostring(oynanan).." #ffffffkez oynandı. /rate 1 ile 10 arasında değer yazarak oylayabilirsiniz",getRootElement(),255,255,255,true)
end
)
addEvent("onMapStarting",true)
addEventHandler("onMapStarting",getRootElement(),
function (mapInfo)
local map = exports.mapmanager:getRunningGamemodeMap()
local mapname = getResourceName(map)
rate = getMapRating(mapname)
if not rate then
setTimer(outputChatBox,50,1,"#b2ffd6 Bu Harita'ya Oy verilmemiş.",getRootElement(),255,255,255,true)
end
if rate then
ortalamaoy = tonumber(rate.average)
toplamkisi = rate.count
if ortalamaoy<=0 or ortalamaoy<=1 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #FF0000"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
elseif ortalamaoy<=2 or ortalamaoy<=3 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #FF6600"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
elseif ortalamaoy<=4 or ortalamaoy<=5 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #FFBB00"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
elseif ortalamaoy<=6 or ortalamaoy<=7 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #AAFF00"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
elseif ortalamaoy<=8 or ortalamaoy<=9 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #66FF00"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
elseif ortalamaoy<=10 then
setTimer(outputChatBox,50,1,"#ffffff Haritanın Puanı #00FF00"..tostring(ortalamaoy).."#b2ffd6/#00ff0010 #f0ff00("..tostring(toplamkisi).." Kişi Puan verdi)",getRootElement(),255,255,255,true)
end
end
end
)
---
local g_Root = getRootElement()
local g_ResRoot = getResourceRootElement(getThisResource())
local g_MapResName
addEventHandler('onGamemodeMapStart', g_Root,
function(mapres)
g_MapResName = getResourceName(mapres)
end
)
addEventHandler('onResourceStart', g_ResRoot,
function()
-- outputDebugString("delete mapratings "..tostring(executeSQLQuery("DROP TABLE mapratings")))
-- Add table if required
executeSQLQuery("CREATE TABLE IF NOT EXISTS mapratings (mapname TEXT, playername TEXT, rating INTEGER)")
-- Create unique index to speed up WHERE when using [mapname] or [mapname+playername]
if not executeSQLQuery("CREATE UNIQUE INDEX IF NOT EXISTS IDX_MAPRATINGS_MAPNAME_PLAYERNAME on mapRatings(mapname, playername)") then
-- If create unique index has failed, remove duplicates before retrying
-- Create a temp non-unique index to speed up deletion of duplicates
executeSQLQuery("CREATE INDEX IF NOT EXISTS IDX_MAPRATINGS_MAPNAME_PLAYERNAME_temp on mapRatings(mapname, playername)")
-- Delete duplicates
executeSQLQuery("DELETE FROM mapRatings WHERE rowid in "
.. " (SELECT A.rowid"
.. " FROM mapRatings A, mapRatings B"
.. " WHERE A.rowid > B.rowid AND A.mapname = B.mapname AND A.playername = B.playername)")
-- Remove temp index
executeSQLQuery("DROP INDEX IDX_MAPRATINGS_MAPNAME_PLAYERNAME_temp")
-- Now this should work
executeSQLQuery("CREATE UNIQUE INDEX IF NOT EXISTS IDX_MAPRATINGS_MAPNAME_PLAYERNAME on mapRatings(mapname, playername)")
end
-- Create non-unique index to speed up WHERE when using [playername]
executeSQLQuery("CREATE INDEX IF NOT EXISTS IDX_MAPRATINGS_PLAYERNAME on mapRatings(playername)")
-- Perform upgrade from an old version if necessary
updateMapNames()
local currentGamemodeMap = exports.mapmanager:getRunningGamemodeMap()
if currentGamemodeMap then
g_MapResName = getResourceName(currentGamemodeMap)
end
end
)
function updateMapRating(player, mapresname, rating)
local playername = getPlayerName(player)
local sql = executeSQLQuery("SELECT rating FROM mapratings WHERE mapname=? AND playername=?", mapresname, playername)
if #sql > 0 then
local success = executeSQLQuery("UPDATE mapratings SET rating=? WHERE mapname=? AND playername=?", rating, mapresname, playername)
-- outputDebugString("mapratings: update mapratings "..playername.." "..rating.." "..tostring(success))
if not success then return end
if sql[1].rating == rating then
outputChatBox("Zaten bu haritaya oy verdiniz "..getRatingColorAsHex(rating)..rating.."/10#FF0000.", player, 255, 0, 0, true)
else
outputChatBox("Oyunuzu "..getRatingColorAsHex(sql[1].rating)..sql[1].rating.."/10 #E1AA5A'dan "..getRatingColorAsHex(rating)..rating.."/10#E1AA5A yaptınız.", player, 225, 170, 90, true)
end
else
local success = executeSQLQuery("INSERT INTO mapratings VALUES (?,?,?)", mapresname, playername, rating)
-- outputDebugString("mapratings: insert mapratings "..playername.." "..rating.." "..tostring(success))
if not success then return end
outputChatBox("Rated '"..(getResourceInfo(getResourceFromName(mapresname), "name") or mapresname).."' "..getRatingColorAsHex(rating)..rating.."/10#E1AA5A.", player, 225, 170, 90, true)
triggerEvent("onPlayerRateMap", player, mapresname, rating, getMapRating(mapresname))
end
triggerEvent("onMapRatingChange", player, getMapRating(mapresname), rating)
end
addEvent('onPollStarting')
addEventHandler('onPollStarting', g_Root,
function(poll)
for index, item in ipairs(poll) do
if item[1] == "Yes" then return end
local mapname = item[1]
local map = item[4]
if map then
local rating = getMapRating(getResourceName(map))
if rating then
mapname = mapname.." ("..(rating.average or "?")..")"
end
item[1] = mapname
end
end
triggerEvent('onPollModified', source, poll )
end
)
function getMapRating(mapresname)
local sql = executeSQLQuery("SELECT AVG(rating) AS avg , COUNT(rating) AS count FROM mapratings WHERE mapname=?", mapresname)
if sql[1].count > 0 then
local avg = math.floor(sql[1].avg*100+0.5)/100
return {average = avg, count = sql[1].count}
end
return false
end
function getPlayerRating(playername, mapresname)
if mapresname then
local sql = executeSQLQuery("SELECT rating FROM mapratings WHERE playername=? AND mapname=?", playername, mapresname)
if #sql > 0 then
return sql[1].rating
end
else
local sql = executeSQLQuery("SELECT AVG(rating) AS avg , COUNT(rating) AS count FROM mapratings WHERE playername=?", playername)
if sql[1].count > 0 then
local avg = math.floor(sql[1].avg*100+0.5)/100
return {average = avg, count = sql[1].count}
end
end
return false
end
function getRatingColor(rating)
local r, g = -5.1*(rating^2) + 25.5*rating + 255, -5.1*(rating^2) + 76.5*rating
r, g = r > 255 and 255 or math.floor(r+0.5), g > 255 and 255 or math.floor(g+0.5)
-- outputDebugString("mapratings: rating = "..rating.." r = "..r.." g = "..g)
return {r,g,0}--"#"..string.format("%02X", r)..string.format("%02X", g).."00"
end
function getRatingColorAsHex(rating)
local r, g = unpack(getRatingColor(rating))
return "#"..string.format("%02X", r)..string.format("%02X", g).."00"
end
addCommandHandler('rate',
function(player, cmd, rating)
rating = tonumber(rating)
if rating then
if rating >= 0 and rating <= 10 then
updateMapRating(player, g_MapResName, math.floor(rating*100+0.5)/100)
else
outputChatBox("0 ile 10 arasında bir puan seçin.", player, 255, 0, 0)
end
else
outputChatBox("0 ile 10 arasında bir puan seçin.", player, 255, 0, 0)
end
end
)
function updateMapNames()
local sql = executeSQLQuery("SELECT * FROM mapratings")
local needUpdate
if sql and #sql > 0 then
for i=1,math.min(5,#sql) do
if not getResourceFromName(sql[math.random(1,#sql)].mapname) then
needUpdate = true
break
end
end
end
if not needUpdate then return end
outputChatBox( "Please wait while the map ratings are assimulated" )
local maps = exports.mapmanager:getMaps()
local infoMaps = {}
for _,map in ipairs(exports.mapmanager:getMaps()) do
infoMaps[getResourceInfo(map, "name") or getResourceName(map)] = getResourceName(map)
end
local reportTime = getTickCount()
for i,row in ipairs(sql) do
if getTickCount() - reportTime > 5000 then
reportTime = getTickCount()
outputChatBox( string.format("%2.2f%% done", i * 100 / #sql ) )
end
if infoMaps[row.mapname] then
executeSQLQuery("UPDATE mapratings SET mapname=? WHERE mapname=?", infoMaps[row.mapname], row.mapname)
--outputDebugString("mapratings: changed "..tostring(row.mapname).." to "..tostring(infoMaps[row.mapname]))
elseif not getResourceFromName(row.mapname) then
executeSQLQuery("DELETE FROM mapratings WHERE mapname=?", row.mapname)
--outputDebugString("mapratings: deleted "..tostring(row.mapname))
end
end
end