Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
reconnect и timer
Scarface_slv Дата: Четверг, 10.05.2012, 10:19:08 | Сообщение # 1
Сообщений: 737
Репутация: 61 [ +/- ]
в общем у меня таймер и при выходе, реконекте игрока и т.д. таймер сбрасывается, но мне нужно чтобы таймер приостановился, и начался новый с отчетом на 60 секунд если игрок за это время не заходит то все сброс таймера а если зайдет то таймер который приостоновлен запуститься и продолжает работать, возможно ли такое? grust

Добавлено (10.05.2012, 10:19:08)
---------------------------------------------
ОЙ не туда написал sorry, удали или перенеси

 
_wS_ Дата: Четверг, 10.05.2012, 10:22:29 | Сообщение # 2
Только если запоминать игрока по Стиму или IP, т.к. после реконекта его индекс может быть уже другим. Если игрок вышел, добавь его стим в Keyvalues и через нужное вермя удали. Если игрок заходит и он есть в Keyvalues, значит .. (ты лучше знаешь что делать). Только надо не забывать убивать таймеры в нужный момент, а то путаница будет.
 
Scarface_slv Дата: Суббота, 12.05.2012, 23:23:44 | Сообщение # 3
Сообщений: 737
Репутация: 61 [ +/- ]
Спасибо буду пробывать, как то не знаю, получается вышел игрок, запускается таймер, как 60 сек закончатся проверяется с Keyvalues файла игрок есть ли он или нет на сервере по стим или ип, если нет удаляются таймеры да? У меня с логикой плохо...
Но как остановить первый таймер аааа как же это муторно =(

Добавлено (12.05.2012, 23:22:57)
---------------------------------------------
у меня такой вопрос есть стимы которые хранятся в переменой disconnected_player_authids[pos] и я пытаюсь проверить эти стим иды со стим идами игроков которые на сервере как это сделать?

Code

public Action:Times(Handle:timer, any:t)  
{
     for (new x=queue_get_size()-1; x>=0; --x)  
  {
   new pos = queue_translate_pos(x);
   PrintToChatAll("%s", disconnected_player_authids[pos]);
  }
  decl String:steam_id[32];
  for (new i = 1; i <= MaxClients; i++)
     {
         if (IsClientInGame(i))
         {
    GetClientAuthString(i, steam_id, sizeof(steam_id));
    if (StrEqual(disconnected_player_authids[pos], steam_id, true)) PrintToChatAll("%s = %s", disconnected_player_authids[pos], steam_id);
    else PrintToChatAll("%s не равны %s", disconnected_player_authids[pos], steam_id);
         }
     }  
}

вообщем disconnected_player_authids[pos] проверяет тока первый стим ид, и если находит его на сервере то пишет что равны остальные стим иды он не проверяет grust

Добавлено (12.05.2012, 23:23:44)
---------------------------------------------
которые в disconnected_player_authids[pos] храняться

 
_wS_ Дата: Суббота, 12.05.2012, 23:42:10 | Сообщение # 4
Допустим, у нас в String:Steam_Baz[MAXPLAYERS+1][25] стимы игроков.
Чтобы узнать, есть ли стим игрока в Steam_Baz, делаем так:

Code
bool:SteaMFound(client)
{
     decl String:SteaM[25];
     GetClientAuthString(client, SteaM, 25);
     for (new i = 1; i <= MaxClients; i++)
     {
         if (StrEqual(SteaM, Steam_Baz[i])) return true;
     }
     return false;
}

// чтобы всех проверить:
for (new i = 1; i <= MaxClients; i++)
{
     if (IsClientInGame(i) && SteaMFound(i)) PrintToChatAll("Стим игрока %N есть в Steam_Baz", i);
}

-----
Ой, я ошибся немного, не if (IsClientInGame(i) && SteaMFound(client)) а:
if (IsClientInGame(i) && SteaMFound(i))
 
Scarface_slv Дата: Воскресенье, 13.05.2012, 14:01:21 | Сообщение # 5
Сообщений: 737
Репутация: 61 [ +/- ]
Спасибо те большое пойду проверять

Добавлено (13.05.2012, 14:01:21)
---------------------------------------------
у каждого при заходе на сервер запускается таймер, мне нужно что бы при выходе игрока сервера сохранился не законченный таймер можно так сделать?

Code

public Action:PlayerDisconnect(Handle:event, const String:name[], bool:dont_broadcast)
{
  new i = GetClientOfUserId(GetEventInt(event, "userid"));
  if (!IsFakeClient(i))
  {
   decl String:steam_id[25];
   GetClientAuthString(i, steam_id, 25);
   KvJumpToKey(KV, steam_id, true);
   KvSetString(KV, "time", timers[i]);  
   KvRewind(KV);
   KeyValuesToFile(KV, "x.txt");  
  }
  KillTimer(timers[i]);
         timers[i] = INVALID_HANDLE;
}
 
_wS_ Дата: Воскресенье, 13.05.2012, 15:28:11 | Сообщение # 6
Делать KeyValuesToFile при каждом выходе игрока плохо.
Перед убийством таймера надо проверить, жив ли он еще, иначе ошибка будет.

Code
if (timers[i] != INVALID_HANDLE)
{
     KillTimer(timers[i]);
     timers[i] = INVALID_HANDLE;
}

KvSetString(KV, "time", timers[i]); - думаю это бессмысленно, зачем сохранять Handle таймера, если ты его убиваешь?
Тебе надо сохранять секунды.

Quote
SEC[MAXPLAYERS+1];

Устанавливаешь, например, 60 сек, и запускаешь таймер с флагом TIMER_REPEAT и задержкой 1.0 сек.
Внутри функции таймера отнимаешь от секунд SEC[client] -= 1;
После выхода игрока сохраняешь его секунды.

Хотя я плохо понимаю что ты хочешь сделать, что за таймеры у тебя, что делают и какие.
 
Scarface_slv Дата: Воскресенье, 13.05.2012, 18:13:06 | Сообщение # 7
Сообщений: 737
Репутация: 61 [ +/- ]
я хочу что бы при заходе игрока таймер запустился на час, если за это время игрок выйдет или еще что, таймер сохраниться на 1 минуту и если за минуту он не зайдет то удалит а если зайдет то продолжит таймер, 3 дня мучаюсь как тока не пробую...

Добавлено (13.05.2012, 18:13:06)
---------------------------------------------
а где инфа храниться если нет KeyValuesToFile? работает без него но не понятно где все храниться

 
_wS_ Дата: Воскресенье, 13.05.2012, 18:26:29 | Сообщение # 8
Quote (Scarface_slv)
а где инфа храниться если нет KeyValuesToFile? работает без него но не понятно где все храниться

Там и хранится =) В созданной структуре KeyValues. KeyValuesToFile делают лишь для того, чтобы данные можно было использовать и после перезапуска сервера. Они заносятся в файл, из которого их позже можно будет загрузить с помощью FileToKeyValues и снова использовать. Т.е. если данные тебе не нужны после отключения сервера, нет смысла делать KeyValuesToFile.

То, что ты хочешь сделать - это сложная задача, я начал делать и передумал, напряжно (но возможно).
 
Scarface_slv Дата: Воскресенье, 13.05.2012, 21:11:12 | Сообщение # 9
Сообщений: 737
Репутация: 61 [ +/- ]
я тоже забью на нее уже бесит, сделал тока что при выходе игрока начался отчет 1 минута если за это время зайдет то... если нет то... а вот со вторым таймером который должен работать при входе игрока при выходе сохраниться а потом запуститься снова если игрок зайдет вот с ним полный бред, смог сохранить его но запустить снова(с Float устал).... если уж для тебя напряженно для меня это хаус
понаписал там бред по моему... grust
Может кому нить нужен будет для примера скрипт:

Гости не могут скачивать файлы
 
_wS_ Дата: Воскресенье, 13.05.2012, 23:42:18 | Сообщение # 10
Сделал, попробуй. Вроде все правильно работает. Перезаходи в игру, в чат будет писать сколько осталось до вызова функции. И попробуй не заходить в течение DEL_SEC, чтобы таймер сбросился.

Quote (Scarface_slv)
понаписал там бред по моему

Ничего, если есть желание, научишься =)

Гости не могут скачивать файлы
 
Scarface_slv Дата: Понедельник, 14.05.2012, 09:40:09 | Сообщение # 11
Сообщений: 737
Репутация: 61 [ +/- ]
Спасибо тебе большое!!!! klas

Добавлено (14.05.2012, 08:42:31)
---------------------------------------------
переменная new FINISH_SEC = 60; должна сменить секунды Finish_Func но почему при заходе он все равно пишет 60 осталось если я меняю ее на другие числа, например 70 sorry что достал тебя с глупыми вопросами...

Добавлено (14.05.2012, 09:40:09)
---------------------------------------------
ой нет все работает еще раз СПАСИБО

 
_wS_ Дата: Понедельник, 14.05.2012, 13:29:01 | Сообщение # 12
Пжалст =) Только главное чтобы ты сам понял как работает скрипт. Урок про CreateTrie() есть.
 
Scarface_slv Дата: Среда, 16.05.2012, 12:43:25 | Сообщение # 13
Сообщений: 737
Репутация: 61 [ +/- ]
CreateTrie() как я понял в скрипте сохраняет стим ид и сек и получ когда нужно, терь мучаюсь с последней проблемой это повтор таймера FINISH_SEC =)

Добавлено (16.05.2012, 12:41:41)
---------------------------------------------
_WS_ вот так дает игроку денег
[/code]
SetEntProp(client, Prop_Send, "m_iAccount", 2000, 100);

Code

но когда даешь так, то стандартные деньги например у игрока было 8000 удаляются, и дается 2000..
так как можно добавить в 8000+2000(возможно ли это). Может как то получить его деньги и прибавить ему +2000 а затем дать игроку прибавленные деньги командой:

SetEntProp(client, Prop_Send, "m_iAccount", cash, 100);
[code]
знал бы я как получить хотя бы его деньги...

Добавлено (16.05.2012, 12:43:25)
---------------------------------------------
блин ничайно удалил [code] и я почему то немогу редактировать

 
_wS_ Дата: Среда, 16.05.2012, 17:09:26 | Сообщение # 14
Хм, GetEntProp - получить, SetEntProp - установить:

Code
new cash = GetEntProp(client, Prop_Send, "m_iAccount") + 2000;
if (cash > 16000) cash = 16000;
SetEntProp(client, Prop_Send, "m_iAccount", cash);
 
Scarface_slv Дата: Суббота, 19.05.2012, 12:00:12 | Сообщение # 15
Сообщений: 737
Репутация: 61 [ +/- ]
Спасибо))

Добавлено (19.05.2012, 12:00:12)
---------------------------------------------
_WS_ возможно этот таймер повторяющимся сделать?

 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: