AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   ZP Bank Help Please! (https://forums.alliedmods.net/showthread.php?t=209247)

DJ Fox 02-23-2013 08:16

ZP Bank Help Please!
 
eai staff, good morning / good afternoon / good night

was giving some adjustments in my database plugin for ZP
only looking at what's happening

Example: I have 10 in my account and after i put 20 to withdraw
he says I'm not talking and then I drew 20 ap
I would like to remove it?
Same thing happens to deposit

help me please, I'm trying to learn to make plugins now =)

[IMG]http://img600.**************/img600/9543/imagem02b.png[/IMG]
[IMG]http://img145.**************/img145/5409/imagem01.png[/IMG]

plugin:
Code:

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <fakemeta>
#include <colorchat>
#include <zombieplague>

static const version[] = "0.4";
static const plugin[] = "[ZP]: Auto-save Bank(Name)";
static const prefix[] = "Banco"

enum pcvar
{
        enable = 0,
        cap,
        start
}

new pcvars[pcvar];
new bankstorage[33];

new gvault, thinkobj;

public plugin_init()
{
        register_plugin(plugin, version, "Random1, suNx, 93()|29!/<");
       
        gvault = nvault_open("ZombieBankName");
       
        pcvars[enable] =                        register_cvar("zp_bank", "1");
        pcvars[cap] =                        register_cvar("zp_bank_limit", "1000000");
        pcvars[start] =                        register_cvar("zp_bank_blockstart", "0");
       
        if (get_pcvar_num(pcvars[cap]) > 2147483646)
        {
                set_pcvar_num(pcvars[cap], 2147483646);
                server_print("[%s] Due to a 32 bit restriction in perl zp_ammo_limit reset based on restriction", plugin);
        }
       
        register_clcmd("say", "handle_say");
        register_clcmd("say_team", "handle_say");
       
        thinkobj = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
        if (pev_valid(thinkobj))
        {
                set_pev(thinkobj, pev_classname, "advertisement_loop");
                set_pev(thinkobj, pev_nextthink, get_gametime() + 240.0);
                register_forward(FM_Think, "fourmin_think");
        }
}
public fourmin_think(ent)
{
        if (ent != thinkobj)
                return FMRES_IGNORED;
       
        if (!get_pcvar_num(pcvars[enable]))
                return FMRES_IGNORED;
       
        ColorChat(0, GREEN, "[%s]^x01 Enabled.^x03 %d^x01 is the storage limit", prefix, get_pcvar_num(pcvars[cap]));
        ColorChat(0, GREEN, "[%s]^x01 Bank saves^x03 automaticly", prefix);
        ColorChat(0, GREEN, "[%s]^x01 To retrieve your ammo packs type^x03 withdraw <amount>", prefix);
        ColorChat(0, GREEN, "[%s]^x01 Auto save is^x03 enabled", prefix);
       
        set_pev(ent, pev_nextthink, get_gametime() + 240.0);
       
        return FMRES_HANDLED;       
}
public plugin_end()
        nvault_close(gvault);
       
public handle_say(id)
{
        if (!get_pcvar_num(pcvars[enable]))
                return PLUGIN_CONTINUE;
       
        new text[70], arg1[32], arg2[32], arg3[6];
        read_args(text, sizeof(text)-1);
        remove_quotes(text);
        arg1[0] = '^0';
        arg2[0] = '^0';
        arg3[0] = '^0';
        parse(text, arg1, sizeof(arg1)-1, arg2, sizeof(arg2)-1, arg3, sizeof(arg3)-1);
        //dbg_log("cmd_say() arg1:#%s# arg2:#%s# arg3:#%s#", arg1, arg2, arg3);

        // if the chat line has more than 2 words, we're not interested at all
        if (arg3[0] == 0)
        {
                //strip forward slash if present
                if (equali(arg1, "/", 1))
                        format(arg1, 31, arg1[1]);
               
                if (equali(arg1, "depositar", 7) || equali(arg1, "depositar", 4) || equali(arg1, "store", 5))
                {
                        if (isdigit(arg2[0]) || (arg2[0] == '-' && isdigit(arg2[1])))
                        {
                                new value = str_to_num(arg2);
                                store_cash(id, value);
                                ColorChat(id, GREEN, "[%s]^x01 Voce depositou^x03 %d^x01 AP na sua conta", prefix, value)
                                return PLUGIN_HANDLED;
                        }
                        else if (equali(arg2, "all"))
                        {
                                store_cash(id, -1);
                                ColorChat(id, GREEN, "[%s]^x01 Voce depositou^x03 todos^x01 AP", prefix)
                                return PLUGIN_HANDLED;
                        }                               
                        else if (arg2[0] == 0)
                                ColorChat(id, GREEN, "[%s]^x01 Para depositar Ammo Packs digite^x03 /depositar <quantia>", prefix);
                       
                        return PLUGIN_CONTINUE;
                }
                else if (equali(arg1, "sacar", 8) || equali(arg1, "sacar", 4) || equali(arg1, "retrieve", 8))
                {
                        if (isdigit(arg2[0]) || (arg2[0] == '-' && isdigit(arg2[1])))
                        {
                                new value = str_to_num(arg2);
                                take_cash(id, value);
                                ColorChat(id, GREEN, "[%s]^x01 Voce sacou^x03 %d^x01 AP da sua conta", prefix, value)
                                return PLUGIN_HANDLED;
                        }
                        else if (equali(arg2, "all"))
                        {
                                take_cash(id, -1);
                                ColorChat(id, GREEN, "[%s]^x01 Voce sacou^x03 todos^x01 AP da sua conta", prefix)
                                return PLUGIN_HANDLED;
                        }
                        else if (arg2[0] == 0)
                                ColorChat(id, GREEN, "[%s]^x01 Para sacar Ammo Packs digite^x03 /sacar <quantia>", prefix);
                       
                        return PLUGIN_CONTINUE;
                }
                else if (equali(arg1, "conta", 6) || equali(arg1, "banco", 7) || equali(arg1, "banco", 4))
                {
                        if (arg2[0] == 0)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Voce tem^x03 %d^x01 AP na sua conta", prefix, bankstorage[id]);
                                return PLUGIN_HANDLED;
                        }
                        else
                        {
                                new player = cmd_target(id, arg2, 2);
                                if (!player)
                                        return PLUGIN_CONTINUE;
                               
                                static playername[32];
                                get_user_name(player, playername, 31);
                                ColorChat(id, GREEN, "[%s]^x03 %s^x01 tem^x04 %d^x01 Ammo Packs", prefix, playername, bankstorage[player]);
                                return PLUGIN_HANDLED;
                        }
                }
        }
       
        return PLUGIN_CONTINUE;
}

