Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Подскажите как можно редактировать данные игрока в userdata в файле internal.db при условии что этого игрока нет в онлайне?
local acc = getAccount( "логин игрока" ); 
setAccountData( acc, "что-то", "значение чего-то" ); 

И это не userdata. userdata это тип данных в Lua. В нем хранятся такие данные, которые "даются" Lua оттуда, куда он был встроен.

Редактировать базу данных можешь через db функции. (dbConnect, dbQuery, ... )

https://wiki.multitheftauto.com/wiki/Se ... _functions

Бред написал:(

dbConnect и dbQuery вообще не для локальных(которые от сервера МТА) БД. Есть executeSQLQuery для локальных, но не для internal.db

Link to comment
Редактировать базу данных можешь через db функции. (dbConnect, dbQuery, ... )

https://wiki.multitheftauto.com/wiki/Se ... _functions

Бред написал:(

dbConnect и dbQuery вообще не для локальных(которые от сервера МТА) БД. Есть executeSQLQuery для локальных, но не для internal.db

Читаем Wiki:

host: The target to connect to. The format of this depends on the database type.

>>For SQLite it is a filepath to a SQLite database file. If the filepath starts with ":/" then the server's global databases directory is used. The file will be created if it does not exist.

Есть executeSQLQuery для локальных, но не для internal.db

Я где-то указал executeSQLQuery? Я написал db функции.

Можно пользоваться как и db функциями, так и функциями аккаунта.

P.S через db функции в данном случае можно открывать только внутри databases директории, моя вина.

Придираться ко мне не надо.

Link to comment

Всем привет!

Ребята помогите решить проблему

Есть таблицы

  
local sw, sh = guiGetScreenSize() 
local move = false 
local rpos = {} -- rectangle 
local ipos = {} -- image 
  

Рендерим dx элементы

  
addEventHandler('onClientRender', root, function () 
    local rx = 0 
    for i = 1, 4 do -- 1 цикл 
        rpos[i] = {x = 100 + rx, y = 100} -- задаем таблице координаты rectangle 
        dxDrawRectangle(bpos[i].x, bpos[i].y, 64, 64, tocolor(100, 100, 100, 225)) 
        rx = rx + 64 
    end 
    for i = 1, 2 do -- 2 цикл 
        ipos[i] = rpos[i] -- копируем коориданаты 1 и 2 rectangle 
        dxDrawImage(ipos[i].x, ipos[i].y, 64, 64, 'image.jpg') 
    end 
    if (move) then -- для мув элемента 
        local cx, cy = getCursorPosition() 
        dxDrawRectangle(sw * cx, sh * cy, 64, 64, tocolor(100, 100, 100, 225)) 
        dxDrawImage(sw * cx, sh * cy, 64, 64, 'image.jpg') 
    end 
end) 
  
addEventHandler('onClientClick', root, function (button, state, x, y) -- для мув элемента 
    if (button == 'left' and state == 'up') then 
        for i = 1, #ipos do 
            -- используем таблицу ipos т.к в нем координаты 1 и 2 dx элемента 
            if (x >= ipos[i].x and x <= ipos[i].x + 64) and (y > ipos[i].y and y < ipos[i].y + 64) then 
                if (not move) then 
                    move = true 
                end 
                outputChatBox('Click dx element') 
            else 
                if (move) then 
                    move = false 
                end 
            end 
        end 
    end 
end) 
  

Проблема в том что при использование цикла

  
for i = 1, #ipos do 
    -- todo 
end 
  

можно мувнуть только первый dx элемент, я не могу мувнуть второй элемент, а при использование иного цикла

  
for i, coord in pairs(ipos) do 
    -- todo 
end 
  

можно мувнуть только второй dx элемент, я не могу мувнуть первый элемент

Но при этом сообщение выводиться нормально...

Помогите пожалуйста

Link to comment
Подскажите как округлить число? Что бы без лишних знаков после точки. Например вместо 123.456 было 123
math.ceil(123.45) 
>>124 
math.floor(123.45) 
>>123 
  

obuhhh, тебя питон не кусал?

function round(num, idp) 
  local mult = 10^(idp or 0) 
  return math.floor(num * mult + 0.5) / mult 
end 

idp - количество знаков после точки

Варианты, предложенные obuhhh'ом не правильно работают на отрицательных числах.

Link to comment
Варианты, предложенные obuhhh'ом не правильно работают на отрицательных числах.

Немного иначе просто (наоборот), надо было пометить это, вдруг кому эти нюансы будут интересны.

  
print( math.ceil( -10.1 ) ); --  -10 
print( math.floor( -10.1 ) ); -- -11 
  

Link to comment
Варианты, предложенные obuhhh'ом не правильно работают на отрицательных числах.

Немного иначе просто (наоборот), надо было пометить это, вдруг кому эти нюансы будут интересны.

  
print( math.ceil( -10.1 ) ); --  -10 
print( math.floor( -10.1 ) ); -- -11 
  

С точки зрения поставленного вопроса (отбрасывание не целой части числа, truncate) они работают не правильно.

А вообще эти функции работают правильно. Например floor - пол, т.е. округление к меньшему числу. Если представить это на координатной прямой, то меньшее целое лежит всегда левее, вот оно и в случае с отрицательными будет по модулю на еденицу больше. С ceil аналогично в случае положительных чисел.

Конечно, можно сделать более просто, (x > 0 and math.ceil(x) or math.floor(x)), чем та функция, которую я дал. Почему я дал именно ту функцию? Ну, а вдруг вопрос не правильно поставлен и ему нужно что-то другое.

Link to comment

С точки зрения поставленного вопроса (отбрасывание не целой части числа, truncate) они работают не правильно.

А вообще эти функции работают правильно. Например floor - пол, т.е. округление к меньшему числу. Если представить это на координатной прямой, то меньшее целое лежит всегда левее, вот оно и в случае с отрицательными будет по модулю на еденицу больше. С ceil аналогично в случае положительных чисел.

Конечно, можно сделать более просто, (x > 0 and math.ceil(x) or math.floor(x)), чем та функция, которую я дал. Почему я дал именно ту функцию? Ну, а вдруг вопрос не правильно поставлен и ему нужно что-то другое.

да мне там не критично +-1 так что вариант вполне подходящий и довольно простой

Link to comment
  • 2 weeks later...

Еще один вопрос)

Есть точка. Ее х,у координаты выпадают случайным образом, z координата берется с помощью getGroundPosition. Как можно проверить находится эта точка под водой или нет? А то получается так, что если игрок в ней спавнится то просто бегает по дну моря/реки. Пробовал после спавна проверять через isElementInWater но она работает только при условии что игрок умер в воде и в ней же появился.

Link to comment
Еще один вопрос)

Есть точка. Ее х,у координаты выпадают случайным образом, z координата берется с помощью getGroundPosition. Как можно проверить находится эта точка под водой или нет? А то получается так, что если игрок в ней спавнится то просто бегает по дну моря/реки. Пробовал после спавна проверять через isElementInWater но она работает только при условии что игрок умер в воде и в ней же появился.

Не уверен, но можно попробовать testLineAgainstWater.

Edited by Guest
Link to comment
Еще один вопрос)

Есть точка. Ее х,у координаты выпадают случайным образом, z координата берется с помощью getGroundPosition. Как можно проверить находится эта точка под водой или нет? А то получается так, что если игрок в ней спавнится то просто бегает по дну моря/реки. Пробовал после спавна проверять через isElementInWater но она работает только при условии что игрок умер в воде и в ней же появился.

Вся стандартная вода размещена на высоте 0, то-есть если твой z < 1 значит это скорее всего вода.

Link to comment

Вся стандартная вода размещена на высоте 0, то-есть если твой z < 1 значит это скорее всего вода.

Нет, есть несколько мест, где это правило не применимо, например, карьер.

Link to comment
Еще один вопрос)

Есть точка. Ее х,у координаты выпадают случайным образом, z координата берется с помощью getGroundPosition. Как можно проверить находится эта точка под водой или нет? А то получается так, что если игрок в ней спавнится то просто бегает по дну моря/реки. Пробовал после спавна проверять через isElementInWater но она работает только при условии что игрок умер в воде и в ней же появился.

Вся стандартная вода размещена на высоте 0, то-есть если твой z < 1 значит это скорее всего вода.

плотина и куча бассейнов не на нуле

Link to comment
  • 2 weeks later...
  • Other Languages Moderators
Хочу сделать одометр. Правильно ли будет доверить такие вычисления клиентам? Имею ввиду одометр не на каждого клиента, а на каждую машину.

Как бы вычисления проводи на клиенте, а передавай значения в БД на сервере.

Link to comment
Подскажите как посчитать количество игроков с определенной getElementData?
  
local count = 0 
for i,player in ipairs(getElementsByType("player")) do 
    if getElementData(player,"yourdata") then 
     count=count+1 
    end 
end 
outputChatBox("Количество игроков с определенной getElementData: "..tostring(count)) 
  

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...