Исправляем падения сервера на карте awp_india., Special for c-s.net.ua by S0m3Th1nG_AwFul! © 2012 |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Исправляем падения сервера на карте awp_india., Special for c-s.net.ua by S0m3Th1nG_AwFul! © 2012 |
S0m3Th1nG_AwFul! |
12.10.2012, 14:25
Сообщение
|
Для начала немного теории.
Многие из вас наверняка испытывали странные падения на такой популярной карте, как awp_india. В интернете бытуют различные мнения на счёт причин такой нестабильности - кто-то грешит на плагины для авторестарта, кто-то на плагины для автоматической записи демо, а кто-то чуть более внимательный указывает, что падения возникают во время выдачи оружия игрокам. За эту процедуру на awp_india отвечают две стандартные функции движка, вызовы которых прописаны в списке entities самой карты - это player_weaponstrip и game_player_equip. Первая полностью разоружает игрока, чтобы у него не было стандартного пистолета, вторая выдаёт нож, броню+шлем, awp с 10 патронами в обойме и 30 запасных патронов. К сожалению, эти функции реализованы довольно криво - player_weaponstrip (а следом за ней и game_player_equip) срабатывает не при респауне игрока как таковом, а при выполнении команды fullupdate на стороне клиента (в AMXX-кодинге данное событие известно под именем ResetHUD). Тут-то мы и подходим к тому, что сервер может загнуться не только при рестарте раунда, но и посреди него из-за плагина для автоматической записи демо, поскольку начало записи демо всегда сопровождается выполнением команды fullupdate, и выше описанные функции не справляются с лавинообразным потоком запросов к ним. Тем не менее выключение плагина для записи демо и запрет на "лишние" рестарты карты лишь снижают вероятность падения - при значительном количестве игроков она по-прежнему остаётся высокой. Для решения данной проблемы нам, в-первых и в-главных, потребуется изъять из карты эти злосчастные player_weaponstrip и game_player_equip. Сразу хочу отметить, что Вам НЕ придётся после данной процедуры делать копию карты с именем в стиле awp_india_fixed.bsp, а клиентам, соответственно, её скачивать. Дело в том, что список событий, вызовов функций и активных объектов на карте (entities) регулируется строго на стороне сервера, от клиента требуется только совпадения общей архитектуры карты (расположение стен). Во-вторых, нам потребуется написать небольшой плагин, который будет корректно выдавать оружие игрокам. Практическая часть. На основании информации из зарубежного форума мапперов: 1) Загружаем программу RipEnt (во вложении), которая имеет консольное исполнение. 2) Распаковываем её в какое-нибудь доступное местоположение, например в D:\RipEnt 3) Копируем в эту папку исходный вариант awp_india.bsp 4) Запускаем командную строку Windows и переходим в каталог с RipEnt Код Microsoft Windows [Version 6.1.7601] (c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены. C:\Users\Alex>D: D:\>cd ripent D:\ripent> 5) Извлекаем список entities из карты при помощи команды ripent -export awp_india 6) Открываем только что созданный awp_india.ent, находим блоки с искомыми функциями Код { "origin" "-768 -192 80" "targetname" "stripper" "classname" "player_weaponstrip" } Код { "origin" "-768 -64 80" "ammo_338magnum" "3" "weapon_awp" "1" "weapon_knife" "1" "targetname" "equipment" "item_assaultsuit" "1" "spawnflags" "1" "classname" "game_player_equip" } и удаляем их. Сохраняем изменения. 7) Теперь нам нужно залить изменённый список обратно в карту, для этого выполняем ripent -import awp_india С модификацией карты закончено - в результате мы имеем карту, где игрокам на данный момент по стандарту выдаётся пистолет и нож. Можно поместить её обратно в cstrike/maps - заливать исправленный вариант на Web нет смысла. Теперь нам необходим плагин, который будет корректным образом выдавать на awp_india оружие игрокам во время респауна: Код: #include <amxmodx> Данный плагин также разоружает игрока и выдаёт ему нож, броню+шлем и awp с 10 патронами+30 в запас, но использует более надёжные функции из основных библиотек AMX Mod X и делает это моментально, без единой задержки, в отличии от старой реализации. Чтобы плагин подгружался только тогда, когда запущена эта карта, создайте в addons/amxmodx/configs папку maps, в ней файл plugins-awp_india.ini, в который вы должны прописать данный плагин. альтернативный вариант без необходимости в plugins-awp_india.ini Код: #include <amxmodx> Примерно аналогичным образом можно "пролечить" и другие карты, где задействованы дефектные функции. К примеру, в некоторых картах задействован только game_player_equip, что отменяет глюк с выдачей оружия через fullupdate, но стабильности посещаемому серверу это всё равно добавляет несильно. Совершенно аналогичным способом, к примеру, можно исправить awp_india2, awp_india2011. Для других карт, возможно, придётся переписать плагин, чтобы он выдавал другой набор вооружения. В любом случае Вы, надеюсь, идею уловили. Уже отредактированная awp_india.bsp, RipEnt и плагин прилагаются. На этом, собственно, и всё - хотелось как короче, но получилось как всегда :) Вопросы, предложения и конструктивная критика приветствуются. —— Update 20.09.2014: Переписанный и улучшенный вариант плагина без необходимости в редактировании .bsp-файла: https://c-s.net.ua/forum/ipb.html?s=&sh...st&p=658547
Отредактировал: S0m3Th1nG_AwFul!, - 20.9.2014, 13:17
Прикрепленные файлы:
awp_india.sma ( 490 байт )
Кол-во скачиваний: 361 ripent.zip ( 472,1 килобайт ) Кол-во скачиваний: 302 edited_awp_india.zip ( 743,43 килобайт ) Кол-во скачиваний: 439 awp_indiaV2.sma ( 644 байт ) Кол-во скачиваний: 216 awp_indiaV3.sma ( 988 байт ) Кол-во скачиваний: 224 |
|
Поблагодарили 49 раз
|
|
mazdan |
12.10.2012, 14:36
Сообщение
|
|
а событие в карте нельзя поменять, чтобы без плагина работало? а sv_consistency 1 если то пустит? или mp_consistency... не помню :D
Отредактировал: mazdan, - 12.10.2012, 14:45
Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|
S0m3Th1nG_AwFul! |
12.10.2012, 14:47
Сообщение
|
а событие в карте нельзя поменять, чтобы без плагина работало? В том, к сожалению, и суть, что карта сама по себе может использовать только движковые функции. В теории можно попробовать убрать только player_weaponstrip, но тогда игроки останутся с пистолетами на руках, что не есть гуд для awp_india и ей подобных. Плюс, опять-таки, стабильность сервера будет оставаться под угрозой, так как я слышал о падениях и на тех картах, где просто дают AWP и оставляют пистолет. а sv_consistency 1 если то пустит? * mp_consistency 1. Да, пускает без проблем. Ещё к первой цитате допишу, что также можно просто раскидать оружие по карте, но это сопряжено с геморроем, а так же пистолеты у игроков никуда не денутся.
Отредактировал: S0m3Th1nG_AwFul!, - 12.10.2012, 14:51
|
|
Поблагодарили 2 раз
|
|
Legenda |
12.10.2012, 14:57
Сообщение
|
|
прикольно
статья хорошая, ясная причина падения указана такое на многих картах происходит конечно |
Поблагодарили 1 раз
|
|
imba |
12.10.2012, 15:02
Сообщение
|
|||
Цитата Чтобы плагин подгружался только тогда, когда запущена эта карта, создайте в addons/amxmodx/configs папку maps, в ней файл plugins-awp_india.ini, в который вы должны прописать данный плагин. а так не лучше? Код #include <amxmodx>
#include <fun> #include <cstrike> #include <hamsandwich> public plugin_init() { register_plugin("AWP_INDIA Weapon Giver", "0.1", "S0m3Th1nG_AwFul!") new mapname[32] get_mapname(mapname,31) if(equali(mapname,"awp_india")) { RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1) } } public Player_Spawn(id) { if(is_user_alive(id)) { strip_user_weapons(id) give_item(id, "item_assaultsuit") give_item(id, "weapon_knife") cs_set_weapon_ammo(give_item(id, "weapon_awp"), 10) cs_set_user_bpammo(id, CSW_AWP, 30) } }
|
||||
Поблагодарили 1 раз
|
||||
S0m3Th1nG_AwFul! |
12.10.2012, 15:09
Сообщение
|
imba, правда твоя, но ведь плагин при этом будет всё время висеть в памяти, хотя учитывая его "размеры" это, пожалуй, не столь принципиально.
* добавил в статью
Отредактировал: S0m3Th1nG_AwFul!, - 12.10.2012, 15:14
|
|
|
|
mazdan |
12.10.2012, 15:20
Сообщение
|
|
Нет, я к тому что на других картах это как-то реализовано же иначе? ну типа awp другие карты и т.п. Нет события движка, которое player_spawn разве? ну или типа того =)
Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|
S0m3Th1nG_AwFul! |
12.10.2012, 15:33
Сообщение
|
Есть info_player_start и info_player_deathmatch, которые есть на всех картах и отвечают за координаты появление игроков. За автоматическую выдачу оружия "прямо-в-руки" отвечает только game_player_equip. Если же брать, к примеру, другую популярную awp-карту - awp_map, то там такой функционал не используется - оружие раскидано по респаунам и игроки сами подбирают его.
|
|
Поблагодарили 1 раз
|
|
X*CaHeK*X |
20.10.2012, 10:14
Сообщение
|
S0m3Th1nG_AwFul!, Огромное спасибо за фикс карты и плагин
|
|
|
|
=AleXsei= |
8.11.2012, 19:45
Сообщение
|
|
Ну а почему на других подобных картах все нормально, взять те же карты 35хр где тоже есть эти ентити которые заберают все оружие и выдают только нож, но там подобных падения нет.
|
|
|
S0m3Th1nG_AwFul! |
8.11.2012, 20:53
Сообщение
|
Ну а почему на других подобных картах все нормально, взять те же карты 35хр где тоже есть эти ентити которые заберают все оружие и выдают только нож, но там подобных падения нет. На 35hp картах, как правило, используется только game_player_equip, который в данном случае не создаёт критических ситуаций, так как выдаёт игрокам только нож и никаких более предметов. Стоит отметить, что game_player_equip также обнуляет текущий инвентарь игрока перед тем, как выдать другой набор вооружения. Использование же player_weapon_strip на многих awp-картах оправдано только тем, что если игрок дожил до конца раунда и не перезарядил свою AWP, то в следующем раунде он так и остался бы со, скажем, одним патроном в обойме - такая вот странная особенность работы game_player_equip. |
|
|
|
=AleXsei= |
8.11.2012, 21:16
Сообщение
|
|
На 35hp картах, как правило, используется только game_player_equip, который в данном случае не создаёт критических ситуаций, так как выдаёт игрокам только нож и никаких более предметов. Стоит отметить, что game_player_equip также обнуляет текущий инвентарь игрока перед тем, как выдать другой набор вооружения. Использование же player_weapon_strip на многих awp-картах оправдано только тем, что если игрок дожил до конца раунда и не перезарядил свою AWP, то в следующем раунде он так и остался бы со, скажем, одним патроном в обойме - такая вот странная особенность работы game_player_equip. Понятно) Как мне самому сейчас можно вызвать падения сервера на этой карте? Можете мне в этом помочь?)) Хотелось бы лично убидится в этом просто))
Отредактировал: =AleXsei=, - 8.11.2012, 21:30
|
|
|
miRror |
9.11.2012, 14:44
Сообщение
|
|
3 рестарта сделай.
Отредактировал: miRror, - 9.11.2012, 14:44
|
|
|
=AleXsei= |
9.11.2012, 14:58
Сообщение
|
|
|
|
|
Avrora |
9.11.2012, 15:14
Сообщение
|
|
Есть исходник на 3 рестарта.если нужен ЛС
|
|
|
Legenda |
26.11.2012, 11:08
Сообщение
|
|
|
|
|
petrnikolae4 |
8.4.2013, 16:56
Сообщение
|
А у меня такой вопрос я прост не в курсе на картах типо аим дигл тож падения бывают или нет. Ес бывают то карту таким же макаром исправлять или код какой то другой нужен ?а то я дуб дубом
|
|
|
|
petrnikolae4 |
9.4.2013, 16:16
Сообщение
|
Скрытый текст #include <amxmodx> #include <fun> #include <cstrike> #include <hamsandwich> public plugin_init() { register_plugin("AWP_INDIA Weapon Giver", "0.2", "S0m3Th1nG_AwFul!") new mapname[32] get_mapname(mapname,31) if(equali(mapname,"awp_india")) if(equali(mapname,"awp_india2")) { RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1) } } public Player_Spawn(id) { if(is_user_alive(id)) { strip_user_weapons(id) give_item(id, "item_assaultsuit") give_item(id, "weapon_knife") cs_set_weapon_ammo(give_item(id, "weapon_awp"), 10) cs_set_user_bpammo(id, CSW_AWP, 30) Так добавлять карты? на 2 карту? |
|
Поблагодарили 1 раз
|
|
Andrei |
9.4.2013, 16:58
Сообщение
|
|
Код if(equali(mapname,"awp_india") || equali(mapname,"awp_india2"))
|
|
|
cs-portal |
9.4.2013, 22:04
Сообщение
|
забыл new mapname[32]
|
|
|
|