XZprod Posted July 12, 2013 Share Posted July 12, 2013 (edited) Здравствуйте, я хотел задать вопрос по поводу назначения ID игрокам, находящимся в сети. По какому принципу это можно реализовать ? Edited July 12, 2013 by Guest Link to comment
XZprod Posted July 12, 2013 Author Share Posted July 12, 2013 Ммм, не совсем понял, все данные хранятся в массиве, каким образом присвоить, через инкремент - дикремент не работает. Link to comment
Ruga Posted July 12, 2013 Share Posted July 12, 2013 setElementID и не парься, но по сути лучше присваивать конечно данные, выше написали функцию, обычной проверкой по игрокам при join , таблицу юзать для удобства Link to comment
Kenix Posted July 12, 2013 Share Posted July 12, 2013 addEventHandler( 'onPlayerJoin', root, function() local id = 1 local players = getElementsByType( 'player' ) for i, v in ipairs( players ) do local playerid = getElementData( v, 'id' ) if playerid == id then id = id + 1 end end setElementData( source, 'id', id ) end) не выдержал, написал с телефона... Все остальные варианты не ахти. Link to comment
XZprod Posted July 12, 2013 Author Share Posted July 12, 2013 Всем кто отписался, спасибо Kenix'у особенно, принцип остальных примеров я не особо понял. Link to comment
Ruga Posted July 12, 2013 Share Posted July 12, 2013 Кто на готовенькое?... Что написал уважаемый Kenix это и есть принцип что мы описали , просто упрощенный, без извращений! Link to comment
XZprod Posted July 12, 2013 Author Share Posted July 12, 2013 Я на готовенькое ^^ Я спрашивал принцип, а не функцию, которой данные посылать. Мне же не могли сказать, а функцию а сам бы конечно не смог посмотреть. Link to comment
TheNormalnij Posted July 12, 2013 Share Posted July 12, 2013 Кто на готовенькое?... Что написал уважаемый Kenix это и есть принцип что мы описали , просто упрощенный, без извращений! ИМХО, хороший код как раз и должен таким быть, не надо на это ругаться. Link to comment
Ruga Posted July 12, 2013 Share Posted July 12, 2013 Ругаться... хм.. думаю что Kenix поймет, что я имел ввиду, остальным могу только посочувстовать))) Link to comment
TheNormalnij Posted July 12, 2013 Share Posted July 12, 2013 Ругаться... хм.. думаю что Kenix поймет, что я имел ввиду, остальным могу только посочувстовать))) Пожалуйста, не ставите себя выше других и научитесь ставить ! только туда, где это надо. Link to comment
Kenix Posted July 12, 2013 Share Posted July 12, 2013 Если есть вопросы по данному коду, то задавайте. И срач не устраиваем... Link to comment
TheNormalnij Posted July 12, 2013 Share Posted July 12, 2013 Код отличный, только вот интересно, зачем это ему нужно? Link to comment
Kenix Posted July 12, 2013 Share Posted July 12, 2013 Для дм, рп серверов самое то. Проще говоря это удобнее, не надо писать полностью ник игрока, занимает меньше времени, удобно для всяких комад аля /pm и т.д Link to comment
Kernell Posted July 15, 2013 Share Posted July 15, 2013 Для дм, рп серверов самое то.Проще говоря это удобнее, не надо писать полностью ник игрока, занимает меньше времени, удобно для всяких комад аля /pm и т.д А ещё хороший пример для CIT и где нет ID игрока: игрок сделал что-то плохое и быстренько сменил ник, хорошо если это логируется, но долго при поиске, а вот с ID таких проблем не будет. Вобще на самом деле можно проще (для Lua), но код выйдет немного больше: g_Players = NULL; -- МАССИВ игроков (типа слоты) function OnResourceStart() g_Players = {}; for x, pPlayer in ipairs( getElementsByType( "player" ) ) do g_Players[ x ] = pPlayer; setElementData( pPlayer, "player_id", x ); end end function OnPlayerJoin() local iID = 0; for x in ipairs( g_Players ) do iID = x; end iID = iID + 1; g_Players[ iID ] = source; setElementData( source, "player_id", iID ); end function OnPlayerQuit() g_Players[ getElementData( source, "player_id" ) or 0 ] = NULL; end Сама фишка в OnPlayerJoin, если кто знает как работает ipairs, можете не читать дальше. Для тех кто не знает: ipairs обходит цикл как обычный массив, начиная от 1 индекса и продолжая до тех пор пока не будет обрыв. К примеру у нас есть массив из 10 игроков, но игрок ID 5 вышел, в итоге получились след. индексы: 1, 2, 3, 4, 6, 7, 8, 9, 10 - ipairs будет обходить массив от 1 до 4, остальные индексы останутся нетронутыми. Аналогично работает функция table.getn (аля оператор решётки), поэтому можно смело заменить цикл из 3 строк на эту функцию. P.S. не знаю где ещё нужно дополнительное объяснение, поэтому спрашивайте конкретно указывая номер строки. 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