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

Сообщения
169
Реакции
462
Помог
2 раз(а)
Кто скажет, как сохранить данные на одну карту?
Ну можно например как-то так:

C++:
#include <amxmodx>

enum _:Data {
    data_level,
    data_some_info[32]
};

new g_data[MAX_PLAYERS + 1][Data];
new Trie:g_trieData = Invalid_Trie;

public plugin_init()
{
    g_trieData = TrieCreate();
}

public client_authorized(id, const szAuthId[])
{
    arrayset(g_data[id], 0, Data);

    if (TrieGetArray(g_trieData, szAuthId, g_data[id], Data)) {
        return; // Data found and copied from g_trieData to g_data.
    }

    // Data isn't found. So let's create new entry.
    g_data[id][data_level] = 123;
    formatex(g_data[id][data_some_info], charsmax(g_data[][data_some_info]), "Some Info %d", 123);

    TrieSetArray(g_trieData, szAuthId, g_data[id], Data);
}
 
Сообщения
702
Реакции
54
Кто-то пробовал этим способом скрывать худ?
Код:
set_member(id, m_iHideHUD, get_member(id, m_iHideHUD) & ~HIDEHUD_ALL);
А то как было всё на месте, так и осталось, почему-то :D

Не работает что ли?)
 
Сообщения
2,491
Реакции
2,795
Помог
61 раз(а)
Кто-то пробовал этим способом скрывать худ?
Код:
set_entvar(id, var_weapons, get_entvar(id, var_weapons) & ~(1 << 31));
set_member(id, m_iHideHUD, get_member(id, m_iHideHUD) | (HIDEHUD_ALL| HIDEHUD_MONEY | HIDEHUD_TIMER));
Если нигде не ошибся, то скроет любой худ на экране. При этом выбор оружия также не будет работать.
 
Последнее редактирование:
Сообщения
1,697
Реакции
1,510
Помог
25 раз(а)
ThePhoenix, ты наоборот всё показываешь.
 
Сообщения
702
Реакции
54
fl0wer, ахахахах. Я как раз таки думал, что скрывает, а не показывает ?
Спасибо)
 
Сообщения
702
Реакции
54
Кто шарит, как передавать/юзать символьный натив?
т.е, если у меня допустим есть проверка работы плагина по карте:
Код:
Регаю переменную.
new map[32];

В какой-то момент, установилось значение карты.

Зарегал натив:

public plugin_natives()
{
    register_native("map", "native_map", 1);
}

public native_map()
    return map;
 
И передал значение.
 
В плагине, в котором надо проверить, получаю натив
native map();
И делаю проверку
if(!equal(current_map, map()))
    pause("ad");
Но это неправильный способ, хотя я так передаю численные переменные и с ними нет проблем.

И сразу вопрос, какой самый простой способ сохранить переменную в памяти? Чтобы я присвоил значение в переменную и после смены карты оно не стёрлось! Ключей никаких нет, просто переменная.
 
Сообщения
169
Реакции
462
Помог
2 раз(а)
ThePhoenix, во первых, не нужно использовать нативы style 1. Потому что:
* @note Style 1 natives are deprecated. Plugins should not use them, they might break.
Во вторых вернуть так массив нельзя. Юзай get_string \ set_string.
И сразу вопрос, какой самый простой способ сохранить переменную в памяти? Чтобы я присвоил значение в переменную и после смены карты оно не стёрлось!
В переменной сохранить не получится. Во время смены карты все плагины выгружаются из памяти и загружаются снова. Это как пытаться перезагрузить компьютер, при этом, что бы запущенный на компе сервер не выключался, а продолжал работать.
Сохранить можно через set_localinfo, Persistent Data Storage, nvault или обычный квар.
 
Сообщения
702
Реакции
54
the_hunter, спасибо за информацию! :)
Попробовал через set_localinfo сохранить, но чёт не получается (стирается, как и переменная).

Код:
plugin 1:

#include <amxmodx>

new map[10];

public plugin_init()
{
    register_clcmd("say d", "test_d");
    register_clcmd("say f", "test_f");

    set_localinfo("test", map);
}

public test_d(id)
{
    log_amx("%s : map", map);
}

public test_f(id)
{
    map = "dust2";
    set_localinfo("test",map);
}

plugin 2:

#include <amxmodx>

