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

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

  • Страница 1 из 1
  • 1
Возврат предыдущего значения
Sunday Дата: Понедельник, 14.01.2013, 08:45:58 | Сообщение # 1
Сообщений: 186
Репутация: 24 [ +/- ]
Парни подскажите, выполнилась команда, я стал бочкой на 20 секунд, как сделать так что бы скрипт запомнил мою предыдущую модель которая была до этого и после истечении времени вернул ее?

Код
#include <sourcemod>
#include <sdktools>

new Handle:Timer_explosive[MAXPLAYERS+1];

public OnPluginStart()
{
   RegConsoleCmd("bay_explosive", cmd_explosive);
}

public OnClientDisconnect(client)
{
   if (Timer_explosive[client] != INVALID_HANDLE)
   {
    KillTimer(Timer_explosive[client]);
    Timer_explosive[client] = INVALID_HANDLE;
   }
}

public Action: cmd_explosive(client, args)
{
   if (IsPlayerAlive(client))
   {
                  // замаскироваться под бочку
    SetEntityModel(client, "models/props_c17/oildrum001_explosive.mdl");
    Timer_explosive[client] = CreateTimer(20.0, cmd_explosive_off, client);
   }
}

public Action:cmd_explosive_off(Handle:timer, any:client)
{
   if (!IsPlayerAlive(client))
   {
    // ???
   }

   // ???
   Timer_explosive[client] = INVALID_HANDLE;
}


Сообщение отредактировал Sunday - Понедельник, 14.01.2013, 08:46:27
 
_wS_ Дата: Понедельник, 14.01.2013, 09:52:16 | Сообщение # 2
Код
public Action: cmd_explosive(client, args)   
   {   
     if (IsPlayerAlive(client))   
     {   
                    // замаскироваться под бочку   
      SetEntityModel(client, "models/props_c17/oildrum001_explosive.mdl");   
      Timer_explosive[client] = CreateTimer(20.0, cmd_explosive_off, client);   
     }   
}

Это неправильно.. Сам подумай, прописал игрок команду, стал бочкой, запустился таймер. Прописал команду опять и снова выполняются все эти действия и лишний таймер создается.. Почему не проверишь, стал ли он бочкой? Запущен ли уже таймер? Простые вещи.

Код
new String:g_MyOldSkin[MAXPLAYERS + 1][150];

public Action: cmd_explosive(client, args)
{
     // Если команду ввел игрок (вдруг ее просто в ркон кто-то вписал и client = 0)
     if (0 < client <= MaxClients)
     {
         // Если жив и еще не стал бочкой
         if (IsPlayerAlive(client) && Timer_explosive[client] == INVALID_HANDLE)
        {
             Timer_explosive[client] = CreateTimer(20.0, cmd_explosive_off, client);

             // тут запоминаешь текущую модель игрока
             g_MyOldSkin[client][0] = '\0';
             GetClientModel(client, g_MyOldSkin[client], 150);

             SetEntityModel(client, "models/props_c17/oildrum001_explosive.mdl");
         }
     }
}

public Action:cmd_explosive_off(Handle:timer, any:client)  
{
     // Если он в игре и жив, возвращаем прошлый скин
     if (IsClientInGame(client) && IsPlayerAlive(client))
     {  
         if (g_MyOldSkin[client][0] == 'm')
         {
             PrecacheModel(g_MyOldSkin[client], true);
             SetEntityModel(client, g_MyOldSkin[client]);
         }
         else if (GetClientTeam(client) == 2)
         {
             // Что-то не то с сохраненным скином в g_MyOldSkin, тут ставь стандартную модель T
         }
         else
         {
             // CT
          }
     }

     Timer_explosive[client] = INVALID_HANDLE;  
}

Ну и кэшируй все модели в OnMapStart, которые используешь в SetEntityModel.
 
Sunday Дата: Понедельник, 14.01.2013, 16:38:38 | Сообщение # 3
Сообщений: 186
Репутация: 24 [ +/- ]
_wS_ Спасибо Вам большое, все прекрасно работает! Пополню сегодня счет мобильного и обязательно нажму Спасибо за Ваши знания и труд!

Добавлено (14.01.2013, 16:38:38)
---------------------------------------------
Странно, по 10 рублей получается отправить а больше нет, пишет ошибку, хотя на счете денег предостаточно... Первую 10тук отправил а вторую пишет что не поддерживается, странная система платежки. Может деньги которые я положил, еще как то не были введены в базу... попробую звтра еще раз. dumaem Спасибо _wS_ за помощь! klas


Сообщение отредактировал Sunday - Понедельник, 14.01.2013, 16:42:05
 
  • Страница 1 из 1
  • 1
Поиск: