Написание плагинов

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
должно писать в консоль, если команда писалась в консоль
если её писали в чат, то и ответ в чате должен быть
ну или инклюд кривой
Сообщения автоматически склеены:

@BossKotoriiNeSmok, я так и не понял как ты хочешь чтобы он работал.
Я кидал тебе версию, где вообще снежки люди не могут использовать.
У меня другой плагин, дезрана)
 

ABKAM

C#
Сообщения
75
Реакции
67
Доброго времени суток!
1. [VIP] Admin
2. Добавить возможность использования двух флагов и больше.
Условно если прописаны флаги rq тогда выдается конкретная вип-услуга.
Если нужно готов заплатить.
 

releez-

Участник
Сообщения
101
Реакции
19
Срочно нужен плагин, который при вводе в чат !admins выводит именно администраторов в чат, а не всех (админов и випов с флагами)
 

d3v

Участник
Сообщения
470
Реакции
146
Срочно нужен плагин, который при вводе в чат !admins выводит именно администраторов в чат, а не всех (админов и випов с флагами)
 

npocmoyuri

Участник
Сообщения
50
Реакции
1
ВОзможно не по теме напишу.
Мне нужен нормальный rankme который будет заносить нормальные ники в БД msql
Дело в том что как только не менял кодировку БД, переустанавливал БД и плагин, в базу данных постоянно непонятные ники, когда ник на русском написан.
МОжет кто может помочь?
 

yallstpd

Участник
Сообщения
1,023
Реакции
316
Ищу плагин, который позволяет указать точку, где будет лежать кучка со снежками, из которой игрок может взять снежок.
 

Zeit

Участник
Сообщения
180
Реакции
34
ВОзможно не по теме напишу.
Мне нужен нормальный rankme который будет заносить нормальные ники в БД msql
Дело в том что как только не менял кодировку БД, переустанавливал БД и плагин, в базу данных постоянно непонятные ники, когда ник на русском написан.
МОжет кто может помочь?
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
или
set global collation_connection=utf8_unicode_ci;
set global collation_server=utf8_unicode_ci;
set global collation_database=utf8_unicode_ci;
set global character_set_server=utf8mb4;
set global character_set_system=utf8mb4;
 

npocmoyuri

Участник
Сообщения
50
Реакции
1
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
или
set global collation_connection=utf8_unicode_ci;
set global collation_server=utf8_unicode_ci;
set global collation_database=utf8_unicode_ci;
set global character_set_server=utf8mb4;
set global character_set_system=utf8mb4;
Не помогло(
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Объясните пожалуйста, в чем проблема, я не способен своими силами понять это. Всю голову сломал, пока рандомными мучениями не исправил.
При iArraySize = 0:
iArraySize = 0;
   
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
   
if(iArraySize < 1) iArraySize = 1;
   
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
   
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 0;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
               
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
               
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [-1] >> rank_re
Set Reward Array [-1] >> time_re

При iArraySize = 1:
iArraySize = 1;
   
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
   
//if(iArraySize < 1) iArraySize = 1;
   
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
   
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 1;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
           
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
               
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [1] >> rank_reward
Set Reward Array [2] >> time_reward

При этом строка sBuffer[128] ну никак не меняется, однако при iArraySize = 0 в нее не влезают названия секций (какого бы размера не была строка)
Да, проблему решил чисто рандомно, но ее наличие не дает мне покоя.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Объясните пожалуйста, в чем проблема, я не способен своими силами понять это. Всю голову сломал, пока рандомными мучениями не исправил.
При iArraySize = 0:
iArraySize = 0;
 
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
 
if(iArraySize < 1) iArraySize = 1;
 
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
 
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 0;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
          
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
          
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [-1] >> rank_re
Set Reward Array [-1] >> time_re

При iArraySize = 1:
iArraySize = 1;
 
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
 
//if(iArraySize < 1) iArraySize = 1;
 
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
 
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 1;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
      
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
          
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [1] >> rank_reward
Set Reward Array [2] >> time_reward

При этом строка sBuffer[128] ну никак не меняется, однако при iArraySize = 0 в нее не влезают названия секций (какого бы размера не была строка)
Да, проблему решил чисто рандомно, но ее наличие не дает мне покоя.
зачем задавать размер массива, если он авторасширяемый?
C-подобный:
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
можно же так
C-подобный:
g_hReward = CreateArray(64);
 
Последнее редактирование:

Ice_Sochi

Участник
Сообщения
709
Реакции
413
зачем задавать размер массива, если он авторасширяемый?
C-подобный:
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
можно же так
C-подобный:
g_hReward = CreateArray(64);
Не знал, воспользуюсь, благодарю)
Но вопроса это не отменяет, уж очень хочется разобраться
Сообщения автоматически склеены:

Почему ты указываешь размер sRew[64], а sBuffer[128], если можешь передать в sRew 128?
sRew чисто для поиска проблемы и вывода в консоль задавал, изначально ее не было
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Не знал, воспользуюсь, благодарю)
Но вопроса это не отменяет, уж очень хочется разобраться
Почему ты указываешь размер sRew[64], а sBuffer[128], если можешь передать в sRew 128?
Скинь конфиг по которому ходишь
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Скинь конфиг по которому ходишь
C-подобный:
"league"
{
    "reward_mode"    "1"        //1 - получение наград доступно. 0 - получение наград недоступно
    "open_menu_com"    "league"    //команда открытия меню
    "gift_enable"    "1"            //разрешить игрокам передавать привилегии
    "gift_feature_lim"    "2"        //сколько раз игрок может передать привилегию
    "admin_menu_points"    "-1000,-500,-100,100,500,1000" //пункты выдачи очков в админ меню (макс. 16)

    "shop_items"
    {
        "test_mod1"
        {
            "item"    "Потестить (позиция 1)"
            "module_menu"    "1"
            "price" "488"
        }
        "credits_mult"
        {
            "item"    "+20% к получаемому золоту"
            "price"    "400"
        }
        "chat_wheel_ext"
        {
            "item"    "Голосовые фразы"
            "description"    "Бинд -> bind кнопка chat_wheel_ext номер_звука"
            "module_menu"    "1"
            "levels"
            {
                "1"
                {
                    "name"    "Как это больно [1]"
                    "price"    "20"
                }
                "2"
                {
                    "name"    "Что произошло [2]"
                    "price"    "25"
                }
                "3"
                {
                    "name"    "Что происходит [3]"
                    "price"    "20"
                }
                "4"
                {
                    "name"    "Это было мощно [4]"
                    "price"    "20"
                }
                "5"
                {
                    "name"    "Это ГГ [5]"
                    "price"    "25"
                }
                "6"
                {
                    "name"    "Это Просто Нечто [6]"
                    "price"    "25"
                }
                "7"
                {
                    "name"    "Умер как герой [7]"
                    "price"    "25"
                }
                "8"
                {
                    "name"    "Как сучёнка [8]"
                    "price"    "20"
                }
                "9"
                {
                    "name"    "Lakad Matatag [9]"
                    "price"    "30"
                }
                "10"
                {
                    "name"    "Простите, что убил [10]"
                    "price"    "25"
                }
            }
        }
        "chat_wheel_limits"
        {
            "item"    "Количество использований голосовых фраз"
            "description"    "Добавляет к лимитам использования за раунд доплнительное количество"
            "levels"
            {
                "1"
                {
                    "name"    "+1 фраза за раунд"
                    "price"    "200"
                    "limit"    "1"
                }
                "2"
                {
                    "name"    "+2 фразы за раунд"
                    "price"    "250"
                    "limit"    "2"
                }
                "3"
                {
                    "name"    "+3 фразы за раунд"
                    "price"    "300"
                    "limit"    "3"
                }
            }
        }
        "healtshot4kills"
        {
            "description"    "Счётчик убийств сбрасывается при смерти"            //комментарий о привилегии в меню покупки (макс. 128 символов на кириллице)
            "item"    "Шприц за серии убийств"
            "levels"
            {
                "1"
                {
                    "name"        "Шприц за каждые 5 убийств"
                    "price"        "150"
                    "count"        "5"
                }
                "2"
                {
                    "name"        "Шприц за каждые 4 убийства"
                    "price"        "300"
                    "count"        "4"
                }
                "3"
                {
                    "name"        "Шприц за каждые 3 убийства"
                    "price"        "500"
                    "count"        "3"
                }
            }
        }
        "weapon_giver"
        {
            "item"    "Автовыдача оружия"
            "price"    "800"
        }
        "nade_effect"
        {
            "item"    "Эффекты гранат"
            "price"    "300"
        }
        "kill_screen"
        {
            "item"    "Эффект при убийстве"
            "price"        "150"
        }
        "chat_wheel"
        {
            "item"    "Доп. фразы колеса чата"
            "price"    "250"
        }
        "kill_streak"
        {
            "item"    "Комментатор убийств"
            "description"    "Выдает кредиты и воспроизводит звук при убийствах"
            "price"    "500"
            "module_menu"    "1"
        }
        "hud_info"
        {
            "item"    "Статус -Топ игрок- при наведении"
            "price"    "150"
            "param"    "228"
        }
        "test_mod"
        {
            "item"    "Чисто потестить"
            "module_menu"    "1"
            "levels"
            {
                "1"
                {
                    "name"        "Потестить лвл 1"
                    "price"        "150"
                    "param"        "25"
                }
                "2"
                {
                    "name"        "Потестить лвл 2"
                    "price"        "150"
                    "param"        "27"
                }
                "3"
                {
                    "name"        "Потестить лвл 3"
                    "price"        "150"
                    "param"        "32"
                }
                "4"
                {
                    "name"        "Потестить лвл 4"
                    "price"        "150"
                    "param"        "45"
                }
            }
        }
        "healtshot_spawn"
        {
            "item"    "Шприц при спавне"
            "description"    "Выдает указанное количество шприцов при возрождении"            //комментарий о привилегии в меню покупки
            "receive"    "1"        //0 - добавлять к имеющимся, 1 - давать до указанного количества (уникальный параметр, принадлежащий данному модулю)
            "levels"
            {
                "1"
                {
                    "name"        "Один шприц"
                    "price"        "150"
                    "count"        "1"
                }
                "2"
                {
                    "name"        "Два шприца"
                    "price"        "250"
                    "count"        "2"
                }
                "3"
                {
                    "name"        "Три шприца"
                    "price"        "460"
                    "count"        "3"
                }
            }
        }
    }
    "other_items"
    {
        "buy_credits"
        {
            "item"    "Покупка SHOP кредитов"
        }
        "buy_vip"
        {
            "item"    "Покупка VIP"
        }
        "buy_items"
        {
            "item"    "Покупка !shop предметов"
        }
        "chat_wheel_ext"
        {
            "item"    "Настройки голосовых фраз"
        }
        "gift_feature"
        {
            "item"    "Передать привилегию"
        }
    }
    "reward_items"
    {
        "rank_reward"
        {
            "item"    "Получение награды за звание"
        }
        "time_reward"
        {
            "item"    "Получение награды за наигранное время"
        }
    }
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
C-подобный:
"league"
{
    "reward_mode"    "1"        //1 - получение наград доступно. 0 - получение наград недоступно
    "open_menu_com"    "league"    //команда открытия меню
    "gift_enable"    "1"            //разрешить игрокам передавать привилегии
    "gift_feature_lim"    "2"        //сколько раз игрок может передать привилегию
    "admin_menu_points"    "-1000,-500,-100,100,500,1000" //пункты выдачи очков в админ меню (макс. 16)

    "shop_items"
    {
        "test_mod1"
        {
            "item"    "Потестить (позиция 1)"
            "module_menu"    "1"
            "price" "488"
        }
        "credits_mult"
        {
            "item"    "+20% к получаемому золоту"
            "price"    "400"
        }
        "chat_wheel_ext"
        {
            "item"    "Голосовые фразы"
            "description"    "Бинд -> bind кнопка chat_wheel_ext номер_звука"
            "module_menu"    "1"
            "levels"
            {
                "1"
                {
                    "name"    "Как это больно [1]"
                    "price"    "20"
                }
                "2"
                {
                    "name"    "Что произошло [2]"
                    "price"    "25"
                }
                "3"
                {
                    "name"    "Что происходит [3]"
                    "price"    "20"
                }
                "4"
                {
                    "name"    "Это было мощно [4]"
                    "price"    "20"
                }
                "5"
                {
                    "name"    "Это ГГ [5]"
                    "price"    "25"
                }
                "6"
                {
                    "name"    "Это Просто Нечто [6]"
                    "price"    "25"
                }
                "7"
                {
                    "name"    "Умер как герой [7]"
                    "price"    "25"
                }
                "8"
                {
                    "name"    "Как сучёнка [8]"
                    "price"    "20"
                }
                "9"
                {
                    "name"    "Lakad Matatag [9]"
                    "price"    "30"
                }
                "10"
                {
                    "name"    "Простите, что убил [10]"
                    "price"    "25"
                }
            }
        }
        "chat_wheel_limits"
        {
            "item"    "Количество использований голосовых фраз"
            "description"    "Добавляет к лимитам использования за раунд доплнительное количество"
            "levels"
            {
                "1"
                {
                    "name"    "+1 фраза за раунд"
                    "price"    "200"
                    "limit"    "1"
                }
                "2"
                {
                    "name"    "+2 фразы за раунд"
                    "price"    "250"
                    "limit"    "2"
                }
                "3"
                {
                    "name"    "+3 фразы за раунд"
                    "price"    "300"
                    "limit"    "3"
                }
            }
        }
        "healtshot4kills"
        {
            "description"    "Счётчик убийств сбрасывается при смерти"            //комментарий о привилегии в меню покупки (макс. 128 символов на кириллице)
            "item"    "Шприц за серии убийств"
            "levels"
            {
                "1"
                {
                    "name"        "Шприц за каждые 5 убийств"
                    "price"        "150"
                    "count"        "5"
                }
                "2"
                {
                    "name"        "Шприц за каждые 4 убийства"
                    "price"        "300"
                    "count"        "4"
                }
                "3"
                {
                    "name"        "Шприц за каждые 3 убийства"
                    "price"        "500"
                    "count"        "3"
                }
            }
        }
        "weapon_giver"
        {
            "item"    "Автовыдача оружия"
            "price"    "800"
        }
        "nade_effect"
        {
            "item"    "Эффекты гранат"
            "price"    "300"
        }
        "kill_screen"
        {
            "item"    "Эффект при убийстве"
            "price"        "150"
        }
        "chat_wheel"
        {
            "item"    "Доп. фразы колеса чата"
            "price"    "250"
        }
        "kill_streak"
        {
            "item"    "Комментатор убийств"
            "description"    "Выдает кредиты и воспроизводит звук при убийствах"
            "price"    "500"
            "module_menu"    "1"
        }
        "hud_info"
        {
            "item"    "Статус -Топ игрок- при наведении"
            "price"    "150"
            "param"    "228"
        }
        "test_mod"
        {
            "item"    "Чисто потестить"
            "module_menu"    "1"
            "levels"
            {
                "1"
                {
                    "name"        "Потестить лвл 1"
                    "price"        "150"
                    "param"        "25"
                }
                "2"
                {
                    "name"        "Потестить лвл 2"
                    "price"        "150"
                    "param"        "27"
                }
                "3"
                {
                    "name"        "Потестить лвл 3"
                    "price"        "150"
                    "param"        "32"
                }
                "4"
                {
                    "name"        "Потестить лвл 4"
                    "price"        "150"
                    "param"        "45"
                }
            }
        }
        "healtshot_spawn"
        {
            "item"    "Шприц при спавне"
            "description"    "Выдает указанное количество шприцов при возрождении"            //комментарий о привилегии в меню покупки
            "receive"    "1"        //0 - добавлять к имеющимся, 1 - давать до указанного количества (уникальный параметр, принадлежащий данному модулю)
            "levels"
            {
                "1"
                {
                    "name"        "Один шприц"
                    "price"        "150"
                    "count"        "1"
                }
                "2"
                {
                    "name"        "Два шприца"
                    "price"        "250"
                    "count"        "2"
                }
                "3"
                {
                    "name"        "Три шприца"
                    "price"        "460"
                    "count"        "3"
                }
            }
        }
    }
    "other_items"
    {
        "buy_credits"
        {
            "item"    "Покупка SHOP кредитов"
        }
        "buy_vip"
        {
            "item"    "Покупка VIP"
        }
        "buy_items"
        {
            "item"    "Покупка !shop предметов"
        }
        "chat_wheel_ext"
        {
            "item"    "Настройки голосовых фраз"
        }
        "gift_feature"
        {
            "item"    "Передать привилегию"
        }
    }
    "reward_items"
    {
        "rank_reward"
        {
            "item"    "Получение награды за звание"
        }
        "time_reward"
        {
            "item"    "Получение награды за наигранное время"
        }
    }
}
C-подобный:
char sBuffer[64];

ArrayList g_hReward;


...
{
    char sRew[64];
    g_hReward = CreateArray(64);  
    config.Rewind();
    if(config.JumpToKey("reward_items"))
    {
        if(config.GotoFirstSubKey())
        {
            int i = 0;
            do
            {
                config.GetSectionName(sBuffer, sizeof(sBuffer));
                g_hReward.SetString(i, sBuffer);  
                g_hReward.GetString(i, sRew, sizeof(sRew));
                PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
                i++;
            }
            while(config.GotoNextKey());      
        }
    }
}
...
вообще так норм должно

У меня как то тоже не полностью выводило - спасло изменение размера массива
 

xstage

🏹
Сообщения
726
Реакции
754
Объясните пожалуйста, в чем проблема, я не способен своими силами понять это. Всю голову сломал, пока рандомными мучениями не исправил.
При iArraySize = 0:
iArraySize = 0;
 
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
 
if(iArraySize < 1) iArraySize = 1;
 
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
 
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 0;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
           
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
           
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [-1] >> rank_re
Set Reward Array [-1] >> time_re

При iArraySize = 1:
iArraySize = 1;
 
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
 
//if(iArraySize < 1) iArraySize = 1;
 
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
 
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 1;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
       
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
           
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [1] >> rank_reward
Set Reward Array [2] >> time_reward

При этом строка sBuffer[128] ну никак не меняется, однако при iArraySize = 0 в нее не влезают названия секций (какого бы размера не была строка)
Да, проблему решил чисто рандомно, но ее наличие не дает мне покоя.
Уроки плохо читал, blocksize это первый параметр, а не второй, второй - это начальный размер массива.
C-подобный:
ArrayList hList = new ArrayList(ByteCountToCells(64), 2);

// @param1 - The number of cells each member of the array can hold. For example, 32 cells is equivalent to: new Array[X][32]
// @param2 - Initial size of the array. Note that data will NOT be auto-initialized.

SetArrayString(hList, 0, "rank_me");
// Все не влезет и обрежет 64 символа
SetArrayString(hList, 1, "asdfghjkloasdfghjkloasdfghjkloasdfghjkloasdfghjkloasdfghjklo12345678");

char szBuffer[235];
for(int i = 0; i < GetArraySize(hList); i++)
{
    GetArrayString(hList, i, szBuffer, sizeof(szBuffer));
    PrintToServer(szBuffer);
}

iArraySize у тебя никогда нулем не будет из-за проверки if(iArraySize < 1) iArraySize = 1;, если бы и захардкодил 0, была бы ошибка:
Exception reported: Invalid block size (must be > 0)

C-подобный:
char sBuffer[64];

ArrayList g_hReward;


...
{
    char sRew[64];
    g_hReward = CreateArray(64); 
    config.Rewind();
    if(config.JumpToKey("reward_items"))
    {
        if(config.GotoFirstSubKey())
        {
            int i = 0;
            do
            {
                config.GetSectionName(sBuffer, sizeof(sBuffer));
                g_hReward.SetString(i, sBuffer); 
                g_hReward.GetString(i, sRew, sizeof(sRew));
                PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
                i++;
            }
            while(config.GotoNextKey());     
        }
    }
}
...
вообще так норм должно

У меня как то тоже не полностью выводило - спасло изменение размера массива

Этот код не отработает, там он по индексу устанавливает элемент, но размера массива нет, поэтому по индексу не получится установить элемент, в данном случае надо использовать PushString
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Уроки плохо читал, blocksize это первый параметр, а не второй, второй - это начальный размер массива.
C-подобный:
ArrayList hList = new ArrayList(ByteCountToCells(64), 2);

// @param1 - The number of cells each member of the array can hold. For example, 32 cells is equivalent to: new Array[X][32]
// @param2 - Initial size of the array. Note that data will NOT be auto-initialized.

SetArrayString(hList, 0, "rank_me");
// Все не влезет и обрежет 64 символа
SetArrayString(hList, 1, "asdfghjkloasdfghjkloasdfghjkloasdfghjkloasdfghjkloasdfghjklo12345678");

char szBuffer[235];
for(int i = 0; i < GetArraySize(hList); i++)
{
    GetArrayString(hList, i, szBuffer, sizeof(szBuffer));
    PrintToServer(szBuffer);
}

iArraySize у тебя никогда нулем не будет из-за проверки if(iArraySize < 1) iArraySize = 1;, если бы и захардкодил 0, была бы ошибка:
Exception reported: Invalid block size (must be > 0)



Этот код не отработает, там он по индексу устанавливает элемент, но размера массива нет, поэтому по индексу не получится установить элемент, в данном случае надо использовать PushString
Я тоже думал насчет PushString, но не был уверен, что это подойдет в данном случае, хотя если ему нужно только в итерации устанавливать строку и получать уже через счетчик i, то так то норм
 

Faya™

Жуестер
Сообщения
867
Реакции
457
Объясните пожалуйста, в чем проблема, я не способен своими силами понять это. Всю голову сломал, пока рандомными мучениями не исправил.
При iArraySize = 0:
iArraySize = 0;
  
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
  
if(iArraySize < 1) iArraySize = 1;
  
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
  
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 0;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
              
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
              
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [-1] >> rank_re
Set Reward Array [-1] >> time_re

При iArraySize = 1:
iArraySize = 1;
  
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            iArraySize ++;
            //PrintToServer("iArraySize REWARD = %i", iArraySize);
        }
    }
    while(config.GotoNextKey());
}
  
//if(iArraySize < 1) iArraySize = 1;
  
g_hReward = new ArrayList(iArraySize, ByteCountToCells(64));
  
char sRew[64];
config.Rewind();
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    int i = 1;
    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            //PrintToServer("sBuffer = %s", sBuffer);
            g_hReward.SetString(i, sBuffer);
          
            g_hReward.GetString(i, sRew, sizeof(sRew));
            PrintToServer("Set Reward Array [%i] >> %s", g_hReward.FindString(sBuffer), sRew);
              
            i++;
        }
    }
    while(config.GotoNextKey());
}
Результат::
Set Reward Array [1] >> rank_reward
Set Reward Array [2] >> time_reward

При этом строка sBuffer[128] ну никак не меняется, однако при iArraySize = 0 в нее не влезают названия секций (какого бы размера не была строка)
Да, проблему решил чисто рандомно, но ее наличие не дает мне покоя.
А для чего проходить два раза одно и тоже место?
C++:
delete g_hReward;
g_hReward = new ArrayList(ByteCountToCells(64));

if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
    static char sBuffer[128];

    do
    {
        if(config.GetSectionName(sBuffer, sizeof(sBuffer)))
        {
            g_hReward.PushString(sBuffer);
        }
    }
    while(config.GotoNextKey());
}
 

releez-

Участник
Сообщения
101
Реакции
19
Может кто написать рабочий плагин, суть - когда определенное кол-во человек пишут !rtv, игра завершается и начинается голосование за карту. (На сервере стоит стандартное голосование за карту от valve)
 
Сверху Снизу