Half-Life и Adrenaline Gamer форум
http://aghl.ru/forum/

Сервер падает из-за стандартных гранат HL... Как исправить?
http://aghl.ru/forum/viewtopic.php?f=10&t=3251
Страница 2 из 2

Автор:  russia [ 30 мар 2022, 07:44 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Да, с этой версией впн мода удалось корректно запустить сервер.

Но проблему это не решило :unknown: сервак падает при тех же условиях

Изображение

Вот если бы гранаты, вместо того что бы исчезнуть, уходили бы в такой режим, это бы однозначно решило проблему :)

Изображение

Добавлено спустя 1 час 5 минут 9 секунд:
Re: Сервер падает из-за стандартных гранат HL... Как исправить?

Вообще есть затея:
При отсутствии гранат, выдать гранаты и отобрать от них все патроны. Если сделать это в момент когда в руках любое другое оружие, мы получим красные гранаты :twisted:

Код:
   new clip,ammo  
   
   if (get_user_weapon(id,clip,ammo) == 12 && ammo <=0){
      give_item (id, "weapon_handgrenade")
      ExecuteHamB
      (
         Ham_GiveAmmo,
         id,
         -5,
         "Hand Grenade",
         WPN_MAXAMMO
      )
   }

Или как то так. При необходимости можно вызвать таском.
Вот только как отловить момент броска гранаты? :scratch:
Нагуглить как то не получилось...

