Код:
/*===============================================================================
=
-------------------------------------------
-*- [AMXX] Addon: Invite System | by Re.Act!ve -*-
-------------------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
Invite System for your server
~~~~~~~~~~~~~~~
- Changelog -
~~~~~~~~~~~~~~~
v. 1.0 - Create Base plugin
v. 1.1 - First fixes bags
v. 1.2 - global fix and recoding
v. 1.3 - work in database file.
v. 1.5.1 - Alpha release.
v. 1.6.3 - Update fix.
v. 1.7.4 - Beta release.
================================================================================
*/
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[AMX] Addon: Invite System"
#define VERSION "1.7.4"
#define AUTHOR "Re.Act!ve"
#define INVITE_WIDTH 9 // Lenght of Invite + 1
#define MAX_CATEGORY 3
#define MAX_INVITES 60
#define MAX_SIZE 32
#define MAX_PROCENT 100
new const gConfigFile[] = "amx_invite_system.ini"
new const inviteTag[] = "ISS"
// Generate Symbol A-Z
new const gGenerateCharLarge[26][] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" } //26
new const gGenerateCharSmall[26][] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" } //26
new const gGenerateNum[10][] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" } // 10
new const gGenerateSymbol[5][] = { "$", "#", "@", "&", "?" } // 5
// Menu keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MEN
U_KEY_8|MENU_KEY_9|MENU_KEY_0
new gLangChatMessage[][] = { "ISS_INVITE_MSG1", "ISS_INVITE_MSG2", "ISS_INVITE_MSG3" }
new gLangChatType[4][] = { "ISS_CHAT_TYPE1", "ISS_CHAT_TYPE2", "ISS_CHAT_TYPE3", "ISS_CHAT_TYPE4" }
new AdminCatName[][] = { "ISS_CATEGORY1", "ISS_CATEGORY2", "ISS_CATEGORY3" }
new AdminInviteCount, AdminMsgType, AdminAccess, CurCategory, bool:AdminActivationDisable
new _InviteData[MAX_CATEGORY][MAX_INVITES][INVITE_WIDTH], _InviteNum[MAX_CATEGORY], gCache_Categories, _InviteLineData[MAX_CATEGORY][128], InviteAccess[2]
new _InviteLatest[INVITE_WIDTH], _InviteLatestData[4][32], iChoosenPlayer[33]
new szArgs[16], gMaxPlayers
new cvar_category, cvar_presents, cvar_presents_true, cvar_generate_fontsize
new gFwd_EnterCode, gFwd_RegisterCode, g_fwDummyResult, gCache_InviteTrue, gCache_FontSize
public plugin_natives()
{
register_native("invitefunc_register", "native_func_register", 1)
register_native("invitefunc_give_player", "native_give_player", 1)
}
public plugin_init()
{
register_plugin(PLUGIN , VERSION , AUTHOR);
register_dictionary("amx_invite_system.txt")
register_concmd("invite_admin","clcmd_invite_admin");
register_clcmd("say","fw_SayChatPlayer");
cvar_generate_fontsize = register_cvar("invite_fontsize", "0") // 0 - Заглавные буквы в инвайте, 1 - Маленькие буквы, 2 - Заглавные и маленькие (соотношение одинаковое)
cvar_category = register_cvar("invite_category_num", "3") // Количество категорий
cvar_presents = register_cvar("invite_presents", "1") // Включить подарки-инвайты?? < 1 | 0 >
cvar_presents_true = register_cvar("invite_presents_nofake", "1") // 1 - К подаркам допустимы только существующие инвайты (Включить NoFake) | 0 - когда дарите подарки (Отключить NoFake)
// cvar_antifake_enable = register_cvar("invite_antiflood", "0")
register_menu("Stats info", KEYSMENU, "menu_statistic")
gMaxPlayers = get_maxplayers()
register_clcmd("INVITE_CODE", "clcmd_enter_invitecode")
register_clcmd("CODE", "clcmd_present_invitecode")
// Custom Forwards
gFwd_EnterCode = CreateMultiForward("invite_enter_code", ET_CONTINUE, FP_CELL, FP_STRING, FP_CELL, FP_CELL) // invite_enter_code(id, invite[], category, true)
gFwd_RegisterCode = CreateMultiForward("invite_register_code", ET_CONTINUE, FP_CELL, FP_STRING, FP_CELL) // invite_register_code(id, invite[], category)
AdminInviteCount = 0;
set_task(0.4, "cache_category")
}
public cache_category(){
gCache_Categories = get_pcvar_num(cvar_category);
gCache_InviteTrue = get_pcvar_num(cvar_presents_true);
gCache_FontSize = get_pcvar_num(cvar_generate_fontsize)
load_file_invite_settings()
remove_task()
}
public clcmd_invite_admin(id)
if(get_user_flags(id) & AdminAccess) show_IS_admin_menu(id)
else client_print(id, print_console, "[%s] Sorry, you don't know is access!", inviteTag)
public clcmd_enter_invitecode(id){
new category, iTrue=0;
read_args(szArgs, INVITE_WIDTH+1);
remove_quotes(szArgs);
trim(szArgs);
replace(szArgs, INVITE_WIDTH+1, "^"", "")
new normal_invite[INVITE_WIDTH]
category = FindCode_LoadFile(szArgs, normal_invite)
if(category>=0 && strlen(szArgs)>INVITE_WIDTH-2) {
copy(_InviteLatest, INVITE_WIDTH-1, normal_invite);
get_user_name(id, _InviteLatestData[1], 31);
get_user_ip(id, _InviteLatestData[2], 31);
format(_InviteLatestData[0], 31, "%L", LANG_PLAYER, AdminCatName[category]);
new ctime[64]
get_time("%m/%d/%Y - %H:%M:%S", ctime, 63)
format(_InviteLatestData[3], 31, "%s", ctime);
client_print(id, print_chat, "[%s] %L %L", inviteTag, LANG_PLAYER, "ISS_TRUE_CODE1", LANG_PLAYER, AdminCatName[category])
client_print(id, print_center, "%L", LANG_PLAYER, "ISS_TRUE_CODE2")
// delete invite is database
ReCounter_invites(0, normal_invite, category)
Control_RewriteInviteFile()
iTrue = 1;
}
else {
client_print(id, print_chat, "[%s] %L", inviteTag, LANG_PLAYER, "ISS_ERROR_CODE1")
client_print(id, print_center, "%L", LANG_PLAYER, "ISS_ERROR_CODE2")
}
// USED CODE FUNCTION
ExecuteForward(gFwd_EnterCode, g_fwDummyResult, id, normal_invite, category, iTrue);
return PLUGIN_HANDLED;
}
public clcmd_present_invitecode(id){
read_args(szArgs, INVITE_WIDTH+1);
remove_quotes(szArgs);
trim(szArgs);
replace(szArgs, INVITE_WIDTH+1, "^"", "")
new normal_invite[INVITE_WIDTH]
if(!is_user_connected(iChoosenPlayer[id]))
return PLUGIN_HANDLED;
if( ((FindCode_LoadFile(szArgs, normal_invite)>=0 && strlen(szArgs)>INVITE_WIDTH-2) &&
gCache_InviteTrue==1) || gCache_InviteTrue!=1) {
new name[32]
get_user_name(iChoosenPlayer[id], name, 31)
set_hudmessage(255, 0, 0, -1.0, 0.3, 0, 6.0, 6.0)
show_hudmessage(id, "%L", id, "ISS_PRESENT_PLAYER2", normal_invite, name)
get_user_name(id, name, 31)
set_hudmessage(0, 255, 0, -1.0, 0.3, 0, 6.0, 6.0)
show_hudmessage(iChoosenPlayer[id], "%L", id, "ISS_PRESENT_PLAYER1", name)
client_print(iChoosenPlayer[id], print_chat, "[%s] %L", inviteTag, id, "ISS_PRESENT_INVITE", normal_invite)
}
else {
client_print(id, print_chat, "[NOFake] %L", LANG_PLAYER, "ISS_ERROR_CODE_P")
client_print(id, print_center, "%L", LANG_PLAYER, "ISS_ERROR_CODE2")
}
return PLUGIN_HANDLED;
}
load_file_invite_settings()
{
// Build customization file path
new path[64]
get_configsdir(path, charsmax(path))
format(path, charsmax(path), "%s/%s", path, gConfigFile)
// File not present
if (!file_exists(path))
{
new error[100]
formatex(error, charsmax(error), "Cannot load File %s/%s", path, gConfigFile)
set_fail_state(error)
return;
}
// Set up some vars to hold parsing info
new linedata[1024], key[64], value[960], section
AdminInviteCount = 0;
// Open customization file for reading
new file = fopen(path, "rt")
while (file && !feof(file) && (section<=gCache_Categories) )
{
// Read one line at a time
fgets(file, linedata, charsmax(linedata))
// Replace newlines with a null character to prevent headaches
replace(linedata, charsmax(linedata), "^n", "")
// Blank line or comment
if (!linedata[0] || linedata[0] == ';') continue;
// New section starting
if (linedata[0] == '[')
{
copy(_InviteLineData[section], 127, linedata)
section++
continue;
}
// Get key and value(s)
strtok(linedata, key, charsmax(key), value, charsmax(value), '=')
// Trim spaces
trim(key)
trim(value)
if (equal(key, "ADMIN_ACCESS_FLAG")) {
AdminAccess = read_flags(value);
copy(InviteAccess, 1, key)
}
if (equal(key, "INVITE_CATEGORY")) {
new num=0;
while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ','))
{
// Trim spaces
trim(key)
trim(value)
// Add to array
copy(_InviteData[section-1][num], INVITE_WIDTH-1, key)
num+=1;
}
_InviteNum[section-1] = num; // count invites in category
AdminInviteCount+=num;
}
}
if(file) fclose(file)
}
public fw_SayChatPlayer(id)
{
new text[70], arg1[32], target[33], count[32]
read_args(text, sizeof(text)-1);
remove_quotes(text);
arg1[0] = '^0';
target[0] = '^0';
count[0] = '^0';
parse(text, arg1, sizeof(arg1)-1, target, sizeof(target)-1, count, sizeof(count)-1);
if ( equali(arg1, "/invite", 7) || equali(arg1, "/ii", 3) || equali(arg1, "iss", 2) )
show_IS_player_menu(id);
if ( (equali(arg1, "/invite_admin", 13) || equali(arg1, "/isa", 4)) && (get_user_flags(id) & AdminAccess))
show_IS_admin_menu(id);
return PLUGIN_CONTINUE;
}
show_stats_invite(id)
{
static menu[512]
formatex(menu, charsmax(menu), "\r%L^n \wName: \y%s^n \wInvite: \y%s^n \wCategory: \y%s^n \wDate: \y%s^n^n \r0. \wExit", id, "ISS_STATS_MENU", _InviteLatestData[1], _InviteLatest, _InviteLatestData[0], _InviteLatestData[3])
show_menu(id, KEYSMENU, menu, -1, "Stats Info");
}
public menu_statistic(id, key)
return PLUGIN_HANDLED;
show_select_players(id)
{
static menuid, menu[128]
formatex(menu, charsmax(menu), "\r%L^n", id, "ISS_PRESENT_TITLE")
menuid = menu_create(menu, "handle_select_playermenu")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
menu_additem(menuid, s_Name, s_Player, 0)
}
// Back - Next - Exit
formatex(menu, charsmax(menu), "%L", id, "ISS_BACK")
menu_setprop(menuid, MPROP_BACKNAME, menu)
formatex(menu, charsmax(menu), "%L", id, "ISS_NEXT")
menu_setprop(menuid, MPROP_NEXTNAME, menu)
formatex(menu, charsmax(menu), "%L", id, "ISS_EXIT")
menu_setprop(menuid, MPROP_EXITNAME, menu)
menu_display(id, menuid)
}
public handle_select_playermenu(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Player = str_to_num(s_Data)
iChoosenPlayer[id] = i_Player;
client_cmd(id, "messagemode CODE")
menu_destroy(menu)
return PLUGIN_HANDLED
}
show_IS_admin_menu(id)
{
static menuid, menu[128], buffer[2]
formatex(menu, charsmax(menu), "\r%L^n", id, "ISS_ADMIN_TITLE")
menuid = menu_create(menu, "handle_is_main_menu")
formatex(menu, charsmax(menu), "%L", id, "ISS_ADMIN_OPT1")
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L: \y%L", id, "ISS_ADMIN_OPT2", id, AdminCatName[CurCategory])
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L: \y%L", id, "ISS_ADMIN_OPT3", id, gLangChatType[AdminMsgType])
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L", id, "ISS_ADMIN_OPT4")
menu_additem(menuid, menu, buffer)
if(!AdminActivationDisable)
formatex(menu, charsmax(menu), "%L \y[%L]", id, "ISS_ADMIN_OPT5", id, "ISS_ON")
else formatex(menu, charsmax(menu), "%L \r[%L]", id, "ISS_ADMIN_OPT5", id, "ISS_OFF")
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L", id, "ISS_EXIT")
menu_setprop(menuid, MPROP_EXITNAME, menu)
menu_display(id, menuid)
}
public handle_is_main_menu(id, menuid, item)
{
// Menu was closed
if (item == MENU_EXIT)
{
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
switch(item){
case 0:CreateInvite_DataBase(id)
case 1:if(CurCategory<(gCache_Categories-1)) CurCategory+=1;
else CurCategory = 0;
case 2:
if(AdminMsgType<(charsmax(gLangChatMessage)-1)) AdminMsgType+=1;
else AdminMsgType = 0;
case 3: show_all_invites_menu(id)
case 4: AdminActivationDisable = !AdminActivationDisable
}
menu_destroy(menuid)
if(item != 3) show_IS_admin_menu(id)
return PLUGIN_HANDLED;
}
show_IS_player_menu(id)
{
static menuid, menu[128], buffer[2]
formatex(menu, charsmax(menu), "\r%L^n", id, "ISS_INVITE_TITLE")
menuid = menu_create(menu, "handle_is_playermenu")
if(AdminActivationDisable) formatex(menu, charsmax(menu), "\d%L", id, "ISS_INVITE_OPT1")
else formatex(menu, charsmax(menu), "%L", id, "ISS_INVITE_OPT1")
menu_additem(menuid, menu, buffer)
if(get_pcvar_num(cvar_presents)==1) formatex(menu, charsmax(menu), "%L", id, "ISS_INVITE_OPT2")
else formatex(menu, charsmax(menu), "\d%L", id, "ISS_INVITE_OPT2")
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L", id, "ISS_INVITE_OPT3")
menu_additem(menuid, menu, buffer)
formatex(menu, charsmax(menu), "%L", id, "ISS_EXIT")
menu_setprop(menuid, MPROP_EXITNAME, menu)
menu_display(id, menuid)
}
public handle_is_playermenu(id, menuid, item)
{
// Menu was closed
if (item == MENU_EXIT || (item==1 && get_pcvar_num(cvar_presents)!=1))
{
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
switch(item)
{
case 0: {
if(!AdminActivationDisable){
client_print(id, print_center, "%L", LANG_PLAYER, "ISS_ENTERCODE_INFO")
client_cmd(id, "messagemode INVITE_CODE")
}
else client_print(id, print_center, "%L", LANG_PLAYER, "ISS_DISABLE_INFO")
return PLUGIN_HANDLED;
}
case 1: show_select_players(id)
case 2: show_stats_invite(id)
}
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
show_all_invites_menu(id)
{
static menuid, menu[256], buffer[INVITE_WIDTH], gData[6], show_category
formatex(menu, charsmax(menu), "\r%L [Count: %d]", id, "ISS_ADMIN_TITLE", AdminInviteCount)
menuid = menu_create(menu, "handle_all_invites_menu")
new invitenum, category;
for(category = 0; category<gCache_Categories; category++)
for(invitenum = 0; invitenum<_InviteNum[category]; invitenum++) {
formatex(menu, charsmax(menu), "%s", _InviteData[category][invitenum])
copy(buffer, INVITE_WIDTH-1, _InviteData[category][invitenum])
show_category = category;
num_to_str(show_category, gData, 5)
menu_additem(menuid, menu, buffer, show_category)
}
// Back - Next - Exit
formatex(menu, charsmax(menu), "%L", id, "ISS_BACK")
menu_setprop(menuid, MPROP_BACKNAME, menu)
formatex(menu, charsmax(menu), "%L", id, "ISS_NEXT")
menu_setprop(menuid, MPROP_NEXTNAME, menu)
formatex(menu, charsmax(menu), "%L", id, "ISS_EXIT")
menu_setprop(menuid, MPROP_EXITNAME, menu)
menu_display(id, menuid)
}
public handle_all_invites_menu(id, menuid, item)
{
// Menu was closed
if (item == MENU_EXIT)
{
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
new s_Data[64], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menuid, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
show_invite_options(id, s_Data, str_to_num(s_Name))
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
show_invite_options(id, invite[], category)
{
static menuid, menu[128], cData[16]
formatex(menu, charsmax(menu), "\r%L^n", id, "ISS_INVITE_SET_MENU", invite)
menuid = menu_create(menu, "handle_invite_settings")
formatex(cData, 15, "%s %d", invite, category)
formatex(menu, charsmax(menu), "%L", id, "ISS_INVITE_SETOPT1")
menu_additem(menuid, menu, cData)
formatex(menu, charsmax(menu), "%L", id, "ISS_INVITE_SETOPT2")
menu_additem(menuid, menu, cData)
formatex(menu, charsmax(menu), "%L", id, "ISS_EXIT")
menu_setprop(menuid, MPROP_EXITNAME, menu)
menu_display(id, menuid)
}
public handle_invite_settings(id, menuid, item)
{
// Menu was closed
if (item == MENU_EXIT)
{
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
static buffer[20], dummy, argum[2][10], category
menu_item_getinfo(menuid, item, dummy, buffer, charsmax(buffer), _, _, dummy)
parse(buffer, 19, argum[0], 9, argum[1], 9)
for(new i=0; i<2;i++) {
remove_quotes(argum[i]); trim(argum[i]);
}
category = str_to_num(argum[1]);
switch(item)
{
case 0: {
// delete invite is database
//ReCounter_invites(0, normal_invite, category)
client_print(id, print_chat, "[%s-ADMIN] Invite <%s><Category Num:%d> is succefully deleted in database.", inviteTag, argum[0], category)
//Control_RewriteInviteFile()
}
case 1: {
client_print(id, print_console, "[%s] Invite copy for your console: %s Category Num:%d", inviteTag, argum[0], category)
client_print(id, print_chat, "[%s-ADMIN] Invite copying for your console.", inviteTag)
}
}
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
// addel: 0 - delete, 1 - add
public ReCounter_invites(addel, invite[], Category)
{
switch(addel)
{
case 0: {
new b=0;
for(new i=0;i<_InviteNum[Category]; i++) {
if(equal(invite, _InviteData[Category][b])) b+=1;
if(b<_InviteNum[Category]) copy(_InviteData[Category][i], INVITE_WIDTH-1, _InviteData[Category][b])
b++;
}
_InviteNum[Category]--;
AdminInviteCount--;
}
case 1: {
copy(_InviteData[Category][_InviteNum[Category]], INVITE_WIDTH-1, invite)
_InviteNum[Category]++;
AdminInviteCount++;
}
}
}
Control_RewriteInviteFile()
{
// Build customization file path
new path[64]
get_configsdir(path, charsmax(path))
format(path, charsmax(path), "%s/%s", path, gConfigFile)
if (file_exists(path))
delete_file(path)
// Added num for massive
new string[256], line[512]
format(line,511,"; ---- Private addon plugin: INVITE SYSTEM v.%s -----", VERSION)
write_file(path, line, -1)
format(line,511,"; Config file for %s Plugin. Copyright by %s ©^n", inviteTag, AUTHOR)
write_file(path, line, -1);
format(line,511,"ADMIN_ACCESS_FLAG = %s", InviteAccess)
write_file(path, line, -1)
format(line,511,"LATEST_INVITE = %s (Category: %s)(Name: %s)(IP: %s)(%s)^n", _InviteLatest, _InviteLatestData[0], _InviteLatestData[1], _InviteLatestData[2], _InviteLatestData[3])
write_file(path, line, -1);
new is[2];
for(is[1]=0; is[1] < gCache_Categories; is[1]++){
is[0] = 0;
format(line, 511, "%s", _InviteLineData[is[1]])
write_file(path, line, -1);
format(string, 255, "INVITE_CATEGORY = ")
for(is[0]=0; is[0] < _InviteNum[is[1]]; is[0]++) {
format(string ,255,"%s%s", string, _InviteData[is[1]][is[0]])
if((is[0]+1) < _InviteNum[is[1]]) format(string ,255,"%s , ", string)
}
format(line, 511, "%s^n", string)
write_file(path, line, -1)
}
}
stock generate_invite_server(string[], len) {
// If not empty
format(string, len, "")
// Generation code invite
for(new ch=0; ch<(len+1); ch++)
switch(random_num(1,MAX_PROCENT)) {
case 1..70:
{
switch(gCache_FontSize) {
case 0: format(string, len, "%s%s", string, gGenerateCharLarge[random_num(0, charsmax(gGenerateCharLarge))])
case 1: format(string, len, "%s%s", string, gGenerateCharLarge[random_num(0, charsmax(gGenerateCharLarge))])
case 2: {
if(random_num(0,1)) format(string, len, "%s%s", string, gGenerateCharLarge[random_num(0, charsmax(gGenerateCharLarge))])
else format(string, len, "%s%s", string, gGenerateCharSmall[random_num(0, charsmax(gGenerateCharSmall))])
}
}
}
case 71..96: format(string, len, "%s%s", string, gGenerateNum[random_num(0, charsmax(gGenerateNum))])
case 97..100: format(string, len, "%s%s", string, gGenerateSymbol[random_num(0, charsmax(gGenerateSymbol))])
}
// Type chat message
if(AdminMsgType != 3)
say_message(AdminMsgType)
}
FindCode_LoadFile(invite[], normInvite[])
{
new category, invitenum;
for(category = 0; category<gCache_Categories; category++)
for(invitenum = 0; invitenum<_InviteNum[category]; invitenum++)
if(equal(invite, _InviteData[category][invitenum])) // (strlen(_InviteData[category][invitenum])>INVITE_WIDTH-1)
{
copy(normInvite, INVITE_WIDTH-1, _InviteData[category][invitenum]);
return category;
}
return -1;
}
// id - index player, or 0 - if not player
stock CreateInvite_DataBase(id)
{
new invite[INVITE_WIDTH];
generate_invite_server(invite, INVITE_WIDTH-1)
ReCounter_invites(1, invite, CurCategory)
Control_RewriteInviteFile()
if(is_user_connected(id) && (get_user_flags(id) & AdminAccess)) client_print(id, print_chat, "%L %s", LANG_PLAYER, "ISS_ADMIN_CREATE", invite)
// USED CODE FUNCTION
ExecuteForward(gFwd_RegisterCode, g_fwDummyResult, id, invite, CurCategory);
}
stock say_message(type)
{
new text[256]
format(text, 255,"^x04[%s]^x01 %L", inviteTag, LANG_PLAYER, gLangChatMessage[type])
for(new id=1;id<=gMaxPlayers;id++) {
if(!is_user_connected(id)) continue;
message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id)
write_byte(id)
write_string(text)
message_end()
}
}
public native_func_register(id, invite[], category)
{
new invite[INVITE_WIDTH];
generate_invite_server(invite, INVITE_WIDTH-1)
ReCounter_invites(1, invite, category)
Control_RewriteInviteFile()
if(is_user_connected(id) && (get_user_flags(id) & AdminAccess)) client_print(id, print_chat, "%L %s", LANG_PLAYER, "ISS_ADMIN_CREATE", invite)
// USED CODE FUNCTION
ExecuteForward(gFwd_RegisterCode, g_fwDummyResult, id, invite, category);
}
public native_give_player(id, invite[], category)
{
new invite[INVITE_WIDTH];
generate_invite_server(invite, INVITE_WIDTH-1)
ReCounter_invites(1, invite, category)
Control_RewriteInviteFile()
if(is_user_connected(id) && (get_user_flags(id) & AdminAccess)) client_print(id, print_chat, "%L %s", LANG_PLAYER, "ISS_ADMIN_CREATE", invite)
// USED CODE FUNCTION
ExecuteForward(gFwd_RegisterCode, g_fwDummyResult, id, invite, category);
}