
Стаж: 13 лет
Сообщений: 150
Благодарностей: 20
Полезность: 13
|
Доброго времени всем!Парни,сам в павне нешарю,поэтому обращаюсь сюда,может кто поможет!))) Есть плагин Vip System,думаю всем известный,и в нём есть функция невидимости(InvisItem).Так вот,можно-ли переделать чтоб получился отдельный плагин от самой системы с этой самой функцией невидимки?!Допустим чтоб у админов с флагом admin_immunity был доступ к этой функции,например командой say:/invis !!! Сами исходники собственно: Код /* VIPSystem v1.3 */
#include <amxmodx> #include <hamsandwich>
#define VIP_STEAM (1<<0) #define VIP_IP (1<<1) #define VIP_NAME (1<<2)
new const fileName[] = "vips.ini";
new Array:vipAuthArray; new Array:vipPasswordArray; new Array:vipFlagsArray; new Array:vipAccessArray; new Array:vipItemNameArray; new Array:vipItemFlagArray;
new cvarPasswordField;
new forwardItemSelected, forwardVipConnect, forwardOpeningMenu, result;
new bool:vip[33], vipFlags[33];
new letter[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'}; new maxPlayers;
public plugin_init() { register_plugin("VIPSystem", "1.3", "ZETA [M|E|N]"); register_dictionary("VIPSystem.txt"); LoadVipList(); cvarPasswordField = register_cvar("vs_password_field", "_pw"); forwardItemSelected = CreateMultiForward("VSItemSelected", ET_CONTINUE, FP_CELL, FP_CELL); forwardVipConnect = CreateMultiForward("VSVipConnect", ET_CONTINUE, FP_CELL); forwardOpeningMenu = CreateMultiForward("VSOpeningMenu", ET_CONTINUE, FP_CELL); maxPlayers = get_maxplayers(); register_concmd("vips_list", "ShowVipsList", ADMIN_ALL, "Show Vips List"); register_clcmd("vip_menu", "ShowVipMenu", ADMIN_ALL, "Show Vip Menu"); register_clcmd("addvip", "AddVip", ADMIN_ALL, "Add Vip"); }
public plugin_precache() { vipAuthArray = ArrayCreate(44, 1); vipPasswordArray = ArrayCreate(32, 1); vipFlagsArray = ArrayCreate(1, 1); vipAccessArray = ArrayCreate(1, 1); vipItemNameArray = ArrayCreate(32, 1); vipItemFlagArray = ArrayCreate(1, 1); }
FindFlag(const arr[], const ch) { new size = strlen(arr); for (new i = 0; i < size; i++) { if (arr[i] == ch) { return true; } } return false; }
ReadFlags(const str[]) { new flagsBin = 0; for (new i = 0; i < 26; i++) { if (FindFlag(str, letter[i])) { flagsBin |= (1<<i); } } return flagsBin; }
ReadAccess(const str[]) { new accBin = 0; for (new i = 0; i < 3; i++) { if (FindFlag(str, letter[i])) { accBin |= (1<<i); } } return accBin; }
LoadVip(const auth[], const pass[], const flags[], const acc[]) { ArrayPushString(vipAuthArray, auth); ArrayPushString(vipPasswordArray, pass); ArrayPushCell(vipFlagsArray, ReadFlags(flags)); ArrayPushCell(vipAccessArray, ReadAccess(acc)); }
LoadVipList() { new path[64]; get_localinfo("amxx_configsdir", path, charsmax(path)); format(path, charsmax(path), "%s/%s", path, fileName); new file = fopen(path, "r"); if (!file) { log_to_file("VIPSystem.txt", "LoadVipList(): %L", LANG_SERVER, "NO_FILE", path); return; } new text[121], auth[44], pass[32], flags[26], acc[3], count = 0; while (!feof(file)) { fgets(file, text, charsmax(text)); trim(text); if ((text[0] == ';') || !strlen(text)) { continue; } if (parse(text, auth, charsmax(auth), pass, charsmax(pass), flags, charsmax(flags), acc, charsmax(acc)) != 4) { log_to_file("VIPSystem.txt", "LoadVipList(): %L", LANG_SERVER, "INVALID_FORMAT", text); continue; } LoadVip(auth, pass, flags, acc); ++count; } fclose(file); switch (count) { case 0: server_print("[VIPSystem] %L", LANG_SERVER, "NO_VIPS"); case 1: server_print("[VIPSystem] %L", LANG_SERVER, "LOADED_VIP"); default: server_print("[VIPSystem] %L", LANG_SERVER, "LOADED_VIPS", count); } }
RemoveAccess(const id) { vip[id] = false; vipFlags[id] = 0; }
GetAccess(const id) { new userName[32], passField[32], userPass[32], userAuth[32], userIp[44]; get_user_info(id, "name", userName, charsmax(userName)); get_pcvar_string(cvarPasswordField, passField, charsmax(passField)); get_user_info(id, passField, userPass, charsmax(userPass)); get_user_authid(id, userAuth, charsmax(userAuth)); get_user_ip(id, userIp, charsmax(userIp), 1); RemoveAccess(id); new auth[44], pass[32], acc, flags; new size = ArraySize(vipAuthArray); for (new i = 0; i < size; i++) { ArrayGetString(vipAuthArray, i, auth, charsmax(auth)); ArrayGetString(vipPasswordArray, i, pass, charsmax(pass)); flags = ArrayGetCell(vipFlagsArray, i); acc = ArrayGetCell(vipAccessArray, i); if (((acc & VIP_STEAM) && equal(auth, userAuth)) || ((acc & VIP_IP) && equal(auth, userIp)) || ((acc & VIP_NAME) && equal(auth, userName) && equal(pass, userPass))) { vip[id] = true; vipFlags[id] = flags; break; } } }
ConnectGetAccess(const id) { GetAccess(id); if (vip[id]) { ExecuteForward(forwardVipConnect, result, id); } }
// Events
public client_putinserver(id) { ConnectGetAccess(id); }
public client_disconnect(id) { RemoveAccess(id); }
public client_infochanged(id) { new newname[32], oldname[32]; get_user_name(id, oldname, charsmax(oldname)); get_user_info(id, "name", newname, charsmax(newname)); if (!equal(newname, oldname)) { GetAccess(id); } }
// Natives
public plugin_natives() { register_native("VSGetUserVip", "NativeGetUserVip", 1); register_native("VSGetVipFlag", "NativeGetVipFlag", 1); register_native("VSGetVipFlags", "NativeGetVipFlags", 1); register_native("VSRegisterItem", "NativeRegisterItem", 1); }
public NativeGetUserVip(id) { if (!IsUser(id)) { log_to_file("VIPSystem.txt", "NativeGetUserVip(id): %L", LANG_SERVER, "OUT_OF_RANGE", id); return false; } return vip[id]; }
public NativeGetVipFlag(id, flag) { if (!IsUser(id)) { log_to_file("VIPSystem.txt", "NativeGetVipFlag(id, flag): %L", LANG_SERVER, "OUT_OF_RANGE", id); return false; } if (!vip[id]) { return false; } if (flag && !(vipFlags[id] & flag)) { return false; } return true; }
public NativeGetVipFlags(id) { if (!IsUser(id)) { log_to_file("VIPSystem.txt", "NativeGetVipFlags(id): %L", LANG_SERVER, "OUT_OF_RANGE", id); return 0; } return vipFlags[id]; }
public NativeRegisterItem(name[], flag) { param_convert(1); ArrayPushString(vipItemNameArray, name); ArrayPushCell(vipItemFlagArray, flag); return ArraySize(vipItemNameArray) - 1; }
// Commands
public ShowVipsList(id) { if (id) { client_print(id, print_console, "Unknown command: vips_list"); return PLUGIN_HANDLED; } new auth[44], pass[32], accBin, flagsBin, flags[26], acc[3]; new size = ArraySize(vipAuthArray); server_print("%L", LANG_SERVER, "VIPS_LIST"); if (!size) { server_print("%L", LANG_SERVER, "NO_VIPS"); return PLUGIN_HANDLED; } for(new i = 0; i < size; i++) { ArrayGetString(vipAuthArray, i, auth, charsmax(auth)); ArrayGetString(vipPasswordArray, i, pass, charsmax(pass)); flagsBin = ArrayGetCell(vipFlagsArray, i); accBin = ArrayGetCell(vipAccessArray, i); format(flags, charsmax(flags), ""); for (new i = 0, len = 0; i < 26; i++) { if (flagsBin & (1<<i)) { strcat(flags, letter[i], ++len); } } format(acc, charsmax(acc), ""); for (new i = 0, len = 0; i < 3; i++) { if (accBin & (1<<i)) { strcat(acc, letter[i], ++len); } } server_print("^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, pass, flags, acc); } return PLUGIN_HANDLED; }
public ShowVipMenu(id) { if (!vip[id]) { client_print(id, print_console, "%L", id, "NO_ACC_COM"); return PLUGIN_HANDLED; } new size = ArraySize(vipItemNameArray); if (!size) { client_print(id, print_console, "%L", id, "NO_ITEMS"); return PLUGIN_HANDLED; } ExecuteForward(forwardOpeningMenu, result, id); if (result == PLUGIN_HANDLED) { return PLUGIN_HANDLED; } new temp[36]; format(temp, charsmax(temp), "%L", id, "VIP_MENU"); new menu = menu_create(temp, "VipMenuHandler"); new item[32], itemName[32], num[3], flag; for (new i = 0; i < size; i++) { ArrayGetString(vipItemNameArray, i, item, charsmax(item)); flag = ArrayGetCell(vipItemFlagArray, i); if (NativeGetVipFlag(id, flag)) { format(itemName, charsmax(itemName), "%s", item); num_to_str(i, num, charsmax(num)); menu_additem(menu, itemName, num); } } format(temp, charsmax(temp), "%L", id, "VIP_NEXT"); menu_setprop(menu, MPROP_NEXTNAME, temp); format(temp, charsmax(temp), "%L", id, "VIP_BACK"); menu_setprop(menu, MPROP_BACKNAME, temp); format(temp, charsmax(temp), "%L", id, "VIP_EXIT"); menu_setprop(menu, MPROP_EXITNAME, temp); menu_display(id, menu, 0); return PLUGIN_HANDLED; }
public VipMenuHandler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new buffer[3], dummy; menu_item_getinfo(menu, item, dummy, buffer, charsmax(buffer), _, _, dummy); new item = str_to_num(buffer); ExecuteForward(forwardItemSelected, result, id, item); return PLUGIN_HANDLED; }
public AddVip(id) { if (!(get_user_flags(id) & ADMIN_CVAR)) { client_print(id, print_console, "%L", id, "NO_ACC_COM"); return PLUGIN_HANDLED; } new text[121], auth[44], pass[32], flags[26], acc[3]; read_args(text, charsmax(text));
if (parse(text, auth, charsmax(auth), pass, charsmax(pass), flags, charsmax(flags), acc, charsmax(acc)) != 4) { client_print(id, print_console, "%L", LANG_SERVER, "FORMAT_ADD"); return PLUGIN_HANDLED; } new path[64]; get_localinfo("amxx_configsdir", path, charsmax(path)); format(path, charsmax(path), "%s/%s", path, fileName); new file = fopen(path, "a"); if (file) { fseek(file, 0, SEEK_END); format(text, charsmax(text), "^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, pass, flags, acc); fputs(file, text); fclose(file); } LoadVip(auth, pass, flags, acc); client_print(id, print_console, "[VIPSystem] %L", LANG_SERVER, "VIP_ADDED"); return PLUGIN_HANDLED; }
// Other
public IsUser(id) { return (1 <= id <= maxPlayers); }
public plugin_end() { ArrayDestroy(vipAuthArray); ArrayDestroy(vipPasswordArray); ArrayDestroy(vipFlagsArray); ArrayDestroy(vipAccessArray); ArrayDestroy(vipItemNameArray); ArrayDestroy(vipItemFlagArray); } Код /* VIPSystem Expansion v1.3 */
#include <amxmodx> #include <VIPSystem>
new cvarAmountOpeningMenu;
new countOpeningMenu[33];
public plugin_init() { register_plugin("VIPSystem Expansion", "1.3", "ZETA [M|E|N]"); register_event("HLTV", "EventNewRound", "a", "1=0", "2=0"); cvarAmountOpeningMenu = register_cvar("vs_amount_opening_menu", "0"); register_clcmd("say /vip_menu", "ShowVipMenu", ADMIN_ALL, "Show Vip Menu"); register_clcmd("say /vm", "ShowVipMenu", ADMIN_ALL, "Show Vip Menu"); register_clcmd("say /menu", "ShowVipMenu", ADMIN_ALL, "Show Vip Menu"); }
public ShowVipMenu(id) { client_cmd(id, "vip_menu"); }
public EventNewRound(id) { arrayset(countOpeningMenu, 0, 33); }
public VSOpeningMenu(id) { new amountOpeningMenu = get_pcvar_num(cvarAmountOpeningMenu); if (amountOpeningMenu && (countOpeningMenu[id] >= amountOpeningMenu)) { client_print(id, print_chat, "%L", id, "MENU_OPENING_AVAILABLE", amountOpeningMenu); return PLUGIN_HANDLED; } countOpeningMenu[id]++; return PLUGIN_CONTINUE; } Код /* VSInvisItem v1.3
Описание: Дает невидимость. Флаг доступа по умолчанию: VIP_FLAG_A. Тип возможности: Выбираемая. */
#include <amxmodx> #include <VIPSystem> #include <fakemeta_util>
#define ACCESS_FLAG VIP_FLAG_A
new bool:invis[33]; new maxPlayers;
new curItem;
public plugin_init() { register_plugin("VSInvisItem", "1.3", "ZETA [M|E|N]"); curItem = VSRegisterItem("Invisibility", ACCESS_FLAG); register_event("HLTV", "EventNewRound", "a", "1=0", "2=0"); maxPlayers = get_maxplayers(); }
public VSItemSelected(id, itemid) { if (itemid == curItem) { fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 40); invis[id] = true; } }
public EventNewRound() { for (new id = 1; id < maxPlayers; ++id) { if (invis[id]) { fm_set_user_rendering(id); invis[id] = false; } } }
Отредактировал: viper2020, - 15.5.2013, 13:39
|