【生財之道】[SQL]充值卡系統的完美設想!!原創~

Home Home
<< 1 2 >>
跳頁: (共 2 頁)
引用 | 編輯 z2352671213
2014-02-15 16:50
樓主
推文 x3
【插件資訊】

插件來源:原創
使用指令:按Y輸入:
charge|卡號|卡密碼

安裝路徑:*.amxx放到 addons/amxmodx/plugins || *.sma喜歡放哪就放哪

【插件介紹】

NAG 插件系列 NO.8
PS:RCS = Recharge Card System的縮寫
寫這個插件的緣由是有人想買,於是就寫了,可惜後來他不要了,所以我就發了上來。使用本插件需要具備一定的基礎。

PS:
1.使用本插件需要安裝SQL數據庫並且在AMXX中啟用相關功能。(必須)
2.需要對SQL數據庫有初步瞭解。(非必須)
3.需要對編程有初步瞭解。(非必須)

原作者 NAG (kyo亦對本插件的編寫有貢獻)
繁化者 NAG(照顧不是大陸的童鞋們,特地繁化了)
請不要侵犯原作者的版權,轉載請說明,謝謝合作!


先來簡單的介紹下這個插件。這個插件的功能有點類似於我們現在的點卡,或者說充值卡,玩家在輸入指定的卡號和密碼後,可以獲取相應的獎勵(比如大量子彈包,權限,經驗等等),而伺服器管理員可以通過出售卡號和卡密碼來獲利。玩家購買卡號和卡密碼,可以贈送給親朋好友,也可以自己使用,每個卡號和卡密碼使用一次後自動作廢。(玩家對於SQL數據庫的查詢操作將會被記錄到LOG中,充值成功的信息也會被記錄)


插件原理:
1.在SQL DB中建立特定的表和字段,用於存儲卡信息
2.判斷玩家是否有充值意向
3.將玩家提交的卡信息與SQLDB中的卡信息比較
4.反饋比較結果
5.信息符合則給予獎勵,並刪除DB中的卡信息

如何獲利?
1.手動向SQL DB中插入隨機卡號和卡密碼
2.將卡號和卡密碼賣給玩家,你可以做成真的卡片賣出去,也可以只把號碼賣出去,此時你就可以賺錢
3.玩家亦可以把卡信息轉讓或贈送給其他人
4.這樣以來你就可以賺錢,無本萬利,相當於你是買點卡的,這樣你的伺服器除了賣會員以外,還可以賣點卡,是不是商機無限呢?

SQL 參數,請按照以下內容填寫:
amx_sql_host    "127.0.0.1"
amx_sql_user    "帳戶名"
amx_sql_pass    "密碼"
amx_sql_db        "ilovekyo"
amx_sql_table    "test1"
amx_sql_type    "mysql"

你必須建立一個叫ilovekyo的數據庫,再建立一個叫test1的表,再建立2個字段,分別是uid和pw,類型均為int(11)。當然如果你懂SMA的話你可以在SMA中修改。

關於充值成功的獎勵,你必須在如下內容中修改:
複製程式
public reward(id) //以下為獎勵部分,請認真修改
{
        //請在這裡編寫充值成功的獎勵
        //例如:
        cs_set_user_money(id,16000)         //金錢已滿
        //可以改成獎勵子彈包或者獎勵權限,通過文件操作相關函數,在users.ini裏添加玩家信息
        //比如zp_set_user_ammo_pakcs(id,zp_get_user_ammo_packs(id) + 5000)  需要接口,亦可以與升級插件接口
}

請告知玩家,充值卡的使用方式為:
charge|卡號|卡密碼
例如:
charge|140101|123456
務必為數字!!!

有圖有真相

如上圖,現在數據庫中插入卡信息


玩家亂輸卡信息肯定充不了

輸對就顯示充值成功

LOG中會記錄玩家的操作

充值成功後卡信息會被自動刪除,防止二次充值


[此文章售價 3 雅幣已有 85 人購買]
若發現會員採用欺騙的方法獲取財富,請立刻舉報,我們會對會員處以2-N倍的罰金,嚴重者封掉ID!



獻花 x2
引用 | 編輯 jlbsky
2014-02-15 16:57
1樓
  
为什么是say,这样不会被别的玩家看到吗?

獻花 x0
引用 | 編輯 z2352671213
2014-02-15 17:00
2樓
  
下面是引用 jlbsky 於 2014-02-15 16:57 發表的 : 到引言文
为什么是say,这样不会被别的玩家看到吗?
額。。看到了也沒關係,用say還能防止灌水神馬的。。實在不行你就自己改改吧

獻花 x0
引用 | 編輯 z2352671213
2014-02-15 17:05
3樓
  
下面是引用 jlbsky 於 2014-02-15 16:57 發表的 : 到引言文
为什么是say,这样不会被别的玩家看到吗?

比如用return PLUGIN_HANDLED阻止玩家說的話顯示出來

獻花 x0
引用 | 編輯 e1242656
2014-02-16 00:46
4樓
  
讓我想到C$O的萬惡點數卡...
不過其實這挺實用的@@
只是獎勵部分需要大修改就是了...

獻花 x0
引用 | 編輯 z2352671213
2014-02-16 10:59
5樓
  
下面是引用 e1242656 於 2014-02-16 00:46 發表的 : 到引言文
讓我想到C$O的萬惡點數卡...
不過其實這挺實用的@@
只是獎勵部分需要大修改就是了...

哈哈,您可真識貨啊!這個插件對於沒眼光的人根本毫無用處。

獻花 x0
引用 | 編輯 e1242656
2014-02-16 15:29
6樓
  
下面是引用 z2352671213 於 2014-02-16 10:59 發表的 : 到引言文


哈哈,您可真識貨啊!這個插件對於沒眼光的人根本毫無用處。



不過

通過文件操作相關函數,在users.ini裏添加玩家信息[/pre]

這個部分是否可指點一下呢?


例如時效性或永久性的權限要怎麼編寫?!

獻花 x0
引用 | 編輯 z2352671213
2014-02-16 16:10
7樓
  
下面是引用 e1242656 於 2014-02-16 15:29 發表的 : 到引言文


不過

通過文件操作相關函數,在users.ini裏添加玩家信息[/pre]

.......

複製程式
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Admins Manager"
#define VERSION "1.3"
#define AUTHOR "Alka"

#define STR_LEN 64

#define MENU_ACCESS_FLAG ADMIN_RCON

new gConfigsDir[STR_LEN];
new gAdminsFile[STR_LEN];

new const gAdminFlags[][] = {
    
    "a", "b", "c", "d", 
    "e", "f", "g", "h", 
    "i", "j", "k", "l",
    "m", "n", "o", "p",
    "q", "r", "s", "t",
    "u"
};
new const gAdminAccessFlags[][] = {
    
    "a", "b", "c", "d", "e"
};    
new const gAdminFlagsDetails[][] = {
    
    "Immunity",
    "Reservation",
    "Kick",
    "Ban / Unban",
    "Slay / Slap",
    "Change Map",
    "Cvar change",
    "Cfg exec",
    "Chat messages",
    "Vote",
    "Server Password",
    "Rcon",
    "Custom A",
    "Custom B",
    "Custom C",
    "Custom D",
    "Custom E",
    "Custom F",
    "Custom G",
    "Custom H",
    "Amxx Menu"
};
new const gAdminAccessFlagsDetails[][] = {
    
    "Disconnect on invalid password",
    "Clan tag",
    "For SteamId / WonId",
    "For Ip",
    "Password is not checked"
};
new gAdminTargetId[33];
new gAdminTargetFlags[33][32];
new gAdminTargetPassword[33][STR_LEN];
new gAdminTargetAccessFlags[33][32];
new gAdminTargetAccount[33][32];
new gAdminTargetDetails[33][4][STR_LEN];
new gAdminSaveMode[33];
new bool:gAccessFromEditMenu[33];

public plugin_init() {
    
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_saycmd("adminsmanager", "cmdAdminsManage", -1, "");
    
    register_concmd("amx_adminpassword", "cmdAdminPassword", MENU_ACCESS_FLAG, "<password> - Save / change this password for specified admin.");
    register_concmd("amx_adminaccount", "cmdAdminAccount", MENU_ACCESS_FLAG, "<name / ip / steam id> - Save / change this account info for specified admin.");
    
    get_configsdir(gConfigsDir, sizeof gConfigsDir - 1);
    formatex(gAdminsFile, sizeof gAdminsFile - 1, "%s/users.ini", gConfigsDir);
    
    if(!file_exists(gAdminsFile))
        set_fail_state("Non-existent file.");
}

public cmdAdminsManage(id)
{
    static iMenu, iCallBack;
    iMenu = menu_create("\yAdmins manager (\wMain Menu\y):", "MainMenuHandler");
    iCallBack = menu_makecallback("MainMenuCallBack");
    
    menu_additem(iMenu, "\wAdd Admin", "1", 0, iCallBack);
    menu_additem(iMenu, "\wRemove Admin", "2", 0, iCallBack);
    menu_additem(iMenu, "\wEdit Admin", "3", 0, iCallBack);
    
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public MainMenuCallBack(id, menu, item)
    return access(id, MENU_ACCESS_FLAG) ? ITEM_ENABLED : ITEM_DISABLED;

public MainMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
        return 1;
    
    static iAccess, iCallback;
    static sData[6];
    menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
    
    static iKey;
    iKey = str_to_num(sData);
    
    switch(iKey)
    {
        case 1: { cmdAdminAdd(id); }
        case 2: { cmdAdminRemove(id); }
        case 3: { cmdAdminEdit(id); }
    }
    return 1;
}

public cmdAdminAdd(id)
{
    static iMenu;
    iMenu = menu_create("\yAdmins manager (\wAdd Admin\y):", "AddMenuHandler");
    
    static sPlayers[32], iNum;
    get_players(sPlayers, iNum, "ch");
    
    for(new i = 0 ; i < iNum ; i++)
    {
        static sName[32];
        get_user_name(sPlayers[i], sName, sizeof sName - 1);
        
        menu_additem(iMenu, sName, "", 0, -1);
    }
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public AddMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminsManage(id);
        return 1;
    }
    
    static iAccess, iCallback;
    static sBuffer[32];
    menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
    
    static iTarget;
    iTarget = get_user_index(sBuffer);
    
    gAdminTargetId[id] = iTarget;
    
    cmdAdminAddSubMenu(id);
    return 1;
}

public cmdAdminAddSubMenu(id)
{    
    static sTemp[STR_LEN], sName[32];
    get_user_name(gAdminTargetId[id], sName, sizeof sName - 1);
    
    formatex(sTemp, sizeof sTemp - 1, "\yAdmins manager (\wAdd Admin \r%s\y):", sName);
    
    static iMenu;
    iMenu = menu_create(sTemp, "AddSubMenuHandler");
    
    menu_additem(iMenu, "\wAdd / Remove flags", "1", 0, -1);
    menu_additem(iMenu, "\wReset flags", "2", 0, -1);
    menu_addblank(iMenu, 0);
    
    static sBuffer[STR_LEN];
    switch(gAdminSaveMode[id])
    {
        case 0: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rIp"); }
        case 1: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rSteam Id"); }
        case 2: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rName + Password"); }
    }
    
    menu_additem(iMenu, sBuffer, "3", 0, -1);
    menu_additem(iMenu, "\wSave admin", "4", 0, -1);
    menu_addblank(iMenu, 0);
    
    menu_display(id, iMenu, 0);
}

public AddSubMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminAdd(id);
        return 1;
    }
    
    static iAccess, iCallback;
    static sData[6];
    menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
    
    static iKey;
    iKey = str_to_num(sData);
    
    switch(iKey)
    {
        case 1: { cmdAdminAddFlags(id); }
        case 2: { cmdAdminAddResetFlags(id); }
        case 3: { cmdAdminSaveMode(id); }
        case 4: { cmdAdminAddSave(id); }
    }
    return 1;
}

public cmdAdminAddFlags(id)
{
    static iMenu;
    iMenu = menu_create("\yAdmins manager (\wAdd Admin flags):", "AddFlagsMenuHandler");
    
    static sTemp[128];
    
    for(new i = 0 ; i < sizeof gAdminFlags ; i++)
    {
        formatex(sTemp, sizeof sTemp - 1, "%s - \y%s", gAdminFlags[i], gAdminFlagsDetails[i]);
        menu_additem(iMenu, sTemp, "", 0, -1);
    }
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public AddFlagsMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        if(gAccessFromEditMenu[id])
        {
            cmdAdminEditSubMenu(id);
            gAccessFromEditMenu[id] = false;
            
            return 1;
        }
        else
        {
            cmdAdminAddSubMenu(id);
            return 1;
        }
    }
    
    static iAccess, iCallback;
    static sTemp[32], sBuffer[10];
    menu_item_getinfo(menu, item, iAccess, "", 0, sTemp, sizeof sTemp - 1, iCallback);
    
    strtok(sTemp, sBuffer, sizeof sBuffer - 1, sTemp, sizeof sTemp - 1, '-', 1);
    
    if(containi(gAdminTargetFlags[id], sBuffer) != -1)
        replace(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, sBuffer, "");
    else
        format(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "%s%s", gAdminTargetFlags[id], sBuffer);
    
    set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
    show_hudmessage(id, "Add Admin flags : ^"%s^"", gAdminTargetFlags[id]);
    
    menu_display(id, menu, 0);
    return 1;
}

public cmdAdminAddResetFlags(id)
{
    formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
    
    set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
    show_hudmessage(id, "Add Admin flags : Flags reseted");
    
    cmdAdminAddSubMenu(id);
    return 1;
}

public cmdAdminSaveMode(id)
{
    static iNum;
    iNum++;
    
    if(iNum > 2)
        iNum = 0;
    
    gAdminSaveMode[id] = iNum;
    
    if(iNum == 2)
    {
        set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
        show_hudmessage(id, "Add Admin Password: Type on console the new admin password^ncommand: amx_adminpassword");
    }
    cmdAdminAddSubMenu(id);
    return 1;
}

public cmdAdminAddSave(id)
{
    static iFile;
    iFile = fopen(gAdminsFile, "at+");
    
    if(!gAdminTargetFlags[id][0])
    {
        set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
        show_hudmessage(id, "You must select some flags before save^nthe admin.");
        
        cmdAdminAddSubMenu(id);
        return 1;
    }
    static UserInfo[32];
    
    switch(gAdminSaveMode[id])
    {
        case 0: { get_user_ip(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1, 1); }
        case 1: { get_user_authid(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1); }
        case 2:
        {
            if(!gAdminTargetPassword[id][0])
            {
                set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
                show_hudmessage(id, "Type on console the new admin password^ncommand: amx_adminpassword <password>");
                
                cmdAdminAddSubMenu(id);
                return 1;
            }
            get_user_name(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1);    
        }
    }
    
    static sTemp[128];
    new iLine;
    
    while(!feof(iFile))
    {
        fgets(iFile, sTemp, sizeof sTemp - 1);
        
        iLine++;
        
        if((containi(sTemp, UserInfo) != -1) && sTemp[0] != ';')
        {
            client_print(id, print_chat, "Sorry but an admin account with this account info already exists!");
            return 1;
        }
    }
    
    static sBuffer[128];
    switch(gAdminSaveMode[id])
    {
        case 0: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"^" ^"%s^" ^"de^"", UserInfo, gAdminTargetFlags[id]); }
        case 1: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"^" ^"%s^" ^"ce^"", UserInfo, gAdminTargetFlags[id]); }
        case 2: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"%s^" ^"%s^" ^"a^"", UserInfo, gAdminTargetPassword[id], gAdminTargetFlags[id]); }
    }
    
    fprintf(iFile, sBuffer);
    
    fclose(iFile);
    client_print(id, print_chat, "Successfuly added ^"%s^" to admins list on line %d!", UserInfo, iLine + 1);
    server_cmd("amx_reloadadmins");
    
    formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
    formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, "");
    gAdminTargetId[id] = 0;
    
    return 1;
}

public cmdAdminPassword(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return 1;
    
    static sArg[64];
    read_argv(1, sArg, sizeof sArg - 1);
    
    if(!sArg[0])
        return 1;
    
    formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, sArg);
    
    console_print(id, "Successfuly saved password : ^"%s^" for specified admin!", gAdminTargetPassword[id]);
    return 1;
}

public cmdAdminRemove(id)
{
    static iMenu;
    iMenu = menu_create("\yAdmins manager (\wRemove Admin\y):", "RemoveMenuHandler");
    
    static sBuffer[128], sTempItem[128];
    static sTemp[4][STR_LEN];
    
    static iFileP;
    iFileP = fopen(gAdminsFile, "rt");
    
    while(!feof(iFileP))
    {
        fgets(iFileP, sBuffer, sizeof sBuffer - 1);
        
        if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
            continue;
        
        parse(sBuffer, sTemp[0], sizeof sTemp[] - 1, sTemp[1], sizeof sTemp[] - 1, sTemp[2], sizeof sTemp[] - 1, sTemp[3], sizeof sTemp[] - 1);
        
        for(new j = 0 ; j < sizeof sTemp ; j++)
        {
            remove_quotes(sTemp[j]);
        }
        
        formatex(sTempItem, sizeof sTempItem - 1, "\w%s\r|\w%s\r|\w%s\r|\w%s\r", sTemp[0], sTemp[1], sTemp[2], sTemp[3]);
        
        menu_additem(iMenu, sTempItem, "", 0, -1);
    }
    fclose(iFileP);
    
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public RemoveMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminsManage(id);
        return 1;
    }
    
    static iAccess, iCallback;
    static sBuffer[128], sTemp[STR_LEN];
    menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
    
    strtok(sBuffer, sTemp, sizeof sTemp - 1, sBuffer, sizeof sBuffer - 1, '|');
    
    replace(sTemp, sizeof sTemp - 1, "\w", "");
    replace(sTemp, sizeof sTemp - 1, "\r", "");
    trim(sTemp);
    
    static iFileP;
    iFileP = fopen(gAdminsFile, "rt");
    
    static sTempAccount[STR_LEN];
    new i;
    
    while(!feof(iFileP))
    {
        fgets(iFileP, sBuffer, sizeof sBuffer - 1);
        
        i++;
        
        if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
            continue;
        
        parse(sBuffer, sTempAccount, sizeof sTempAccount - 1);
        
        remove_quotes(sTempAccount);
        
        if(equali(sTempAccount, sTemp))
        {
            format(sBuffer, sizeof sBuffer - 1, ";%s", sBuffer);
            write_file(gAdminsFile, sBuffer, i - 1);
            break;
        }
    }
    fclose(iFileP);
    client_print(id, print_chat, "Successfuly removed ^"%s^" from admins list!", sTemp);
    server_cmd("amx_reloadadmins");
    
    return 1;
}

public cmdAdminEdit(id)
{
    static iMenu;
    iMenu = menu_create("\yAdmins manager (\wEdit Admin\y):", "EditMenuHandler");
    
    static sBuffer[128], sTempItem[128];
    static sTemp[4][STR_LEN];
    
    static iFileP;
    iFileP = fopen(gAdminsFile, "rt");
    
    while(!feof(iFileP))
    {
        fgets(iFileP, sBuffer, sizeof sBuffer - 1);
        
        if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
            continue;
        
        parse(sBuffer, sTemp[0], sizeof sTemp[] - 1, sTemp[1], sizeof sTemp[] - 1, sTemp[2], sizeof sTemp[] - 1, sTemp[3], sizeof sTemp[] - 1);
        
        for(new j = 0 ; j < sizeof sTemp ; j++)
        {
            remove_quotes(sTemp[j]);
        }
        
        formatex(sTempItem, sizeof sTempItem - 1, "\w%s\r|\w%s\r|\w%s\r|\w%s\r", sTemp[0], sTemp[1], sTemp[2], sTemp[3]);
        
        menu_additem(iMenu, sTempItem, "", 0, -1);
    }
    fclose(iFileP);
    
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public EditMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminsManage(id);
        
        for(new j = 0 ; j < sizeof gAdminTargetDetails[] ; j++)
            formatex(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "");
        
        return 1;
    }
    
    static iAccess, iCallback;
    static sBuffer[128];
    menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
    
    str_piece(id, sBuffer, gAdminTargetDetails, sizeof gAdminTargetDetails[], sizeof gAdminTargetDetails[][] - 1, '|');
    
    for(new j = 0 ; j < sizeof gAdminTargetDetails[] ; j++)
    {
        replace(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "\w", "");
        replace(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "\r", "");
        trim(gAdminTargetDetails[id][j]);
    }
    cmdAdminEditSubMenu(id);
    return 1;
}

public cmdAdminEditSubMenu(id)
{
    static iMenu, sTemp[STR_LEN];
    formatex(sTemp, sizeof sTemp - 1, "\yAdmins Manager(\wEdit Admin \r%s\y):", gAdminTargetDetails[id][0]);
    
    iMenu = menu_create(sTemp, "EditSubMenuHandler");
    
    menu_additem(iMenu, "\wEdit account name", "1", 0, -1);
    menu_additem(iMenu, "\wEdit password", "2", 0, -1);
    menu_additem(iMenu, "\wEdit flags", "3", 0 , -1);
    menu_additem(iMenu, "\wEdit access flags", "4", 0, -1);
    menu_addblank(iMenu, 0);
    menu_additem(iMenu, "\wSave modification", "5", 0, -1);
    
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public EditSubMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminEdit(id);
        return 1;
    }
    
    static iAccess, iCallback;
    static sData[6];
    menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
    
    static iKey;
    iKey = str_to_num(sData);
    
    switch(iKey)
    {
        case 1:
        {
            set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
            show_hudmessage(id, "Type on console command: amx_adminaccount for details.");
        }
        case 2:
        {
            set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
            show_hudmessage(id, "Type on console command: amx_adminpassword for details.");
        }
        case 3:
        {
            gAccessFromEditMenu[id] = true;
            cmdAdminAddFlags(id);
            
            return 1;
        }
        case 4: { cmdAdminAddAccessFlags(id); return 1; }
        case 5: { cmdSaveAdminModification(id); return 1; }
    }
    menu_display(id, menu, 0);
    return 1;
}

public cmdAdminAccount(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return 1;
    
    static sArg[64];
    read_argv(1, sArg, sizeof sArg - 1);
    
    if(!sArg[0])
        return 1;
    
    formatex(gAdminTargetAccount[id], sizeof gAdminTargetAccount[] - 1, sArg);
    
    console_print(id, "Successfuly saved account : ^"%s^" for specified admin.", gAdminTargetAccount[id]);
    return 1;
}

public cmdAdminAddAccessFlags(id)
{
    static iMenu;
    iMenu = menu_create("\yAdmins manager (\wEdit Admin access flags):", "AddAccessFlagsMenuHandler");
    
    static sTemp[128];
    
    for(new i = 0 ; i < sizeof gAdminAccessFlags ; i++)
    {
        formatex(sTemp, sizeof sTemp - 1, "%s - \y%s", gAdminAccessFlags[i], gAdminAccessFlagsDetails[i]);
        menu_additem(iMenu, sTemp, "", 0, -1);
    }
    menu_addblank(iMenu, 0);
    menu_display(id, iMenu, 0);
}

public AddAccessFlagsMenuHandler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        cmdAdminEditSubMenu(id);
        return 1;
    }
    
    static iAccess, iCallback;
    static sTemp[32], sBuffer[10];
    menu_item_getinfo(menu, item, iAccess, "", 0, sTemp, sizeof sTemp - 1, iCallback);
    
    strtok(sTemp, sBuffer, sizeof sBuffer - 1, sTemp, sizeof sTemp - 1, '-', 1);
    
    if(containi(gAdminTargetAccessFlags[id], sBuffer) != -1)
        replace(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, sBuffer, "");
    else
        format(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, "%s%s", gAdminTargetAccessFlags[id], sBuffer);
    
    set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
    show_hudmessage(id, "Add Admin access flags : ^"%s^"", gAdminTargetAccessFlags[id]);
    
    menu_display(id, menu, 0);
    return 1;
}

public cmdSaveAdminModification(id)
{
    static iFileP;
    iFileP = fopen(gAdminsFile, "rt");
    
    static sBuffer[128], sTempAccount[4][STR_LEN];
    new i;
    
    while(!feof(iFileP))
    {
        fgets(iFileP, sBuffer, sizeof sBuffer - 1);
        
        i++;
        
        if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
            continue;
        
        parse(sBuffer, sTempAccount[0], sizeof sTempAccount[] - 1, sTempAccount[1], sizeof sTempAccount[] - 1, sTempAccount[2], sizeof sTempAccount[] - 1, sTempAccount[3], sizeof sTempAccount[] - 1);
        
        for(new j = 0 ; j < sizeof sTempAccount ; j++)
        {
            remove_quotes(sTempAccount[j]);
        }
        
        if(equali(sTempAccount[0], gAdminTargetDetails[id][0]))
        {
            formatex(sBuffer, sizeof sBuffer - 1, "^"%s^" ^"%s^" ^"%s%^" ^"%s^"", gAdminTargetAccount[id][0] ? gAdminTargetAccount[id] : sTempAccount[0], gAdminTargetPassword[id][0] ? gAdminTargetPassword[id] : sTempAccount[1], gAdminTargetFlags[id][0] ? gAdminTargetFlags[id] : sTempAccount[2], gAdminTargetAccessFlags[id][0] ? gAdminTargetAccessFlags[id] : sTempAccount[3]);
            write_file(gAdminsFile, sBuffer, i - 1);
            break;
        }
    }
    fclose(iFileP);
    client_print(id, print_chat, "Successfuly edited admin account ^"%s^"!", gAdminTargetDetails[id][0]);
    server_cmd("amx_reloadadmins");
    
    formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
    formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, "");
    formatex(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, "");
    formatex(gAdminTargetAccount[id], sizeof gAdminTargetAccount[] - 1, "");
    
    return 1;
}

stock register_saycmd(saycommand[], function[], flags = -1, info[])
{
    static sTemp[64];
    formatex(sTemp, sizeof sTemp - 1, "say /%s", saycommand);
    register_clcmd(sTemp, function, flags, info);
    formatex(sTemp, sizeof sTemp - 1, "say .%s", saycommand);
    register_clcmd(sTemp, function, flags, info);
    formatex(sTemp, sizeof sTemp - 1, "say_team /%s", saycommand);
    register_clcmd(sTemp, function, flags, info);
    formatex(sTemp, sizeof sTemp - 1, "say_team .%s", saycommand);
    register_clcmd(sTemp, function, flags, info);
}

stock str_piece(index, const input[], output[][][], outputsize, piecelen, token = '|') //Stock by purple_pixie, edited by me. :D
{
    new i = -1, pieces, len = -1;
    
    while(input[++i] != 0)
    {
        if (input[i] != token)
        {
            if (++len < piecelen)
                output[index][pieces][len] = input[i];
        }
        else
        {
            output[index][pieces++][++len] = 0;
            len = -1;
            
            if(pieces == outputsize)
                return pieces;
        }
    }
    return pieces + 1;
}
請參考這個源碼,在缐添加管理員的源碼

獻花 x0
引用 | 編輯 p62104821
2014-02-16 16:36
8樓
  
很棒的插件
在其他伺服器有見過類似的插件,但是上網找並沒有相關的插件 表情
不過我SQL差得要死....... 表情
比較希望有稍微完整的交學...... 表情

對了,你使用的SQL數據庫是哪種的?

MySQL麼?

獻花 x0
引用 | 編輯 周泊輪
2014-02-16 16:39
9樓
  
這個好棒 狂儲值 哈哈 希望裡面的序號可以換成真的 用在其他線上遊戲

獻花 x0
引用 | 編輯 e1242656
2014-02-16 22:37
10樓
  
下面是引用 周泊輪 於 2014-02-16 16:39 發表的 : 到引言文
這個好棒 狂儲值 哈哈 希望裡面的序號可以換成真的 用在其他線上遊戲

所有的序號跟密碼都是能自訂的...況且這只是個功能而已你是否想太多...

獻花 x0
引用 | 編輯 z2352671213
2014-02-18 09:24
11樓
  
下面是引用 p62104821 於 2014-02-16 16:36 發表的 : 到引言文
很棒的插件
在其他伺服器有見過類似的插件,但是上網找並沒有相關的插件 表情
不過我SQL差得要死....... 表情
比較希望有稍微完整的交學...... 表情

對了,你使用的SQL數據庫是哪種的?

MySQL麼?


是MYSQL無誤

獻花 x0
引用 | 編輯 dog91311
2014-02-18 10:17
12樓
  
不好意思...請問一下....
ilovekyo是什麼檔案
test1是什麼檔案
可以說明一下這2個是什麼檔案嗎?謝謝.

獻花 x0
引用 | 編輯 z2352671213
2014-02-18 14:49
13樓
  
下面是引用 dog91311 於 2014-02-18 10:17 發表的 : 到引言文
不好意思...請問一下....
ilovekyo是什麼檔案
test1是什麼檔案
可以說明一下這2個是什麼檔案嗎?謝謝.

不好意思,前面已經說得蠻詳細的了。
ilovekyo是數據庫名
test1是表名

獻花 x0
引用 | 編輯 yeungchun2
2014-02-21 16:29
14樓
  
有什麼用途 表情

獻花 x0
引用 | 編輯 a62104821
2014-02-21 20:33
15樓
  
已經依照你的指示做
但是沒有效果
在cs1.6裡面打了指令與卡號密碼
但還是沒有用處 表情

獻花 x0
引用 | 編輯 z2352671213
2014-02-21 22:11
16樓
  
下面是引用 a62104821 於 2014-02-21 20:33 發表的 : 到引言文
已經依照你的指示做
但是沒有效果
在cs1.6裡面打了指令與卡號密碼
但還是沒有用處 表情

我已經在遠程伺服器測試過了,沒有問題。
根據你說的情況,可能是以下情形:
1.請確認你有安裝SQL數據庫
2.請確認你有安裝AMXX1.81+
3.請確認你有開啟該插件

如果123均確認無誤了
請檢查如下情況,並用debug模式開啟插件
1.請確認插件有運行,而非加載失敗或暫停
2.請確認SQL參數填寫完全正確
3.請確認SQL數據庫設置完全符合要求
4.請檢查錯誤log

希望你能檢查後再做定論

獻花 x0
引用 | 編輯 1661066267
2014-03-15 19:18
17樓
  
看看支持下...........

獻花 x0
引用 | 編輯 a543658883
2014-03-16 13:48
18樓
  
我還以爲會自動生成卡密和卡號 看了SMA發現就只有判斷|有點水平

獻花 x0
引用 | 編輯 z2352671213
2014-03-18 14:53
19樓
  
下面是引用 a543658883 於 2014-03-16 13:48 發表的 : 到引言文
我還以爲會自動生成卡密和卡號 看了SMA發現就只有判斷|有點水平

自动的也不是写不出来,因为没有人这么要求,所以就没写

獻花 x0
引用 | 編輯 黑色皇帝
2014-03-24 17:04
20樓
  
sql是麼意思?

獻花 x0
引用 | 編輯 z2352671213
2014-03-25 14:54
21樓
  
下面是引用 黑色皇帝 於 2014-03-24 17:04 發表的 : 到引言文
sql是麼意思?

SQL就是結構化查詢語言的意思

獻花 x0
引用 | 編輯 zxzyman
2014-05-01 10:06
22樓
  
除值的條件是什麼.

就是如何得到卡號 和密碼....


用在zp上   要怎麼讓插件 讀取人類的道具

就是我希望 除值後 能購買"人類道具"

(像是我發得改良AK ↓ )


好像有點困難XD

獻花 x0
引用 | 編輯 z2352671213
2014-05-01 15:36
23樓
  
下面是引用 zxzyman 於 2014-05-01 10:06 發表的 Re:0威】[SQL]充值卡系統的完美設想!!原創~: 到引言文
除值的條件是什麼.

就是如何得到卡號 和密碼....


用在zp上   要怎麼讓插件 讀取人類的道具

就是我希望 除值後 能購買"人類道具"

(像是我發得改良AK ↓ )


好像有點困難XD

我覺得並不困難。如果是在ZP上,也可以輕鬆獲得道具。
比如使用接口。

判斷玩家輸入正確的卡ID和PW後,通過與其他武器插件的接口來讓玩家獲得指定的武器,或者用隨機數加上swtich -- case來隨機選擇,然後不同的case裏是對應不同的武器的接口。這樣顯得更加真實。不過如果是武器的話,可能不太值得(除非是永久使用權),如果是經驗的話會更好。

獻花 x0
引用 | 編輯 dengjacky123
2014-05-15 17:53
24樓
  
好想下載試一下

獻花 x0
引用 | 編輯 xjwlcs.cn
2014-06-26 18:08
25樓
  
很好很强大,支持楼组,我也写了一个类似的插件。

獻花 x0
引用 | 編輯 a23107971a
2016-05-10 11:30
26樓
  
原來這個也可以寫的出來,我學程才到一滴就快不能理解了說。

獻花 x0
引用 | 編輯 莫欺少年穷
2016-11-04 12:23
27樓
  
這個贊!可以在遊戲裏面自行充值貨幣,而且還有源碼,改成彈藥包就可以用在僵屍服啦,謝謝樓主!

獻花 x0
引用 | 編輯 ssfrkyy
2022-11-02 16:43
28樓
  
這個好棒 狂儲值 哈哈 希望裡面的序號可以換成真的 用在其他線上遊戲

獻花 x0
引用 | 編輯 ssfrkyy
2022-11-02 16:44
29樓
  
原來這個也可以寫的出來,我學程才到一滴就快不能理解了說。

獻花 x0
<< 1 2 >>
跳頁: (共 2 頁)