Всем привет, с вами снова я. Сегодня мы попытаемся "оживить" сервер. Начнём-с=) 
 objServer create (добавляем)  
Code
users = 0//переменная отвечает за кол-во юзеров на сервере
 objServer step  
Code
newuser = dll39_tcp_accept(server,true) 
 if newuser 
 { 
 users += 1 
 }
 Тут догадаться легко. 
dll39_tcp_accept проверяет наличие новых коннектов к сокету server. И если кто ломится в гости, увеличиваем переменную users. 
 objServer draw  
Code
draw_text(5,5,"users: "+string(users)+"#fps: "+string(fps))
 Ну можно запустить=) Одна проблемка, при отключение юзера, серверу на это глубоко пофиг. Помните функцию из первого урока - 
dll39_tcp_connected? Она нам и нужно. Попутно объясняю, 
dll39_tcp_accept возвращает сокет нового игрока, их нужно лишь пролистать и проверить на коннект... Но для начала нужно создать некое хранилище сокетов и прочей инфы о юзере. Лично я использую массивы, но можно и списки. 
 objServer create  
Code
for (i=0;i<32;i+=1) 
 { 
 ulist[i]=-1 
 }
 Создаём массив, из 32 ячеек. 
 Теперь нам нужно отсортировать наших юзеров, каждому новому дать определённый идентификатор, ID. Создаём скрипт. 
 _newID  
Code
var i 
 for (i=0;i<32;i+=1) 
 { 
 if ulist[i] = -1 
 return i 
 } 
 
 Скрипт перебирает наш массив, и если там есть свободная ячейка, возвращает её номер. Это очень важно, обязательно раздуплите, как это работает!! 
 objServer step  
Code
... 
 if newuser 
 { 
 users += 1 
 newuser_id = _newID() 
 ulist[newuser_id] = newuser 
 } 
 
 Хех=) Мы занесли сокет нашего нового юзера в массив... Осталось перебрать его. Снова скрипт. 
 _users  
Code
u=0 
 var i 
 for (i=0;i<32;i+=1) 
 { 
 if ulist[i] != -1 {u+=1} 
 } 
 return u
 Смотрим сколько у нас 
не свободных ячеек, возвращаем их кол-во. 
 Удаляем строку  
  objServer step  
  Я вас по всей видиости очень утомил... Ничего, чуток осталось=) 
 Скрипт: 
 _testing  
Code
var i 
 for (i=0;i<32;i+=1) 
 { 
 if ulist[i] != -1 
 { 
 user_state = dll39_tcp_connected(ulist[i]) 
 if !user_state {ulist[i] = -1} 
 } 
 }
 Скрипт просматривает список (массив) юзеров, проверяе соединение с помощью 
dll39_tcp_connected и если проверка неудачна, очищает ячейку массива. 
 Добавляем скрипт в стэп сервера запускаем и та-та-та-да! 

 Работает, разрази меня гром=) 
 Хех, много за сегодня сделано. Аш целых 3 новых скрипта создано и изучена одна функция. Естественно, этот метод не самый простой, но он один из лучших. Многие создают для каждого нового юзера отдельных объект, и работают через него. Это проще, но производительность, увы, страдает... На последок, скажу - скрипт _testing и _users можно, и нужно объединить. 
 _users  
Code
var i 
 for (i=0;i<32;i+=1) 
 { 
 if ulist[i] != -1 
 { 
 user_state = dll39_tcp_connected(ulist[i]) 
 if !user_state {ulist[i] = -1} 
 } 
 } 
 u=0 
 var i 
 for (i=0;i<32;i+=1) 
 { 
 if ulist[i] != -1 {u+=1} 
 } 
 return u 
 
 Как это работает понять не сложно, перечитайте урок, удалите скрипт _testing и строчку (objServer step) _testing().