Kernell Posted January 7, 2013 Share Posted January 7, 2013 Как сделать окно в котором будет отображатся топ убийц Взять и самому нарисовать. Функции "CreateWindowTop15" нет и не будет (делайте сами). Смотрите guiCreateGridList Как сделать отсчёт этих убийств.Не понял, что за "отсчёт"..Хранить убийства в таблице, например в таком формате: Top = { { Указатель игрока, Кол-во убийств; }; { Указатель игрока, Кол-во убийств; }; ... } Отсортировать, например вот так: table.sort( Top, function( a, b ) return a[ 2 ] < b[ 2 ]; end ); Остаётся заполнить ранее созданный GridList с помощью ipairs Link to comment
Other Languages Moderators Disinterpreter Posted January 7, 2013 Other Languages Moderators Share Posted January 7, 2013 Полегче нельзя пояснить уже? Ты так пояснил, что даже я нихера не понял =\ Link to comment
Kernell Posted January 8, 2013 Share Posted January 8, 2013 я нихера не понял =\ В общем как и всегда. Раз вы не задаёте вопросы, не говорите что конкретно вам не понятно, остаётся вам только посоветовать Учить Lua с самого начала. Link to comment
gold4iter Posted January 8, 2013 Share Posted January 8, 2013 Ну в общем деле. Есть гуи окно. Там идёт отсчёт убийств и у кого больше тот и 1 в списке дальше 2 3 и так до 10) Ну как в кс. Link to comment
Kernell Posted January 8, 2013 Share Posted January 8, 2013 Если есть таблица, то сортируйте её как я описал выше, и заполняйте данные в GUI Link to comment
_Dark_ Posted January 8, 2013 Share Posted January 8, 2013 Полегче нельзя пояснить уже? Ты так пояснил, что даже я нихера не понял =\ Всё понятно написано. Создать простую таблицу local scores = { { player, 1000}, { player2, 123213} } Где player, player2 — индентификаторы игроков, как угодно, никнеймы, ID в БД и т.д. Отсортировать её, а затем вывести в списке, вот и всё. Link to comment
Memory Posted January 8, 2013 Share Posted January 8, 2013 Здравствуйте, подскажите, пожалуйста, алгоритм в функциях, когда игрок выполнил команду, должно пройти определённое время, чтобы он снова мог её использовать. Link to comment
Kenix Posted January 8, 2013 Share Posted January 8, 2013 Можно через элемент дату сделать или можно добавить в таблицу, где ключ - игрок и индекс - флаг ( Если на сервере ), на клиенте просто присваеваешь значение false. А когда время истечёт, то просто присваивай обратно setTimer Вообще тут много вариантов ещё есть. Можно ещё вместо таймера использовать getTickCount и проверять время. Link to comment
Memory Posted January 8, 2013 Share Posted January 8, 2013 Это наподобии такого должно получиться? 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
Kenix Posted January 8, 2013 Share Posted January 8, 2013 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
Memory Posted January 9, 2013 Share Posted January 9, 2013 Спасибо, не можете подсказать, где про таблицы можно побольше почитать, посмотреть примеры. А то в wiki, только команды, да и в готовых не так уж много. Link to comment
_Dark_ Posted January 9, 2013 Share Posted January 9, 2013 http://lua-users.org/wiki/TablesTutorial http://www.lua.ru/doc/5.5.html Link to comment
Memory Posted January 12, 2013 Share Posted January 12, 2013 Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют background картинку и через dxdrawtext отсылают информацию? или это делается как-то по другому? Link to comment
Flaker Posted January 12, 2013 Share Posted January 12, 2013 Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют 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
Kernell Posted January 13, 2013 Share Posted January 13, 2013 Опять здравствуйте, подскажите как сделать чтобы окно разворачивалось постепенно, т.е. при открытии из увеличивается, а при закрытии уменьшается. Или, например, "вылетает" сверху в ценрт экрана. В таких окнах используют background картинку и через dxdrawtext отсылают информацию? или это делается как-то по другому? У CEGUI нет эффектов как например в jQuery UI, поэтому вам придется делать все самому, выглядеть конечно это будет примитивно. Но самый просто вариант, это конечно в рендере или по таймеру просто x=x+t или y=y+1 и менять позицию) Самый простой и самый не правильный вариант. В таймере ещё сгодится, но анимация не будет плавной, но в рендере ни в коем случае. При разном FPS эффект будет всегда разный, у кого-то будет очень медленно окно выезжать, а у кого-то очень быстро. И GetEasingValue вам тут даже не поможет, если вы будете использовать примитивное прибавление шага в кадре, тут нужно работать со временем. Link to comment
gold4iter Posted January 13, 2013 Share Posted January 13, 2013 И снова здравствуйте. Где можно нормально почитать про гуи окошки. А то в вики написано как создавать. Link to comment
Other Languages Moderators Disinterpreter Posted January 13, 2013 Other Languages Moderators Share Posted January 13, 2013 https://wiki.multitheftauto.com/wiki/RU/ ... ng_the_GUI только тут. Link to comment
Memory Posted January 14, 2013 Share Posted January 14, 2013 Flaker, Kernell, спасибо Kernell, можете привести простой пример со временем, буду признателен. Link to comment
Kernell Posted January 14, 2013 Share Posted January 14, 2013 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
Kenix Posted January 14, 2013 Share Posted January 14, 2013 guiSetAlpha работает в диапазоне от 0 до 1, а не от 0 до 255. И onClientPreRender не самый лучший вариант, лучше использовать onClientRender. Впрочем, кому этот пример нужен был, тот может и сам исправить это. Link to comment
562141 Posted January 14, 2013 Share Posted January 14, 2013 Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей )) Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам) Link to comment
Flaker Posted January 15, 2013 Share Posted January 15, 2013 Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей ))Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам) С новым! При каждом убитом зомби, присваивать игроку дату с кол-вом убитых зомби + 1 Если кол-во уже убитых + 1 >= 30 и < 40 тогда запихивать его в одну команду если >= 40, то в другую... Таким образом можно впринцепе... Link to comment
Kernell Posted January 15, 2013 Share Posted January 15, 2013 И onClientPreRender не самый лучший вариант, лучше использовать onClientRender. И где объяснение, почему лучше менять альфу во время прорисовки кадра, а не перед? Link to comment
Kenix Posted January 15, 2013 Share Posted January 15, 2013 Само событие предназначено на для этих целей, чтобы обновлять альфу гуи элемента. https://wiki.multitheftauto.com/wiki/Gam ... sing_Order Link to comment
562141 Posted January 15, 2013 Share Posted January 15, 2013 Всем привет! И с Новым 2013 Годом! Желаю в этом году побольше путёвых скриптов и идей ))Народ помогите пожалуйста, как сделать такую вещ( человек когда убивает 30 зомби его кидает в определённый тиам но если в дальнейшем он убивает уже 40 его еще раз кидает в другой тиам) С новым! При каждом убитом зомби, присваивать игроку дату с кол-вом убитых зомби + 1 Если кол-во уже убитых + 1 >= 30 и < 40 тогда запихивать его в одну команду если >= 40, то в другую... Таким образом можно впринцепе... Подскажи пожалуйста это setElementData на данный момент я даже понятия не имею как должен выглядить код 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