//public zp_user_disconnect_pre(id)
public client_disconnect(id)
{
        store_cash(id, -1);
       
        if (bankstorage[id] > 0)
                save_data(id);
}

//public zp_user_connect_post(id)
public client_connect(id)
{       
        bankstorage[id] = 0;        //clear residual before loading
        retrieve_data(id);
}

store_cash(id, amnt)
{
        if (!get_pcvar_num(pcvars[enable]))
                return;
       
        if (amnt == -1)
        {
                bankstorage[id] += zp_get_user_ammo_packs(id);
                zp_set_user_ammo_packs(id, 0);
                checkmax(id);
        }
        else if (amnt > 0)
        {               
                new temp = zp_get_user_ammo_packs(id);
                new limit = get_pcvar_num(pcvars[cap]);
                if (temp >= amnt)
                {                       
                        if (bankstorage[id] + amnt <= limit)
                        {
                                bankstorage[id] += amnt
                                zp_set_user_ammo_packs(id, temp - amnt);
                        }
                        else
                        {
                                new overflow = bankstorage[id] + amnt - limit;
                                bankstorage[id] = limit;
                                zp_set_user_ammo_packs(id, temp - amnt + overflow);
                                ColorChat(id, GREEN, "[%s]^x01 Your bank account has reached it's maximium capacity of^x03 %d", prefix, limit);
                                ColorChat(id, GREEN, "[%s]^x01 Only^x03 %d^x01 of the^x04 %d^x01 you specified to deposit have been deposited", prefix, amnt - overflow, amnt);
                        }
                }
                else
                        ColorChat(id, GREEN, "[%s]^x01 Voce nao tem (^x03%d^x01) AP para depositar na sua conta", prefix, amnt, temp);                       
        }
        else
                take_cash(id, -amnt);
}

take_cash(id, amnt)
{
        if (!get_pcvar_num(pcvars[enable]))
                return;
       
        if (amnt == 0) //otherwise a non terminal loop is possible
                return;
       
        if (amnt == -1)
        {
                zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + bankstorage[id])
                bankstorage[id] = 0;
        }
        else if (amnt > 0)
        {
                if (bankstorage[id] >= amnt)
                {
                        zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + amnt);
                        bankstorage[id] -= amnt;
                }
                else {
                        ColorChat(id, GREEN, "[%s]^x01 Voce nao tem (^x03%d^x01) AP para sacar da sua conta!", prefix, amnt, bankstorage[id]);               
                }       
        }
        else store_cash(id, -amnt);
}

save_data(id)
{
        new Name[35];
        get_user_name(id, Name, 34);
        new vaultkey[40], vaultdata[13];
       
        formatex(vaultkey, 39, "__%s__", Name);
        formatex(vaultdata, 12, "%i", bankstorage[id]);

        nvault_set(gvault, vaultkey, vaultdata);
}

retrieve_data(id)
{
        new Name[35];
        get_user_name(id, Name, 34);
        new vaultkey[40], vaultdata[13];
       
        format(vaultkey, 39, "__%s__", Name);

        nvault_get(gvault, vaultkey, vaultdata, 12);
               
        bankstorage[id] = str_to_num(vaultdata);
        checkmax(id);       
       
        // If they have an account don't allow zombie mod to give them 5 ammo packs at beggining
        if (get_pcvar_num(pcvars[start]) && bankstorage[id] > 0)
                zp_set_user_ammo_packs(id, 0);
}

checkmax(id)
{
        if (bankstorage[id] > get_pcvar_num(pcvars[cap]))
                bankstorage[id] = get_pcvar_num(pcvars[cap]);
               
        else if (bankstorage[id] < 0)
                bankstorage[id] = 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/



All times are GMT -4. The time now is 21:46.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.