Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Invite System

Kasper55
сообщение 26.4.2014, 18:53
Сообщение #1
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

Нашол инвант систему но нету плагина за выдачу подарков инвайтов

сам плагин

Плагин
Код:
/*===============================================================================
=
-------------------------------------------
-*- [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);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
andreiwiz
сообщение 15.7.2014, 13:17
Сообщение #2
Стаж: 11 лет

Сообщений: 335
Благодарностей: 29
Полезность: 0



Автор: DjReactive
Версия: 1.7.4

Описание

Описание: Данное дополнение представляет собой некую систему кодовых значений (инвайтов), при вводе которых игрок может получить какой-либо бонус! Система имеет гибкие настройки, сохранение/загрузка файла, множество функций для админа на сервере: создавать инвайт, редактировать инвайт, показ всех инвайтов, оповещение о создании, и многое другое. Также имеется анти-фейк проверка на правильность введенных инвайтов для подарков.


Команды и настройки
Главное на вашем сервере появится уникальная система поощрений в виде кодов.
Какой бонус и когда игрок его получает - решаете Вы сами!

Команды:
Вызов Инвайт-меню для игроков (через чат): /ii или /invite
Вызов Инвайт-меню для Админов (через чат): /isa или /invite_admin либо через консоль invite_admin

Квары:
invite_fontsize 0 // 0 - Заглавные буквы в инвайте, 1 - Маленькие буквы, 2 - Заглавные и маленькие (соотношение одинаковое)
invite_category_num 3 // Количество категорий
invite_presents 1 // Включить подарки-инвайты??
invite_presents_nofake 1 // 1 - К подаркам допустимы только существующие инвайты (Включить NoFake) | 0 - когда дарите подарки (Отключить NoFake)

Как можно использовать инвайты:
Активировать инвайт для себя
Подарить инвайт другу
Перепродать его кому-либо
Записывать себе и в нужный момент активировать

Установка:
1) Скопируйте из архива содержимое в папку с сервером
2) Запишите в plugins.ini в конце AMX_invite_system.amxx
3) Запишите в plugins.ini (после первого плагина, который выше) в самом конце AMX_IS_ArmorHealthMoney.amxx

P.S. К плагину прилагается дополнительный плагин [ZP] Invite System: ArmorHealthMoney (для Zombie Plague) на выдачу подарков при вводе инвайтов (1. Броня, 2. Жизни, 3. Деньги)

.sma присутствуют.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: