Помощь в плагине. (Запись инфы в файле)

Тема в разделе "Запросы", создана пользователем inklesspen, 3 май 2016.

  1. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    И снова я обращаюсь к вам. У меня есть 1 плагин, который по идее должен записывать данные игроков в файл, каждый тик(Конечно, выйдет не такой уж и маленький файл), но дело в том, что он в 1 строку записывает 1 игрока несколько раз. На sourcemod script functions написано, что он автоматически записывает в отдельную строку, но я не знаю в чем дело и почему не работает...
    1 тик - 1 строка информации.
    Код:
    public OnGameFrame()
    {
        if(!record)
            return;
        decl String:arg[3000]
        decl String:arg2[3000]
        decl String:arg3[3000]
        decl String:steam[30]
        decl String:line2[3000]
        new Float:pos[3]
        new Float:ang[3]
        new buttons
        new bool:yes=false
        for(new client=1;client<=65;client++)
        {
            if(YesPlayer(client)&&IsPlayerAlive(client))
            {
                GetClientAuthId(client, AuthId_SteamID64, steam, 30)
                GetClientAbsOrigin(client, pos)
                GetClientAbsAngles(client, ang)
                buttons = GetClientButtons(client)
                if(yes) Format(arg3, sizeof(arg3), "|3|%s|1|%i|1|%f|2|%f|2|%f|1|%f|2|%f|2|%f|", steam, buttons, pos[0], pos[1], pos[2], ang[0], ang[1], ang[2])
                else Format(arg3, sizeof(arg3), "%s|1|%i|1|%f|2|%f|2|%f|1|%f|2|%f|2|%f", steam, buttons, pos[0], pos[1], pos[2], ang[0], ang[1], ang[2])
                Format(arg2, sizeof(arg2), "%s%s", arg, arg3)
                Format(arg, sizeof(arg), "%s%s", arg2)
                yes=true
            }
        }
        Format(line2, sizeof(line2), "%s\n", arg)
        WriteFileLine(g_file, line2)
    }
    
     
  2. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    Она нормально работает. Чувство, что где-то ты выставляешь сик на нолик. Или переоткрываешь его где-то постоянно, при чём не в аппенд моде. В общем, открывай файл в моде "a".
    ЗЫ: это безобразие, а не "код". Старайся минимизировать. Лучше разработать компактный бинарный формат файла.
     
  3. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    За "а" - спасибо, но я хотел под каждую запись сделать отдельный файл.
    Забинарить я хотел потом, мне сначало нужно было увидеть содержимое файла.
    Но все равно, спасибо
     
  4. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    вариантов куча:
    1. Узнавать время сервера и добавлять при создание к файлу это время, к примеру pos_clients_#data#.txt
    2. Можно для каждого игрока по Steam id сделать и чтоб знать в какой момент плагин производит запись узнать дату и поставить впереди.
    ну и другие варианты. А если хочешь чтоб помог с написание не поленись кинуть весь код, если не сюда то хотя бы мне в ЛС
     
  5. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    Запись под отдельный файл не проблема. Проблема в том, что я хочу каждый тик писать в новую строку. Но плагин все лепит , причем как-то странно лепит.
    6 (например) строк в 1, еще 6(например) строк в новую и так далее.
     
  6. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @inklesspen, это просто врапперы на сишную функцию. Обычно она работает нормально. Если так не катит у тебя, то используй функцию WriteFileString, просто в конце дописывай переход на новую строку.
     
  7. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    Спасибо.
     
  8. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.506
    Симпатии:
    1.961
    В очень часто выполняемых функциях не должно быть даже decl, тем более, столь большого размера.
    В OnGameFrame() настоятельно рекомендуется static. Оффтоп