Заказать Сервер Заказать Плагин Контакты Поиск

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

Страница 1 из 212»
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Исправить фикс mg_bob2 в плагине sm_parachute (Прошу помощи, потому что сам в этом не понимаю ничего)
Исправить фикс mg_bob2 в плагине sm_parachute
MeDestroyer Дата: Вторник, 20.01.2015, 01:57:25 | Сообщение # 1
Сообщений: 55
Репутация: -1 [ +/- ]
Здравствуйте, у меня есть моя любимая карта mg_bob2 и вот когда я создал сервер, естественно это была первая моя карта. Но возникла проблема не работает 11ур.
Вот 2 видео по 20сек, чтобы вы поняли проблему
Как должно быть:
https://www.youtube.com/watch?v=cLxPKmqpVS4&feature=youtu.be
Как у меня на сервере:
https://www.youtube.com/watch?v=ShufLNSh6nM&feature=youtu.be

Удалось выяснить что проблема в плагине парашюта. И вот решил сам решить свою проблему...
Вот как я пытался пофиксить проблему, но при компиляции кучу ошибок. Возможно это полнейший бред, но я старался grust
Код

//Еще я добавил в OnMapStart: FixMgBob2(client)
public FixMgBob2(client)
{
    decl String:currentMap[64];
    GetCurrentMap(currentMap, 64);
    if(currentMap = workshop/277981605/mg_bob2 || currentMap = mg_bob2)
    {
     new Float:startpos[3],Float:finpos[3], Float:ppos[3];//start 869.931885 2454.829346 972.113831;setang -3.622526 38.399559 0.000000 fin setpos 4436.108398 7165.927246 5743.093750;setang 39.842857 -87.387383 0.000000
     startpos[0] = "869.931885";
     startpos[1] = "2454.829346";
     startpos[2] = "972.113831";
     finpos[0] = "869.931885";
     finpos[1] = "2454.829346";
     finpos[2] = "972.113831";
     for(new i = 1; i <= MaxClients; i++) //проходим всех игроков    
     {    
      if(IsClientInRangeOfPoint(i, 400.0, startpos)) //если игрок в радиусе 400 от старта, то включаем парашют
      {
       if (hasPara[client])
       {
        SetEntityGravity(client,1.0);
        SetEntityMoveType(client,MOVETYPE_WALK);
        hasPara[client] = false;
        CGOPrintToChat(client,"{LIGHTRED}[Парашют] {BLUE}На 11 уровне парашют выключен!");
       }
      }    
      if(IsClientInRangeOfPoint(i, 400.0, finpos)) //если игрок в радиусе 400 от финиша, то выключаем парашют    
      {
       if (hasPara[client] = false)
       {
        hasPara[client] = true
        CGOPrintToChat(client,"{LIGHTRED}[Парашют] {BLUE}Вы прошли 11 уровень. Парашют включен");
       }
      }
     }
    }    
}

stock Float:GetDistance(Float:pos1[3], Float:pos2[3]) //получает дистанцию между двух точек. (В 2д пространстве).    
{    
         return SquareRoot( Pow(pos2[0] - pos1[0], 2.0) + Pow(pos2[1] - pos1[1], 2.0) );    
}    

stock IsClientInRangeOfPoint(client, Float:radius, Float:cpos[3]) //проверяет предыдущей функцией, в радиусе ли игрок от определенной точки.    
{    
         new Float:ppos[3];    
         GetClientAbsOrigin(client, ppos);    
         if(GetDistance(ppos, cpos) <= radius) return true;    
         return false;    
}
Помогите поправить, пожалуйста


Сообщение отредактировал MeDestroyer - Вторник, 20.01.2015, 01:59:08
 
iEx Дата: Вторник, 20.01.2015, 02:10:23 | Сообщение # 2
Сообщений: 305
Репутация: 23 [ +/- ]
Мг с парашютами для слабаков!!!!!;D
 
iEx Дата: Вторник, 20.01.2015, 02:11:22 | Сообщение # 3
Сообщений: 305
Репутация: 23 [ +/- ]
А так как вариант взять плагин зон какой-нибудь,у рута есть к примеру вроде нормальный,создать зону на этом уровне и когда игрок в нем запретить исп.парашют.
 
MeDestroyer Дата: Вторник, 20.01.2015, 09:45:40 | Сообщение # 4
Сообщений: 55
Репутация: -1 [ +/- ]
Цитата MeDestroyer ()
Мг с парашютами для слабаков!!!!!;D
А ты прям такой пра... Про уровни сложности слыхал?
Цитата iEx ()
А так как вариант взять плагин зон какой-нибудь,у рута есть к примеру вроде нормальный,создать зону на этом уровне и когда игрок в нем запретить исп.парашют.

