Обучение и помощь по скриптингу для MIRDOBRO777

Сообщения
113
Реакции
26
Ребята, с форматированием кода я понял.
А подскажите, как ошибку при коннекте после смены карты убрать?
 
Сообщения
1,042
Реакции
206
Предупреждения
1
Помог
6 раз(а)
MIRDOBRO777, Почему бы не client_connect?
 
Сообщения
113
Реакции
26
Доброго времени!
Подскажите, пожалуйста, как исправить запрос SQLite, чтобы отображало корректно ТОП10.
В БД есть 4 игрока, у которых число побед более 0, но последующих отображает со значениями, которые были взяты у игрока под номером 4 (посмотрите спойлер).
Как сделать так, чтобы либо их отображало с нулевым результатом, либо вовсе не отображало в ТОПе?
Запрос на сортировку строк:
Код:
new szQuery[256], szData[2];
formatex(szQuery, charsmax(szQuery),"\
SELECT `steamid`, `nick`, `total_wins`, `total_draw`, `total_fails` FROM %s WHERE `total_wins` > 0 ORDER BY `total_wins` DESC LIMIT 10\
 ", table_name);
 szData[0] = SQL_TYPE_MOTD;
szData[1] = id;
SQL_ThreadQuery(sql, "Sql_Handler_Rub", szQuery, szData, sizeof szData);
Далее отображение данных из отсортированных строк:
Код:
new iNum, szName[64], iWins, iFails, iDraw;
while(SQL_MoreResults(Query)) {
iNum++;

SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "nick"), szName, charsmax(szName));
iWins = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "total_wins"));
iDraw = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "total_draw"));
 iFails = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "total_fails"));
 log_to_file("top10.txt" , "^n%d. %s^nПобед: %d^nПоражений: %d^nНичьи: %d^n", iNum, szName, iWins, iFails, iDraw);
 SQL_NextRow(Query);
}
L 05/19/2020 - 03:51:51: Log file started (file "cstrike\addons\amxmodx\logs\rps_top10.txt") (game "cstrike") (amx "1.9.0.5263")
L 05/19/2020 - 03:51:51:
1. Nemo^^
Побед: 3
Поражений: 1
Ничьи: 3
L 05/19/2020 - 03:51:51:
2. .:MIR:. DOBRO
Побед: 2
Поражений: 5
Ничьи: 3
L 05/19/2020 - 03:51:51:
3. grustno
Побед: 2
Поражений: 0
Ничьи: 0
L 05/19/2020 - 03:51:51:
4. CSAdmin.RU | Gamer
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
5. Morgan!
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
6. Fartuna
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
7. mayor
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
8. Zmey
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
9. Levi
Побед: 2
Поражений: 4
Ничьи: 3
L 05/19/2020 - 03:51:51:
10. Mikkel
Побед: 2
Поражений: 4
Ничьи: 3
 
Сообщения
113
Реакции
26
Здравствуйте, ребята!
Поповоду вопроса выше, никто не знает в чем причина некорректного запроса?
И сейчас столкнулся с проблемой автоатаки.
Не пойму как работает следующий код:
Код:
public client_PreThink(id) {
 entity_set_int(id,EV_INT_button,IN_ATTACK);
}
Когда в руках нож, то постоянно идет атака, когда дигл, то ни одного выстрела не слышно.
И при такой функции дигл стреляет без задержки и бесконечно.
Мне надо, чтобы производился выстрел автоматически на любом оружии.
Делал этот же код через таск различными способами, но работает некорректно.
Подскажите, пожалуйста, как правильно делать автоатаку и надежный способ воплощения.
 
Сообщения
1,293
Реакции
2,294
Помог
57 раз(а)
MIRDOBRO777, при таком варианте кнопка оказывается постоянно зажатой. Если зажать и держать кнопку стрельбы, пистолет стреляет только один раз. То же самое и тут. Форсировать выстрел можно через
Код:
ExecuteHamB(Ham_Weapon_PrimaryAttack, pEntity)
Где pEntity это оружие в руках игрока.
 
Сообщения
113
Реакции
26
Всем хорошего настроения!
Подскажите, пожалуйста, возможно в данном коде или есть еще способ сделать так, чтобы можно было бы отключать звук +USE отдельно для себя.
Т.е., я отключил для себя слышимость нажатия кнопки "E" и слышу только свое нажатие, а если рядом игрок нажмет кнопку, то я не буду слышать звук нажатия.
Как я понял нужно пробегать циклом по игрокам, а вот как определить кому блокировать звук при отключенной настройке, например:
Код:
    register_clcmd("say /use", "Cmd_SoundUse");

public Cmd_SoundUse(id) {
    g_bUsePlayer[id] = !g_bUsePlayer[id];
}
Далее по циклу игроков делать проверку у кого выключен звук, но как определить "id" игрока, у которого выключена слышимость данного звука?
Когда отлавливаю звук броска гранаты, то там просто. Сразу же есть "id" игроков, которые слышут бросок.
Вот код нашел на нашем форуме:
Код:
#include <amxmodx>
#include <reapi>

new HookChain:g_iHookChainStartSound;

public plugin_init()
{
    register_plugin("Block WpnSelect Sound", "1.0", "w0w");

    RegisterHookChain(RG_CBasePlayer_ImpulseCommands, "refwd_PlayerImpulseCommands_Pre");
    RegisterHookChain(RG_CBasePlayer_ImpulseCommands, "refwd_PlayerImpulseCommands_Post", true);
    DisableHookChain(g_iHookChainStartSound = RegisterHookChain(RH_SV_StartSound, "refwd_SV_StartSound_Pre", false));
}

public refwd_PlayerImpulseCommands_Pre(id)
{
    if(get_member(id, m_afButtonPressed) & IN_USE)
        EnableHookChain(g_iHookChainStartSound);
}

public refwd_PlayerImpulseCommands_Post(id)
{
    DisableHookChain(g_iHookChainStartSound);
}

public refwd_SV_StartSound_Pre(const iRecipients, const iEntity, const iChannel, const szSample[], const flVolume, Float:flAttenuation, const fFlags, const iPitch)
{
    if(contain(szSample, "wpn_denyselect") != -1 || contain(szSample, "wpn_select") != -1)
        return HC_SUPERCEDE;
    return HC_CONTINUE;
}
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
iEntity - источник звука, то есть, кто или что воспроизводит.
iRecipients - кто будет слышать. Собственно, проверяй свой массив g_bUsePlayer или что там еще у тебя с индексом iRecipients.
 
Сообщения
113
Реакции
26
iEntity - источник звука, то есть, кто или что воспроизводит.
id источников звука разные.
iRecipients - кто будет слышать. Собственно, проверяй свой массив g_bUsePlayer или что там еще у тебя с индексом iRecipients.
А вот те, кто слышат всегда 0.
Соответственно звук слышен всегда, независимо от bool.
В чем может быть причина, что id постоянно 0?
 
Сообщения
113
Реакции
26
Ребята, всем крепкого здоровья!
Есть несколько вопросиков.
1. По работе с SQLite.
Не могу понять как считывать правильно дробное число из БД.
При создании таблицы указываю, что столбец с дробными числами:
`float_num` float NOT NULL DEFAULT '0.0',\
А вот так считываю:
g_fFloat_Num[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "float_num"));
Но при компиляции ругается на несовпадение аргументов при считывании данных из БД.
Как правильно считывать дробные числа?
2. Быстрая смена переменной из .ini-файла.
Есть meta-плагин (resemiclip) прохождения сквозь игроков. Он считывает данные при смене карты. А есть ли возможность горячей смены значения квара?
Через exec можно подгрузить .cfg файл или просто любой квар в консоль сервера прописать и он изменит свое значение, а вот с настройками плагинов через такой вид:
Код:
# semiclip            0|1        Выключить / Включить semiclip 
semiclip = 1;
Мне в некоторые моменты нужно поставить значение с 1 на 0, не меняя карту. Есть ли возможность такого изменения значения данной настройки?
 
Сообщения
113
Реакции
26
BlackSignature, спасибо!
А есть варианты с изменением значения в .ini-файле, не меняя карту?
 
