Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Система логов - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Система логов
Оценка: ***** 2 Голосов

#1
Пользователь офлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Раскрыть информацию
Всем привет! Надеюсь такой темы нет на pawno.ru, поиск мне не особо помог.
Так вот, создавая свой мод, я понял, что мне необходима система логов.

Чему меня научит это готовое решение?
В этой теме я научу вас создавать систему логов, которая поможет прочитать/получить необходимую вам информацию. (чат,пм,подключение/отключение игроков).

Особенности системы:
Данная система довольно проста, используется всего 1 stock.
Каждый лог имеет формат:[день][месяц]Имя.log
Текст внутри лога записывается так: [Час:Мин:Сек]Текст

Как это сделать?
1) Как я и говорил выше, используется всего 1 stock, поэтому в конец мода добавляем:
stock WriteLog(namelog[],string[])
{
    new text[256],log[50],computation1, computation2, computation3,File:LogFile,i;
    gettime(computation1, computation2, computation3);
    format(text, sizeof(text), "[%02d:%02d:%02d]%s\r\n",computation1,computation2,computation3,
string);
    getdate(computation1, computation2, computation3);
    format(log,sizeof(log),"logs/%s/[%02d][%02d]%s.log",namelog,
computation3,computation2,namelog);
    LogFile = fopen(log, io_append);
    while (text[i] != EOS)
    {
        fputchar(LogFile, text[i], false);
        i++;
    }
    fclose(LogFile);
}



Параметры:
namelog[] - имя лога
string[] - текст, который нужно записать в лог.

2) В scriptfiles создаем папку logs

Использование системы:
Возьмем банальный пример, запись пм сообщения в лог по такому формату:
[время]Имя Отправителя[ид] -> Имя Получателя[ид]: текст пм
Время у нас определяется автоматически, поэтому нам нужно указать только имена отправителя/получателя, их ид, ну и сам текст.

Возьмем простую систему пм:

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256], idx, tmp[256];
    cmd = strtok(cmdtext, idx);

    if(!strcmp(cmd, "/pm", true))
    {
        new message[256];
        new id;
        cmd = strtok(cmdtext,idx);
        id = strval(cmd);
        cmd = strrest(cmdtext,idx);
        format(message, sizeof(message), "{ffd700}PM для %s(%i): %s", PlayerName(id), id, cmd);
        SendClientMessage(playerid, -1, message);
        format(message, sizeof(message), "{ffd700}PM от %s(%i): %s", PlayerName(playerid), playerid, cmd);
        SendClientMessage(id, -1, message);
        //------------Запись в лог----------------------------------------------------------		
        format(message,sizeof(message),"%s[%d]->%s[%d]:%s",PlayerName(playerid),
playerid,PlayerName(id),id,cmd);
        WriteLog("PmLog",message);
        //-------------------------------------------------------------------------------
-------
        return 1;
    }
    return 1;
}



Как видно на примере, за запись в лог отвечает всего 2 строки:
format(message,sizeof(message),"%s[%d]->%s[%d]:%s",PlayerName(playerid), playerid,PlayerName(id),id,cmd);
WriteLog("PmLog",message);


Переменная message уже была объявлена в команде.

WriteLog("PmLog",message);
"PmLog" - имя лога, указывается в ковычках.

Внимание!!! В logs должна быть создана папка с именем, которое указано в WriteLog(namelog[],string[]);

В результате этого, вы получите такой лог:
Изображение

Возможные ошибки/проблемы:

1) error 017: undefined symbol "strtok"

Вниз мода добавить:
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' ')) index++;
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
	result[index - offset] = EOS;
	return result;
}



2) error 017: undefined symbol "PlayerName"

Вниз мода добавить:

stock PlayerName(playerid){
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
return pname;}



3) У меня вылетает сервер при записи.Что делать?

Не создана папка logs, или не создана папка, которая указана в WriteLog(namelog[],string[]);


Автор: Games
4

#2
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию
Не робит(
0

#3
Пользователь офлайн   SaTiCH 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Полезное.
+ твой
0

#4
Пользователь офлайн   JefrO. 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Спасибо,как раз запись в файлы типо этого искал.
0

#5
Пользователь офлайн   Kraken77 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Спасибо, довольно полезно. Взял себе.
0

#6
Пользователь офлайн   Dante2410 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Чёт я не понял.
0

#7
Пользователь офлайн   Pawn. 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Можешь дать свой скайп? Просто я чет не понял, у меня при использовнии ПМ крашит сервер.
0

#8
Пользователь офлайн   24fdfd 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
не работает:

C:\Users\Asus\Desktop\Arizona RP By Sanya (extract.me)\gamemodes\arizona.pwn(80704) : error 017: undefined symbol "message"
C:\Users\Asus\Desktop\Arizona RP By Sanya (extract.me)\gamemodes\arizona.pwn(80704) : error 017: undefined symbol "message"
C:\Users\Asus\Desktop\Arizona RP By Sanya (extract.me)\gamemodes\arizona.pwn(80704) : warning 215: expression has no effect
C:\Users\Asus\Desktop\Arizona RP By Sanya (extract.me)\gamemodes\arizona.pwn(80704) : error 001: expected token: ";", but found ")"
C:\Users\Asus\Desktop\Arizona RP By Sanya (extract.me)\gamemodes\arizona.pwn(80704) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.2.3664 Copyright © 1997-2016, ITB CompuPhase


4 Errors.
ошибки в
0

#9
Пользователь офлайн   20th century 

  • форумный тролль
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщения24fdfd (07 октября 2020 - 20:36) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Код кидать нужно, чтобы тебе помогли. Не советую использовать этот способ, устарел давным-давно. Воспользуйся гуглом, найди что-то актуальнее.
0

#10
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Уточню, что лучше сразу искать плагин для работы с файлами и писать систему логов через него. Такой плагин если не шустрее будет, то точно надёжнее (ибо у стандартных функций работы с файлами куча багов) и функциональнее.
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика