AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Please fix this plugin (https://forums.alliedmods.net/showthread.php?t=293068)

combocarte112 01-22-2017 02:19

Please fix this plugin
 
Hello, please fix this plugin.
Sometimes shuts server.
Code:

/*
        BASE BUILDER GAME MOD: FRAGS LEVEL MOD
                        BY GHOST ***
                                VERSION 0.0.8 BETA
                               
        Credite
       
                Arion - Pentru chestia cu chatu (Am extras chestii pentru mesaju chat (LVL:) din pluginu ala Green admin chat :-@
                Askhanar - Asa salveaza el pe nVault (:-??)
*/

// Includes

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta_util>
#include <nvault>
#include <fun>

// Define

#define MAX_LEVELS        21

// Register Plugin & Tag & pragma

#pragma semicolon 1

new const
        PLUGIN_NAME[] = "Base Builder Game Mod: Frags Level Mod",
        PLUGIN_VERS[] = "0.0.8 BETA",
        PLUGIN_AUTH[] = "GhosT ***";
       
new const szTag[] = "[Base Builder]";

// Variabile

new PlayerFrags[33], PlayerLevel[33];
new PlayerWaitTime[33];
new bool:HasItems[33], bool:HaveDamage[33];
new nVault;

// Cvars

new GiveTime, GameNameOn;

// Levele

new const Levels[MAX_LEVELS + 2] =
{
        0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500,
        550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
        100000000000000000000000000000 // Nu modificati
};

// Flags

new const GiveFlags[] = "au";
new const TakeFlags[] = "au";

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);
       
        register_event("DeathMsg", "DeathMsg", "a");
       
        RegisterHam(Ham_Spawn, "player", "PlayerSpawn", true);
        RegisterHam(Ham_TakeDamage, "player", "PlayerTakeDamage");
       
        register_logevent("RoundStart", 2, "1=Round_Start");
       
        register_clcmd("say /level", "LevelClCmd");
        register_clcmd("say /frags", "LevelClCmd");
        register_clcmd("say /lvl", "LevelClCmd");
       
        register_clcmd("say_team /level", "LevelClCmd");
        register_clcmd("say_team /frags", "LevelClCmd");
        register_clcmd("say_team /lvl", "LevelClCmd");
       
        register_concmd("amx_give_frags", "GiveFragsConCmd");
        register_concmd("amx_take_frags", "TakeFragsConCmd");
       
        register_forward(FM_GetGameDescription, "GameNameCmd");
       
        register_clcmd("say", "SayClCmd");
       
        GiveTime        = register_cvar("GiveTime", "0"); // Aici puneti in cate secunde de la spawnu playerulu sa dea itemele .
        GameNameOn        = register_cvar("GameNameOn", "1");                        // adica cat timp de constructie este + 5/10 secunde
        nVault                = nvault_open("BaseBuilderFrags");
       
        register_cvar("bb_frags_mod", PLUGIN_VERS, FCVAR_SPONLY | FCVAR_SERVER);
        register_cvar("bb_frags_author", PLUGIN_AUTH, FCVAR_SERVER | FCVAR_SPONLY);
}
public plugin_natives( )
{
        register_native("bb_get_user_frags", "_get_user_frags", true);
        register_native("bb_set_user_frags", "_set_user_frags", true);
}
public _get_user_frags(iParams)
{
        return PlayerFrags[get_param(1)];
}
public _set_user_frags(iParams)
{
        PlayerFrags[get_param(1)] = max(0, get_param(2));
        return PlayerFrags[get_param(1)];
}
public DeathMsg( )
{
        new iAttacker        = read_data(1);
        new iVictim        = read_data(2);
       
        if(iAttacker == iVictim)
        {
                if(PlayerFrags[iAttacker] >= 1)
                        PlayerFrags[iAttacker]--;
                       
                else return PLUGIN_HANDLED;
        }
               
        else if(iAttacker != iVictim)
                PlayerFrags[iAttacker]++;
               
        if(PlayerLevel[iAttacker] < MAX_LEVELS - 1 && PlayerFrags[iAttacker] >= Levels[PlayerLevel[iAttacker]])
        {
                while(PlayerFrags[iAttacker] >= Levels[PlayerLevel[iAttacker]])
                        PlayerLevel[iAttacker]++;
                       
                ColorChat(iAttacker, "^x04%s^x01 Ai trecut la^x04 levelul^x03 %d^x01 !", szTag, PlayerLevel[iAttacker]);
               
                ShakeScreen(iAttacker, 2.0);
                FadeScreen(iAttacker, 2.0, 0, 15, 200, 200);
        }
        if(PlayerFrags[iVictim] < Levels[PlayerLevel[iVictim] - 1])
        {
                while(PlayerFrags[iVictim] < Levels[PlayerLevel[iVictim] - 1])
                        PlayerLevel[iVictim]--;
                       
                ColorChat(iVictim, "^x04%s^x01 Ai pierdut^x04 un level^x03 din lipsa de fraguri^x01 !", szTag);
               
                ShakeScreen(iVictim, 2.0);
                FadeScreen(iVictim, 2.0, 200, 15, 0, 200);
        }
       
        return PLUGIN_CONTINUE;
}
public PlayerSpawn(id)
{
        if(PlayerLevel[id] < MAX_LEVELS - 1)
        {
                if(PlayerFrags[id] >= Levels[PlayerLevel[id]])
                {
                        while(PlayerFrags[id] >= Levels[PlayerLevel[id]])
                                PlayerLevel[id]++;
                }
        }
       
        return PLUGIN_HANDLED;
}
public PlayerTakeDamage(iAttacker, iVictim, Float:fDamage, iDamageBits)
{
        if(HaveDamage[iAttacker])
        {
                fDamage = (fDamage + 2.0 * Float:PlayerLevel[iAttacker]);
                return HAM_HANDLED;
        }
       
        return HAM_IGNORED;
}
public RoundStart()
{       
        new Jucator[32], iNum;
        get_players(Jucator, iNum);
       
        for(new i = 0; i < iNum; i++)
        {
                HasItems[Jucator[i]]                = false;
                HaveDamage[Jucator[i]]                = false;
               
                PlayerWaitTime[Jucator[i]]        = get_pcvar_num(GiveTime);
               
                set_task(1.0, "HudAbility", Jucator[i], _, _, "b"); // Pentru a arata corect mesajul in hud ..
                set_task(get_pcvar_float(GiveTime) + 2.0, "PlayerAbility", Jucator[i]); // Timpul corect pentru taskul de iteme .
        }
}
public HudAbility(id)
{
        if(PlayerWaitTime[id] > 0)
        {       
                set_hudmessage(0, 255, 100, 0.70, 0.20, 0, 1.0, 2.0);
                show_hudmessage(id, "Iti vei primi abilitatile in %i secunde ...", PlayerWaitTime[id]);
               
                PlayerWaitTime[id] -= 1;
        }
       
        return PLUGIN_CONTINUE;
}
public PlayerAbility(id)
{
        if(HasItems[id] == false)
        {
                if(get_user_team(id) == 2)
                {
                        set_user_health(id, get_user_health(id) + 5 * PlayerLevel[id]);
                        set_user_armor(id, get_user_armor(id) + 20 * PlayerLevel[id]);
                       
                        ColorChat(id, "^x04%s^x01 Ai levelul %d !", szTag, PlayerLevel[id]);
                        ColorChat(id, "^x04%s^x01 Abilitati:^x03 [^x04+%dHP^x03][^x04+%dAP^x03][^x04+%dDMG^x03]", szTag, 10 * PlayerLevel[id], 20 * PlayerLevel[id], 2* PlayerLevel[id]);
                        HaveDamage[id] = true;
                       
                }
                else if(get_user_team(id) == 1)
                {
                        set_user_health(id, get_user_health(id) + 5 * PlayerLevel[id]);
                        set_user_armor(id, get_user_armor(id) + 20 * PlayerLevel[id]);
                       
                        ColorChat(id, "^x04%s^x01 Ai levelul %d !", szTag, PlayerLevel[id]);
                        ColorChat(id, "^x04%s^x01 Abilitati:^x03 [^x04+%dHP^x03][^x04+%dAP^x03][^x04+%dDMG^x03]", szTag, 10 * PlayerLevel[id], 20 * PlayerLevel[id], 2* PlayerLevel[id]);
                        HaveDamage[id] = true;
                }
               
                HasItems[id] = true;
        }
       
        set_hudmessage(0, 255, 100, 0.70, 0.20);
        show_hudmessage(id, "Ti-ai primit abilitatile !");
       
        return PLUGIN_CONTINUE;
}
public LevelClCmd(id)
{       
        if(PlayerLevel[id] != MAX_LEVELS - 1)
                ColorChat(id, "^x04%s^x03 %s^x01, ai: |^x04 Level: %d / %d^x01 |^x04 Fraguri: %d / %d^x01 |^x04 %d Frag%s^x01 ramas%s pana la^x04 levelul %d^x01 |", szTag, get_name(id), PlayerLevel[id], MAX_LEVELS - 1, PlayerFrags[id], Levels[PlayerLevel[id]], Levels[PlayerLevel[id]] - PlayerFrags[id], Levels[PlayerLevel[id]] - PlayerFrags[id] == 1 ? "" : "uri", Levels[PlayerLevel[id]] - PlayerFrags[id] == 1 ? "" : "e", PlayerLevel[id] + 1);
        else if(PlayerLevel[id] == MAX_LEVELS - 1)
                ColorChat(id, "^x04%s^x03 %s^x01, ai: |^x04 Level: MAXIM^x01 & ^x04 Fraguri: %d^x01 !", szTag, get_name(id), PlayerFrags[id]);
       
        return PLUGIN_HANDLED;
}
public GiveFragsConCmd(id)
{
        if(get_user_flags(id) & read_flags(GiveFlags))
        {
                new szArg[32], szAmount[32];
                new Amount, iTarget;
               
                read_argv(1, szArg, sizeof(szArg) - 1);
                read_argv(2, szAmount, sizeof(szAmount) - 1);
               
                iTarget = cmd_target(id, szArg, CMDTARGET_NO_BOTS);
                Amount = str_to_num(szAmount);
               
                if(equal(szArg, "") || equal(szAmount, ""))
                {
                        console_print(id, "amx_give_frags <NICK> <AMOUNT>");
                        return PLUGIN_HANDLED;
                }
               
                if(!iTarget)
                {
                        console_print(id, "Jucatorul %s nu exista sau nu este online !", iTarget);
                        return PLUGIN_HANDLED;
                }
               
                if(Amount > 99999)
                {
                        console_cmd(id, "Nu poti da mai mult de 99999 fraguri !");
                        return PLUGIN_HANDLED;
                }
               
                ColorChat(0, "^x03%s^x04 (ADMIN): %s^x01 ii da^x03 %d Frag%s^x01 lui^x04 %s^x01 !", szTag, get_name(id), Amount, Amount == 1 ? "" : "uri", get_name(iTarget));
                log_amx("ADMIN: %s (#%s) gave to %s (#%s) %d Frag%s !", get_name(id), get_authid(id), get_name(iTarget), get_authid(iTarget), Amount, Amount == 1? "" : "s");
               
                PlayerFrags[iTarget] += Amount;
               
                if(PlayerLevel[iTarget] < MAX_LEVELS - 1)
                {
                        while(PlayerFrags[iTarget] >= Levels[PlayerLevel[iTarget]])
                                PlayerLevel[iTarget]++;
                }
               
                SaveFrags(iTarget);
        }
        else
        {
                console_print(id, "Nu ai acces la aceasta comanda !");
                return PLUGIN_HANDLED;
        }
       
        return PLUGIN_HANDLED;
}
public TakeFragsConCmd(id)
{
        if(get_user_flags(id) & read_flags(TakeFlags))
        {
                new szArg[32], szAmount[32];
                new Amount, iTarget;
               
                read_argv(1, szArg, sizeof(szArg) - 1);
                read_argv(2, szAmount, sizeof(szAmount) - 1);
               
                Amount = str_to_num(szAmount);
                iTarget = cmd_target(id, szArg, CMDTARGET_NO_BOTS);
               
                if(equal(szArg, "") || equal(szAmount, ""))
                {
                        console_print(id, "amx_take_frags <NICK> <AMOUNT>");
                        return PLUGIN_HANDLED;
                }
               
                if(!iTarget)
                {
                        console_print(id, "Jucatorul %s nu exista sau nu este online !", iTarget);
                        return PLUGIN_HANDLED;
                }
               
                if(Amount > PlayerFrags[id])
                {
                        console_print(id, "Jucatorul %s are doar %d fraguri !", get_name(iTarget), PlayerFrags[iTarget]);
                        return PLUGIN_HANDLED;
                }
               
                ColorChat(0, "^x03%s^x04 (ADMIN): %s^x01 ii ia^x03 %d Frag%s^x01 lui^x04 %s^x01 !", szTag, get_name(id), Amount, Amount == 1 ? "" : "uri", get_name(iTarget));
                log_amx("ADMIN: %s (#%s) take to %s (#%s) %d Frag%s !", get_name(id), get_authid(id), get_name(iTarget), get_authid(iTarget), Amount, Amount == 1 ? "" : "s");
               
                PlayerFrags[iTarget] -= Amount;
               
                if(PlayerFrags[iTarget] < Levels[PlayerLevel[iTarget] - 1])
                {
                        while(PlayerFrags[iTarget] < Levels[PlayerLevel[iTarget] - 1])
                                PlayerLevel[iTarget]--;
                }
               
                SaveFrags(iTarget);
        }
        else
        {
                console_print(id, "Nu ai acces la aceasta comanda !");
                return PLUGIN_HANDLED;
        }
       
        return PLUGIN_HANDLED;
}
public GameNameCmd()
{
        if(get_pcvar_num(GameNameOn))
                forward_return(FMV_STRING, "Base Builder Frags Mod");
               
        return FMRES_SUPERCEDE;
}
public client_putinserver(id)
{
        ColorChat(0, "^x04%s^x03 [%d]^x04 [Level: %d]^x01 se conecteaza pe server !", szTag, get_name(id), PlayerLevel[id]);
       
        LoadFrags(id);
       
        set_task(1.0, "ShowUserDetails", id, _, _, "b");
}
public client_disconnect(id)
{
        ColorChat(0, "^x04%s^x03 [%d]^x04 [Level: %d]^x01 sa deconectat de pe server !", szTag, get_name(id), PlayerLevel[id]);
        SaveFrags(id);
}
public SayClCmd(id)
{
        new iMessage[192];
       
        read_args(iMessage, sizeof(iMessage) - 1);
        remove_quotes(iMessage);
       
        if(!valid_message(iMessage))
                return PLUGIN_CONTINUE;
       
        if(is_user_alive(id) && PlayerLevel[id] != MAX_LEVELS - 1)
                format(iMessage, sizeof(iMessage) - 1, "^x04[LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
       
        else if(!is_user_alive(id) && PlayerLevel[id] != MAX_LEVELS - 1)
                format(iMessage, sizeof(iMessage) - 1, "^x03[DEAD]^x04 [LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
       
        if(is_user_alive(id) && PlayerLevel[id] == MAX_LEVELS - 1)
                format(iMessage, sizeof(iMessage) - 1, "^x04[LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
       
        else if(!is_user_alive(id) && PlayerLevel[id] == MAX_LEVELS - 1)
                format(iMessage, sizeof(iMessage) - 1, "^x03[DEAD]^x04 [LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
       
        for(new i = 1; i <= get_maxplayers(); i++)
        {
                if(!is_user_connected(i))
                        continue;
               
                if((is_user_alive(id) && is_user_alive(i)) || !(is_user_alive(id) && is_user_alive(i)))
                {
                        message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
                        write_byte(id);
                        write_string(iMessage);
                        message_end( );
                }
        }
       
        return PLUGIN_HANDLED;
}
public ShowUserDetails(id)
{
        set_hudmessage(0, 255, 255, -1.0, 0.75);
       
        if(is_user_alive(id) && PlayerLevel[id] < MAX_LEVELS - 1)
                show_hudmessage(id, "[Frags: %d / %d | Level: %d / %d]", PlayerFrags[id], Levels[PlayerLevel[id]], PlayerLevel[id], MAX_LEVELS - 1);
       
        if(is_user_alive(id) && PlayerLevel[id] >= MAX_LEVELS - 1)
                show_hudmessage(id, "[Frags: %d | Level: MAXIM]", PlayerFrags[id]);
}
public LoadFrags(id)
{
        new szData[256], iTimestamp;
       
        formatex(szData, sizeof(szData) - 1, "%i ", PlayerFrags[id]);
       
        if(nvault_lookup(nVault, get_name(id), szData, sizeof(szData), iTimestamp))
        {
                static iFrags[15];
                parse(szData, iFrags, sizeof(iFrags) - 1);
                PlayerFrags[id] = str_to_num(iFrags);
                return PLUGIN_CONTINUE;
        }
       
        return PLUGIN_CONTINUE;
}
public SaveFrags(id)
{
        new szData[256];
        formatex(szData, sizeof(szData) - 1, "%i ", PlayerFrags[id]);
       
        nvault_set(nVault, get_name(id), szData);
}
stock get_name(id, len=31)
{
        new Name[32];
        get_user_name(id, Name, len);
       
        return Name;
}
stock get_authid(id, len=31)
{
        new AuthID[32];
        get_user_authid(id, AuthID, len);
       
        return AuthID;
}
stock ColorChat(const id, const input[], any:...)
{
        new count = 1, players[32];
        static msg[191];
        vformat(msg, 190, input, 3);
       
        replace_all(msg, 190, "^x04", "^4"); // Green Color
        replace_all(msg, 190, "^x01", "^1"); // Default Color
        replace_all(msg, 190, "^x03", "^3"); // Team Color
        replace_all(msg, 190, "^0", "^0"); // Team2 Color
       
        if (id) players[0] = id; else get_players(players, count, "ch");
        {
                for(new i = 0; i < count; i++)
                {
                        if(is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}
stock ShakeScreen(id, const Float:seconds)
{
        message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0, 0, 0}, id);
        write_short(floatround(4096.0 * seconds, floatround_round));
        write_short(floatround(4096.0 * seconds, floatround_round));
        write_short(1<<13);
        message_end( );
}

stock FadeScreen(id, const Float:seconds, const red, const green, const blue, const alpha)
{     
        message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, id);
        write_short(floatround(4096.0 * seconds, floatround_round));
        write_short(floatround(4096.0 * seconds, floatround_round));
        write_short(0x0000);
        write_byte(red);
        write_byte(green);
        write_byte(blue);
        write_byte(alpha);
        message_end( );
}
stock valid_message(const iMessage[])
{
        if(iMessage[0] == '/' || iMessage[0] == '@' || iMessage[0] == '@' && iMessage[1] == '@' || iMessage[0] == '@' && iMessage[1] == '@' && iMessage[2] == '@' || !strlen(iMessage))
        {
                return false;
        }
       
        return true;
}


Celena Luna 01-22-2017 02:50

Re: Please fix this plugin
 
Code:

new const Levels[MAX_LEVELS + 2] =
{
        0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500,
        550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
        100000000000000000000000000000 // Nu modificati
};

Don't do this.
"100000000000000000000000000000" is the thing may crash the server (I think)

Craxor 01-22-2017 04:27

Re: Please fix this plugin
 
good, can yu provide the errors from console?
RO: poti sa arati errorile din consola sau log-errorile? ?


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

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