Сообщения
113
Реакции
26
Доброго времени всем!
Подскажите, пожалуйста, как правильно исправить ошибку в логах:
L 09/06/2020 - 01:25:54: Run time error 2 (plugin "hns_x.amxx") (forward "on_round_end_pre")
L 09/06/2020 - 01:25:54: Can't suppress original function call without new return value set, so you must call SetHookChainReturn.
Вот часть кода, где выдает ошибку:
Код:
public on_round_end_pre() {
    if(g_bDuel && is_user_alive(g_iCt) && is_user_alive(g_iTt)) {
    SetHookChainReturn(ATYPE_BOOL, false);
    return HC_SUPERCEDE;
    } else if(g_bRound) {
    g_bRound = false;
    Remover();
}

    return HAM_IGNORED;
}
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
MIRDOBRO777,
Diff:
-return HAM_IGNORED;
+return HC_CONTINUE;
HAM_IGNORED Такое же значение как HC_SUPERCEDE имеет.
 
Сообщения
113
Реакции
26
d3m37r4, спасибо за подсказку, ошибка убралась.
Вот еще ругается на то же самое, но в другом форварде. Что снова не так, подскажите, пожалуйста.
L 09/07/2020 - 13:41:37: Run time error 2 (plugin "hns_antiblock3.amxx") (forward "player_damage_pre")
L 09/07/2020 - 13:41:37: Can't suppress original function call without new return value set, so you must call SetHookChainReturn.
Вот код:
Код:
public player_damage_pre(id, iWeapon, iAttacker, Float:fDamage, iType) {
    if(is_user_alive(iAttacker) && iAttacker != id && get_member(iAttacker, m_iTeam) == CS_TEAM_CT && get_user_weapon(iAttacker) == CSW_KNIFE && iType == (DMG_BULLET|DMG_NEVERGIB)) {
    g_bStrike[iAttacker] = true;
    g_flBlockDamageTime[iAttacker] = 0.0;
    return HC_SUPERCEDE;
}

    return HC_CONTINUE;
}
 
Сообщения
702
Реакции
54
MIRDOBRO777, по идее тут просто суперцидить нечего и тебя просят использовать SetHookChainReturn вместе с HC_SUPERCEDE

Если тебе надо заблокировать урон, то попробуй:
Код:
SetHookChainReturn(ATYPE_INTEGER, false);
return HC_SUPERCEDE;
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
MIRDOBRO777, Из reapi.inc мы знаем, что данная константа позволит нам скипнуть выполнение реальной функции и вернуть свое значение.
https://github.com/s1lentq/reapi/blob/master/reapi/extra/amxmodx/scripting/include/reapi.inc#L108
Напр. хукчейн RG_CBasePlayer_TakeDamage возвращает Int значение равное 1, если жертва получила урон и 0 в противоположной ситуации.
https://github.com/s1lentq/reapi/bl...ing/include/reapi_gamedll_const.inc#L503-L508
Если говорить простыми словами, используя return HC_SUPERCEDE ты блочишь выполнение реальной функции и должен вернуть какое-то значение. Значение ты возвращаешь как раз таки используя SetHookChainReturn. Если, конечно, это не void функция.
 
Сообщения
702
Реакции
54
d3m37r4, но при этом работает без проблем, даже, если указывать вместо 0 - false.
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, работает - не значит, что у тебя всё правильно. Достаточно рассмотреть обратную ситуацию, где хукчейн будет возвращать тип bool (юзвери до сих пор создают темы с этой ошибкой).
Вот тебе пример с bool и BOOL, где для bool надо будет в SetHookChainReturn использовать ATYPE_BOOL, а для функции BOOL уже это не проканает.
https://github.com/s1lentq/ReGameDL...493a8b9/regamedll/dlls/player.cpp#L7585-L7596
https://github.com/s1lentq/ReGameDL...9f9e1f493a8b9/regamedll/dlls/player.cpp#L6700
7 Сен 2020
P.S. пример не совсем неудачный, но суть в том, что плевать на типизацию нельзя.
 

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

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