←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

czat log, moja wersja

Zablokowany

  • +
  • -
sebul - zdjęcie sebul 30.09.2010

Na początku dodam, że nie jestem jakiś pro ogarem w pisaniu pluginów (i raczej nie będę, bo to nie dla mnie, za duzo nauki), ale postanowiłem napisać na podstawie tego Czat log - Czat to file - logowanie rozmow w czacie - Nieoficjalny polski support AMX Mod X tak jakby swoją wersję pluginu, autora nie zmieniałem, bo nawet nie wiem czy mogę (żeby nie było, że będzie mnie ktoś oskarżał o przywłaszczenie), dlatego też początek skopiowałem z tego starego, no i wygląda to tak
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Czat log"
#define VERSION "0.1"
#define AUTHOR "Miczu"


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

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[32], Name[32], Data[9], Say_t[32], File[32];

read_args(Say, 32);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Say_t, 31);
format(File, 31, "Say_%s.log", Data);

log_to_file(File, "%s: %s - %s", Name, Say, Say_t);
return PLUGIN_CONTINUE;
}

Jak dla mnie o wiele bardziej estetyczne są teraz te logi, ale mam jeszcze parę pomysłów co do zmian. Chciałbym usunąć "" (cudzysłów z tekstu na say), ale nie wiem jak tego -> Dokumentacja AMXX.pl > Core > amxmodx >> remove_quotes użyć. Druga sprawa to można by zrobić jeszcze jakąś zmienną, że gdy wiadomość jest "say", to nie ma żadnego info, typu "say" czy "say_team", tylko po prostu sam nick i tekst, a jakby wiadomość była na "say_team" to wtedy zależnie od tego w jakim teamie by gracz był, to wyświetliło by się TT, albo CT, np.
Gdy jestem w TT, to jak coś napiszę na say_team, wtedy log wyglądał by tak
{Terrorist} nick: lalala
Gdy jestem w CT, to log byłby taki
{Counter-terrorist} nick: lalala
Oczywiście tak dokładnie nie ma znaczenia, czy to będzie "(Counter-terrorist)" czy np. "(CT)", to można łatwo edytować. Do tego pewnie trzeba użyć tego Dokumentacja AMXX.pl > Core > amxmodx >> get_user_team ale też nie wiem jak to zastosować. Może ktoś dokończy za mnie te parę rzeczy? Albo napisze jak to zrobić?
Użytkownik sebul edytował ten post 30.09.2010 16:59
Odpowiedz

  • +
  • -
camilost - zdjęcie camilost 30.09.2010

Fajnie, że zapisuje tylko do 31 znaków. : ]
Na pewno się komuś przyda...

I czas chyba jednak jest lepiej wiedzieć jak patrzysz do logu.

remove_quotes(Say)
...


// Nie ważne
Użytkownik camilost edytował ten post 30.09.2010 18:38
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.09.2010

Fajnie, że zapisuje tylko do 31 znaków. : ]
Na pewno się komuś przyda...

No to teraz będzie dobrze
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Czat log"
#define VERSION "0.1"
#define AUTHOR "Miczu"


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

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Say_t[32], File[32];

read_args(Say, 192);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Say_t, 31);
format(File, 31, "Say_%s.log", Data);

log_to_file(File, "%s: %s - %s", Name, Say, Say_t);
return PLUGIN_CONTINUE;
}

I czas chyba jednak jest lepiej wiedzieć jak patrzysz do logu.

A to akurat jest...

remove_quotes(Say)
...

Robiłem tak, znaczy coś takiego miałem...
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Czat log"
#define VERSION "0.1"
#define AUTHOR "Miczu"


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

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Say_t[32], File[32];

read_args(remove_quotes(Say), 192);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Say_t, 31);
format(File, 31, "Say_%s.log", Data);

log_to_file(File, "%s: %s - %s", Name, Say, Say_t);
return PLUGIN_CONTINUE;
}

I nie dało radę skompilować.
Użytkownik sebul edytował ten post 30.09.2010 19:42
Odpowiedz

  • +
  • -
camilost - zdjęcie camilost 30.09.2010

I czemu w read_args?
Nie pojmuję. ;P

read_args(Say, 192);
remove_quotes(Say);
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.09.2010

No teraz działa... dzięki.
To teraz może ktoś wie jak zrobić, żeby odróżniało czy to "say", czy "say_team", jak "say" to byłby tylko sam nick z tekstem, a jak "say_team" to najpierw prefiks (np. CT, albo TT, zależy w którym teamie by się było), później nick, a potem tekst?? Oczywiście kolejność nie ma znaczenia, to już sam umiem bez problemu ;]
Odpowiedz

  • +
  • -
camilost - zdjęcie camilost 30.09.2010

Hmmm... nie wiem czy tak będzie good. Spróbuj np. osobne komendy (funkcje) i jedna dla wszystkich, która zapisuje do pliku.
W tych osobnych to zmieniasz tylko team (say_team).
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 30.09.2010

można by chociażby coś takiego :
new zeroarg[10];
read_argv(0, zeroarg, 9);
new bool:isSay = (strlen(zeroarg) == 3) ? true : false;

Wtedy
if(isSay)
//Wiadomosc z saya
else
//Wiadomosc z team_say'a


I masz wszystko w jednej funkcji. :)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.09.2010

No to teraz mam takie coś...
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Czat log"
#define VERSION "0.1"
#define AUTHOR "Miczu"


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

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Type[12], File[32];

read_args(Say, 192);
remove_quotes(Say);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Type, 11);
new bool:isSay = (strlen(Type) == 3) ? true : false;
format(File, 31, "Say_%s.log", Data);

if(isSay)
log_to_file(File, "%s: %s", Name, Say);
else
log_to_file(File, "%s: %s - %s", Name, Say, Type);
return PLUGIN_CONTINUE;
}

Ale za cholerę nie wiem jak to zrobić z tym odróżnianiem teamów... jaka funkcja ma być, to ja wiem, ale jak to zastosować... Na pewno dodać coś w stylu
new Team[32]
get_user_team(0, Team, 32)

A teraz to chyba wzorować się tam tym wcześniejszej zmiennej? Tylko też za bardzo nie wiem jak. Zanim jeszcze Knopers z tą zmienną napisał posta, to zrobiłem
    register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log2");

i wtedy po prostu całą funkcję do say_log2 dałem inną, ale te drugie rozwiązanie będzie lepsze, a tym bardziej, że działa ;]
Odpowiedz

  • +
  • -
camilost - zdjęcie camilost 30.09.2010

Knopers Ci dał gotowca jak sprawdzić czy say czy say_team... ;]
W else dajesz get_user_team ; )
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 30.09.2010

Knopers Ci dał gotowca jak sprawdzić czy say czy say_team... ;]

No to już zrobiłem, wszystko działa, ale teraz chodzi mi o tą zmienną, jak gracz jest w tt, to będzie "tak", a jak będzie w ct, to będzie "tak". Czyli tak jak w pierwszym poście napisałem
Gdy jestem w TT, to jak coś napiszę na say_team, wtedy log wyglądał by tak
{Terrorist} nick: lalala

Gdy jestem w CT, to log byłby taki
{Counter-terrorist} nick: lalala

Bo teraz jest dopisane samo say_team, bez tej zmiennej.

W else dajesz get_user_team ; )

A zaraz jeszcze pokombinuje...

Dodano 30 wrzesień 2010 - 23:04:
Jednak nic nie wykombinuje... czegoś nie dodałem, wydaje mi się, że pewnie jakąś nową funkcję, ale nie bardzo wiem jaką...
Użytkownik sebul edytował ten post 30.09.2010 21:38
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 30.09.2010

Try:
Kompilator pluginów AMXX - Nieoficjalny polski support AMX Mod X

Śpię już na siedząco więc nie wiem xD
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 30.09.2010

Przykład :

new UserTeam = get_user_team(id);
if(UserTeam == 1)
//Terrorysta Pisze
else if(UserTeam == 2)
//CT Pisze
else
//Pisze Spect
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 01.10.2010

No i teraz wszystko śmiga ^^ Kod wygląda tak
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Czat log"
#define VERSION "0.1"
#define AUTHOR "Miczu"


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

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Type[12], File[32];

read_args(Say, 192);
remove_quotes(Say);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Type, 11);
new bool:isSay = (strlen(Type) == 3) ? true : false;
format(File, 31, "Say_%s.log", Data);

if(isSay)
log_to_file(File, "%s: %s", Name, Say);
else {
new UserTeam = get_user_team(id);

if(UserTeam == 1)
log_to_file(File, "(Terrorist) %s: %s", Name, Say);
else if(UserTeam == 2)
log_to_file(File, "(Counter-Terrorist) %s: %s", Name, Say);
else
log_to_file(File, "(Spectator) %s: %s", Name, Say);
}

return PLUGIN_CONTINUE;
}

Mam jeszcze inny pomysł, ale to już jak dla mnie wypłynięcie na dalekie wody... Dobrze by było, żeby i chat adminów zapisywało, wtedy w jednym pliku wszystko by było, ale tak jak pisałem, to już jest tylko pomysł na spontanie, nawet nic nie myślałem nad tym, dzisiaj później może najpierw coś sam pokombinuje, ale nie wiem.

Dodano 01 październik 2010 - 13:32:
Jednak to już naprawdę nie dla mnie... nie wiem nawet jaki kod wpisać, żeby odczytywało wpisy z amx_chat, czy amx_say ;/ Myślę, że można zamknąć.
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 01.10.2010

Czat Adminów masz zapisywany z pluginu adminchat, logi są w addons->amxmodx->logs
no ale jeśli chcesz..
#include <amxmodx>
#include <cstrike>



public plugin_init() {
register_plugin("Plugin","versja","autor");

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Type[5], Time[11] ,File[32];

read_argv(1,Say, 191);
remove_quotes(Say);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 10);
get_time("%H:%M:%S",Time,8)
read_argv(0, Type, 4);
format(File, 31, "Chat_logs/Say_%s.log", Data);//Raczej nie będzie estetycznie jak główny katalog cs'a zasypiesz logami
if(Type[0]=='a')
{
log_to_file(File, "(%s)(ADMINS)%s%s: %s",Time,is_user_alive(id)?"*DEAD*":"", Name, Say);
return PLUGIN_CONTINUE
}
if(strlen(Type) == 3)
log_to_file(File, "(%s)%s%s: %s",Time,is_user_alive(id)?"*DEAD*":"", Name, Say);
else {
if(Say[0]=='@')
{
log_to_file(File, "(%s)(ADMINS)%s%s: %s",Time,is_user_alive(id)?"*DEAD*":"", Name, Say);
}
else
{
new CsTeams:UserTeam = cs_get_user_team(id);

if(UserTeam == CS_TEAM_T)
log_to_file(File, "(%s)(Terrorist) %s%s: %s",Time,is_user_alive(id)?"*DEAD*":"", Name, Say);
else if(UserTeam == CS_TEAM_CT)
log_to_file(File, "(%s)(Counter-Terrorist) %s%s: %s",is_user_alive(id)?"*DEAD*":"",Time, Name, Say);
else
log_to_file(File, "(%s)(Spectator) %s: %s",Time, Name, Say);
}
}

return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 01.10.2010

Czat Adminów masz zapisywany z pluginu adminchat, logi są w addons->amxmodx->logs

No ja wiem... ale skoro logi z czatu, to fajnie to by wyglądało, jeśli było by to wszystko razem. Zaraz przetestuje ten kod co mi podałeś.

//Raczej nie będzie estetycznie jak główny katalog cs'a zasypiesz logami

To się zapisuje w logach serwera ;] Nie trzeba tworzyć jakichś nowych folderów.

get_time("%H:%M:%S",Time,8)

To też zbędne, bo czas w logach zawsze się tworzy, nie trzeba samemu nic dopisywać.

Dodano 01 październik 2010 - 14:33:
Czat adminów nie działa, ale za to sprawdzanie czy ktoś żyje tak ;]

Dodano 01 październik 2010 - 15:34:
Teraz mam tak
#include <amxmodx>


public plugin_init() {
register_plugin("PLUGIN", "VERSION", "AUTHOR");

register_clcmd("say", "say_log");
register_clcmd("say_team", "say_log");
}

public say_log(id) {
if(is_user_bot(id))
return PLUGIN_CONTINUE;

new Say[192], Name[32], Data[9], Type[12], File[32];

read_args(Say, 192);
remove_quotes(Say);
get_user_name(id, Name, 31);
get_time("%Y%m%d", Data, 8);
read_argv(0, Type, 11);
format(File, 31, "Say_%s.log", Data);

new bool:isSay = (strlen(Type) == 3) ? true : false;

if(isSay)
log_to_file(File, "%s%s : %s", is_user_alive(id) ? "" : "*DEAD* ", Name, Say);
else {
new UserTeam = get_user_team(id);

if(UserTeam == 1) // TT
log_to_file(File, "%s(Terrorist) %s : %s", is_user_alive(id) ? "" : "*DEAD*", Name, Say);
else if(UserTeam == 2) // CT
log_to_file(File, "%s(Counter-Terrorist) %s : %s", is_user_alive(id) ? "" : "*DEAD*", Name, Say);
else // SPEC
log_to_file(File, "%s(Spectator) %s : %s", is_user_alive(id) ? "" : "*DEAD*", Name, Say);
}

return PLUGIN_CONTINUE;
}

Musiałem z UserTeam i get_user_team i wtedy zmienne 1 i 2, bo z tym drugim, czyli z CS_TEAM_T i CS_TEAM_CT przy kompilacji wyskakiwały jakieś błędy (już nawet nie zapisywałem). Kolejność "*DEAD*" jeszcze musiałem zamienić. Próbowałem jakoś zrobić, żeby ten czat adminów też się zapisywał, ale nie udało się, zapisywały się same te zwykłe "czaty"...
Użytkownik sebul edytował ten post 01.10.2010 12:59
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 02.10.2010

Celowo zmieniłem na cs_get_user_team, ponieważ jeśli zginiesz i zmienisz team to get_user_team pokaże Ci stary team (jakby aktualizuje się po starcie rundy).
Błędów nie było bo kompilowałem u siebie.
Jak napiszesz say_team @tresc to wylapie a jak amx_chat tresc to juz nie, zgadlem?
Jeśli tak to spodziewałem się tego, ponieważ jest już taka komenda zarejestrowana...
Moją wersję skompiluj online ( ze swoimi zmianami DEAD oraz wyeliminowaniem czasu, ale nic więcej) kompilatorem na tej stronie, sprawdzałem, błędów nie pluje.

Co do admin_chat, to trzeba edytować adminchat.sma
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.10.2010

Celowo zmieniłem na cs_get_user_team, ponieważ jeśli zginiesz i zmienisz team to get_user_team pokaże Ci stary team (jakby aktualizuje się po starcie rundy).
Błędów nie było bo kompilowałem u siebie.

No z tym już sobie poradziłem, coś chyba źle wpisałem, bardzo możliwe, że od tego
read_argv(1, Say, 191);

a ja miałem
read_args(1, Say, 191);

niedopatrzenie ;]

Jak napiszesz say_team @tresc to wylapie a jak amx_chat tresc to juz nie, zgadlem?
Jeśli tak to spodziewałem się tego, ponieważ jest już taka komenda zarejestrowana...

Nawet przy wpisaniu say_team @treść, nie działa...

Co do admin_chat, to trzeba edytować adminchat.sma

To może później spróbuje się coś z tym zrobić.

Dodano 05 październik 2010 - 00:06:
Nic więcej nie wykombinowałem, temat można zamknąć. Wszystkim dzięki za pomoc.
Odpowiedz
Zablokowany