Ps.
Probar y publicar los errores y mejoras. Cuando esté listo voy a añadir el sistema de SQL para guardar los datos.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#pragma semicolon 1
new const PUG_szHead[] = "[Groups]";
/*
.group <tag> - Crear un grupo con el tag especificado
.add <name> - Invitar a el jugador con el tag especifico del grupo
.accept <name> - Aceptar la invitación de grupo por el jugador que se especifica
.leavegroup - Dejar el grupo que se encuentra actualmente
*/
#define PUG_GROUP_MAX_NAME 16
new g_szGroups[33][PUG_GROUP_MAX_NAME];
new g_szCaptain[33][PUG_GROUP_MAX_NAME];
new bool:g_bInvited[33][33];
public plugin_init()
{
register_plugin("PUG Groups",AMXX_VERSION_STR,"SmileY");
register_clcmd(".group","PUG_Group", .info="Criar um grupo com a TAG especificada");
register_clcmd(".add","PUG_Add", .info="Convidar um jogador a ser membro de seu grupo");
register_clcmd(".accept","PUG_Accept", .info="Aceitar o convite do capitao de grupo que lhe chamou");
register_clcmd(".leavegroup","PUG_LeaveGroup", .info="Deixar o grupo que se encontra atualmente");
}
public client_disconnect(id)
{
arrayset(g_bInvited[id],false,sizeof(g_bInvited));
}
public PUG_Group(id)
{
if(g_szGroups[id][0])
{
client_print
(
id,
print_chat,
"%s Desculpe, voce ja esta no Grupo %s, use .leavegroup para sair.",
PUG_szHead,
g_szGroups[id]
);
}
else
{
new szGroup[32];
read_args(szGroup,charsmax(szGroup));
remove_quotes(szGroup);
new iLen = strlen(szGroup);
if(!iLen || iLen > PUG_GROUP_MAX_NAME)
{
client_print
(
id,
print_chat,
"%s Desculpe, a TAG do grupo deve ter entre 1 e %d caracteres.",
PUG_szHead,
PUG_GROUP_MAX_NAME
);
return PLUGIN_HANDLED;
}
for(new i;i < sizeof(g_szGroups);i++)
{
if(equali(g_szGroups[i],szGroup))
{
client_print
(
id,
print_chat,
"%s Desculpe, ja existe um grupo com a TAG %s",
PUG_szHead,
g_szGroups[i]
);
return PLUGIN_HANDLED;
}
}
copy(g_szGroups[id],charsmax(g_szGroups[]),szGroup);
copy(g_szCaptain[id],charsmax(g_szCaptain[]),szGroup);
client_print
(
id,
print_chat,
"%s O Grupo %s foi criado, agora voce e o capitao do grupo!",
PUG_szHead,
g_szGroups[id]
);
new szName[64];
get_user_name(id,szName,charsmax(szName));
format
(
szName,
charsmax(szName),
"%s %s %s",
(containi(szName,g_szGroups[id]) != -1) ? "" : g_szGroups[id],
szName,
(containi(szName,"(C)") != -1) ? "" : "(C)"
);
set_user_info(id,"name",szName);
client_cmd(id,"name ^"%s^"",szName);
}
return PLUGIN_HANDLED;
}
public PUG_Add(id)
{
if(!g_szGroups[id][0] || !g_szCaptain[id][0])
{
client_print
(
id,
print_chat,
"%s Para adicionar um jogador voce deve ser capitao de um grupo antes.",
PUG_szHead
);
}
else
{
new szPlayer[32];
read_args(szPlayer,charsmax(szPlayer));
remove_quotes(szPlayer);
if(!szPlayer[0])
{
client_print
(
id,
print_chat,
"%s Uso: .add <Nome>",
PUG_szHead
);
return PLUGIN_HANDLED;
}
new iPlayer = cmd_target(id,szPlayer,CMDTARGET_ALLOW_SELF);
if(!iPlayer)
{
client_print
(
id,
print_chat,
"%s Usuario %s Nao encontrado.",
PUG_szHead,
szPlayer
);
}
else
{
if(!g_szGroups[iPlayer][0] && !g_szCaptain[id][0])
{
g_bInvited[id][iPlayer] = true;
if(is_user_connected(iPlayer))
{
new szName[32];
get_user_name(id,szName,charsmax(szName));
client_print
(
iPlayer,
print_chat,
"%s %s o convidou para entrar no grupo %s (Use .accept %s para aceitar)",
PUG_szHead,
szName,
szName
);
}
}
else
{
client_print
(
id,
print_chat,
"%s %s ja esta no grupo %s",
PUG_szHead,
szPlayer,
g_szGroups[iPlayer]
);
}
}
}
return PLUGIN_HANDLED;
}
public PUG_Accept(id)
{
if(!g_szGroups[id][0] || !g_szCaptain[id][0])
{
new szPlayer[32];
read_args(szPlayer,charsmax(szPlayer));
remove_quotes(szPlayer);
if(!szPlayer[0])
{
client_print
(
id,
print_chat,
"%s Uso: .accept <Nome do capitao>",
PUG_szHead
);
return PLUGIN_HANDLED;
}
new iPlayer = cmd_target(id,szPlayer,CMDTARGET_ALLOW_SELF);
if(!iPlayer)
{
client_print
(
id,
print_chat,
"%s Usuario %s Nao encontrado.",
PUG_szHead,
szPlayer
);
}
else
{
if((g_bInvited[iPlayer][id] == true) && is_user_connected(iPlayer) && g_szCaptain[iPlayer][0])
{
new szName[64];
get_user_name(iPlayer,szName,charsmax(szName));
client_print
(
id,
print_chat,
"%s Voce agora e membro do grupo %s [%s]",
PUG_szHead,
g_szCaptain[iPlayer],
szName
);
get_user_name(id,szName,charsmax(szName));
if(!containi(g_szCaptain[iPlayer],szName))
{
format
(
szName,
charsmax(szName),
"%s %s",
g_szCaptain[iPlayer],
szName
);
set_user_info(id,"name",szName);
client_cmd(id,"name ^"%s^"",szName);
}
g_bInvited[iPlayer][id] = false;
copy(g_szGroups[id],charsmax(g_szGroups[]),g_szCaptain[iPlayer]);
}
else
{
client_print
(
id,
print_chat,
"%s Voce nao foi chamado para fazer parte desse grupo.",
PUG_szHead
);
}
}
}
else
{
client_print
(
id,
print_chat,
"%s Para aceitar um convite, voce nao pode ter nenhum grupo.",
PUG_szHead
);
}
return PLUGIN_HANDLED;
}
public PUG_LeaveGroup(id)
{
if(g_szGroups[id][0])
{
new szTitle[64];
formatex(szTitle,charsmax(szTitle),"Voce deseja deixar o grupo^n\r%s ?",g_szGroups[id]);
new iMenu = menu_create(szTitle,"PUG_MenuHandler");
menu_additem(iMenu,"Sim","0");
menu_additem(iMenu,"Nao","1");
menu_setprop(iMenu,MPROP_EXIT,MEXIT_NEVER);
menu_display(id,iMenu);
}
else
{
client_print
(
id,
print_chat,
"%s Desculpe, voce nao faz parte de nenhum grupo.",
PUG_szHead
);
}
return PLUGIN_HANDLED;
}
public PUG_MenuHandler(id,iMenu,iKey)
{
if(iKey == MENU_EXIT) return PLUGIN_HANDLED;
switch(iKey)
{
case 0:
{
new szName[64];
get_user_name(id,szName,charsmax(szName));
if(containi(g_szGroups[id],szName))
{
replace_all(szName,charsmax(szName),g_szGroups[id],"");
}
if(containi(szName,"(C)"))
{
replace_all(szName,charsmax(szName),"(C)","");
}
trim(szName);
set_user_info(id,"name",szName);
client_cmd(id,"name ^"%s^"",szName);
client_print
(
id,
print_chat,
"%s Voce saiu do grupo %s",
PUG_szHead,
g_szGroups[id]
);
if(g_szGroups[id][0]) arrayset(g_szGroups[id],0,sizeof(g_szGroups[]));
if(g_szCaptain[id][0]) arrayset(g_szCaptain[id],0,sizeof(g_szCaptain[]));
}
case 1:
{
client_print
(
id,
print_chat,
"%s Acao cancelada.",
PUG_szHead
);
}
}
return PLUGIN_HANDLED;
}