Need help w/ "creating a simple administration filterscript" tutorial
#1

I get two errors, and I have no idea how to fix them. I followed the tutorial, and read all the "little" explanations that followed the code snippets, and still don't understand why I get these errors.

Код:
wadmin.pwn(273) : error 047: array sizes do not match, or destination array is too small
wadmin.pwn(276) : error 047: array sizes do not match, or destination array is too small
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Errors.
Reply
#2

Post in the tutorial's topic.
Reply
#3

What are the lines?

I'm pretty sure it's not hard to help somebody instead of pointing them in the direction where nobody will reply. (I know this from previous attempts).
Reply
#4

Post the code here so we can see it.
NOTE: Remember to use [ pawn ] & [ /pawn ] without the spaces when posting you're code.
Reply
#5

You are referring to this link on the wiki aren't you?
Reply
#6

ive seen this problem before this certain piece of code holds the error lines:
Код:
dcmd_akill(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_LEVEL] < gCommands[AKILL])
    {
        new string[100]; 
        format(string, sizeof(string), "You must be administrator level %d to use that command!", gCommands[AKILL]);
        return SendClientMessage(playerid, COLOUR_ORANGE, string);
    }
    else if(!strlen(params))
        return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /akill [id | name]");
    else
    {
	new id = (isNumeric(params)) ? strval(params) : GetPlayerId(params);
	if(IsPlayerConnected(id) && id != playerid)
	{
	    SetPlayerHealth(id, 0.0);
	    new string[128]; 
	    format(string, sizeof(string), "You have been admin-killed by administrator \'%s\'.", gPlayerInfo[playerid][PLAYER_NAME]);
	    SendClientMessage(id, COLOUR_ORANGE, string);
	    format(string, sizeof(string), "You have successfully admin-killed player \'%s\'.", gPlayerInfo[id][PLAYER_NAME]);
	    return SendClientMessage(playerid, COLOUR_LIGHTBLUE, string);
	}
	else
	    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You can not admin-kill yourself or a disconnected player.");
    }
}
Reply
#7