public plugin_init()
{
    register_clcmd("say e", "xed");
}

public xed(id)
{
    new map[10];
    get_localinfo("test", map, 9);

    log_amx("%s : maps", map);
}
Код:
L 09/05/2020 - 00:57:13: [test.amxx]  : map
ThePhoenix : d

L 09/05/2020 - 00:57:21: [test2.amxx]  : maps
ThePhoenix : e

ThePhoenix : f
L 09/05/2020 - 00:57:36: [test.amxx] dust2 : map
ThePhoenix : d

L 09/05/2020 - 00:57:39: [test2.amxx] dust2 : maps
ThePhoenix : e

L 09/05/2020 - 00:57:50: -------- Mapchange to de_dust2 --------

L 09/05/2020 - 00:57:55: [test.amxx]  : map
ThePhoenix : d

L 09/05/2020 - 00:57:58: [test2.amxx]  : maps
ThePhoenix : e
 
Сообщения
702
Реакции
54
fantom, Дошли руки потестить скрытие худа, но никак не допру, как скрыть допустим, только прицел.
У меня получается либо ВСЁ скрыть, либо ничего :D
Т.е, если не юзать HIDEHUD_ALL, показывает всё, если юзать то не показывает ничего. Немного не понял я, как это работает.
 
Сообщения
702
Реакции
54
d3m37r4, вот только, как я и сказал, скрыть всё и показать всё, у меня не составляет проблем. Составляет проблему скрыть что-то конкретное!

Так я скрываю все элементы:
Код:
set_member(id, m_iHideHUD, HIDEHUD_ALL);
А мне надо что-то конкретное, по этому я пробую что-то такое:
Код:
set_member(id, m_iHideHUD, get_member(id, m_iHideHUD) | HIDEHUD_CROSSHAIR);
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
ThePhoenix, смотри в сурсах регейма, когда устанавливаются/убираются значения конкретных флагов значит.
 
Сообщения
702
Реакции
54
Есть способ проще, чтобы найти самое большое число из какого-то списка, нежели этот?
Код:
    new array[6] = {VotesInfo[vOne], VotesInfo[vTwo], VotesInfo[vThree], VotesInfo[vFour], VotesInfo[vFive], VotesInfo[vSix]}; // 442
    //new array[6] = { 10, 12, 5, 7, 3, 2 };
    new max = array[0];

    for(new i = 1; i > sizeof(array); i++)
    {
        if(array[i] > max)
            max = array[i];
    }
А то я тут что-то потерял, потому что ошибку выдаёт и никак не могу найти :hunter:
Код:
ERROR [442]: must be a constant expression; assumed zero
 
Сообщения
1,030
Реакции
826
Помог
10 раз(а)
ThePhoenix, какой интересный цикл у тебя...
Код:
for(<начальная точка>; <условие выхода>; <оператор счетчика>) {
    // Тело цикла
}
Пример:

Код:
for(int i = 0; i < 5; i++) {
   // Тело цикла
}
В примере выше переменная i увеличивается на 1. Если ее значение менее 5, цикл продолжается. Но как только i станет больше или равно 5, цикл прекратится.

В твоем случае итерация цикла даже не начнется
7 Сен 2020
Javekson, если я сам не туплю конечно сейчас =D
7 Сен 2020
ThePhoenix, а вообще нормальный вариант, ну если прям неймется можно попробовать в твоем случае SortIntegers с методом сортировки Sort_Ascending и затем взять последние число в массиве оно и будет максимальным, как по другому еще хз, но зачем заморачиваться иначе, и циклом нормально.
 
Последнее редактирование:
Сообщения
702
Реакции
54
Javekson, честно говоря, цикл не мой, нагуглил такой вариант и хотел попробовать.
Я с циклами в принципе не очень разобрался, иногда получается, иногда нет :D

А как тогда мне нужно составить цикл, чтобы мне нашло максимальное число из 6 штук и закончило поиск?))
В "моём" варианте оно должно проверить первое число цикла с 5 значениями, по идее.
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Код:
new max = VotesInfo[0];

for(new i = 0; i < sizeof(VotesInfo); i++) {
    if(VotesInfo[i] > max) {
        max = VotesInfo[i];
    }
}
 
Сообщения
702
Реакции
54
Minni, а чем ему не угодил мой массив, который я создал и засунул в него значения из другого? или так нельзя?))
 

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

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