А я по твоему координаты взял от балды и функции тоже?
 
BarD Дата: Вторник, 20.01.2015, 10:58:27 | Сообщение # 5
Сообщений: 944
Репутация: 132 [ +/- ]
Цитата MeDestroyer ()
decl String:currentMap[64];
    GetCurrentMap(currentMap, 64);
    if(currentMap = workshop/277981605/mg_bob2 || currentMap = mg_bob2)

Кто ж так строки сравнивает?

Добавлено (20.01.2015, 10:58:27)
---------------------------------------------
11 уровень - это космос? Или Sliderace?

 
MeDestroyer Дата: Вторник, 20.01.2015, 11:27:25 | Сообщение # 6
Сообщений: 55
Репутация: -1 [ +/- ]
Цитата BarD ()
Кто ж так строки сравнивает?

Покажи как правильно, в скобки надо брать?
Цитата BarD ()
11 уровень - это космос? Или Sliderace?

Я же видео прикрепил. Да космос
 
BarD Дата: Вторник, 20.01.2015, 11:46:43 | Сообщение # 7
Сообщений: 944
Репутация: 132 [ +/- ]
Код
if (StrEqual(currentMap, "mg_bob2"))


Вот верный способ сравнения 2-х строк


Сообщение отредактировал BarD - Вторник, 20.01.2015, 11:48:09
 
MeDestroyer Дата: Вторник, 20.01.2015, 12:27:03 | Сообщение # 8
Сообщений: 55
Репутация: -1 [ +/- ]
Вот не могу сделать нормально. Ошибки какие-то постоянно. Помогите исправить, буду очень признателен. Скрин с ошибками и исходник прикрепил

Прикрепления: sm_parachute.sp(19Kb) · 9257395.jpg(93Kb)
 
BarD Дата: Вторник, 20.01.2015, 13:02:04 | Сообщение # 9
Сообщений: 944
Репутация: 132 [ +/- ]
141 строка: Ты не можешь добавить свои параметры в шапку функции. В OnMapStart нет client.

609 - 614 строки: Значение присвоил неправильно. Ты присваиваешь так:
Код
startpos[2] = "972.113831"

А надо так:
Код
startpos[2] = 972.113831   // Без кавычек


629 строка: Ты проверяешь bool переменную на true/false. Вместо
Код
if (hasPara[client] = false) //Неправильно

Пиши
Код
if (!hasPara[client]) // ! значит, что проверка будет обратной.

Т.е (!условие) будет работать, когда "условие" не соблюдается

Добавлено (20.01.2015, 12:58:04)
---------------------------------------------
Да и вообще, зачем тебе в твое блоке client нужен? Ты используешь цикл по всем игрокам, в котором клиентом является переменная i. Вот и используй ее. И плохая идея проверять это все в начале карты, т.к. в начале карты они все на старте и толку не будет от твоих проверок.

Добавлено (20.01.2015, 13:02:04)
---------------------------------------------
Я бы в OnMapStart сделал повторяющийся таймер:

Код
public OnMapStart()
{
     CreateTimer(1.0, CheckParashute, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);

    //Тут то, что там дальше идет. Проверки моделей каких-то.
}

public Action:CheckParashute(Handle:timer)
{
     FixMgBob2();
}

public FixMgBob2()
{
   decl String:currentMap[64];
   GetCurrentMap(currentMap, 64);
   if(StrEqual(currentMap, "mg_bob2") || StrEqual(currentMap, "workshop/277981605/mg_bob2"))
   {
    new Float:startpos[3],Float:finpos[3]//, Float:ppos[3];
    //start 869.931885 2454.829346 972.113831 setang -3.622526 38.399559 0.000000 fin setpos 4436.108398 7165.927246 5743.093750;setang 39.842857 -87.387383 0.000000
    startpos[0] = 869.931885;
    startpos[1] = 2454.829346;
    startpos[2] = 972.113831;
    finpos[0] = 869.931885;
    finpos[1] = 2454.829346;
    finpos[2] = 972.113831;
    for(new i = 1; i <= MaxClients; i++) //проходим всех игроков   
    {   
      if (IsClientInGame(i))
      {
     if(IsClientInRangeOfPoint(i, 400.0, startpos)) //если игрок в радиусе 400 от старта, то включаем парашют
     {
      if (hasPara[i])
      {
       SetEntityGravity(i,1.0);
       SetEntityMoveType(i,MOVETYPE_WALK);
       hasPara[i] = false;
       CGOPrintToChat(i,"{LIGHTRED}[Парашют] {BLUE}На 11 уровне парашют выключен!");
      }
     }   
     if(IsClientInRangeOfPoint(i, 400.0, finpos)) //если игрок в радиусе 400 от финиша, то выключаем парашют   
     {
      if (!hasPara[i])
      {
       hasPara[i] = true
       CGOPrintToChat(i,"{LIGHTRED}[Парашют] {BLUE}Вы прошли 11 уровень. Парашют включен");
      }
     }
      }
    }
   }   
}


