Jump to content

Memory

Members
  • Posts

    383
  • Joined

  • Last visited

Everything posted by Memory

  1. Подскажите пожалуйста, как отсортировать игроков, которые имеют больше всего поинтов из кода ниже. Попробовал сделать, но выдаёт только онлайн игроков. function top(player) for i,v in ipairs(getElementsByType("player")) do -- get all players if(getElementData ( v, "Points" )>1)then topPoints[ getPlayerName(v) ] = " points: " .. getElementData ( v, "Points" ) -- insert him into the table with his money end end for i,v in pairs(topPoints) do table.sort(topPoints) -- sorting outputChatBox("Top players " .. i .. " Points: " .. v,player) end end addCommandHandler("top",top)
  2. Здравствуйте, помогите разобраться с SQL, на примере этого кода. Вот с "onResStart" и "onPlayerQuit" понятно. Но вот "onJoin", что-то никак не могу его заставить работать. Я перерыл много кодов на форуме, чтобы разобраться в этом, но увы. Хочу сделать по такому алгоритму: при Join получить из базы Points и послать их игроку setElementData, а при Quit получить Points (getElementData) и послать в базу. function onResStart () executeSQLCreateTable ( "Points", "serial TEXT, points INT" ) end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), onResStart) -------------------------------- function onJoin () local serial = getPlayerSerial(source) local getPoints = executeSQLSelect("Points", "points", "serial='"..serial.."'") if getPoints == false then executeSQLInsert ( "Points", "'"..serial.."', '0'" ) setElementData(source, "Points", 0) else setElementData(source, "Points", tonumber(getPoints[1]["points"])) end end addEventHandler("onPlayerJoin", getRootElement(), onJoin) ---------------------------------------- function onPlayerQuit() local getActualPoints = getElementData(source, "Points") local serial = getPlayerSerial(source) executeSQLUpdate ( "Points", "points = '"..tonumber(getActualPoints).."'","serial = '" ..serial.. "'" ) end addEventHandler("onPlayerQuit", getRootElement(), onPlayerQuit)
  3. Memory

    Top xml

    I fix it. local amountOfTopsToDisplay = 3 -- how many tops you need addCommandHandler("top", function(player, command, value) fileindex = xmlLoadFile("users.xml") -- load file file = xmlFindChild ( fileindex, "user", 0 ) if file then -- if file exists if value == "wins" or value == "points" or value == "second" or value == "third" then -- if syntax is right local tableOrder = {} -- make a table local subTable = {} -- make a sub table for i,v in ipairs(xmlNodeGetChildren(file)) do -- get children from file subTable.name = xmlNodeGetAttribute(v, "Name") -- name goes in subTable subTable.data = xmlNodeGetAttribute(v, value) -- data goes in subTable table.insert(tableOrder, subTable) -- subTable is inserted in bigger table subTable = {} -- empty subTable for next loop end table.sort(tableOrder, function(a,b) return tonumber(a.data) > tonumber(b.data) end) -- put data in order outputChatBox("Displaying top "..value, player, 255,255,255,true) for i,v in ipairs(tableOrder) do -- loop the sorted table outputChatBox(i..": "..v.name.." - "..v.data, player, 255,255,255,true) -- display in order if i == amountOfTopsToDisplay then break end -- when enough tops has been shown, break it end else outputChatBox("Syntax : /top [wins|points|second|third]", player, 255,255,255,true) -- show the correct syntax if he got it wrong end xmlUnloadFile(fileindex) -- unload the file from memory end end )
  4. Memory

    Top xml

    Don't work.
  5. Memory

    Top xml

    Help, please. I need in this function.
  6. Спасибо, благодаря этому я нашёл где можно поменять. Оказывается в race прямо в админ панель можно менять, ставишь 0 и всё. Спасибо ещё раз.
  7. Memory

    Top xml

    Thanks, but code have error and I can't fix it. Error ":20 atempt to concantenate field 'data' (a boolean value)" local amountOfTopsToDisplay = 3 -- how many tops you need addCommandHandler("top", function(player, command, value) local fileindex = xmlLoadFile("users.xml") -- load file local file = xmlNodeGetChildren(fileindex) if file then -- if file exists if value == "wins" or value == "points" or value == "second" or value == "third" then -- if syntax is right local tableOrder = {} -- make a table local subTable = {} -- make a sub table for i,v in ipairs(xmlNodeGetChildren(fileindex)) do -- get children from file subTable.name = xmlNodeGetAttribute(v, "nick") -- name goes in subTable subTable.data = xmlNodeGetAttribute(v, value) -- data goes in subTable table.insert(tableOrder, subTable) -- subTable is inserted in bigger table subTable = {} -- empty subTable for next loop end table.sort(tableOrder, function(a,b) return tonumber(a.data) > tonumber(b.data) end) -- put data in order outputChatBox("Displaying top "..value, player, 255,255,255,true) for i,v in ipairs(tableOrder) do -- loop the sorted table outputChatBox(i..": "..v.name.." - "..v.data, player, 255,255,255,true) -- display in order if i == amountOfTopsToDisplay then break end -- when enough tops has been shown, break it end else outputChatBox("Syntax : /top [wins|points|second|third]", player, 255,255,255,true) -- show the correct syntax if he got it wrong end xmlUnloadFile(fileindex) -- unload the file from memory end end )
  8. Подскажите, пожалуйста, как убрать "расплытие" экрана при активации азота. (Опять поднимаю вопрос, так как на предыдущий уже никто не ответит)
  9. Memory

    Top xml

    Hi, please, help me sort players of points in xml. <users> <user> <SERIAL_XXXXXXXXXXXXXXXXXXXXXXXXXXX points="380" lastPlayerName="Player" money="6000" first="5" second="0" third="0"></SERIAL_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX> </user> </users>
  10. Подскажите, пожалуйста, как убрать "расплытие" экрана при активации азота.
  11. Memory

    xml top list

    Hello, please, fix error in 19 line. And if add this code to client, for send values to GUI, he will work? Or I must use this through triggerServerEvent?
  12. Memory

    Top ten

    Hello, please, help me create Top ten panel. Server function sortAccounts( ) local rowdata = { } for _, account in pairs( getAccounts( ) ) do rowdata[ #rowdata + 1 ] = { account = getAccountName( account ), points = getAccountData( account,"Points" ) } end table.sort( rowdata, function ( a, b ) return ( tonumber( a.points ) or 0 ) > ( tonumber( b.points ) or 0 ) end ) return rowdata end function tables( ) outputChatBox( "Top 10 points:", root, 255,255,255 ) for index, data in ipairs( sortAccounts( ) ) do outputChatBox(tostring( index )..": ".. tostring( data.account ) .." - ".. tostring( data.points ), root, 255, 255, 255 ) if index == 10 then break end end triggerClientEvent( 'onAccountsSend',root,sortAccounts( ) ) end addEvent("onSortTopTen", true) addEventHandler("onSortTopTen", root, tables) addCommandHandler( "top", tables ) Client function clientsideResourceStart () local playerList = guiCreateGridList ( 0.80, 0.10, 0.15, 0.60, true ) local column = guiGridListAddColumn( playerList, "Player", 0.6 ) local points = guiGridListAddColumn( playerList, "Points", 0.3 ) if ( column ) then triggerServerEvent("onSortTopTen", getLocalPlayer()) local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, column, data.account, false, false ) end if ( points ) then triggerServerEvent("onSortTopTen", getLocalPlayer()) local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, points, data.points, false, false ) end end addEventHandler ( "onClientResourceStart", getResourceRootElement(), clientsideResourceStart )
  13. Это типа такого, да? (не проверял) сервер function sortAccounts( ) local rowdata = { } for _, account in pairs( getAccounts( ) ) do rowdata[ #rowdata + 1 ] = { account = getAccountName( account ), points = getAccountData( account,"Points" ) } end table.sort( rowdata, function ( a, b ) return ( tonumber( a.points ) or 0 ) > ( tonumber( b.points ) or 0 ) end ) return rowdata end function tables( ) outputChatBox( "Top 7 points:", root, 255,255,255 ) for index, data in ipairs( sortAccounts( ) ) do outputChatBox(tostring( index )..": ".. tostring( data.account ) .." - ".. tostring( data.points ), root, 255, 255, 255 ) if index == 7 then break end end triggerClientEvent( 'onAccountsSend',root,sortAccounts( ) ) end addEvent("onSortTopTen", true) addEventHandler("onSortTopTen", root, tables) addCommandHandler( "top", tables ) клиент function clientsideResourceStart () local playerList = guiCreateGridList ( 0.80, 0.10, 0.15, 0.60, true ) local column = guiGridListAddColumn( playerList, "Player", 0.6 ) local points = guiGridListAddColumn( playerList, "Points", 0.3 ) if ( column ) then triggerServerEvent("onSortTopTen", getLocalPlayer()) local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, column, data.account, false, false ) end if ( points ) then triggerServerEvent("onSortTopTen", getLocalPlayer()) local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, points, data.points, false, false ) end end addEventHandler ( "onClientResourceStart", getResourceRootElement(), clientsideResourceStart ) И ещё попутно вопрос, игроки жалуются на "размытие" экрана при азоте, как это убрать, что-то искал нигде не нашёл.
  14. Здравствуйте, у меня опять возник вопрос Как можно вызвать функцию sortAccounts c сервера сюда for index, data in ipairs( sortAccounts( ) ) do. Конечно, я думаю, вызвать надо через triggerServerEvent, но как её заставить работать в нужном месте, с этим у меня проблемы. Сервер function sortAccounts( ) local rowdata = { } for _, account in pairs( getAccounts( ) ) do rowdata[ #rowdata + 1 ] = { account = getAccountName( account ), points = getAccountData( account,"Points" ) } end table.sort( rowdata, function ( a, b ) return ( tonumber( a.points ) or 0 ) > ( tonumber( b.points ) or 0 ) end ) return rowdata end Клиент, открывается при старте ресурса, но потом сделаю нормальное gui function clientsideResourceStart () local playerList = guiCreateGridList ( 0.80, 0.10, 0.15, 0.60, true ) local column = guiGridListAddColumn( playerList, "Player", 0.6 ) local points = guiGridListAddColumn( playerList, "Points", 0.3 ) if ( column ) then for index, data in ipairs( sortAccounts( ) ) do local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, column, getPlayerName ( data.account), false, false ) if index == 7 then break end end end if ( points ) then for index, data in ipairs( sortAccounts( ) ) do local row = guiGridListAddRow ( playerList ) guiGridListSetItemText ( playerList, row, points, getPlayerName ( data.points), false, false ) if index == 7 then break end end end end addEventHandler ( "onClientResourceStart", getResourceRootElement(), clientsideResourceStart )
  15. Действительно, простое и понятное объяснение, спасибо Скрипт уже переделал
  16. Действительно, простое и понятное объяснение Скрипт уже переделал
  17. Спасибо за алгоритм, обязательно исправлю старый код на новый. Но мне интересно, мой же код тоже работает, почему он
  18. Это весь код вычисления, остального ничего нет, ну если хотите вот полный код. exports [ 'scoreboard' ]:addScoreboardColumn ( "Points" ) function refreshData() for k, v in ipairs (getElementsByType("player")) do local account = getPlayerAccount( v ) if isGuestAccount(account) then setElementData( v, "Points", "Guest" ) else local data = getAccountData(getPlayerAccount( v ), "Points" ) if data then setElementData( v, "Points", data ) end end end end setTimer( refreshData, 1000, 0 ) function raceWin( rank ) local acc = getPlayerAccount( source ) local ptzData = getAccountData( acc, "Points" ) local playerCount = getPlayerCount() local pointswin = playerCount *5.8 if rank == 1 then if ptzData then setAccountData( acc, "Points", ptzData + pointswin ) outputChatBox("[Test] " .. getPlayerName(source).. " got "..pointswin, getRootElement(), 255, 255, 255, true ) end end addEventHandler("onPlayerFinish", getRootElement(), raceWin)
  19. Эх, не получается, все функции перебрал, даже math.abs, которая должна показывать число так, как оно есть. Нет, я наоборот не хочу округления, а он округляет. Причём, при math.abs в чат выводит 5.8, а в scoreboard пишет ровно 5. outputChatBox("[Test] " .. getPlayerName(source).. " got "..pointsToWin, getRootElement(), 255, 255, 255, true )
  20. Попробуйте вот такой код со стороны сервера. -- DDC OMG generated script, PLACE IT SERVER-SIDE function omg_script27() omg5969 = createObject(7586, 3765.3308105469, -2551.1330566406, 31.09373664856, 0, 0, 0) omgMoveomg5969(1) end function omgMoveomg5969(point) if point == 1 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 45.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 2) elseif point == 2 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 50.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 3) elseif point == 3 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 60.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 4) elseif point == 4 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 50.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 5) elseif point == 5 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 31.09373664856, 0, 0, 0) setTimer(omgMoveomg5969, 5000, 1, 1) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), omg_script27) или вот, но одно и тоже, только объекты разные function omg_CJCHRISCRATE() CJCHRISCRATE = createObject(2669, 2508.1999511719, -1671.1999511719, 13.699999809265, 0, 0, 0) omgMoveCJCHRISCRATE(1) end function omgMoveCJCHRISCRATE(point) if point == 1 then moveObject(CJCHRISCRATE, 5000, 2498.5, -1671.4000244141, 13.699999809265, 0, 0, 0) setTimer(omgMoveCJCHRISCRATE, 5000, 1, 2) elseif point == 2 then moveObject(CJCHRISCRATE, 5000, 2508.1999511719, -1671.1999511719, 13.699999809265, 0, 0, 0) setTimer(omgMoveCJCHRISCRATE, 5000, 1, 1) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), omg_CJCHRISCRATE)
  21. Дело в том, что не math.round, не math.floor, не math.ceil нет. Там проще, вот простой пример local playerCount = getPlayerCount() local pointsToWin = playerCount *5.8 . Вот сервер и читает только цифры до какого-либо знака препинания. Есть предложения? Просто очень нужно домножить именно на десятичную дробь
  22. Здравствуйте, как сделать, чтобы можно было домножать на дробное число какое-либо значение или прибавлять к нему, например, пишу в функции "значение + 5.8", после выполнения функции в scoreboard выводит прежнее значение + 5, а не 5.8.
  23. Flaker, Kenix, спасибо за помощь, буду дорабатывать
  24. А то Так о проблеме, при команде /top в чате отображаются топ 10 игроков, ну это понятно, я думаю. Так я бы хотел теже топ 10 игроков, чтобы отображались в этом простом gui, а вот как послать туда отсортированных игроков подскажите, пожалуйста.
×
×
  • Create New...