Русское сообщество по скриптингу

Помогите с Arrey  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Помогите с Arrey

Сообщение RSO_ » 23 фев 2021, 08:09

deadkid56 писал(а):Как вариант: гоним циклом по Array - Массиву до конца. Получаем индекс entity и проверяем существование. Если существует, записываем индекс отдельно. После цикла просто перезаписываем Array и будут у тебя валидные индексы.


да точно. :-)

Код: Выделить всё
#define dir "addons/amxmodx/configs/text.txt"
static Array:g_a_data;
public Delete_Null_String()
{
    g_a_data=ArrayCreate(1024)
    new i_file = fopen(dir,"rt")

    if(!i_file){ // Если произошла ошибка открытии файла
        return PLUGIN_CONTINUE
    
}
    new s_buffer[1024]
    while(!feof(i_file)) {
        
        fgets
(i_file,s_buffer,1023)//Получаем строку из файла в s_buffer
        trim(s_buffer) // Очищаем строку от каретки
        ArrayPushString(g_a_data,s_buffer) // Добавляем строку в массив
    }
    fclose(i_file)// Закрываем файл по индексу
    delete_file(dir)
    //==============================================================================================
    fopen(dir,"rt")
    new i_size=ArraySize(g_a_data)

    if(!i_size) { // Если размер нулевой - прекращаем работу
        return PLUGIN_CONTINUE
    
}
    new s_2buffer[1024]
    new index = 0
    for
(new a; a < i_size; a++) {
        
        ArrayGetString
(g_a_data, a, s_2buffer,1023)
        if(strlen(s_2buffer) != 0) { // самое главное пустая строка
        // !equal(s2_buffer, player_name) &&
            write_file(dir, s_2buffer, index)
            index++
        }
    }
    fclose(i_file)
    ArrayClear(g_a_data)
    return PLUGIN_CONTINUE
    
//==============================================================================================
}


удаления пустых строк в файле. можно как есть мины в текстовом документе пожизненно хранить
или переделать под свои нужды (удалить чтения запись и удаления файла)
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 280
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 45 раз.
Поблагодарили: 20 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: Помогите с Arrey  [Решено]

Сообщение trojanranson » 23 фев 2021, 08:22

Я вообще сделал по другому. Забил на Array
Код: Выделить всё
new g_haveMine[33][6]
//В создание энтити
        new empty
        for
(new i = 1; i <= 5; i++)
        {    
            if
(!pev_valid(g_haveMine[owner][i]))
            {
            empty = i
            
//server_print("No Valid %i [%i]",g_haveMine[owner][i], i)
            }    
        
}
g_haveMine[owner][empty] = pEntity
//проверка и удаляение какт так
public ChekEmpty(ent){
    new id = getOwner(ent)
    for(new i = 1; i <= 5; i++) 
            
{
            if(ent != g_haveMine[id][i])
            continue
            if
(ent == g_haveMine[id][i]){
            set_pev(g_haveMine[id][i], pev_flags, pev(g_haveMine[id][i], pev_flags) | FL_KILLME);
            //server_print("Delete %i [%s] Write[%i]",g_haveMine[id][i],g_EntName[getType(g_haveMine[id][i])], i)
            g_haveMine[id][i] = 0
                
}
            }
amxx просто хобби для себя.
Аватара пользователя
trojanranson
 
Сообщения: 102
Зарегистрирован: 07 мар 2020, 23:15
Откуда: г.Херосн
Благодарил (а): 33 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Пиво с рыбкой

Re: Помогите с Arrey

Сообщение RSO_ » 23 фев 2021, 08:29

я с энтити не дружу. вроде бы тоже самое только размер массива нужно указывать
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 280
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 45 раз.
Поблагодарили: 20 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: Помогите с Arrey

Сообщение trojanranson » 23 фев 2021, 08:33

Это похоже на пред ответ просто чрез Двумерный Массив.
amxx просто хобби для себя.
Аватара пользователя
trojanranson
 
Сообщения: 102
Зарегистрирован: 07 мар 2020, 23:15
Откуда: г.Херосн
Благодарил (а): 33 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Пиво с рыбкой

Re: Помогите с Arrey

Сообщение RSO_ » 23 фев 2021, 08:57

я не совсем понял что ты написал
Array - В отличие от обычных двумерных массивов, где нужно указывать длину строки и кол-во самих строк

т.е. мой пример между строками есть отступы и функция их удаляет
можно в место поиска пустых строк сравнивать id или имена что там у тебя
// !equal(s2_buffer, player_name)

было
Код: Выделить всё

тут текст номер 1

тут текст номер 2


тут текст номер 3

тут текст номер 4


стало
Код: Выделить всё

тут текст номер 1
тут текст номер 2
тут текст номер 3
тут текст номер 4
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 280
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 45 раз.
Поблагодарили: 20 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: Помогите с Arrey

Сообщение deadkid56 » 23 фев 2021, 21:27

Накидал вариант, насчет ArrayClone точно не знаю, но должно работать.
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>

#define PLUGIN     ""
#define VERSION ""
#define AUTHOR     ""

new Array: g_aIndex; //Здесь храним индексы мин

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
}

//Пишем Stock проверки валидности

stock Is_Valid_Index_Entity()
{
    new Array: g_aTempIndex = ArrayCreate(32), iNumberIndex;
    
    for
(new iCount = 0; iCount < ArraySize(g_aIndex); iCount++)
    {
        iNumberIndex = ArrayGetCell(g_aIndex, iCount);
        
        if
(is_valid_ent(iNumberIndex))
        {
            ArrayPushCell(g_aTempIndex, iNumberIndex);
        }
    }
    
    g_aIndex 
= ArrayClone(g_aTempIndex);
    ArrayDestroy(g_aTempIndex);
}
Аватара пользователя
deadkid56
 
Сообщения: 42
Зарегистрирован: 09 авг 2018, 10:41
Благодарил (а): 8 раз.
Поблагодарили: 4 раз.
Языки программирования: Я ничего не знаю

Re: Помогите с Arrey

Сообщение trojanranson » 26 фев 2021, 02:43

Спасибо за пример :-) :thumbs_up
amxx просто хобби для себя.
Аватара пользователя
trojanranson
 
Сообщения: 102
Зарегистрирован: 07 мар 2020, 23:15
Откуда: г.Херосн
Благодарил (а): 33 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Пиво с рыбкой

Re: Помогите с Arrey

Сообщение [N][E][M][E][C] » 23 апр 2021, 01:16

deadkid56, зачем вы в цикле создаете переменную?? Ее нужно создать до цикла
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Помогите с Arrey

Сообщение fl0wer » 23 апр 2021, 17:55

vitalik19842105 писал(а):deadkid56, зачем вы в цикле создаете переменную?? Ее нужно создать до цикла

Для ограничения области видимости переменной.
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

Пред.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18