Исправляем падения сервера на карте 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 байт )
Кол-во скачиваний: 366
ripent.zip ( 472,1 килобайт )
Кол-во скачиваний: 309
edited_awp_india.zip ( 743,43 килобайт )
Кол-во скачиваний: 443
awp_indiaV2.sma ( 644 байт )
Кол-во скачиваний: 220
awp_indiaV3.sma ( 988 байт )
Кол-во скачиваний: 227 |
Поблагодарили 49 раз
|
|
Legenda
|
12.10.2012, 14:57
Сообщение
|
![]() ![]() |
прикольно
статья хорошая, ясная причина падения указана такое на многих картах происходит конечно |
Поблагодарили 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]
|
|
|
|
![]() ![]() |