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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Помогите переделать плагин!

Статус пользователя viper2020
сообщение 14.5.2013, 10:36
Сообщение #1


Стаж: 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
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: