H1TM4N Posted January 25, 2012 Share Posted January 25, 2012 Помогите пожалуйста. Хочу сделать сохранение очков за дрифтинг, но запарился на их загрузке при входе. Сделал сохранение очков через setAccountData, проверил в internal все сохранилось. Но знаний по люа недостаточно чтобы понять что к чему в этом скрипте и куда надо подгружать сохраненные данные. В общем нужно сделать чтобы при входе в списке игроков были показаны сохраненные данные, а не нулевые. Вот скрипты: drft.lua --these are the banned vehicle ids where you cannot get drift points. local BannedIDs = { 432, 532 } local rootElem = getRootElement() local thisRoot = getResourceRootElement(getThisResource()) local player = getLocalPlayer() local vehicle local size = 1.2 local modo = 0.01 local score = 0 local screenScore = 0 local tick local idleTime local multTime local driftTime local Yellow = tocolor(255,232,25) local Red = tocolor(234,0,3) local TempCol = Yellow local mult = 1 local tablamult = {350,1400,4200,11200} local anterior = 0 local mejor = 0 local total = 0 local global_mejor = 0 local global_nombre = "N/A" local screenWidth, screenHeight = guiGetScreenSize() local x1,y1,x2,y2 = screenWidth*0.2,screenHeight*0.1,screenWidth*0.8,screenHeight*0.8 addEventHandler("onClientResourceStart", thisRoot, function() addEventHandler("onClientRender", rootElem, showText) outputChatBox("Waiting for server drift data...") triggerServerEvent("driftClienteListo", rootElem, player) end ) addEventHandler("onClientResourceStop", thisRoot, function() removeEventHandler("onClientRender", rootElem, showText) end ) function isValidVehicle() local temp = getPedOccupiedVehicle(player) if not temp or getVehicleOccupant(temp,0) ~= player or getVehicleType" class="kw2">getVehicleType(temp) ~= "Automobile" then return false end local vehID = getElementModel(temp) for k,v in ipairs(BannedIDs) do if vehID == v then return false end end return temp end function showText() dxDrawText(string.format("Best Drift: %s - %d",global_nombre,global_mejor),44,screenHeight-43,screenWidth,screenHeight,Yellow,1,"pricedown") vehicle = isValidVehicle() if not vehicle then return end if size > 1.3 then modo = -0.01 elseif size < 1.2 then modo = 0.01 end size = size + modo tick = getTickCount() local angulo,velocidad = angle() local tempBool = tick - (idleTime or 0) < 750 if not tempBool and score ~= 0 then anterior = score setElementData(player, "Last Drift", anterior) total = total+anterior setElementData(player, "Total Drift", total) if score > mejor then mejor = score setElementData(player, "Best Drift", mejor) end triggerEvent("onVehicleDriftEnd", rootElem, tick-driftTime-750) score = 0 end if angulo ~= 0 then if score == 0 then triggerEvent("onVehicleDriftStart", rootElem) driftTime = tick end if tempBool then score = score + math.floor(angulo*velocidad)*mult else score = math.floor(angulo*velocidad)*mult end if TempCol == Red then TempCol = Yellow end screenScore = score idleTime = tick end local temp2 = string.format("Factor: X%d\n%s",mult,mult~=5 and string.format("Gain X%d with %d",mult+1,tablamult[mult]) or "MAX") dxDrawText(temp2, 20,155,screenWidth,screenHeight, Yellow, 1.2, "sans","left","top", false,true,false) if velocidad <= 0.3 and mult ~= 1 then dxDrawText("\n\nToo Slow!", 20,155,screenWidth,screenHeight, Yellow, 1.2, "sans","left","top", false,true,false) end if tick - (idleTime or 0) < 3000 then local temp = "DRIFT" if score >= 100000 then temp = "DRIFT\n\nDrift King!" elseif score >= 50000 then temp = "DRIFT\n\nInsane Drift!" elseif score >= 20000 then temp = "DRIFT\n\nOutrageous!" elseif score >= 15000 then temp = "DRIFT\n\nColossal!" elseif score >= 7000 then temp = "DRIFT\n\nSuberb!" elseif score >= 3000 then temp = "DRIFT\n\nGreat Drift!" elseif score >= 1000 then temp = "DRIFT\n\nGood Drift!" end dxDrawText(temp, x1,y1,x2,y2, TempCol, 2.2, "sans","center","top", false,true,false) dxDrawText(string.format("\n%d",screenScore), x1,y1-10,x2,y2, TempCol, size, "pricedown","center","top", false,true,false) end end function angle() local vx,vy,vz = getElementVelocity(vehicle) local modV = math.sqrt(vx*vx + vy*vy) if not isVehicleOnGround(vehicle) then return 0,modV end local rx,ry,rz = getElementRotation(vehicle) local sn,cs = -math.sin(math.rad(rz)), math.cos(math.rad(rz)) local deltaT = tick - (multTime or 0) if mult~= 1 and modV <= 0.3 and deltaT > 750 then mult = mult-1 multTime = tick elseif deltaT > 1500 then local temp = 1 if score >= 11200 then temp = 5 elseif score >= 4200 then temp = 4 elseif score >= 1400 then temp = 3 elseif score >= 350 then temp = 2 end if temp>mult then mult = temp multTime = tick end end if modV <= 0.2 then return 0,modV end --speed over 40 km/h local cosX = (sn*vx + cs*vy)/modV if cosX > 0.966 or cosX < 0 then return 0,modV end --angle between 15 and 90 degrees return math.deg(math.acos(cosX))*0.5, modV end addEvent("driftCarCrashed", true) addEventHandler("driftCarCrashed", rootElem, function() if score ~= 0 then score = 0 mult = 1 TempCol = Red triggerEvent("onVehicleDriftEnd", rootElem, 0) end end ) addEvent("driftActualizarRecord", true) addEventHandler("driftActualizarRecord", rootElem, function(score, name) global_mejor = score global_nombre = name end ) function resetScore() anterior,mejor,total = 0,0,0 setElementData(player, "Last Drift", anterior) setElementData(player, "Total Drift", total) setElementData(player, "Best Drift", mejor) end addEvent("driftResetAllScores", true) addEventHandler("driftResetAllScores", rootElem, resetScore) addCommandHandler("resetdrift", resetScore) function checkPuntaje() if total > global_mejor then triggerServerEvent("driftNuevoRecord", rootElem, total, getPlayerName(player)) end end addEventHandler("onClientPlayerFinish", rootElem, checkPuntaje) addEventHandler("onClientPlayerOutOfTime", rootElem, checkPuntaje) drft_server.lua local root = getRootElement() local thisResourceRoot = getResourceRootElement(getThisResource()) local drift_records = {} local drift_mejor = 0 local drift_nombre = "N/A" addEventHandler ( "onResourceStart", thisResourceRoot, function() call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Best Drift") call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Last Drift") call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Total Drift") executeSQLCreateTable("recordsDrift","pista TEXT, nombre TEXT, score INTEGER") addEvent("driftClienteListo", true) addEventHandler("driftClienteListo", root, function(player) triggerClientEvent(player, "driftActualizarRecord", root, drift_mejor, drift_nombre) if drift_mejor == 0 then outputChatBox("There's no record set on this map", player) else outputChatBox(string.format("The current record is %d points (%s)", drift_mejor, drift_nombre), player) end end) end ) addEventHandler ( "onResourceStop", thisResourceRoot, function() call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Best Drift") call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Last Drift") call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Total Drift") end ) addEventHandler ( "onGamemodeMapStart", root, function(mapResource) local mapname = getResourceInfo(mapResource, "name") or getResourceName(mapResource) local command = string.format("pista='%s'",mapname) local record = executeSQLSelect("recordsDrift","nombre, score",command) if #record == 0 then executeSQLInsert("recordsDrift",string.format("'%s', 'N/A', 0",mapname)) drift_mejor = 0 drift_nombre = "N/A" else drift_mejor = record[1]["score"] drift_nombre = record[1]["nombre"] end triggerClientEvent(root, "driftActualizarRecord", root, drift_mejor, drift_nombre) triggerClientEvent(root, "driftResetAllScores", root) if drift_mejor == 0 then outputChatBox("There's no record set on this map") else outputChatBox(string.format("The current record is %d points (%s)", drift_mejor, drift_nombre)) end end) addEventHandler ( "onGamemodeMapStop", root, function(mapResource) local mapname = getResourceInfo(mapResource, "name") or getResourceName(mapResource) if not mapname then return end local command = string.format("pista='%s'",mapname) executeSQLUpdate("recordsDrift",string.format("nombre = '%s', score = %d", drift_nombre, drift_mejor), command) end) addEventHandler("onVehicleDamage", root, function() thePlayer = getVehicleOccupant(source, 0) if thePlayer then triggerClientEvent(thePlayer, "driftCarCrashed", root, source) end end) addEvent("driftNuevoRecord", true) addEventHandler("driftNuevoRecord", root, function(score, name) if score > drift_mejor then outputChatBox(string.format("New drift record! (%d points) (%s)",score,name)) drift_mejor = score drift_nombre = name triggerClientEvent(root, "driftActualizarRecord", root, drift_mejor, drift_nombre) end end) Link to comment
MX_Master Posted January 26, 2012 Share Posted January 26, 2012 Ну если бы ты сам сначала разобрался в этом чужом скрипте, было бы лучше. А ты хочешь, чтобы кто-то разобрался в этом чужом ресурсе и еще добавил туда подгрузку очков из аккаунта. Link to comment
H1TM4N Posted January 26, 2012 Author Share Posted January 26, 2012 Ну если бы ты сам сначала разобрался в этом чужом скрипте, было бы лучше. А ты хочешь, чтобы кто-то разобрался в этом чужом ресурсе и еще добавил туда подгрузку очков из аккаунта. Я никого не прошу делать что-то за меня, я прошу помочь мне ... Хочу сделать ... Я просто не пойму как и где использовать total, anterior, mejor (очки дрифта). Link to comment
H1TM4N Posted January 26, 2012 Author Share Posted January 26, 2012 Я не понимаю, где ошибка? Это тупо не работает. В логах ничего не пишет, значит я что-то не так написал. Хелп function LoadStatsDrift() local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) then local playerbest = getAccountData (playeraccount, "s.best") mejor = playerbest setElementData(player, "Best Drift", mejor) end end addEventHandler("onPlayerLogin", rootElem,LoadStatsDrift) addCommandHandler("loaddrift", LoadStatsDrift) Link to comment
LoveFist Posted January 26, 2012 Share Posted January 26, 2012 Кто такой player? setElementData(player, "Best Drift", mejor) Правильнее будет setElementData(source, "Best Drift", mejor) Уверен что у игрока есть accountData s.best? Лучше перестраховаться: local playerbest = getAccountData (playeraccount, "s.best") or 0 Link to comment
H1TM4N Posted January 26, 2012 Author Share Posted January 26, 2012 Кто такой player? player = getLocalPlayer() Уверен что у игрока есть accountData s.best? Да есть, я же писал выше что это у меня сохраняется данные в файле internal. Скрипт drft.lua вредный очень, не хочет читать данные, а только создает все с нуля при перезаходах. Link to comment
Kenix Posted January 26, 2012 Share Posted January 26, 2012 getLocalPlayer( ) т.к это клиентская функция и не может быть на сервере. Изучай лучше https://wiki.multitheftauto.com/wiki/RU/ ... troduction Link to comment
H1TM4N Posted January 26, 2012 Author Share Posted January 26, 2012 getLocalPlayer( ) т.к это клиентская функция и не может быть на сервере. как это понять? не я ставил в скрипт getLocalPlayer( ), это поставил автор и скрипт работает с getLocalPlayer( ) если ты про это. Link to comment
H1TM4N Posted January 26, 2012 Author Share Posted January 26, 2012 А вот, теперь начал понимать. Спасибо всем кто откликнулся! Link to comment
H1TM4N Posted January 27, 2012 Author Share Posted January 27, 2012 Блин запарное это дело, если очень мало знаешь. Кто мне его настроит за сотку? p.s. яндекс кошель Link to comment
StUNt71 Posted January 27, 2012 Share Posted January 27, 2012 Скинь ресурс полностью. Залей куда-нибудь. Link to comment
H1TM4N Posted January 27, 2012 Author Share Posted January 27, 2012 Скинь ресурс полностью. Залей куда-нибудь. скрипт из паблика если что https://community.multitheftauto.com/index.php?p= ... ls&id=1336 качай ток дрифт мод, в архиве drft.zip это тот самый скрипт я хотел сделать сохранение очков трех типов из этого плагина, но не могу т.к. в люа дуб. А изучать его ради пары строк как то глупо. Поможешь сделать? да/нет скайп еще чтонить Link to comment
Kernell Posted January 27, 2012 Share Posted January 27, 2012 Личкой пользуйтесь, в след. раз удалю без предупреждений. 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