Автор:  russia [ 31 мар 2022, 04:47 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

В целом удалось отследить момент отсутствия гранат через FM_PlayerPreThink и при помощи глобальной переменной разово вызвать функцию таском (работает вполне корректно) , а вот отобрать патроны никак :( Ham_GiveAmmo здесь не канает, эта штука только плюсует бп. Гугл так же инфу не подбрасывает.

Есть идеи?

Автор:  Lev [ 31 мар 2022, 12:41 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Есть идеи сделать это правильно. viewtopic.php?f=10&t=1441

Автор:  russia [ 31 мар 2022, 16:15 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Без проблем :good: только читать дампы у меня так и не получилось... Как то помогал человек в чтении, по итогу он сказал что там ничего внятного, одна большая жирная ошибка... хотя проблема была в удалении несуществующей модели, но это был другой случай

Буду признателен, если есть опыт в чтении дампов

 

Автор:  Lev [ 01 апр 2022, 03:12 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Цитата:
Необработанное исключение по адресу 0x70D3D31A (weaponmod_amxx.dll) в hlds.exe.5784.dmp: 0xC0000005: нарушение прав доступа при чтении по адресу 0x108C0000.
Это в вепонмоде косяк где-то. Не в hl.dll, как я предположил изначально.
Чтобы дальше разбираться надо компилировать вепонмод с отладочной инфой.

Автор:  Lev [ 03 апр 2022, 16:18 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Кстати, раз с вепонмодом связано, можно поотключать плагины, может какой-то влияет так. Если найдешь какой влияет и скажешь как воспроизводить, наверное смогу быстро посмотреть что не так и поправлю.

Автор:  russia [ 03 апр 2022, 22:56 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Такая реакция идет между каждым оружием впн мода и стандартным оружием, имеющим привычку исчезать когда кончается патрон. Когда патроны есть, все работает как часы. Честно не пробовал что будет если связка будет между пушкой впнмода и красным(разряженным) стандартным стволом.

Думаешь дело может быть в сторонних плагинах, обеспечивающих геймплей?

Может в функции holster косяк какой, но я почему то сомневаюсь что проблема в ней:
Код:
public m4a1_holster(ent,id){
      if(!is_user_connected(id))
      return;
      
      if(game_mode() == 0)
      set_user_rendering(id)
      
      if(wpnmod_get_offset_int(ent,Offset_iInZoom)){
      set_pev(id,pev_fov,0.0)
      set_pev(id,pev_maxspeed,155.0)
      wpnmod_set_offset_int(id,Offset_iFOV,0)
      wpnmod_set_offset_int(ent,Offset_iInZoom,0)
      }
      if(wpnmod_set_offset_int(ent, Offset_iInReload, 0))
      emit_sound(id,CHAN_STATIC,RELOAD_SOUND,0.9,ATTN_NORM,SND_STOP,PITCH_NORM)
}

В общем как бы там ни было, смог написать костыль для обхода этого бага:
Код:
#define TASK_HUD      6457

new g_iGrenadeFixed[9999];


public plugin_init() {
   register_plugin(PLUGIN, VERSION, AUTHOR)
   
   register_clcmd("say /get","get_my_weapon")
   register_forward(FM_PlayerPreThink, "grenade_throw")

}
public get_my_weapon(id){
   new clip,ammo
   //get_user_ammo(id,12,clip,ammo)
   new weapon = get_user_weapon(id,clip,ammo)
   client_print(id,print_chat,"weapon[%d][%d][%d]",weapon,clip,ammo)
   
   
}

public grenade_throw(id)
{
   
   if (!is_user_connected(id))
      return 0;
      
   if (get_user_weapon(id) != 12)
      return 0;
      
   new clip,ammo
   
   //get_user_ammo(id,13,clip,ammo)
   
   if (get_user_weapon(id,clip,ammo) == 12 && ammo <= 0){
   set_task(1.0, "grenade_fixed", id+TASK_HUD)
   g_iGrenadeFixed[id] = 0
    }
   
   return 1;
}

public grenade_fixed(idx)
{
   new id = idx - TASK_HUD
   if(g_iGrenadeFixed[id] == 0){
   engclient_cmd(id,"weapon_knife")
   g_iGrenadeFixed[id] = 1
   return
   }else if(g_iGrenadeFixed[id] == 1){
   return
   }
   
}

Суть:
Через ПреЗинк ловим момент когда у игрока в руках гранаты и его патроны <= 0, после через секунду разово вызываем таск, в котором насильно суем ему в руки нож. Получается что после окончания гранат у игрока достается какое то оружие, а в след за ним достается нож... Тем самым мы разорвали связь "lastinv" (клавиша "Q"), ведущую к краху сервера... Немного не красиво, но пока что сервер больше не падал...

Хотел бы все таки получить ответ на вопрос:
Возможно ли как то забрать у игрока патроны стандартного оружия???

Автор:  Lev [ 04 апр 2022, 04:19 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

russia писал(а):
Возможно ли как то забрать у игрока патроны стандартного оружия?
Ну, как бы, читай мануал :)
wpnmod_get_player_ammo
wpnmod_set_player_ammo
Наверное этим можно.

Автор:  russia [ 17 апр 2022, 17:05 ]
Заголовок сообщения:  Re: Сервер падает из-за стандартных гранат HL... Как исправи

Изображение

Именно то что и нужно было :good: спасибо))

Код:
#define TASK_HUD      6457

new g_iGrenadeFixed[9999];


public plugin_init() {
   register_plugin(PLUGIN, VERSION, AUTHOR)
   
   register_clcmd("say /get","get_my_weapon")
   register_forward(FM_PlayerPreThink, "grenade_throw")

}
public get_my_weapon(id){
   new clip,ammo
   //get_user_ammo(id,12,clip,ammo)
   new weapon = get_user_weapon(id,clip,ammo)
   client_print(id,print_chat,"weapon[%d][%d][%d]",weapon,clip,ammo)
   
   
}

public grenade_throw(id)
{
   
   if (!is_user_connected(id))
      return 0;
     
   if (get_user_weapon(id) != 12)
      return 0;
     
   new clip,ammo
   
   //get_user_ammo(id,13,clip,ammo)
   
   if (get_user_weapon(id,clip,ammo) == 12 && ammo <= 0){
   set_task(1.0, "grenade_fixed", id+TASK_HUD)
   g_iGrenadeFixed[id] = 0
    }
   
   return 1;
}

public grenade_fixed(idx)
{
   new id = idx - TASK_HUD
   if(g_iGrenadeFixed[id] == 0){
   //engclient_cmd(id,"weapon_knife")
   give_item (id, "weapon_handgrenade")
   wpnmod_set_player_ammo(id, "Hand Grenade", 0)
   g_iGrenadeFixed[id] = 1
   return
   }else if(g_iGrenadeFixed[id] == 1){
   return
   }
   
}

Страница 2 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/