Как-то так, "на скорую руку" написал :)


Сообщение отредактировал BarD - Вторник, 20.01.2015, 13:03:05
 
MeDestroyer Дата: Вторник, 20.01.2015, 13:10:10 | Сообщение # 10
Сообщений: 55
Репутация: -1 [ +/- ]
Цитата BarD ()
И плохая идея проверять это все в начале карты, т.к. в начале карты они все на старте и толку не будет от твоих проверок.

А можно ли сделать проверку на карту тут:
Код
public OnMapStart()  
{  
      CreateTimer(1.0, CheckParashute, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);  

     //Тут то, что там дальше идет. Проверки моделей каких-то.  
}

Чтобы таймер не создавался лишний раз на других картах?
 
BarD Дата: Вторник, 20.01.2015, 13:20:12 | Сообщение # 11
Сообщений: 944
Репутация: 132 [ +/- ]
Да, можно.
 
MeDestroyer Дата: Вторник, 20.01.2015, 13:54:16 | Сообщение # 12
Сообщений: 55
Репутация: -1 [ +/- ]
Спасибо тебе. Ошибок с компиляцией нет. Вот только возникла одна проблемма. Когда игрок попадает на 11ур. ему в чат пишет
Цитата

[Парашют] На 11 уровне парашют выключен!
[Парашют]
Но парашют не выключается. Еще заметил что когда в ноклипе в начало уровня влетаешь, то ноклип отключается
Код
        if(IsClientInRangeOfPoint(i, 400.0, startpoтs)) //если игрок в радиусе 400 от старта, то выключаем парашют    
           {    
             SetEntityGravity(i,1.0);    
             SetEntityMoveType(i,MOVETYPE_WALK);    
             new parachute = hasPara[i];
             hasPara[i] = false;     
             CGOPrintToChat(i,"{LIGHTRED}[Парашют] {BLUE}На 11 уровне парашют выключен!");     
             CGOPrintToChat(i,"{GREEN}[Парашют] {BLUE}%s", parachute);     
           }      
           if(IsClientInRangeOfPoint(i, 400.0, finpos)) //если игрок в радиусе 400 от финиша, то включаем парашют      
           {    
             if (!hasPara[i])    
             {    
              hasPara[i] = true    
              CGOPrintToChat(i,"{LIGHTRED}[Парашют] {BLUE}Вы прошли 11 уровень. Парашют включен");    
             }    
           }

Как можно сделать чтобы парашют выключался? Исходник во вложении

Прикрепления: 7976923.sp(19Kb)


Сообщение отредактировал MeDestroyer - Вторник, 20.01.2015, 13:56:33
 
BarD Дата: Вторник, 20.01.2015, 15:35:33 | Сообщение # 13
Сообщений: 944
Репутация: 132 [ +/- ]
Цитата MeDestroyer ()
SetEntityMoveType(i,MOVETYPE_WALK);

Из-за этого ноуклип вырубается.

Чтоб парашют выключить, нужно переменную, которая за него отвечает, на false или 0 поставить


Сообщение отредактировал BarD - Вторник, 20.01.2015, 15:35:43
 
MeDestroyer Дата: Четверг, 22.01.2015, 22:10:48 | Сообщение # 14
Сообщений: 55
Репутация: -1 [ +/- ]
Так вот та пременная
Код
hasPara[i]

Добавлено (22.01.2015, 22:10:48)
---------------------------------------------
Подскажите как выключить парашют в плагине? Никак не могу выключить(

 
TEIN Дата: Пятница, 23.01.2015, 09:40:06 | Сообщение # 15
Сообщений: 550
Репутация: 73 [ +/- ]
при использовании парашюта сравнивай расстояние (но не таким способом, ведь ты приравниваешь переменную в true снова и снова)
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Исправить фикс mg_bob2 в плагине sm_parachute (Прошу помощи, потому что сам в этом не понимаю ничего)
Страница 1 из 212»
Поиск: