Jump to content

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


Recommended Posts

Ох скриптач, я пришел.

Столкнулся с такой проблемой, что не получается передать указатель на функцию через таймер. Есть код

    function dtest () 
        outputChatBox(getPlayerName(source) .. ": ouch!") 
    end 
     
addEventHandler("onPlayerDamage", root, dtest) 
setTimer(removeEventHandler, 2000, 1, "onPlayerDamage", root, dtest) 

При выполнении происходит ошибка:

[17:34:11] WARNING: dloader\dloader.lua:37 Bad argument @ removeEventHandler' [Expected function at argument 3, got nil] 

Получается, что таймером указатель на функцию не передается? Или что-то поменялось за то время, что я не ковырялся в МТА?

Под указателем ты имеешь ввиду аргумент? Если да, то обычно передается...

Попробуй так, не уверен конечно, но всетаки:

function dtest () 
    outputChatBox(getPlayerName(source) .. ": ouch!") 
end 
addEventHandler("onPlayerDamage", root, dtest) 
  
setTimer(function()  
            removeEventHandler ( "onPlayerDamage", root, dtest ) 
        end, 2000, 1) 

Link to comment

Фактически переменная dtest имеет значение - указатель на функцию, который в аргументе и передается.

Ну, про способ через анонимную функцию я тоже знаю, и он работает, просто стало непонятно, почему аргумент-функция не передался напрямую таймером.

Link to comment
RGB в HEX имеешь ввиду?

1) Получаем цвет ника в RGB

https://wiki.multitheftauto.com/wiki/GetPlayerNametagColor

2) Переводим RGB в HEX

https://wiki.multitheftauto.com/wiki/RGBToHex

пробовал просто взять команду от суда https://wiki.multitheftauto.com/wiki/RGBToHex, мне выдает - attemp to call global 'RGBToHex' (a nill value)

и можно как то заменить иконки на радаре (Blip's) ?

Link to comment

Можно как то скрыть или зашифровать мои скрипты? protected работает только на серверные скрипты, а на клиентские что-нибудт подобное есть?

Link to comment
Кто-то из пользователей уже предлагал fileDelete в конец файла - хорошее решение для клиент. скриптов :-)

По-моему ZverCR обошел эту идею.

можно удалять компилиные скрипты

Link to comment

Помогите доделать команду /o как в ролевой игре. Я не пойму как брать весь текст после команды с учетом пробелов:

  
function oocchat(source, cmd, message) 
    local r,g,b = getPlayerNametagColor ( source ) 
    for index, players in ipairs( getElementsByType("player") ) do 
            if r and g and b then 
                    outputChatBox( RGBToHex(r,g,b).."" .. getPlayerName(source) .." #BDBDBDпроизнес: #FFFFFF"..message, players, 255, 255, 255, true) 
            end 
    end 
end 
addCommandHandler("o", oocchat) 

Link to comment
Помогите доделать команду /o как в ролевой игре. Я не пойму как брать весь текст после команды с учетом пробелов:

  
function oocchat(source, cmd, message) 
    local r,g,b = getPlayerNametagColor ( source ) 
    for index, players in ipairs( getElementsByType("player") ) do 
            if r and g and b then 
                    outputChatBox( RGBToHex(r,g,b).."" .. getPlayerName(source) .." #BDBDBDпроизнес: #FFFFFF"..message, players, 255, 255, 255, true) 
            end 
    end 
end 
addCommandHandler("o", oocchat) 

Насколько я понял вот что ты хочешь:

addCommandHandler ( "o", 
 function ( player, cmd, ... ) 
    local message = table.concat({...}," ") 
    local r,g,b = getPlayerNametagColor ( player ) 
    outputChatBox( getPlayerName(player).." #BDBDBDпроизнес: #FFFFFF"..message, root, r,g,b, true) 
 end 
) 

Прав?

Link to comment
Можно как то скрыть или зашифровать мои скрипты? protected работает только на серверные скрипты, а на клиентские что-нибудт подобное есть?

protected = "true" работает исключительно на клиентские .lua файлы!

Link to comment
Можно как то скрыть или зашифровать мои скрипты? protected работает только на серверные скрипты, а на клиентские что-нибудт подобное есть?

protected = "true" работает исключительно на клиентские .lua файлы!

только на серверные

Link to comment
Можно как то скрыть или зашифровать мои скрипты? protected работает только на серверные скрипты, а на клиентские что-нибудт подобное есть?

protected = "true" работает исключительно на клиентские .lua файлы!

только на серверные

Twix, я специально даже зашел в IRC спросил) Сказали, что для client'а эта функция... Хотя очень удивлялись зачем я вобще это спрашиваю, и нахрена защищать серверную часть)

Вобще я сам ее юзаю... Отлично все защищается... Вернее client скрипт качается только в буфер в клиенту, но не сохраняется на жестком диске...

Link to comment

я спокойно могу украсть твои серверные скрипты(если нет нужной защиты,стоит узнать только твой http порт), обычному нубо скриптеру конечно это не под силу

Link to comment
Кто-то из пользователей уже предлагал fileDelete в конец файла - хорошее решение для клиент. скриптов :-)

По-моему ZverCR обошел эту идею.

Каким образом? Запретом на удаление файлов? Это тоже легко можно обойти, хороший способ - компиляция с мета таблицами, такой скрипт невозможно декомпилировать, даже пытаться не имеет смысла. Особенно хорошо если использовать библиотеку классов.

Можно как то скрыть или зашифровать мои скрипты? protected работает только на серверные скрипты, а на клиентские что-нибудт подобное есть?

protected = "true" работает исключительно на клиентские .lua файлы!

только на серверные

Это специально было сделано для клиентских скриптов, в чём смысл делать это для серверных? Оно там просто не нужно.

я спокойно могу украсть твои серверные скрипты(если нет нужной защиты,стоит узнать только твой http порт), обычному нубо скриптеру конечно это не под силу

А я могу спокойно положить все сервера пентагона, обычному нубо скриптеру конечно это не под силу :D

Не смеши людей, такое возможно только с неправильно настроенным веб-сервером, т.е. у MTA должен быть кривой httpd, но даже при стандартной конфигурации этого не будет.

Аргументируй хотя бы. а то сказать "я могу", но не сказать как - умеет каждый.

P.S. Даже веб сервера взламывают не потому что там кривой конфиг, а потому что используют нулёные движки CMS/Форумов в которых нуллеры специально наделали дырок, а там уже вызывай хоть тот же exec()

Link to comment

слушай, умничать здесь не надо, если ты не знаешь как, не надо думать что это невозможно.

во 2, зачем мне рассказывать как это сделать всем?

бред не неси

Link to comment
слушай, умничать здесь не надо, если ты не знаешь как, не надо думать что это невозможно.

во 2, зачем мне рассказывать как это сделать всем?

бред не неси

В данной ситуации ты ведёшь себя очень глупо, пытаешься взять кого-то на понт пытаясь сказать всем как ты мега крут, можешь взломать МТА сервер по HTTP порту и вытащить серверные скрипты :-)

Почему это нужно рассказывать всем: чтобы дырку быстрее закрыли, а так как ты этого не говоришь, это только подтверждает то о чём я пишу выше, в итоге бред несёшь только ты

Link to comment
как можно убрать команды /register и /login ? портят всю малину ...

Register в ресурсе admin в файле admin_server.lua (Строка 437 вроде)

Вот код, по нему поиск можешь сделать:

addCommandHandler ( "register", function ( player, command, arg1, arg2 ) 
    local username = getPlayerName ( player ) 
    local password = arg1 
    if ( arg2 ) then 
        username = arg1 
        password = arg2 
    end 
    if ( password ~= nil ) then 
        if ( string.len ( password ) < 4 ) then 
            outputChatBox ( "register: - Password should be at least 4 characters long", player, 255, 100, 70 ) 
        elseif ( addAccount ( username, password ) ) then 
            outputChatBox ( "You have successfully registered! Username: '"..username.."', Password: '"..password.."'(Remember it)", player, 255, 100, 70 ) 
            outputServerLog ( "ADMIN: "..getPlayerName ( player ).." registered account '"..username.."' (IP: "..getPlayerIP(player).."  Serial: "..getPlayerSerial(player)..")" ) 
        elseif ( getAccount ( username ) ) then 
            outputChatBox ( "register: - Account with this name already exists.", player, 255, 100, 70 ) 
        else 
            outputChatBox ( "Unknown Error", player, 255, 100, 70 ) 
        end 
    else 
        outputChatBox ( "register: - Syntax is 'register [] '", player, 255, 100, 70 ) 
    end 
end ) 

А login незнаю.....password..

Link to comment
  • Scripting Moderators

Открой acl.xml, найди 'Default', и можно после этой строки:

<right name="command.whowas" access="false"></right> 

добавить это:

<right name="command.login" access="false"></right> 

И так далее для других команд.

Link to comment

Уважаемые скриптеры. Прошу помощи: при попытки использовать команду dbPoll результат всегда nil, независимо от самого запроса. Если выставить таймер -1, то сервер виснет. Другие команды(dbConnect, dbQuery) выполняются без ошибок.

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...