the error specifically resides in
pawn Код:
dcmd_password(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must register first to do that! Use /register [password] to register and login.");
    else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 0)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must be logged-in to do that! Use /login [password] to login.");
    else
    {
    new tmp[30],
        tmp2[30],
        index;
    tmp = strtok(params, index);
    if(!strlen(tmp))
            return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /password [password] [new password]");
    tmp2 = strtok(params, index);
    if(!strlen(tmp2))
    return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /password [password] [new password]");
    new oldpassword = num_hash(tmp), newpassword = num_hash(tmp2);
    if(gPlayerInfo[playerid][PLAYER_PASS] == oldpassword)
    {
        if(oldpassword == newpassword)
            return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: Your old password can not be the same as your new password.");
            else if(strlen(tmp2) < gSettings[PASS_MIN] || strlen(tmp2) > gSettings[PASS_MAX])
            {
                new string[100]; format(string, sizeof(string), "ERROR: Your new password must be between %d and %d characters long!", gSettings[PASS_MIN], gSettings[PASS_MAX]);
                return SendClientMessage(playerid, COLOUR_ORANGE, string);
            }
        gPlayerInfo[playerid][PLAYER_PASS] = newpassword;
        new string[128]; format(string, sizeof(string), "You have successfully changed your password from \'%s\' to \'%s\'.", tmp, tmp2);
        return SendClientMessage(playerid, COLOUR_LIGHTBLUE, string);
    }
    else
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: Incorrect password.");
    }
}
the tmp[30 and tmp2[30]. The entire code is
pawn Код:
#include <a_samp>
#include <dini>
#include <dutils>

#define FILTERSCRIPT
#if defined FILTERSCRIPT
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define COLOUR_GREEN           0x33AA33AA
#define COLOUR_RED             0xAA3333AA
#define COLOUR_YELLOW          0xFFFF00AA
#define COLOUR_LIGHTBLUE       0x33CCFFAA
#define COLOUR_ORANGE          0xFF9900AA

#define PlayerFile         "AdminScript/Users/%s.ini"
#define SettingFile            "AdminScript/Settings/MainSettings.ini"
#define CommandFile            "AdminScript/Settings/Commands.ini"
enum PLAYER_MAIN {
    PLAYER_NAME[MAX_PLAYER_NAME],
    PLAYER_IP[16],
    PLAYER_REGGED,
    PLAYER_PASS,
    PLAYER_LOGGED,
    PLAYER_LEVEL,
    PLAYER_WIRED,
    PLAYER_JAILED
}
new gPlayerInfo[MAX_PLAYERS][PLAYER_MAIN];
enum SETTINGS_MAIN {
    POCKET_MONEY,
    JAIL_COMMANDS,
    ANNOUNCE_SECONDS,
    PASS_MIN,
    PASS_MAX
}
new gSettings[SETTINGS_MAIN];
enum COMMANDS_MAIN {
    AKILL,
    ANNOUNCE,
    ARMOURALL,
    BAN,
    CARHP,
    EXPLODE,
    FLIP,
    GOTO,
    GETHERE,
    GIVEARMOUR,
    GIVEHEALTH,
    GIVEWEAPON,
    GOD,
    HEALALL,
    IMITATE,
    IP,
    KICK,
    MAXAMMO,
    PING,
    SETLEVEL,
    SETWANTED,
    TBAN,
    TIME,
    WEATHER
}
new gCommands[COMMANDS_MAIN];

public OnFilterScriptInit()
{
    print("\n****************************************");
    print("* Admin Filterscript by your name here *");
    print("****************************************\n");

    if(!fexist(SettingFile))
    {
        dini_Create(SettingFile);
        dini_IntSet(SettingFile, "PocketMoney", 3000);
        dini_IntSet(SettingFile, "JailCommands", 0);
        dini_IntSet(SettingFile, "AnnounceSeconds", 3);
        dini_IntSet(SettingFile, "PassMin", 3);
        dini_IntSet(SettingFile, "PassMax", 15);
    }

    gSettings[POCKET_MONEY]         = dini_Int(SettingFile, "PocketMoney");
    gSettings[JAIL_COMMANDS]        = dini_Int(SettingFile, "JailCommands");
    gSettings[ANNOUNCE_SECONDS]             = dini_Int(SettingFile, "AnnounceSeconds");
    gSettings[PASS_MIN]             = dini_Int(SettingFile, "PassMin");
    gSettings[PASS_MAX]             = dini_Int(SettingFile, "PassMax");

    if(!fexist(CommandFile))
    {
        dini_Create(CommandFile);
        dini_IntSet(CommandFile, "Akill", 6);
        dini_IntSet(CommandFile, "Announce", 5);
        dini_IntSet(CommandFile, "Armourall", 3);
        dini_IntSet(CommandFile, "Ban", 9);
        dini_IntSet(CommandFile, "Carhp", 4);
        dini_IntSet(CommandFile, "Explode", 5);
        dini_IntSet(CommandFile, "Goto", 4);
        dini_IntSet(CommandFile, "Gethere", 5);
        dini_IntSet(CommandFile, "Givearmour", 6);
        dini_IntSet(CommandFile, "Givehealth", 6);
        dini_IntSet(CommandFile, "Giveweapon", 7);
        dini_IntSet(CommandFile, "God", 10);
        dini_IntSet(CommandFile, "Healall", 7);
        dini_IntSet(CommandFile, "Imitate", 8);
        dini_IntSet(CommandFile, "Ip", 2);
        dini_IntSet(CommandFile, "Kick", 7);
        dini_IntSet(CommandFile, "Maxammo", 8);
        dini_IntSet(CommandFile, "Ping", 1);
        dini_IntSet(CommandFile, "Setlevel", 10);
        dini_IntSet(CommandFile, "Setwanted", 6);
        dini_IntSet(CommandFile, "Tban", 9);
        dini_IntSet(CommandFile, "Time", 3);
        dini_IntSet(CommandFile, "Weather", 3);
        }

    gCommands[AKILL]            = dini_Int(CommandFile, "Akill");
    gCommands[ANNOUNCE]                 = dini_Int(CommandFile, "Announce");
    gCommands[ARMOURALL]            = dini_Int(CommandFile, "Armourall");
    gCommands[BAN]              = dini_Int(CommandFile, "Ban");
    gCommands[CARHP]            = dini_Int(CommandFile, "Carhp");
    gCommands[EXPLODE]          = dini_Int(CommandFile, "Explode");
    gCommands[GOTO]             = dini_Int(CommandFile, "Goto");
    gCommands[GETHERE]          = dini_Int(CommandFile, "Gethere");
    gCommands[GIVEARMOUR]           = dini_Int(CommandFile, "Givearmour");
    gCommands[GIVEHEALTH]           = dini_Int(CommandFile, "Givehealth");
    gCommands[GIVEWEAPON]           = dini_Int(CommandFile, "Giveweapon");
    gCommands[GOD]              = dini_Int(CommandFile, "God");
    gCommands[HEALALL]          = dini_Int(CommandFile, "Healall");
    gCommands[IMITATE]          = dini_Int(CommandFile, "Imitate");
    gCommands[IP]               = dini_Int(CommandFile, "Ip");
    gCommands[KICK]             = dini_Int(CommandFile, "Kick");
    gCommands[MAXAMMO]          = dini_Int(CommandFile, "Maxammo");
    gCommands[SETLEVEL]             = dini_Int(CommandFile, "Setlevel");
    gCommands[SETWANTED]            = dini_Int(CommandFile, "Setwanted");
    gCommands[TBAN]             = dini_Int(CommandFile, "Tban");
    gCommands[TIME]             = dini_Int(CommandFile, "Time");
    gCommands[WEATHER]          = dini_Int(CommandFile, "Weather");

    return 1;
}

    #endif


public OnPlayerConnect(playerid)
{
    new file[100],Name[MAX_PLAYER_NAME],Ip[16];
    GetPlayerName(playerid,Name,sizeof(Name));
    GetPlayerIp(playerid,Ip,sizeof(Ip));
    format(file,sizeof(file),PlayerFile,Name);

    if(!dini_Exists(file))
        {
         dini_Create(file);
         dini_Set(file,"Name",Name);
         dini_Set(file,"Ip",Ip);
         dini_IntSet(file,"Registered",-1);
         dini_IntSet(file,"Password",0);
         dini_IntSet(file,"Level",0);
         dini_IntSet(file,"Wired",0);
         dini_IntSet(file,"Jailed",0);
         SendClientMessage(playerid,COLOUR_ORANGE,"Your username is not recognized on this server. Please /register to continue.");
    }
    strcat(gPlayerInfo[playerid][PLAYER_NAME],          dini_Get(file,"Name"));
    strcat(gPlayerInfo[playerid][PLAYER_IP],            dini_Get(file,"Ip"));
    gPlayerInfo[playerid][PLAYER_REGGED]                  = dini_Int(file,"Registered");
    gPlayerInfo[playerid][PLAYER_PASS]                            = dini_Int(file,"Password");
    gPlayerInfo[playerid][PLAYER_LEVEL]                   = dini_Int(file,"Level");
    gPlayerInfo[playerid][PLAYER_WIRED]                           = dini_Int(file,"Wired");
    gPlayerInfo[playerid][PLAYER_JAILED]                  = dini_Int(file,"Jailed");
    if(gPlayerInfo[playerid][PLAYER_REGGED] == 0)                   SendClientMessage(playerid,COLOUR_ORANGE,"You're username is recognised on this server, but you have not registered. Please /register to continue.");
    else if(gPlayerInfo[playerid][PLAYER_REGGED] == 1)              SendClientMessage(playerid,COLOUR_ORANGE,"You're username is recognised on this server. Please /login to continue.");
    gPlayerInfo[playerid][PLAYER_REGGED]                          = 0;
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    new file[100];
    format(file,sizeof(file),PlayerFile,gPlayerInfo[playerid][PLAYER_NAME]);
    dini_Set(file,"Name",gPlayerInfo[playerid][PLAYER_NAME]);
    dini_Set(file,"Ip",gPlayerInfo[playerid][PLAYER_IP]);
    dini_IntSet(file,"Registered",gPlayerInfo[playerid][PLAYER_REGGED]);
    dini_IntSet(file,"Password",gPlayerInfo[playerid][PLAYER_PASS]);
    dini_IntSet(file,"Level",gPlayerInfo[playerid][PLAYER_LEVEL]);
    dini_IntSet(file,"Wired",gPlayerInfo[playerid][PLAYER_WIRED]);
    dini_IntSet(file,"Jailed",gPlayerInfo[playerid][PLAYER_JAILED]);
    gPlayerInfo[playerid][PLAYER_NAME]   = 0;
    gPlayerInfo[playerid][PLAYER_IP]     = 0;
    gPlayerInfo[playerid][PLAYER_REGGED] = 0;
    gPlayerInfo[playerid][PLAYER_LOGGED] = 0;
    gPlayerInfo[playerid][PLAYER_PASS]   = 0;
    gPlayerInfo[playerid][PLAYER_LEVEL]  = 0;
    gPlayerInfo[playerid][PLAYER_WIRED]  = 0;
    gPlayerInfo[playerid][PLAYER_JAILED] = 0;
    return 1;
}
//////////Commands
public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(register, 8, cmdtext);
    dcmd(login, 5, cmdtext);
    dcmd(logout, 6, cmdtext);
    dcmd(password, 8, cmdtext);

    return 0;
}
dcmd_register(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_REGGED] == 1)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You have already registered!");
    else if(!params[0])
    return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /register [password]");
    else if(strlen(params) < gSettings[PASS_MIN] || strlen(params) > gSettings[PASS_MAX])
    {
    new string[128];
    format(string, sizeof(string), "ERROR: Password must be between %d and %d characters long!", gSettings[PASS_MIN], gSettings[PASS_MAX]);
    return SendClientMessage(playerid, COLOUR_ORANGE, string);
    }
    else
    {
    new password = num_hash(params);
    gPlayerInfo[playerid][PLAYER_PASS] = password;
    gPlayerInfo[playerid][PLAYER_REGGED] = 1;
    gPlayerInfo[playerid][PLAYER_LOGGED] = 1;
    GetPlayerIp(playerid, gPlayerInfo[playerid][PLAYER_IP], 16);
    new string[128]; format(string, sizeof(string), "You have successfully registered your account with the password \'%s\'. You have been automatically logged in.", params);
    return SendClientMessage(playerid, COLOUR_LIGHTBLUE, string);
    }
}
dcmd_login(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must register first to do that! Use /register [password] to register and login.");
    else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 1)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You are already logged-in.");
    else if(!params[0])
    return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /login [password]");
    else
    {
    new password = num_hash(params);
    if(gPlayerInfo[playerid][PLAYER_PASS] == password)
    {
        gPlayerInfo[playerid][PLAYER_LOGGED] = 1;
        GetPlayerIp(playerid, gPlayerInfo[playerid][PLAYER_IP], 16);
        return SendClientMessage(playerid, COLOUR_LIGHTBLUE, "You have successfully logged in to your account.");
    }
    else
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: Incorrect password.");
    }
}
dcmd_logout(playerid, params[])
{
#pragma unused params
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must register first to do that! Use /register [password] to register.");
    else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 0)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You are already logged-out.");
    else
    {
    gPlayerInfo[playerid][PLAYER_LOGGED] = 0;
    return SendClientMessage(playerid, COLOUR_LIGHTBLUE, "You have successfully logged out of your account.");
    }
}
dcmd_password(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must register first to do that! Use /register [password] to register and login.");
    else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 0)
    return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You must be logged-in to do that! Use /login [password] to login.");
    else
    {
    new tmp[30],
        tmp2[30],
        index;
    tmp = strtok(params, index);
    if(!strlen(tmp))
            return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /password [password] [new password]");
    tmp2 = strtok(params, index);
    if(!strlen(tmp2))
    return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /password [password] [new password]");
    new oldpassword = num_hash(tmp), newpassword = num_hash(tmp2);
    if(gPlayerInfo[playerid][PLAYER_PASS] == oldpassword)
    {
        if(oldpassword == newpassword)
            return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: Your old password can not be the same as your new password.");
            else if(strlen(tmp2) < gSettings[PASS_MIN] || strlen(tmp2) > gSettings[PASS_MAX])
            {
                new string[100]; format(string, sizeof(string), "ERROR: Your new password must be between %d and %d characters long!", gSettings[PASS_MIN], gSettings[PASS_MAX]);
                return SendClientMessage(playerid, COLOUR_ORANGE, string);
            }
        gPlayerInfo[playerid][PLAYER_PASS] = newpassword;
        new string[128]; format(string, sizeof(string), "You have successfully changed your password from \'%s\' to \'%s\'.", tmp, tmp2);
        return SendClientMessage(playerid, COLOUR_LIGHTBLUE, string);
    }
    else
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: Incorrect password.");
    }
}
dcmd_akill(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_LEVEL] < gCommands[AKILL])
    {
        new string[100];
        format(string, sizeof(string), "You must be administrator level %d to use that command!", gCommands[AKILL]);
        return SendClientMessage(playerid, COLOUR_ORANGE, string);
    }
    else if(!strlen(params))
        return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /akill [id | name]");
    else
    {
    new id = (isNumeric(params)) ? strval(params) : GetPlayerId(params);
    if(IsPlayerConnected(id) && id != playerid)
    {
        SetPlayerHealth(id, 0.0);
        new string[128];
        format(string, sizeof(string), "You have been admin-killed by administrator \'%s\'.", gPlayerInfo[playerid][PLAYER_NAME]);
        SendClientMessage(id, COLOUR_ORANGE, string);
        format(string, sizeof(string), "You have successfully admin-killed player \'%s\'.", gPlayerInfo[id][PLAYER_NAME]);
        return SendClientMessage(playerid, COLOUR_LIGHTBLUE, string);
    }
    else
        return SendClientMessage(playerid, COLOUR_ORANGE, "ERROR: You can not admin-kill yourself or a disconnected player.");
    }
}
dcmd_announce(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_LEVEL] < gCommands[ANNOUNCE])
    {
        new string[100];
        format(string, sizeof(string), "You must be administrator level %d to use that command!", gCommands[ANNOUNCE]);
        return SendClientMessage(playerid, COLOUR_ORANGE, string);
    }
    else if(!strlen(params))
        return SendClientMessage(playerid, COLOUR_ORANGE, "USAGE: /announce [message]");
    else
        return GameTextForAll(params, gSettings[ANNOUNCE_SECONDS] * 1000, 3);
}
Yes that was the link I was referring to, and thank you iGetty, for understanding my grief.
Reply
#8

anyone?
Reply
#9

increase the size of tmp & tmp2
pawn Код:
new tmp[64],
        tmp2[64],
        index;
Reply
#10

Quote:
Originally Posted by CmZxC
Посмотреть сообщение
increase the size of tmp & tmp2
pawn Код:
new tmp[64],
        tmp2[64],
        index;
I've tried increasing, and decreasing. I tried 100, 1000, 1-30, I guess I'll have to just keep increasing in increments of one until I get the correct value. Too bad that tutorial doesn't work.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)