Перейти к содержанию
Авторизация  
TrollFace

Создаем лог убийств.

Рекомендуемые сообщения

TrollFace

Доброго времени суток, уважаемые пользователи портала!
Сегодня мы с вами разберем, как сделать лог убийств с сохранением ников обоих игроков и времени убийств.
Итак, начнем!Перед началом проверьте у себя в моде присутствие следующей строки:

#include <file>

В public OnPlayerDeath закинем код следующего вида:

new year, month,day;//переменные даты
new hour,minute,second;//переменные времени
new nick1[24];//ник убитого
new nick2[24];//ник убийцы
new string[256];
getdate(year,month,day); //вычисление даты
gettime (hour,minute,second);//вычисление времени
GetPlayerName(playerid, nick1, sizeof(nick1));//Получаем ник убитого
GetPlayerName(killerid, nick2, sizeof(nick2));//Получаем ник убийцы.
format(string, sizeof(string), "[%d.%d.%d][%d:%d:%d]%s ubil igroka %s", year, month, day, hour, minute, second, nick2, nick1);//Собираем весь пазл
KillLog(string);//Обращаемся к паблику записи лога

Далее в любое место:

forward KillLog([string]);
public KillLog([string])
{
new entry[256];
format(entry, sizeof(entry), "%sn",string);//Подготавливаем к записи
new File:hFile;//переменная под файл
hFile = fopen("logkill.log", io_append);//открываем файл
fwrite(hFile, entry);//записываем!
fclose(hFile);//закрываем ФАЙЛ!
}

В папке scriptfiles создайте папку log и в ней файл kill.log
Удачи! Спасибо за внимание! Ах да, скрины: o3khg2FC.png

  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Amfy

А что по русски не сделал чтобы записывало?

и зачем для ника делать 64 ячейке? Максимальный ник же 24 символа.

или же можно было просто new name[MAX_PLAYER_NAME];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

А что по русски не сделал чтобы записывало?

и зачем для ника делать 64 ячейке? Максимальный ник же 24 символа.

или же можно было просто new name[MAX_PLAYER_NAME];

 

С ником и правда перебор. Написал на скорую руку, за 15 мин. Поэтому ошибочка проявилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Smolin

,

Изменено пользователем Deodato_Orlandi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Trateus

За 15 мин http://gsgames.ru/forum/public/style_emoticons/default/biggrin.gif

Вот более оптимизированный вариант

В public OnPlayerDeath

 

new file[128];
format(file,sizeof(file),"Лог убийств :%s ,убил %s ,методом %s",GetPlayerNameEx(playerid),GetPlayerNameEx(killerid),reason);
WriteLog("Kills",file);

Добавляем сток лога |Примечание : данным стоком можно добавлять и не один такой лог! То-есть используем WriteLog("Ваше название",file); потом создаём папку по вашему названию |

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]%srn",computation1,computation2,computation3,string); getdate(computation1, computation2, computation3);
format(log,sizeof(log),"%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);
}

Потом создаём сток для оптимизации поиска имени!

stock GetPlayerNameEx(playerid)
{
new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid,pname,sizeof(pname)); new i; GPNXLABEL:
i = strfind(pname,"_",true); if(i != (-1)) pname[i] = ' '; if(strfind(pname,"_",true)>-1)goto GPNXLABEL; return pname;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

За 15 мин http://gsgames.ru/forum/public/style_emoticons/default/biggrin.gif

Вот более оптимизированный вариант

В public OnPlayerDeath

 

new file[128];
format(file,sizeof(file),"Лог убийств :%s ,убил %s ,методом %s",GetPlayerNameEx(playerid),GetPlayerNameEx(killerid),reason);
WriteLog("Kills",file);

Добавляем сток лога |Примечание : данным стоком можно добавлять и не один такой лог! То-есть используем WriteLog("Ваше название",file); потом создаём папку по вашему названию |

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]%srn",computation1,computation2,computation3,string); getdate(computation1, computation2, computation3);
format(log,sizeof(log),"%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);
}

Потом создаём сток для оптимизации поиска имени!

stock GetPlayerNameEx(playerid)
{
new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid,pname,sizeof(pname)); new i; GPNXLABEL:
i = strfind(pname,"_",true); if(i != (-1)) pname[i] = ' '; if(strfind(pname,"_",true)>-1)goto GPNXLABEL; return pname;
}
Посмотрите на название темы. Она создана не с целью показать запись в лог, а с целью понятия функций паблика.

Потом создаём сток для оптимизации поиска имени!

И имя не ищется!!!! И еще: когда копипастите, или вырезаете из других модов, указывайте имя автора или же название/автора мода! Изменено пользователем TrollFace
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

И ни разу не оптимизировано в итоге. Функции те же, только перенесены в отдельную процедуру. А за посимвольную запись в файл fputchar'ом вместо православной fwrite в совокупности с заверениями об "оптимизации" хочется взять и подарить учебник по программированию. Неважно, на каком языке.

Вывод - Тратеус опять пытался понтануться, но...фокус не удался, факир был пьян.

 

К слову, file.inc все равно вызывается из a_samp.inc, подключать его отдельно смысла нет.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

Вот более оптимизированный вариант

 

Понимаете, что такое оптимизация? Уменьшение нагрузки на сервер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
zheckster

О, давно искал!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

Поднимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

Поднимаю тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Trateus

И ни разу не оптимизировано в итоге. Функции те же, только перенесены в отдельную процедуру. А за посимвольную запись в файл fputchar'ом вместо православной fwrite в совокупности с заверениями об "оптимизации" хочется взять и подарить учебник по программированию. Неважно, на каком языке.

Вывод - Тратеус опять пытался понтануться, но...фокус не удался, факир был пьян.

 

К слову, file.inc все равно вызывается из a_samp.inc, подключать его отдельно смысла нет.

 

fputchar для полного перевода кодировки ,то-есть когда ты форматируешь тест без putchar'a он на другой кодировки или же когда используешь putchar он полностью уходит в кодировку!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Trateus

 

За 15 мин http://gsgames.ru/forum/public/style_emoticons/default/biggrin.gif

Вот более оптимизированный вариант

В public OnPlayerDeath

 

new file[128];
format(file,sizeof(file),"Лог убийств :%s ,убил %s ,методом %s",GetPlayerNameEx(playerid),GetPlayerNameEx(killerid),reason);
WriteLog("Kills",file);

Добавляем сток лога |Примечание : данным стоком можно добавлять и не один такой лог! То-есть используем WriteLog("Ваше название",file); потом создаём папку по вашему названию |

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]%srn",computation1,computation2,computation3,string); getdate(computation1, computation2, computation3);
format(log,sizeof(log),"%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);
}

Потом создаём сток для оптимизации поиска имени!

stock GetPlayerNameEx(playerid)
{
new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid,pname,sizeof(pname)); new i; GPNXLABEL:
i = strfind(pname,"_",true); if(i != (-1)) pname[i] = ' '; if(strfind(pname,"_",true)>-1)goto GPNXLABEL; return pname;
}
Посмотрите на название темы. Она создана не с целью показать запись в лог, а с целью понятия функций паблика.

Потом создаём сток для оптимизации поиска имени!

И имя не ищется!!!! И еще: когда копипастите, или вырезаете из других модов, указывайте имя автора или же название/автора мода!

 

А кто сказал что я копипастил ,и имя ищется по директории!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

fputchar для полного перевода кодировки ,то-есть когда ты форматируешь тест без putchar'a он на другой кодировки или же когда используешь putchar он полностью уходит в кодировку!

 

Если ты создал текстовик или БД с кодировкой, отличной от той, в которой работаешь ты - это только твои проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.