Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

ColorChat, źle interpretuję TEAM_COLOR(Chyba)


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
9 odpowiedzi w tym temacie

#1 Niquit

    Zaawansowany

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:114
  • Lokalizacja:Szczecin
Offline

Napisano 02.02.2012 22:19

Witam,
zacząłem się bawić w edycję zwykłych client_print na ColorChat.

Nie rozumiem, jednej rzeczy. Kiedy wstawić 0 a kiedy id?

Przykład:
ColorChat(0 lub id, TEAM_COLOR, "[AFK]^x04 Wyrzucenie bomby^x01!")


Dalej, mam ustawione na 0. Plugin fajne działa, jednak ten TEAM_COLOR jest losowy bez względu na drużynę.
Czyli będąc w TT mam niebieski kolor.
Próbując z id wyskakuję błąd w kompilacji. :X
Liczę na pomoc. :)

Edit:
TEAM_COLOR jest ustawiany pod gracza, który jest AFK, a nie pod wszystkich. :/
Mogę dać .sma jeśli ktoś jest chętny.

Użytkownik Niquit edytował ten post 02.02.2012 22:34

  • +
  • -
  • 0

#2 Raen

    Wszechwiedzący

  • Power User

Reputacja: 160
Profesjonalista

  • Postów:536
  • GG:
  • Imię:Paweł
  • Lokalizacja:......
Offline

Napisano 02.02.2012 23:06

0 to jest wiadomość do wszystkich
id to jest do danego gracza
  • +
  • -
  • 1

angel-little.png


#3 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 03.02.2012 06:18

lej, mam ustawione na 0. Plugin fajne działa, jednak ten TEAM_COLOR jest losowy bez względu na drużynę.

jest ustalany na podstawie drużyny pierwszego znalezionego gracza jeśli chcesz aby każdy miał kolor swojej drużyny wyślij wiadomość do każdego odzielnnie
  • +
  • -
  • 0

#4 mlekowita

    Wszechpomocny

  • Zbanowany

Reputacja: 91
Zaawansowany

  • Postów:398
  • Lokalizacja:Polska
Offline

Napisano 03.02.2012 07:31

Jeżeli w print_chat masz 0 to w color chat też daj 0, a jeżeli id to daj id, to powinno rozwiązać twój problem, kiedy wstawić id a kiedy 0 ( przypuszczając, że edytujesz plugin a nie piszesz ) ;)

#5 Waleq

    Profesjonalista

  • Użytkownik

Reputacja: 47
Pomocny

  • Postów:184
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Bełchatów
Offline

Napisano 03.02.2012 07:39

for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 Wyrzucenie bomby^x01!")
}



Tak wyślę Ci wiadomość do każdego z graczy osobno, a kolor wiadomości będzie zależny od teamu gracza.
  • +
  • -
  • 1

#6 Niquit

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 4
Nowy

  • Postów:114
  • Lokalizacja:Szczecin
Offline

Napisano 03.02.2012 22:46

Próbując z id wyskakuję błąd w kompilacji.


Waleq tylko dodał dał działające z pętlą.
Mógłbyś mi tylko wyjaśnić, na jakiej zasadzie działa ta pętla?

Użytkownik Niquit edytował ten post 03.02.2012 22:50

  • +
  • -
  • 0

#7 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 03.02.2012 23:29

for(new id = 1; id < 33; id++ ){
	if( !is_user_connected( i ) ) {
		continue;
	}
	ColorChat(id, TEAM_COLOR, "[AFK]^x04 Wyrzucenie bomby^x01!")
}

Mógłbyś mi tylko wyjaśnić, na jakiej zasadzie działa ta pętla?

w sensie
  • +
  • -
  • 0

#8 Niquit

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 4
Nowy

  • Postów:114
  • Lokalizacja:Szczecin
Offline

Napisano 03.02.2012 23:59

for(new id = 1; id < 33; id++ ){
	if( !is_user_connected( i ) ) {
		continue;
	}
	ColorChat(id, TEAM_COLOR, "[AFK]^x04 Wyrzucenie bomby^x01!")
}

Mógłbyś mi tylko wyjaśnić, na jakiej zasadzie działa ta pętla?

w sensie


Opisać instrukcję. Bo zasadę pętli znam, tylko się dziwię, że wstawienie jej rozwiązuję mój problem.
  • +
  • -
  • 0

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 04.02.2012 00:09

