Jump to content

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


Recommended Posts

Как сделать окно в котором будет отображатся топ убийц

Взять и самому нарисовать. Функции "CreateWindowTop15" нет и не будет (делайте сами). Смотрите guiCreateGridList

Как сделать отсчёт этих убийств.
Не понял, что за "отсчёт"..

Хранить убийства в таблице, например в таком формате:

Top =  
{ 
   { Указатель игрока, Кол-во убийств; }; 
   { Указатель игрока, Кол-во убийств; }; 
   ... 
} 

Отсортировать, например вот так:

table.sort( Top, 
    function( a, b )  
        return a[ 2 ] < b[ 2 ]; 
    end 
); 

Остаётся заполнить ранее созданный GridList с помощью ipairs

Link to comment
я нихера не понял =\

В общем как и всегда.

Раз вы не задаёте вопросы, не говорите что конкретно вам не понятно, остаётся вам только посоветовать Учить Lua с самого начала.

Link to comment
Полегче нельзя пояснить уже? Ты так пояснил, что даже я нихера не понял =\

Всё понятно написано.

Создать простую таблицу

local scores = { 
    { player, 1000}, 
    { player2, 123213} 
} 

Где player, player2 — индентификаторы игроков, как угодно, никнеймы, ID в БД и т.д.

Отсортировать её, а затем вывести в списке, вот и всё.

Link to comment

Здравствуйте, подскажите, пожалуйста, алгоритм в функциях, когда игрок выполнил команду, должно пройти определённое время, чтобы он снова мог её использовать.

Link to comment

Можно через элемент дату сделать или можно добавить в таблицу, где ключ - игрок и индекс - флаг ( Если на сервере ), на клиенте просто присваеваешь значение false. А когда время истечёт, то просто присваивай обратно

setTimer 

Вообще тут много вариантов ещё есть. Можно ещё вместо таймера использовать

getTickCount 

и проверять время.

Link to comment

Это наподобии такого должно получиться?

function send()

setElementData (source, "checktime", 1)

end

setTimer (send, 10000)

function command()

local gettime = getElementData ( source, checktime)

if gettime == 1then

<< выполняется команда >>

setElementData (source, checktime, 0)

else

<<сообщение, что не прошло время>>

end

<<добавляем команду>>

Link to comment
g_CmdTimers =       -- Таблица команд с временем ( в миллисекундах ). 
{ 
    [ 'somecommand' ] = 20000; -- Команда /somecommand Время 20000 ( 20 сек ) 
    -- ... 
} 
  
g_PlayersCmdTimers = {} -- Тут храним кол-во миллисекунд игроков, со времени запуска сервера к каждой команде, если нету то добавляем. 
  
  
  
addCommandHandler( 'somecommand', -- имя команды, тебе нужно изменить её 
    function( pPlayer, sCmd, ... ) -- Аргументы 
        if not g_PlayersCmdTimers[ pPlayer ][ sCmd ] or -- если нету в таблице 
            getTickCount() - g_PlayersCmdTimers[ pPlayer ][ sCmd ] > g_CmdTimers[ sCmd ] then  
                -- Или время больше чем в таблице с временем команд ( g_CmdTimers ) где индекс = команда, то 
             
            g_PlayersCmdTimers[ pPlayer ][ sCmd ] = getTickCount() -- добавляем в таблицу 
             
            -- Код 
        else 
            outputChatBox( ' ... ', pPlayer ) -- Сообщение об ошибке. 
        end 
    end 
) 
  
addEventHandler( 'onPlayerJoin', root, 
    function() 
        g_PlayersCmdTimers[ source ] = {} 
    end 
) 
  
addEventHandler( 'onPlayerQuit', root, 
    function() 
        g_PlayersCmdTimers[ source ] = nil -- Очищаем 
    end 
) 

Link to comment

Спасибо, не можете подсказать, где про таблицы можно побольше почитать, посмотреть примеры. А то в wiki, только команды, да и в готовых не так уж много.

Link to comment

Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют background картинку и через dxdrawtext отсылают информацию? или это делается как-то по другому?

Link to comment
Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют background картинку и через dxdrawtext отсылают информацию? или это делается как-то по другому?

Вот как раз, что бы не возиться с вычислениями, в MTA есть функция, в которой заложены основы вычислений различных вариантов анимаций: https://wiki.multitheftauto.com/wiki/GetEasingValue

Вот графики, формулы которых можно использовать при анимации c помощью GetEasingValue: https://wiki.multitheftauto.com/wiki/Easing

И да, textlibs от arc_, тоже вариант

http://rghost.ru/42978571

Но самый просто вариант, это конечно в рендере или по таймеру просто x=x+t или y=y+1 и менять позицию)

Link to comment
Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют background картинку и через dxdrawtext отсылают информацию? или это делается как-то по другому?

У CEGUI нет эффектов как например в jQuery UI, поэтому вам придется делать все самому, выглядеть конечно это будет примитивно.

Но самый просто вариант, это конечно в рендере или по таймеру просто x=x+t или y=y+1 и менять позицию)

Самый простой и самый не правильный вариант. В таймере ещё сгодится, но анимация не будет плавной, но в рендере ни в коем случае. При разном FPS эффект будет всегда разный, у кого-то будет очень медленно окно выезжать, а у кого-то очень быстро. И GetEasingValue вам тут даже не поможет, если вы будете использовать примитивное прибавление шага в кадре, тут нужно работать со временем.

Link to comment
function Clamp( min, a, max ) 
    return math.max( math.min( a, max ), min ); 
end 
  
function Lerp( from, to, percent ) 
    return from + ( to - from ) * Clamp( 0.0, percent, 1.0 ); 
end 
  
local TIME      = 5000; -- Продолжителость анимации в ms. 
local FadeEnd   = NULL; 
  
addEventHandler( "onClientPreRender", root,  
    function() 
        if FadeEnd then 
            local fProgress = 1 + ( FadeEnd - getTickCount() ) / TIME; -- Очевидно прогресс анимации 
            local fAlpha    = Lerp( 255, 0, fProgress ); 
             
            guiSetAlpha( pWindow, fAlpha ); 
        end 
    end 
); 
  
function guiFadeOut( pWindow ) 
    FadeEnd = getTickCount() + TIME; -- Конец анимации 
     
    guiSetAlpha( pWindow, 255 ); 
end 

Link to comment

guiSetAlpha работает в диапазоне от 0 до 1, а не от 0 до 255. И onClientPreRender не самый лучший вариант, лучше использовать onClientRender. Впрочем, кому этот пример нужен был, тот может и сам исправить это.

Link to comment

Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей ))

Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам)

Link to comment
Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей ))

Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам)

s_6d9bf651.jpg

С новым!

При каждом убитом зомби, присваивать игроку дату с кол-вом убитых зомби + 1

Если кол-во уже убитых + 1 >= 30 и < 40 тогда запихивать его в одну команду если >= 40, то в другую...

Таким образом можно впринцепе...

Link to comment
И onClientPreRender не самый лучший вариант, лучше использовать onClientRender.

И где объяснение, почему лучше менять альфу во время прорисовки кадра, а не перед?

Link to comment
Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей ))

Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам)

s_6d9bf651.jpg

С новым!

При каждом убитом зомби, присваивать игроку дату с кол-вом убитых зомби + 1

Если кол-во уже убитых + 1 >= 30 и < 40 тогда запихивать его в одну команду если >= 40, то в другую...

Таким образом можно впринцепе...

Подскажи пожалуйста это setElementData на данный момент я даже понятия не имею как должен выглядить код

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