Jump to content

Вопрос по назначению ID


Recommended Posts

Здравствуйте, я хотел задать вопрос по поводу назначения ID игрокам, находящимся в сети. По какому принципу это можно реализовать ?

Edited by Guest
Link to comment

setElementID

и не парься, но по сути лучше присваивать конечно данные, выше написали функцию, обычной проверкой по игрокам при join , таблицу юзать для удобства

Link to comment
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

Я на готовенькое ^^ Я спрашивал принцип, а не функцию, которой данные посылать. Мне же не могли сказать, а функцию а сам бы конечно не смог посмотреть.

Link to comment
Кто на готовенькое?... Что написал уважаемый Kenix это и есть принцип что мы описали , просто упрощенный, без извращений!

ИМХО, хороший код как раз и должен таким быть, не надо на это ругаться.

Link to comment
Ругаться... хм.. думаю что Kenix поймет, что я имел ввиду, остальным могу только посочувстовать)))

Пожалуйста, не ставите себя выше других и научитесь ставить ! только туда, где это надо.

Link to comment

Для дм, рп серверов самое то.

Проще говоря это удобнее, не надо писать полностью ник игрока, занимает меньше времени, удобно для всяких комад аля /pm и т.д

Link to comment
Для дм, рп серверов самое то.

Проще говоря это удобнее, не надо писать полностью ник игрока, занимает меньше времени, удобно для всяких комад аля /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

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