Я и PAWN | Изучаю, потому что интересно

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Примеров с отключением/включением хуков - масса.
 
Сообщения
702
Реакции
54
d3m37r4, масса, то масса, только в том же плагине разминки, они юзают один раз хук старта раунда, а потом его выключают, т.е не совсем то, что нужно.
Мне надо допустим убрать хуки оружия и урона, но я не могу просто взять, завести хук спавна и потом выключить, т.к по идее оружие успеет выдать.

То есть надо в инициализации выключить, а где-то в паблике, который подключается после, например в конфиге (но не уверен) проверять на карту и включать.
16 Июн 2020
Если я не прав, поправьте меня)
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
ThePhoenix, набросай вариант, как ты это представляешь, а мы подскажем.
 
Сообщения
702
Реакции
54
Minni, что-то подобное я наваял :D
Код:
public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

    class_id = bm_register_class(CLASS_NAME, CLASS_INFO, CLASS_HEALTH, CLASS_SPEED, CLASS_ARMOR, CLASS_BOOST, CLASS_MODEL_CT, CLASS_MODEL_TE, ADMIN_ALL);
 
    DisableHookChain(g_Spawn = RegisterHookChain(RG_CSGameRules_PlayerSpawn, "refwd_PlayerSpawn_Post", true));
    DisableHookChain(g_TakeDmg = RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage_Pre", 0));
    g_Ham = RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Knife_Deploy_Post", true); // 45 строка
}

public plugin_cfg()
{
    new szMapPrefix[][] = {"fy_", "35hp", "awp_", "aim_", "cs_deagle"};
    new szMapName[32]; get_mapname( szMapName, charsmax(szMapName));
 
    for( new i; i < sizeof( szMapPrefix ); i++)
    {
        if(!(containi( szMapName, szMapPrefix[i] )) != -1) // 55 строка
        {
            DisableHookChain(g_Ham);
         
            EnableHookChain(g_Spawn);
            EnableHookChain(g_TakeDmg);
         
            bm_set_class_weapon(class_id, "weapon_deagle", 35);
            break;
        }
    }
    log_amx("plugin_cfg");
}
Но я так понял, нет такого, "не содержит" название карты и нельзя регать хук через переменную сразу?
Ибо
Код:
// M:\0__0 ╤╬┴╚╨└┼╠ ╤┼╨┬┼╨ 0__0\new COMPILER [5263]\bm_class_spy.sma(45) : warning 213: tag mismatch
// M:\0__0 ╤╬┴╚╨└┼╠ ╤┼╨┬┼╨ 0__0\new COMPILER [5263]\bm_class_spy.sma(55) : warning 213: tag mismatch
p.s. А через equal можно сравнивать название карты и префикс, ибо там можно !equal заюзать без проблем.

UPD: судя по всему нельзя сравнивать, а только конкретно название:
Код:
#include <amxmodx>
#include <reapi>

public plugin_init()
{
    new mapName[32];
    get_mapname(mapName, charsmax(mapName));
   
    log_amx("%s", mapName);
   
    if (equal(mapName, "35hp_"))
        return;
   
    RegisterHookChain(RG_CSGameRules_PlayerSpawn, "refwd_PlayerSpawn_Post", true)
}

public refwd_PlayerSpawn_Post(id) {
    rg_give_item(id, "weapon_ak47", GT_REPLACE);
    log_amx("пашет");
}
Или может я неправильно попробовал))

p.s. для моих задач хватит equal, но хотелось бы узнать всё-таки, есть ли "not containi" и почему tag mismatch, если я регаю хук сразу через переменную.
 
Последнее редактирование:
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
ThePhoenix, если я не ошибаюсь, то containi проверяет вхождения подстроки в стоке без учёта регистра. Твое условие записано не верно.
Попробуй так:
Код:
--if(!(containi( szMapName, szMapPrefix[i] )) != -1)
++if(containi( szMapName, szMapPrefix[i] ) == -1)
 
Сообщения
702
Реакции
54
zhorzh78, нельзя, как минимум потому, что cs_ карты содержат cs_deagle
По этому приходиться включать выключать.
17 Июн 2020
Для себя, я пожалуй сделаю через equal, просто ретюрнить буду в plugin_init если карта не та, т.к у меня конкретных пару карт надо убрать
 
Сообщения
702
Реакции
54
zhorzh78, если я допустим сделаю регистрацию хука на картах cs_, то на карте cs_deagle, на которой не надо регистрировать, будет работать всё. Так лучше?
И опять же вопрос, если будет код, а регистрировать хук, в котором будет этот код буду только на отдельных картах, то не будет ли такого, что будут сыпаться ошибки по типу, хук не был зарегистрирован?
17 Июн 2020
irrumabo_me_nomen, да, скорее всего я ошибся просто :)
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Что задом, что передом.
Вы регистрируете хуки. Далее, в цикле, при совпадении с какой-то картой их выключаете. В чем проблема в этом самом цикле, на нужной карте, зарегистрировать.. Хотя.. ладно.. плохой из меня учитель логики.. яж не скриптер
 
Сообщения
702
Реакции
54
zhorzh78, давайте по другому. Я сделал, чтобы хуки регистрировались на картах cs_ и de_, но мне надо исключить карту cs_deagle, то мне надо внутри "содержит в названии карты"... Добавить ещё одну проверку на конкретную карту cs_deagle и break?
 
Сообщения
219
Реакции
184
Помог
3 раз(а)
ThePhoenix, думай, а не спрашивай, уже все сказали
 
Сообщения
225
Реакции
90
Помог
1 раз(а)
ThePhoenix, не проще сделать просто массив нужных карт, а не делать логику, что на картах с таким префиксом будет что-то выполняться, но если эта карта-исключение то не будет? К тому же зачем регистрировать то что выключится и не будет использоваться :crazy:
 
Сообщения
702
Реакции
54
irrumabo_me_nomen, карты можно менять,как перчатки и делать массив из нужных карт и удалять/добавлять, такое себе. Разве что, если считывать данные с maps.ini того же.
Суть в включении/выключении в том, что сам плагин/персонаж, должен работать, а все его функции должны отключаться на "неудобных" картах.
А какой способ для этого выбрать, тут как раз обсуждалось.
Если бы надо было выключать, то было бы проще.

Попробую в общем вариант регистрацией на нужных картах и исключению нюансов, чтобы понять, как оно по сути будет работать, а для себя, я через equal проверю на конкретные карты и просто в ретюрн юзну, в plugin_init, выше кода с регистрациями.
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Проще уж тогда сделать ini файл с картами и читать оттуда их, чем городить не понятно что...
Но это только предложение, более опытные предложат лучше
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Проще уж тогда сделать ini файл с картами и читать оттуда их, чем городить не понятно что...
Наоборот. Зачем городить еще и ini файл, если можно просто в ините сверить префиксы карт?!
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу