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

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

Новости

17-апр
30-дек
29-дек
26-дек

Баг в коде

, при дропе
Статус пользователя E1zy
сообщение 4.1.2017, 18:33
Сообщение #1
Стаж: 6 месяцев

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

Всем привет!
Делал плагин VIP, всё хорошо, без варнингов, но вот в коде..
Суть проблемы такова: Берешь в одном раунде оружие, когда наступает следующий раунд тебе дается дигл и исчезает оружие которое ты брал в прошлом раунде, также ты не можешь поднять никакое оружие в новом раунде.
Из-за чего это может происходить? Думаю что ошибка в коде дропа.
Код дропа

Код
#define VIP_FLAG ADMIN_LEVEL_H // Создаем макроконстанту,которая будет использоваться для условий ниже.
new p_Start_Deagle, p_Start_He, p_Start_Flash, p_Start_Smoke // Создаем новую переменную.
public plugin_init() // Конфигурация плагина.
{
    register_plugin("VIP", "1.0", "Eazy*") // Название\Версия\Автор плагина.
    register_logevent("round_start",2,"1=Round_Start")
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0") // отслеживаем начало раунда.
    register_event("TextMsg", "event_game_restart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in") // обнуляем значения, если был рестарт
    RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1); // выдаем при спавне инвентарь
    p_Start_Deagle = register_cvar("start_deagle", "1") // выдаем дигл при спавне.  
    p_Start_He = register_cvar("start_hegrenade", "1") // выдаем хае при спавне.
    p_Start_Flash = register_cvar("start_flash", "2") // выдаем 2 флеш при спавне.                          
    p_Start_Smoke = register_cvar("start_smokegrenade","1") // выдаем смок при спавне.
}
public fwHamPlayerSpawnPost(id){
    if( ( get_user_flags( id ) & VIP_FLAG ) ) {
        strip_user_weapons (id)
        give_item(id,"weapon_knife")
        if(get_pcvar_num(p_Start_Deagle) == 1){
            give_item(id,"weapon_deagle")
            cs_set_user_bpammo(id, CSW_DEAGLE, 35)
            cs_set_user_armor ( id, 100, CsArmorType:2 );
        }
        else if(cs_get_user_team(id) == CS_TEAM_CT){
            give_item(id, "weapon_usp")
            cs_set_user_bpammo(id, CSW_USP, 24)
        }
        else if (cs_get_user_team(id) == CS_TEAM_T){
            give_item(id, "weapon_glock18")
            cs_set_user_bpammo(id, CSW_GLOCK18, 40)
        }
        if(get_pcvar_num(p_Start_He) == 1){
            give_item(id, "weapon_hegrenade")
        }
        if(get_pcvar_num(p_Start_Flash) == 1){
            give_item(id, "weapon_flashbang")
        }
        else if(get_pcvar_num(p_Start_Flash) == 2){
            give_item(id, "weapon_flashbang")
            give_item(id, "weapon_flashbang")
        }
        if(get_pcvar_num(p_Start_Smoke) == 1){
            give_item(id, "weapon_smokegrenade")
        }
    }
}

Вот это ввожу в каждую команду выдачи оружия, нибудь это м4 или ак.
const dropped_weapons = (1 << CSW_AK47)|(1 << CSW_M4A1)|(1 << CSW_SG550)|(1 << CSW_P90)|(1 << CSW_SG552)|(1 << CSW_G3SG1)|(1 << CSW_TMP)|(1 << CSW_M3)|(1 << CSW_M249)|(1 << CSW_MP5NAVY)|(1 << CSW_UMP45)|(1 << CSW_AUG)|(1 << CSW_MAC10)|(1 << CSW_XM1014)|(1 << CSW_FAMAS)|(1 << CSW_AWP)|(1 << CSW_GALI)|(1 << CSW_SCOUT);
    static sWpName[32], iWeapons[32], iNum, i;
    get_user_weapons(id, iWeapons, iNum);
    for(i = 0; i < iNum; i++)
    {
        if((1 << iWeapons[i]) & dropped_weapons)
        {
            get_weaponname(iWeapons[i], sWpName, charsmax(sWpName));
            engclient_cmd(id, "drop", sWpName);
        }
    }

Вот и всё.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 4.1.2017, 21:35
Сообщение #2


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

Стаж: 4 года 10 месяцев

Сообщений: 2292
Благодарностей: 1179
Полезность: 889

Не использовать strip_user_weapons
В других подобных плагинах есть пример, как дропать оружие
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 4.1.2017, 22:59
Сообщение #3


Стаж: 3 года 1 месяц

Сообщений: 1923
Благодарностей: 1230
Полезность: 847

Код:
if(get_pcvar_num(p_Start_Deagle) == 1){
give_item(id,"weapon_deagle")
cs_set_user_bpammo(id, CSW_DEAGLE, 35)
cs_set_user_armor ( id, 100, CsArmorType:2 );
}
else if(cs_get_user_team(id) == CS_TEAM_CT){
give_item(id, "weapon_usp")
cs_set_user_bpammo(id, CSW_USP, 24)
}
else if (cs_get_user_team(id) == CS_TEAM_T){
give_item(id, "weapon_glock18")
cs_set_user_bpammo(id, CSW_GLOCK18, 40)
}

А не проще не strip'ать а просто давать дигл ?
Тут кода на пару строк должно быть а нагородили ..

П.С. дабы не создавать тему. Что лучше использовать:
cs_set_user_bpammo(id, CSW_GLOCK18, 40) или ExecuteHam(Ham_GiveAmmo, id, 35, "50ae", 35) ?
cs_set_user_armor ( id, 100, CsArmorType:2 ) или give_item(id,"item_assaultsuit") ?

Отредактировал: ssx, - 4.1.2017, 23:02


[CS 1.6 Public] 78.152.169.100:27014
[CS 1.6 CSDM FFA] 78.152.169.100:27015
[CS 1.6 CSDM AIM] 78.152.169.100:27017
[Half-Life LDM FFA] 78.152.169.100:27016
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 4.1.2017, 23:06
Сообщение #4
Стаж: 6 лет 10 месяцев

Сообщений: 2391
Благодарностей: 2429
Полезность: 969

Цитата
Из-за чего это может происходить?


Чтобы заблокировать подбор оружия, нужно хукать и блокировать тач. У вас в коде нет ни того, ни другого.


Цитата
П.С. дабы не создавать тему. Что лучше использовать:


Патроны правильно выдает только хам.

Цитата
cs_set_user_armor ( id, 100, CsArmorType:2 ) или give_item(id,"item_assaultsuit") ?


Из двух зол лучше выбрать кстрайк.

Отредактировал: SISA, - 5.1.2017, 2:02
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 5.1.2017, 11:01
Сообщение #5


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

Стаж: 4 года 10 месяцев

Сообщений: 2292
Благодарностей: 1179
Полезность: 889

ssx, а оружие дропать, не?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя E1zy
сообщение 6.1.2017, 22:56
Сообщение #6
Стаж: 6 месяцев

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

ssx,
Через give_item(id,"item_assaultsuit") почему-то не выдавало броню. Только через csArmor.
Так и не понял. Если убрать стрип, всё станет на круги своя ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 8.1.2017, 19:32
Сообщение #7


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

Стаж: 4 года 10 месяцев

Сообщений: 2292
Благодарностей: 1179
Полезность: 889

E1zy, да
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя E1zy
сообщение 9.1.2017, 6:12
Сообщение #8
Стаж: 6 месяцев

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

Цитата(GOOD FELLOW @ 8.1.2017, 20:32) *
E1zy, да

Убрал. Теперь, когда игрок спавнится, у его выбрасывается пистолет (раньше просто исчезал, давался сразу дигл), но баг всё-равно остался.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя E1zy
сообщение 12.1.2017, 14:09
Сообщение #9
Стаж: 6 месяцев

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

В общем, пришлось переделывать сток drop'a.
Решил проблему.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: