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

Запись кординат

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

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

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

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

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

Re: Запись кординат

Сообщение Eternal » 10 сен 2017, 21:04

артист666 писал(а):Eternal, Для каких целей нужно сохранение?
Если для детрана, типа при перезаходе игрока чтобы он появлялся на том же месте, запись в файл не очень подходит.
Есть динамические массивы, они быстрее и менее затратны.

Для корректной замены строки в файле, нужно создать копию, в ней заменить строку, удалить старый, сохранить(переименовать) новый.

Нашел:
Код: Выделить всё
stock replace_str_to_file(filename[], what[], with[])
{
        if(!file_exists(filename)) return -1
       
        static file
; file = fopen(filename, "rt")
        static size; size = file_size(filename, 1)
        static buffer[512], i, line; i = -1
        static bool
:ret; ret = false
        static Array
:array; array = ArrayCreate(512)
       
        while
(++< size)
        {
                fgets(file, buffer, charsmax(buffer))
               
                if
(ret || !equal(buffer, what))
                {
                        ArrayPushString(array, buffer)
                        continue
                
}
                ret = true
                line 
= i
                ArrayPushString
(array, with)
        }
        fclose(file)
       
        if
(!ret)
        {
                ArrayDestroy(array)
                return 0
        
}
        file = fopen(filename, "wt"); i = -1
       
        while
(++< size)
        {
                ArrayGetString(array, i, buffer, charsmax(buffer))
                fputs(file, buffer)
        }
        fclose(file)
        ArrayDestroy(array)
        return line
}

Не утверждаю, что самый лучший вариант, писал давно.
Тут можно сразу записывать в новый...

Да верно понял что бы сохранялось месторасположение игрока при перезаходе.
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

Re: Запись кординат

Сообщение NEoMASTERR » 10 сен 2017, 21:08

+Лучше массив (Array/Trie)
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Пред.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 9