Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

10 страниц V   1 2 ... 8 9 »

Исправляем падения сервера на карте awp_india.

, Special for c-s.net.ua by S0m3Th1nG_AwFul! © 2012
Статус пользователя S0m3Th1nG_AwFul!
сообщение 12.10.2012, 14:25
Сообщение #1
Стаж: 13 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Для начала немного теории.

Многие из вас наверняка испытывали странные падения на такой популярной карте, как 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>
#include <fun>
#include <cstrike>
#include <hamsandwich>

public plugin_init()
{
register_plugin("AWP_INDIA Weapon Giver", "0.1", "S0m3Th1nG_AwFul!")
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)
}
}

Данный плагин также разоружает игрока и выдаёт ему нож, броню+шлем и awp с 10 патронами+30 в запас, но использует более надёжные функции из основных библиотек AMX Mod X и делает это моментально, без единой задержки, в отличии от старой реализации.
Чтобы плагин подгружался только тогда, когда запущена эта карта, создайте в addons/amxmodx/configs папку maps, в ней файл plugins-awp_india.ini, в который вы должны прописать данный плагин.
альтернативный вариант без необходимости в plugins-awp_india.ini

Код:
#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"))
{
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)
}
}



Примерно аналогичным образом можно "пролечить" и другие карты, где задействованы дефектные функции. К примеру, в некоторых картах задействован только 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
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя mazdan
сообщение 12.10.2012, 14:36
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 7566
Благодарностей: 5436
Полезность: 1305

а событие в карте нельзя поменять, чтобы без плагина работало? а sv_consistency 1 если то пустит? или mp_consistency... не помню :D

Отредактировал: mazdan, - 12.10.2012, 14:45


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 12.10.2012, 14:47
Сообщение #3
Стаж: 13 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Цитата(mazdan @ 12.10.2012, 16:36) *
а событие в карте нельзя поменять, чтобы без плагина работало?

В том, к сожалению, и суть, что карта сама по себе может использовать только движковые функции. В теории можно попробовать убрать только player_weaponstrip, но тогда игроки останутся с пистолетами на руках, что не есть гуд для awp_india и ей подобных. Плюс, опять-таки, стабильность сервера будет оставаться под угрозой, так как я слышал о падениях и на тех картах, где просто дают AWP и оставляют пистолет.
Цитата(mazdan @ 12.10.2012, 16:36) *
а sv_consistency 1 если то пустит?

* mp_consistency 1. Да, пускает без проблем.

Ещё к первой цитате допишу, что также можно просто раскидать оружие по карте, но это сопряжено с геморроем, а так же пистолеты у игроков никуда не денутся.

Отредактировал: S0m3Th1nG_AwFul!, - 12.10.2012, 14:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 12.10.2012, 14:57
Сообщение #4


Иконка группы

Стаж: 14 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

прикольно
статья хорошая, ясная причина падения указана

такое на многих картах происходит конечно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя imba
сообщение 12.10.2012, 15:02
Сообщение #5
Стаж: 14 лет

Сообщений: 1677
Благодарностей: 735
Полезность: 571

Цитата
Чтобы плагин подгружался только тогда, когда запущена эта карта, создайте в 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)
    }
}


!
Запрет на ответ в темах до: 10.11.29392, 21:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 12.10.2012, 15:09
Сообщение #6
Стаж: 13 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

imba, правда твоя, но ведь плагин при этом будет всё время висеть в памяти, хотя учитывая его "размеры" это, пожалуй, не столь принципиально.
* добавил в статью

Отредактировал: S0m3Th1nG_AwFul!, - 12.10.2012, 15:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 12.10.2012, 15:20
Сообщение #7


Иконка группы

Стаж: 13 лет

Сообщений: 7566
Благодарностей: 5436
Полезность: 1305

Нет, я к тому что на других картах это как-то реализовано же иначе? ну типа awp другие карты и т.п. Нет события движка, которое player_spawn разве? ну или типа того =)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 12.10.2012, 15:33
Сообщение #8
Стаж: 13 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Есть info_player_start и info_player_deathmatch, которые есть на всех картах и отвечают за координаты появление игроков. За автоматическую выдачу оружия "прямо-в-руки" отвечает только game_player_equip. Если же брать, к примеру, другую популярную awp-карту - awp_map, то там такой функционал не используется - оружие раскидано по респаунам и игроки сами подбирают его.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя X*CaHeK*X
сообщение 20.10.2012, 10:14
Сообщение #9
Стаж: 14 лет

Сообщений: 705
Благодарностей: 225
Полезность: 561

S0m3Th1nG_AwFul!, Огромное спасибо за фикс карты и плагин thank_you2.gif give_rose.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя =AleXsei=
сообщение 8.11.2012, 19:45
Сообщение #10


Стаж: 12 лет

Сообщений: 10
Благодарностей: 1
Полезность: 0

Ну а почему на других подобных картах все нормально, взять те же карты 35хр где тоже есть эти ентити которые заберают все оружие и выдают только нож, но там подобных падения нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 8.11.2012, 20:53
Сообщение #11
Стаж: 13 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Цитата(=AleXsei= @ 8.11.2012, 21:45) *
Ну а почему на других подобных картах все нормально, взять те же карты 35хр где тоже есть эти ентити которые заберают все оружие и выдают только нож, но там подобных падения нет.

На 35hp картах, как правило, используется только game_player_equip, который в данном случае не создаёт критических ситуаций, так как выдаёт игрокам только нож и никаких более предметов.
Стоит отметить, что game_player_equip также обнуляет текущий инвентарь игрока перед тем, как выдать другой набор вооружения. Использование же player_weapon_strip на многих awp-картах оправдано только тем, что если игрок дожил до конца раунда и не перезарядил свою AWP, то в следующем раунде он так и остался бы со, скажем, одним патроном в обойме - такая вот странная особенность работы game_player_equip.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя =AleXsei=
сообщение 8.11.2012, 21:16
Сообщение #12


Стаж: 12 лет

Сообщений: 10
Благодарностей: 1
Полезность: 0

Цитата(S0m3Th1nG_AwFul! @ 8.11.2012, 22:53) *
На 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
Сообщение #13


Стаж: 13 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

3 рестарта сделай.

Отредактировал: miRror, - 9.11.2012, 14:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя =AleXsei=
сообщение 9.11.2012, 14:58
Сообщение #14


Стаж: 12 лет

Сообщений: 10
Благодарностей: 1
Полезность: 0

Цитата(miRror @ 9.11.2012, 16:44) *
3 рестарта сделай.

Делал и не 3, сервер не упал.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Avrora
сообщение 9.11.2012, 15:14
Сообщение #15


Стаж: 11 лет
Город: Санкт-Петербург


Сообщений: 806
Благодарностей: 171
Полезность: 95

Есть исходник на 3 рестарта.если нужен ЛС
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 26.11.2012, 11:08
Сообщение #16


Иконка группы

Стаж: 14 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(=AleXsei= @ 9.11.2012, 16:58) *
Делал и не 3, сервер не упал.

на сервере должно быть достаточно много игроков при этом
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя petrnikolae4
сообщение 8.4.2013, 16:56
Сообщение #17
Стаж: 11 лет

Сообщений: 63
Благодарностей: 6
Полезность: 77

А у меня такой вопрос я прост не в курсе на картах типо аим дигл тож падения бывают или нет. Ес бывают то карту таким же макаром исправлять или код какой то другой нужен ?а то я дуб дубом
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя petrnikolae4
сообщение 9.4.2013, 16:16
Сообщение #18
Стаж: 11 лет

Сообщений: 63
Благодарностей: 6
Полезность: 77

Скрытый текст
#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
Сообщение #19


Стаж: 13 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Код
if(equali(mapname,"awp_india") || equali(mapname,"awp_india2"))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 9.4.2013, 22:04
Сообщение #20
Стаж: 14 лет

Сообщений: 8181
Благодарностей: 2709
Полезность: 0

забыл new mapname[32]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
10 страниц V   1 2 ... 8 9 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: