Исправить фикс 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
Удалось выяснить что проблема в плагине парашюта. И вот решил сам решить свою проблему... Вот как я пытался пофиксить проблему, но при компиляции кучу ошибок. Возможно это полнейший бред, но я старался Код //Еще я добавил в 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 |
|
Сообщений: 304
Репутация: 23 [ +/- ]
|
|
Мг с парашютами для слабаков!!!!!;D
|
|
| |
iEx
|
Дата: Вторник, 20.01.2015, 02:11:22 | Сообщение # 3 |
|
Сообщений: 304
Репутация: 23 [ +/- ]
|
|
А так как вариант взять плагин зон какой-нибудь,у рута есть к примеру вроде нормальный,создать зону на этом уровне и когда игрок в нем запретить исп.парашют.
|
|
| |
MeDestroyer
|
Дата: Вторник, 20.01.2015, 09:45:40 | Сообщение # 4 |
|
Сообщений: 55
Репутация: -1 [ +/- ]
|
|
Цитата MeDestroyer ( ) Мг с парашютами для слабаков!!!!!;D А ты прям такой пра... Про уровни сложности слыхал? Цитата iEx ( ) А так как вариант взять плагин зон какой-нибудь,у рута есть к примеру вроде нормальный,создать зону на этом уровне и когда игрок в нем запретить исп.парашют. А я по твоему координаты взял от балды и функции тоже?
|
|
| |
BarD
|
Дата: Вторник, 20.01.2015, 10:58:27 | Сообщение # 5 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Цитата 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 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Код if (StrEqual(currentMap, "mg_bob2"))
Вот верный способ сравнения 2-х строк
Сообщение отредактировал BarD - Вторник, 20.01.2015, 11:48:09 |
|
| |
MeDestroyer
|
Дата: Вторник, 20.01.2015, 12:27:03 | Сообщение # 8 |
|
Сообщений: 55
Репутация: -1 [ +/- ]
|
|
Вот не могу сделать нормально. Ошибки какие-то постоянно. Помогите исправить, буду очень признателен. Скрин с ошибками и исходник прикрепил
Гости не могут скачивать файлы
|
|
|
| |
BarD
|
Дата: Вторник, 20.01.2015, 13:02:04 | Сообщение # 9 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
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 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Да, можно.
|
|
| |
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 уровень. Парашют включен"); } } Как можно сделать чтобы парашют выключался? Исходник во вложении
Гости не могут скачивать файлы
|
Сообщение отредактировал MeDestroyer - Вторник, 20.01.2015, 13:56:33 |
|
| |
BarD
|
Дата: Вторник, 20.01.2015, 15:35:33 | Сообщение # 13 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Цитата MeDestroyer ( ) SetEntityMoveType(i,MOVETYPE_WALK); Из-за этого ноуклип вырубается.
Чтоб парашют выключить, нужно переменную, которая за него отвечает, на false или 0 поставить
Сообщение отредактировал BarD - Вторник, 20.01.2015, 15:35:43 |
|
| |
MeDestroyer
|
Дата: Четверг, 22.01.2015, 22:10:48 | Сообщение # 14 |
|
Сообщений: 55
Репутация: -1 [ +/- ]
|
|
Так вот та пременная Добавлено (22.01.2015, 22:10:48) --------------------------------------------- Подскажите как выключить парашют в плагине? Никак не могу выключить(
|
|
| |
TEIN
|
Дата: Пятница, 23.01.2015, 09:40:06 | Сообщение # 15 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
при использовании парашюта сравнивай расстояние (но не таким способом, ведь ты приравниваешь переменную в true снова и снова)
|
|
| |
|