#include <amxmodx>
#define MAX_CHATTERS 6
#define MAX_CHATROOMS 32
#define CHAT_PREFIX '!'
new g_chatrooms[MAX_CHATROOMS][33] //ChatSzoba ID/nev
new g_player_chatroom[33][33] //Jatekos ID/nev
new g_chatroom_votelock[33] //ChatSzoba ID/Jatekos ID
new g_chatroom_voteopen[33] //ChatSzoba ID/Jatekos ID
new bool:g_chatroom_locked[33] //ChatSzoba ID
new bool:g_voted4lock[33] //ChatSzoba ID/Jatekos ID
new bool:g_voted4open[33] //ChatSzoba ID/Jatekos ID
new c_onoff,c_dead_chat,c_green_text,c_min_to_open
new msg_say
public plugin_init() {
register_plugin("Chat Rooms","1.0","Sh!nE")
register_clcmd("say","hookit")
c_onoff = register_cvar("amx_g_chatrooms","1")
c_dead_chat = register_cvar("amx_cr_deadchat","1")
c_min_to_open = register_cvar("amx_cr_min_open","2")
c_green_text = register_cvar("amx_cr_greentext","1")
msg_say = get_user_msgid("SayText")
}
public client_putinserver(id) if(get_pcvar_num(c_onoff)) set_task(5.0,"check_room",id)
public check_room(id) {
static info[33],temp[192]
get_user_info(id,"my_room",info,32);
format(temp,191,"^x03[Chat]^x01 Csatlakoztal a ChatSzobahoz ^x04/ide csatalakoztal^x01, leave - ^x04/elment a szobabol^x01, create - ^x04/szobanyitas^x01, tagok -^x04 /tagok^x01.")
color_print(id,temp)
format(temp,191,"^x03[Chat]^x01 Sajat celu szoba - ^x04/szoba^x01,szavazunk hogy be zarjon-e a szoba- ^x04/szobazaras^x01, Szavazunk hogy legyen-e chat szoba - ^x04/szobanyitas^x01.")
color_print(id,temp)
if(strlen(info)) {
for(new i=0;i < MAX_CHATROOMS;i++) {
if(equali(g_chatrooms[i],info)) {
join_room(id,g_chatrooms[i])
return PLUGIN_HANDLED
}
}
open_room(id,info)
}
return PLUGIN_HANDLED
}
public hookit(id) {
if(!get_pcvar_num(c_onoff)) return PLUGIN_CONTINUE
new args[192],parsed[33],temp[192],i
read_args(args,191)
remove_quotes(args)
parse(args,parsed,32)
new chatroom=get_user_chatroom_id(id)
switch(args[1]) {
case 'r':{
if(equali(parsed,"/szoba")) {
if(strlen(g_player_chatroom[id])) {
format(temp,191,"^x03[Chat]^x01 Chat szoba:'^x04%s^x01'.",g_player_chatroom[id])
color_print(id,temp)
}
else {
format(temp,191,"^x03[Chat]^x01 Neked nincs chat szobad.")
color_print(id,temp)
}
return PLUGIN_HANDLED
}
}
case 'o':{
if(equali(parsed,"/szobanyitas")) {
if(!g_chatroom_locked[chatroom]) {
format(temp,191,"^x03[Chat]^x01 Chatszoba be zarva!")
color_print(id,temp)
return PLUGIN_HANDLED
}
new name[33]
get_user_name(id,name,32)
if((g_chatroom_voteopen[chatroom]+1==get_pcvar_num(c_min_to_open)) || (g_chatroom_voteopen[chatroom]+1==get_chatroom_players(chatroom))) {
new players[32],num
get_players(players,num)
for(i=0;i < num;i++) {
g_voted4lock[players[i]]=false
g_voted4open[players[i]]=false
}
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' Szoba megnyitva!",name)
color_print(id,temp);print_to_cr(id,temp)
g_chatroom_locked[chatroom]=false
g_chatroom_voteopen[chatroom]=0
return PLUGIN_HANDLED
}
else {
g_chatroom_voteopen[chatroom]++
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' Szavazas IGEN lett! %d/%d",name,g_chatroom_voteopen[chatroom],get_chatroom_players(chatroom))
color_print(id,temp)
print_to_cr(id,temp)
return PLUGIN_HANDLED
}
}
}
case 'c':{
if(equali(parsed,"/szobazaras")) {
new name[33]
get_user_name(id,name,32)
if(g_chatroom_votelock[chatroom]+1==get_chatroom_players(chatroom)) {
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' A szoba be zart!",name)
color_print(id,temp)
print_to_cr(id,temp)
g_chatroom_locked[chatroom]=true
g_chatroom_votelock[chatroom]=0
}
else {
g_chatroom_votelock[chatroom]++
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' A szavazas bezárja a szobat! Votes: %d/%d",name,g_chatroom_votelock[chatroom],get_chatroom_players(chatroom))
color_print(id,temp)
print_to_cr(id,temp)
}
return PLUGIN_HANDLED
}
}
case 'l':if(equali(parsed,"/leaveroom")) {
leave_room(id)
return PLUGIN_HANDLED
}
case 'j':{
new t_parse[2][33]
if(equali(parsed,"/szobacsat")) {
new players[32],num,chatters
get_players(players,num)
for(i=0;i < num;i++) if(strlen(g_player_chatroom[players[i]])) chatters++
if(chatters==MAX_CHATTERS) {
format(temp,191,"^x03[Chat]^x01 A Chat szoba fullon van!")
color_print(id,temp)
return PLUGIN_HANDLED
}
parse(args,parsed,32,t_parse[0],32,t_parse[1],32)
if(!strlen(t_parse[0])) {
format(temp,191,"^x03[Chat]^x01 Kerlek valtoztas nevet!")
color_print(id,temp)
return PLUGIN_HANDLED
}
else if(strlen(t_parse[1])) {
format(temp,191,"^x03[Chat]^x01 Ne rakj SPACET a neved be!")
color_print(id,temp)
return PLUGIN_HANDLED
}
new cr_id=find_crid_by_name(t_parse[0])
if(!strlen(g_chatrooms[cr_id])) {
format(temp,191,"^x03[Chat]^x01 Nem talat szobat!")
color_print(id,temp)
return PLUGIN_HANDLED
}
if(g_chatroom_locked[cr_id]) {
format(temp,191,"^x03[Chat]^x01 A szoba e zarva!")
color_print(id,temp)
return PLUGIN_HANDLED
}
join_room(id,t_parse[0])
return PLUGIN_HANDLED
}
}
case 'm':{
if(equali(parsed,"/makeroom")) {
new t_parse[2][33]
parse(args,parsed,32,t_parse[0],32,t_parse[1],32)
if(!strlen(t_parse[0])) {
format(temp,191,"^x03[Chat]^x01 Kerlek valtoztas nevet!")
color_print(id,temp)
return PLUGIN_CONTINUE
}
else if(strlen(t_parse[1])) {
format(temp,191,"^x03[Chat]^x01 Ne rakj SPACET a neved be!")
color_print(id,temp)
return PLUGIN_CONTINUE
}
if(equali(t_parse[0],g_chatrooms[chatroom])) {
format(temp,191,"^x03[Chat]^x01 Lepjki es lepj ba ujra a neved ert!")
color_print(id,temp)
return PLUGIN_CONTINUE
}
open_room(id,t_parse[0])
return PLUGIN_HANDLED
}
else if(equali(parsed,"/members")) {
if(!strlen(g_player_chatroom[id])) {
format(temp,191,"^x03[Chat]^x01 Nem vagy CHat szobaba. Te csatlakozhatsz igy hogy ha beirdo /szobacsat!")
color_print(id,temp)
return PLUGIN_HANDLED
}
new players[32],temp_string[MAX_CHATTERS*32],num,pname[33]
get_players(players,num)
for(i=0;i < num;i++) {
if(equal(g_player_chatroom[players[i]],g_player_chatroom[id])) {
get_user_name(players[i],pname,32)
if(num==i+1) format(temp_string,(MAX_CHATTERS*32)-1,"%s%s^x01.",temp_string,pname)
else format(temp_string,(MAX_CHATTERS*32)-1,"%s%s^x01,^x04 ",temp_string,pname)
}
}
format(temp_string,(MAX_CHATTERS*32)-1,"^x03[Chat]^x01 Online:^x04 %s",temp_string)
color_print(id,temp_string)
return PLUGIN_HANDLED
}
}
}
if(strlen(g_player_chatroom[id]) && args[0]==CHAT_PREFIX) {
copy(args,191,args[1])
if(!strlen(args)) return PLUGIN_CONTINUE
new players[32],num,pname[33]
get_players(players,num)
get_user_name(id,pname,32)
for(i=0;i < num;i++) {
if((get_pcvar_num(c_dead_chat) && (is_user_alive(id)==is_user_alive(players[i]))) || !get_pcvar_num(c_dead_chat)) {
if(equal(g_player_chatroom[players[i]],g_player_chatroom[id])) {
new status[7]
if(!is_user_alive(id)) copy(status,6,"*DEAD*")
if(!get_user_team(id)) copy(status,6,"*SPEC*")
format(temp,191,"^x03(%s)%s %s^x01 : %s%s",g_player_chatroom[id],status,pname,get_pcvar_num(c_green_text) ? "^x04" : "",args)
color_print(players[i],temp)
}
}
}
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public open_room(id,name[]) {
new temp[192]
if(strlen(g_player_chatroom[id])) {
format(temp,191,"^x03[Chat]^x01 Te mar benn vagy 1 szobaba!('^x04%s^x01')! Valasz Chatszobat! ^x04/leaveroom^x01!",g_player_chatroom[id])
color_print(id,temp)
return PLUGIN_CONTINUE
}
format(temp,191,"^x03[Chat]^x01 Te csinbaltal Chatszobat(Name:'^x04%s^x01')!",name)
color_print(id,temp)
copy(g_chatrooms[get_user_chatroom_id(id)],32,name)
join_room(id,name)
return PLUGIN_HANDLED
}
public join_room(id,name[]) {
new temp[192]
if(strlen(g_player_chatroom[id])) {
format(temp,191,"^x03[Chat]^x01 Te mar benn vagy 1 szobaba!('^x04%s^x01')! Valasz Chatszobat ^x04/leaveroom^x01!",g_player_chatroom[id])
color_print(id,temp)
return PLUGIN_CONTINUE
}
format(temp,191,"^x03[Chat]^x01 Te csatalkoztal '^x04%s^x01'!",name)
color_print(id,temp)
new namep[33]
get_user_name(id,namep,32)
copy(g_player_chatroom[id],32,name)
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' Te csatakoztal!",namep)
print_to_cr(id,temp)
return PLUGIN_HANDLED
}
public leave_room(id) {
new temp[192]
if(!strlen(g_player_chatroom[id])) {
format(temp,191,"^x03[Chat]^x01 Te nem vagy Chatszobaba! Igy tudsz csatlakozni: ^x04/szobacsat^x01!")
color_print(id,temp)
return PLUGIN_CONTINUE
}
format(temp,191,"^x03[Chat]^x01 Te lecsatlakoztal '^x04%s^x01'!",g_player_chatroom[id])
color_print(id,temp)
new namep[33]
get_user_name(id,namep,32)
new players[32],num
get_players(players,num)
new number,chatroom=get_user_chatroom_id(id)
format(temp,191,"^x03[Chat]^x01 '^x04%s^x01' elment a szobabol",namep)
print_to_cr(id,temp)
g_player_chatroom[id][0]=0
number=get_chatroom_players(chatroom)
if(!number) {
g_player_chatroom[id][0]=0
g_chatroom_locked[chatroom]=false
}
g_voted4lock[id]=false
return PLUGIN_HANDLED
}
public client_disconnect(id) {
if(get_pcvar_num(c_onoff)) {
g_voted4lock[id]=false
g_voted4open[id]=false
g_player_chatroom[id][0]=0
remove_task(id)
leave_room(id)
}
}
get_user_chatroom_id(id) {
for(new i=0;i < MAX_CHATROOMS;i++) if(equal(g_player_chatroom[id],g_chatrooms[i])) return i
return 0
}
get_chatroom_players(roomid) {
new players[32],num,count
get_players(players,num)
for(new i=0;i < num;i++) if(equal(g_player_chatroom[players[i]],g_chatrooms[roomid])) count++
return count
}
print_to_cr(id,text[]) {
new players[32],num,temp[192]
get_players(players,num)
for(new i=0;i < num;i++) {
if(equal(g_player_chatroom[players[i]],g_chatrooms[get_user_chatroom_id(id)]) && players[i]!=id) {
format(temp,191,text)
color_print(players[i],temp)
}
}
}
find_crid_by_name(name[]) {
for(new i=0;i < MAX_CHATROOMS;i++) if(equal(name,g_chatrooms[i])) return i
return 0
}
color_print(id,text[]) {
message_begin(MSG_ONE_UNRELIABLE,msg_say,_,id)
write_byte(id)
write_string(text)
message_end()
}