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

Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
menu_additem(iMenu, szItem, logName);

в хэндлере через menu_item_getinfo получи через 4 арг.
 
Сообщения
113
Реакции
26
Уважаемые знатоки!
Снова обращаюсь по причине незнания как правильно.
Из плагина GunGame хочу зарегестрировать натив и передавать в нем информацию о лидере.
В плагине GunGame.amxx сделал вот так:
new g_szHud[256];
formatex(g_szHud, charsmax(g_szHud), "%s + %s (%i - %s)", leaderName, otherName, leaderLevel, teamLvlWeapon[leader]);
Код:
public plugin_natives() {
register_native("get_leader", "GetLeader");
}
public GetLeader() {
new szInfo[256];
return formatex(szInfo, charsmax(szInfo), "%s", g_szHud);
}
В плагине информера, который и будет отображать информацию из натива сделал так:
native get_leader(Leader[]);
Проверяю через логи, но никакой информации не пишется:
Код:
new szLeader[256];
get_leader(szLeader);
log_to_file("addons\amxmodx\logs\leader.txt" , "^n%s^n", szLeader);
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
MIRDOBRO777, к вопросу не относится, но не помешает знать. Для логирования необязательно писать весь путь если будет в основной папке logs, т.е., достаточно указать просто сам файл. И ещё одно, не в данном случае, если нужно возвратить строку, то не нужно делать return formatex, потому что просто вернёт количество записанного в массив.
 
Сообщения
113
Реакции
26
Ребята, а можно один раз считать массив и после просто брать из него данные?
Например:
Код:
enum _:VampireData { szWpnName[20], Float:fHpValue }
new const g_WpnList[][VampireData] = {
 { "glock18", "10.0" },
 { "usp", "7.0" },
 { "ak47", "5.0" },
 и т.д.
}
После запуска карты считать данный массив и занести все в другой.
Просто не хочется каждое убийство пробегать по массиву.
Возможно так?
 
Сообщения
192
Реакции
148
Помог
1 раз(а)
MIRDOBRO777, trie попробуй
key = weapon_name( weapon_ak47 )
value = 5.0;
TrieSetCell(Trie:handle, const key[], any:value, bool:replace = true);
ну и получаешь потом по key
 
Последнее редактирование:
Сообщения
225
Реакции
90
Помог
1 раз(а)
MIRDOBRO777, можно через get_user_weapon() индекс оружия получить, и по индексу обратиться к ячейке статичного массива.
Что-то вроде:
C++:
new const vampire_data[32] = { some, value...};

event_kill(killer)
    set_user_health(killer, health+vampire_data[get_user_weapon(killer)]);
Названия функций точные не помню, но думаю разберёшься
 
Сообщения
113
Реакции
26
Здравствуйте!
Ребята, а есть замена данной функции на аналог ReAPI:
set_pdata_float(id, m_flVelocityModifier, 1.0);
m_flVelocityModifier = 108
И правильно я взял данную функцию для того, чтобы убрать замедление модельки после удара ножом, т.е болевого шока
 
Сообщения
113
Реакции
26
Ребята, а есть возможность модернизировать плагин "Invisible Spectator"?
Что хочется добавить, когда админ скрывается из наблюдения:
1. убирать его из списка игроков, который можно посмотреть через "Избранное", нажав на сервер в списке правой клавишей мыши и там посмотреть список игроков
2. также при онлайне, например, 5 человек, включая админа, убирать его из показа онлайна. Т.е показывать онлайн 4, а не 5 игроков, при том. что админ на серваке
Или такое невозможно?
Подскажите, в случае реальности данных дополнений, какие функции использовать
Вот ссылка на ресурс:

https://dev-cs.ru/resources/292/
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
MIRDOBRO777, реально. И как всегда есть свои тонкости. Это сообщение A2S_INFO и A2S_PLAYERS. Их отправкой (A2S_INFO точно, а A2S_PLAYERS неуверен) занимается reunion/dproto или rehlds/hlds если не установлен модуль. Вот как им подменить список игроков, я не вкурсе. Как один из вариантов это форвардинг пакета на другую утилиту и оттуда убирать игрока. Как это сделано в кешере от инлайна. Ну или спрашивать тех кто знает откуда тот же реюнион берет данные.
5 Фев 2020
MIRDOBRO777, в рехлдс вот тут и тут
 
Сообщения
113
Реакции
26
fantom,
Вот полезный модуль, о котором Вы говорили. А под винду можно найти версию?
API данного модуля я бы изучил и добавил в плагин скрытия админа.
Тогда и мониторинги не банили бы, так как сделал скрытие только одного одновременно админа.
Вот только .dll найти бы...

https://dev-cs.ru/resources/503/
 
Сообщения
113
Реакции
26
Приветствую!
Подскажите, пожалуйста, как управлять раундом через ReAPI или ReGameDll.
Например, я запускаю в новом раунде событие, которое длится около 10 секунд. При этом на сервере 2 игрока. И получается, что один из игроков умирает и раунд заканчивается раньше, чем запущенное событие.
Мне надо, чтобы я мог остановить завершение раунда и закончить его, когда то или иное событие произойдет.
Есть такая возможность?
И еще, ребята, мне сложновато ориентироваться по Get-Top'у, можете написать просто нужные функции, если таковы есть.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Код:
    /*
    * Description:      -
    * Params:           (WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
    */
    RG_RoundEnd,
 
  • Нравится
Реакции: Ayk
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Мне надо, чтобы я мог остановить завершение раунда и закончить его, когда то или иное событие произойдет.
Для блока конца раунда в pre ловишь хук, который написал Nordic Warrior. Для создания конца раунда - юзаешь натив, который написал Denzer.
 
Сообщения
113
Реакции
26
Спасибо, что активно откликнулись. Столкнулся со следующим:
Правильно я использую функцию?
// отлов конца раунда
RegisterHookChain(RG_RoundEnd, "on_round_end_pre", .post = false);
// блокировка конца раунда
Код:
public on_round_end_pre(status, event, tmDelay) {
// что нужно выполнить, чтобы раунд не завершился?
Ребята, а подскажите какие переменные и константы в следующей функции можно использовать:
native rg_round_end(const Float:tmDelay, const WinStatus:st, const ScenarioEventEndRound:event = ROUND_NONE, const message[] = "default", const sentence[] = "default", const bool:trigger = false);
const Float:tmDelay = время до принудительного завершения раунда, например, 10.0
const WinStatus:st = не понял, что это и какие значения могут быть
const ScenarioEventEndRound:event = ROUND_NONE = как я понял - в чью пользу завершать раунд. Какие значения можно использовать?
const message[] = "default" = сообщение окончания раунда. Какие есть варианты, кроме "default"
const sentence[] = "default" = не понял
const bool:trigger = false = не понял, но значений два: true или false
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
MIRDOBRO777, самое главное это не название а описание этих аргументов надо прочитать. У нас имеется API где можно найти этот натив: https://dev-cs.ru/amxx/reapi_gamedll/rg_round_end/view. Смотрим что такое st - Which team won, что в переводе - какая команда выиграла. Смотрим что у неё есть тег, и это WinStatus. А раз есть тег, значит должны быть какие-то значения которые должны быть использованы а не простые цифры, тогда ищем WinStatus: https://dev-cs.ru/amxx/cssdk_const/inc#155 и видим какие значения могут быть использованы. С ScenarioEventEndRound ровно то же самое. Сообщение о конце раунда какое душе угодно, это выводимое по центру (print_center) сообщение. sentence отвечает за звук который будет в конце раунда. Последнее, как и указано в описании, будет вызывать хук конца раунда если значение true.

Что касается RG_RoundEnd, то две вещи:

Стоит отметить, что объявление должно быть таким:
Код:
public on_round_end_pre(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
Для блокировки конца раунда нужно использовать:
Код:
if(something)
{
    SetHookChainReturn(ATYPE_BOOL, false);
    return HC_SUPERCEDE;
}
 

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

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