Why does this script crashes?
#1

I found this script on the WIKI, and i liked it. So i maked a filterscript, fully liked that script.
As soon as i compile, it works, but if i start up my server, it crashes is he checks the filterscript.

How can i use that script without a crash?
Reply
#2

Somebody?
Reply
#3

Disable parts of code, find where is the problem, and try to repair. If you can not fix it, describe the problem and post the code where the problem is
Reply
#4

I was forgotten to make the neccesaty maps, and i make them now. So, it works now :P
Reply
#5

Hmm, i got it working now but it dont works fine.
1. At the first time i connect to the server, i get the First Time message, but the second time, without registering, nothing.
2. I can't register. It says always: Your pass must between 0 and 0 characters long. But, i can register if i deleten min and max characters.But it dont saves,only one time ingame i can login and logout, but further i get no money, and in the registerfiles, stays nothing of registering..

How can that be?
Reply
#6

anybody?
Reply
#7

Probably the filterscript isn't compatible with your gm, or some filterscripts need to be added first, or just the code is bad.

I think that if you multipost your thread at least you should say sorry, and, there's an "edit" button so you can add something to some other of your posts
Reply
#8

If it is my GM, than must i be a timer of every second, or Y_Objects. Ive nothing special in my GM.

Code of adminscript by me:
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              "Users/%s.ini"
#define SettingFile         "Settings/MainSettings.ini"
#define CommandFile         "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
}

enum SETTINGS_MAIN
{
  POCKET_MONEY,
  JAIL_COMMANDS,
  ANNOUNCE_SECONDS,
  PASS_MIN,
  PASS_MAX
}

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 gPlayerInfo[MAX_PLAYERS][PLAYER_MAIN];
new gSettings[SETTINGS_MAIN];
new gCommands[COMMANDS_MAIN];

public OnFilterScriptInit()
{
    print("\n****************************************");
    print("* Admin Filterscript by Remi-X *");
    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,"You're 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;
}

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[256];
    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[256]; 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[256],
      tmp2[256],
      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[256]; 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.");
  }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)