jest ustalany na podstawie drużyny pierwszego znalezionego gracza

a kiedy podajesz id konkretnego gracza wtedy jest brany kolor jego drużyny
  • +
  • -
  • 0

#10 Niquit

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 4
Nowy

  • Postów:114
  • Lokalizacja:Szczecin
Offline

Napisano 24.03.2012 15:55

Taki kod na HPK:
#include <amxmodx>
#include <colorchat>
new HPK_MAX_CVAR
new HPK_TIME_CVAR
new HPK_TESTS_CVARnew iNumTests[33]
public plugin_init() {
register_plugin("High Ping Kicker","1.2.0","DynAstY")
register_cvar("hpk_maxping","100")
register_cvar("hpk_time","3")
register_cvar("hpk_tests","3")
return PLUGIN_CONTINUE
}
public client_disconnect(id) {
remove_task(id)
return PLUGIN_CONTINUE
}

public client_putinserver(id) {
iNumTests[id] = 0
if (!is_user_bot(id)) {
new param[1]
param[0] = id
set_task(30.0, "showWarn", id, param, 1)
}
return PLUGIN_CONTINUE
}
kickPlayer(id) {
new name[32]
get_user_name(id, name, 31)
new uID = get_user_userid(id)
server_cmd("banid 1 #%d", uID)
client_cmd(id, "echo ^"[PING] Twoj ping jest za duzy!^"; disconnect")
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[PING]^x01 Gracz^x04 %s ^x01zostal^x04 rozlaczony^x01 z powodu duzego ping'u!", name)
}
return PLUGIN_CONTINUE
}public checkPing(param[]) {
new id = param[0]
HPK_MAX_CVAR = get_cvar_num( "hpk_maxping" )
HPK_TESTS_CVAR = get_cvar_num( "hpk_tests" )
HPK_TIME_CVAR = get_cvar_num( "hpk_time" )
if ((get_user_flags(id) & ADMIN_IMMUNITY)) {
remove_task(id)
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[PING]^x04 Sprawdzanie ping'u nie dotyczy adminow^x01!")
}
return PLUGIN_CONTINUE
}
new p, l
get_user_ping(id, p, l)
if (p > HPK_MAX_CVAR)
++iNumTests[id]
else
if (iNumTests[id] > 0) --iNumTests[id]
if (iNumTests[id] > HPK_TESTS_CVAR)
kickPlayer(id)
return PLUGIN_CONTINUE
}
public showWarn(param[]) {
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[PING]^x01 Gracze z^x04 ping'iem^x01 wiekszym niz^x04 100 beda^x04 wyrzucani^x01!", HPK_MAX_CVAR)
}
set_task(float(HPK_TIME_CVAR), "checkPing", param[0], param, 1, "b")
return PLUGIN_CONTINUE
}

Dalej źle interpretuję, oprócz ostatniego "Gracze z ping'em[..]wyrzucani!".

AFK nie działa, tzn. gdy jest moment, że ma być wyświetlone coś, to serwer crash'uję:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <ColorChat>

#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set afk_kicktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 15 // This is also the warning message frequency.
#define BOMB_DROP_TIME 25 // Time until bomb gets dropped, it is also afk recognition time
#define SHOW_FREQ 20 // Frequence of afk-count-messages, only needed if the CVAR afk_show_counter is set to 1
#define SPEC_ASK_TIME 30 // Time until demo-menu will pop up ...

new g_oldangles[33][3]
new g_spawnpos[33][3]
new g_afktime[33]
new g_spectime[33]
new st_afk_name[33][33]
new bool:g_spawned[33] = {true, ...}
new bool:g_demorec[33] = {false, ...}
new bool:g_afkname[33] = {false, ...}
new CsTeams:team
new AfkCT
new AfkT
new bombcarrier
new numCT
new numT
// At mapchange init this
public plugin_init() {
register_plugin("AFK KiSSS","2.5.2","Isobold & Cheesy Peteza")
register_cvar("afkslay_version", "2.5.2", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
register_cvar("afk_options", "1") // Set to 0 will not kick player but switch him to spec-team
register_cvar("afk_kicktime", "60") // Kick people AFK longer than this time
register_cvar("afk_slaytime", "45") // Slay people AFK and last survivor longer than this time
register_cvar("afk_minplayers", "3") // Only kick AFKs when there is at least this many players on the server
register_cvar("afk_slayplayers", "1") // Shall we slay or shall we not
register_cvar("afk_adminimmunity", "1") // Honor the immunity flag or not
register_cvar("afk_adminkickimmunity", "0") // Honor the immunity flag or not
register_cvar("afk_show_counter", "1") // If set to one, plugin will show number of afk players every SHOW_FREQ seconds
register_cvar("afk_rename", "1") // Renames player for his afk-time, if set to one (triggers at afk_slaytime)
register_cvar("afk_speckick", "1") // Kicks players in spec not admin, not tacking demo after afk_speckkicktime
register_cvar("afk_speckicktime", "300") // Time to wait until afk_speckick, no effect if afk_speckick 0

set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")
register_dictionary("afkkicker.txt")
register_logevent("event_RoundStart",2,"0=World triggered","1=Round_Start")
register_logevent("bomb_events", 3, "1=triggered", "2=Spawned_With_The_Bomb", "2=Dropped_The_Bomb", "2=Got_The_Bomb", "2=Planted_The_Bomb")

new keys = MENU_KEY_1|MENU_KEY_2
register_menucmd(register_menuid("Recording a demo?"), keys, "recDemo")
//register_menucmd(register_menuid("Recording a demo?"), 1023, "recDemo")
}

// Check wether one or more players is/are afk
public checkPlayers() {
new playerCount, i, cplayer
new cplayers[32]
get_players(cplayers, playerCount, "ac")
get_alive_nums()
for (i=0; i<playerCount; i++) {
cplayer = cplayers[i]
if (is_user_connected(cplayer) && !is_user_bot(cplayer) && !is_user_hltv(cplayer) && is_user_alive(cplayer) && g_spawned[cplayer]) {
new newangle[3]
g_demorec[cplayer] = false
get_user_origin(cplayer, newangle)
if ( newangle[0] == g_spawnpos[cplayer][0] && newangle[1] == g_spawnpos[cplayer][1] && newangle[2] == g_spawnpos[cplayer][2] ) {
g_afktime[cplayer] += CHECK_FREQ
check_afktime(cplayer)
if(get_cvar_num("afk_rename") && get_cvar_num("afk_slaytime") && !(g_afkname[cplayer])) {
new AFKName[32]
get_user_name(cplayer, st_afk_name[cplayer], 31)
format(AFKName, 31, "[AFK] %s", st_afk_name[cplayer])
set_user_info(cplayer, "name", AFKName)
g_afkname[cplayer] = true
}
if(get_cvar_num("afk_slayplayers"))
check_team(cplayer)
} else {
get_user_origin(cplayer, newangle, 3)
if ( newangle[0] == g_oldangles[cplayer][0] && newangle[1] == g_oldangles[cplayer][1] && newangle[2] == g_oldangles[cplayer][2] ) {
g_afktime[cplayer] += CHECK_FREQ
check_afktime(cplayer)
if(get_cvar_num("afk_rename") && get_cvar_num("afk_slaytime") && !(g_afkname[cplayer])) {
new AFKName[32]
get_user_name(cplayer, st_afk_name[cplayer], 31)
format(AFKName, 31, "[AFK] %s", st_afk_name[cplayer])
set_user_info(cplayer, "name", AFKName)
g_afkname[cplayer] = true
}
if(get_cvar_num("afk_slayplayers"))
check_team(cplayer)
} else {
g_oldangles[cplayer][0] = newangle[0]
g_oldangles[cplayer][1] = newangle[1]
g_oldangles[cplayer][2] = newangle[2]
if(g_afkname[cplayer]) {
new AFKName[32]
format(AFKName, 31, "%s", st_afk_name[cplayer])
set_user_info(cplayer, "name", AFKName)
g_afkname[cplayer] = false
}
g_afktime[cplayer] = 0
}
}
if(g_afktime[cplayer] > BOMB_DROP_TIME && cplayer == bombcarrier) {
client_cmd(cplayer,"use weapon_c4")
client_cmd(cplayer,"drop")
for(new id=1; id<=32; id++){
ColorChat(0, TEAM_COLOR, "[AFK]^x04 Wyrzucenie bomby^x01!")
}
}
} else {
if (is_user_connected(cplayer) && !is_user_bot(cplayer) && !is_user_hltv(cplayer))
checkspec(cplayer)
}
}
return PLUGIN_HANDLED
}
// All players in your team afk or not?
check_team(id) {
if(g_afktime[id] < get_cvar_num("afk_slaytime")) {
} else {
team = cs_get_user_team(id)
if((team == CS_TEAM_T && numT > 0) || (team == CS_TEAM_CT && numCT > 0)) {
} else {
if(get_playersnum() < get_cvar_num("afk_minplayers") || (get_user_flags(id)&ADMIN_IMMUNITY && get_cvar_num("afk_adminimmunity"))) {
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 Wszyscy pozostali wrogowie^x01 sa^x04 AFK^x01!")
}
} else {
new sid[1]
sid[0] = id
delayed_wc3_slay(sid)
new pname[32]
get_user_name(id, pname, 31)
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 %s^x01 jest^x04 AFK^x01 i^x04 zostal zabity^x01 jako ostatni gracz swojej druzyny!", pname)
}
}
}
}
}
// Check what to do when afk
check_afktime(id) {
new numplayers = get_playersnum()
new minplayers = get_cvar_num("afk_minplayers")

if(!(get_user_flags(id)&ADMIN_IMMUNITY && get_cvar_num("afk_adminkickimmunity")))
{
if (numplayers >= minplayers) {
new maxafktime = get_cvar_num("afk_kicktime")
if (maxafktime < MIN_AFK_TIME) {
log_amx("cvar afk_kicktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
maxafktime = MIN_AFK_TIME
set_cvar_num("afk_kicktime", MIN_AFK_TIME)
}
new name[32]
get_user_name(id, name, 31)
if(get_cvar_num("afk_options")==1) {
if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 Za %i sekund zostanie wykopany^x01 jako AFK!", timeleft)
}
} else if (g_afktime[id] > maxafktime) {
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 %s byl AFK^x01 przez %i sekund i^x04 zostal wykopany^x01!", name, maxafktime)
}
log_amx("%s Zostal wykopany za bycie dluzej niz 60 sekund AFK!", name, maxafktime)
server_cmd("kick #%d ^"Zostales wykopany za bycie dluzej niz 60 sekund AFK!^"", get_user_userid(id), maxafktime)
}
} else {
if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 Za %i sekund zostaniesz Spectator'em^x01 jako AFK!", timeleft)
}
} else if (g_afktime[id] > maxafktime) {
log_amx("%s was switched to spec for being AFK longer than %i seconds", name, maxafktime)
client_cmd(id,"kill")
cs_set_user_team(id, CS_TEAM_SPECTATOR)
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 Przerzucenie na Spectator'a^x01!")
}
g_afktime[id] = 0
g_spectime[id] = 0
new sid[1]
sid[0] = id
set_task(10.0,"delayed_wc3_rename")
if(get_cvar_num("afk_rename") && g_afkname[id]) {
new AFKName[32]
format(AFKName, 31, "%s", st_afk_name[id])
set_user_info(id, "name", AFKName)
g_afkname[id] = false
}
}
}
}
}
}
checkspec(cplayer) {
log_amx("Checkspec for id: %i", cplayer)
if(get_cvar_num("afk_speckick") == 1 && cs_get_user_team(cplayer) == CS_TEAM_SPECTATOR && g_demorec[cplayer] == false) {
if(!(get_user_flags(cplayer)&ADMIN_MENU && get_cvar_num("afk_adminkickimmunity"))) {
// Spectatorbehandlung hier rein
new maxspectime = get_cvar_num("afk_speckicktime")
new sname[32]
get_user_name(cplayer, sname, 31)
if(g_spectime[cplayer] > SPEC_ASK_TIME) {
log_amx("Showing demo menu to %s - id: %i", sname, cplayer)
ShowDemoMenu(cplayer)
}
g_spectime[cplayer] += CHECK_FREQ
if(g_spectime[cplayer] > maxspectime) {
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK] ]^x04 %s byl AFK^x01 przez %i sekund i^x04 zostal wykopany^x01!", sname, maxspectime)
}
log_amx("%s was kicked for being spec longer than %i seconds", sname, maxspectime)
server_cmd("kick #%d ^"You were kicked for being spec longer than %i seconds^"", cplayer, maxspectime)
}
}
}
}
// just connected you are not afk for shure ;)
public client_connect(id) {
g_afktime[id] = 0
g_spectime[id] = 0
g_demorec[id] = false
g_afkname[id] = false
get_user_name(id, st_afk_name[id], 31)
return PLUGIN_HANDLED
}
// just connected you are not afk for shure ;)
public client_putinserver(id) {
g_afktime[id] = 0
g_spectime[id] = 0
g_demorec[id] = false
g_afkname[id] = false
get_user_name(id, st_afk_name[id], 31)
return PLUGIN_HANDLED
}
// get player position after spawn
public playerSpawned(id) {
g_spawned[id] = false
g_demorec[id] = false
new sid[1]
sid[0] = id
set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
return PLUGIN_HANDLED
}
// Used to get playerposition after spawn and drop
public delayedSpawn(sid[]) {
get_user_origin(sid[0], g_oldangles[sid[0]], 3)
get_user_origin(sid[0], g_spawnpos[sid[0]])
g_spawned[sid[0]] = true
return PLUGIN_HANDLED
}
public event_RoundStart() {
new playerCount, Players[32], l
if(task_exists (95729,0)) remove_task (95729,0)
get_players(Players, playerCount, "ac")
for(l=0;l<32;l++) {
if(task_exists (2945 + l,0)) remove_task (2945 + l,0)
}
set_task(2.0, "afk_rs_msg")
if(get_cvar_num("afk_show_counter") == 1) set_task(float(SHOW_FREQ),"afk_rs_msg",95729,_,_,"b")
return PLUGIN_HANDLED
}
// Collect and displays informations about number and team of afk-players
public afk_rs_msg() {
new playerCount, i, player
new Players[32]
get_players(Players, playerCount, "ac")
AfkT = 0
AfkCT = 0
for (i=0; i<playerCount; i++) {
player = Players[i]
if(g_afktime[player] > BOMB_DROP_TIME) {
if(cs_get_user_team(player) == CS_TEAM_T)
AfkT++
if(cs_get_user_team(player) == CS_TEAM_CT)
AfkCT++
}
}
if(AfkT > 0 || AfkCT > 0)
for(new id=1; id<=32; id++){
ColorChat(id, TEAM_COLOR, "[AFK]^x04 %i T AFK^x01 -^x04 %i CT AFK^x01!", AfkT, AfkCT)
}
return PLUGIN_HANDLED
}
// Tracks the bombholder
public bomb_events() {
new arg0[64], action[64], name[33], userid, id;
// Read the log data that we need
read_logargv(0,arg0,63)
read_logargv(2,action,63)
// Find the id of the player that triggered the log
parse_loguser(arg0,name,32,userid)
id = find_player("k",userid)
// Find out what action it was
if (equal(action,"Spawned_With_The_Bomb")) {
bombcarrier = id;
} else if (equal(action,"Dropped_The_Bomb")) {
bombcarrier = 0;
} else if (equal(action,"Got_The_Bomb")) {
bombcarrier = id;
} else if (equal(action, "Planted_The_Bomb")) {
bombcarrier = 0;
}
return PLUGIN_HANDLED
}
// Retrieves the number of non-afk alive players
get_alive_nums() {
new playerCount, i, gplayer
new Players[32]
get_players(Players, playerCount, "ac")
numCT = 0
numT = 0
for (i=0; i<playerCount; i++) {
gplayer = Players[i]
if(cs_get_user_team(gplayer) == CS_TEAM_T && g_afktime[gplayer] < BOMB_DROP_TIME)
numT++
if(cs_get_user_team(gplayer) == CS_TEAM_CT && g_afktime[gplayer] < BOMB_DROP_TIME)
numCT++
}
}

public delayed_wc3_slay(sid[]) {
new id
id = sid[0]
log_amx("Trying to wc3-slay %i",id)
if(is_user_alive(id)) {
client_cmd(id,"kill")
set_task(2.0,"delayed_wc3_slay",2945 + id,sid)
}
}

public ShowDemoMenu(specid)
{
new menu[192]
new keys = MENU_KEY_1|MENU_KEY_2

format(menu, 191, "Recording a demo?^n^n1. Yes^n2. No")
show_menu(specid, keys, menu)
}
public recDemo(specid, key)
{
// if they pressed yes...
if ( key == 0 )
g_demorec[specid] = true // If recording a demo, don't bother him anymore, only kick real afk-specs
}

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych