Script does not work after following tutorial
#1

Hi all,

I get these errors:


Код:
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(23) : warning 217: loose indentation
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(33) : warning 217: loose indentation
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(33) : error 017: undefined symbol "gSettings"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(34) : error 017: undefined symbol "gSettings"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(35) : error 017: undefined symbol "gSettings"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(36) : error 017: undefined symbol "gSettings"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(37) : error 017: undefined symbol "gSettings"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(67) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(68) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(69) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(70) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(71) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(72) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(73) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(74) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(75) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(76) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(77) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(78) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(79) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(80) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(81) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(82) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(83) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(84) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(85) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(86) : error 017: undefined symbol "gCommands"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(87) : error 017: undefined symbol "gCommands"

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


26 Errors.
after following https://sampwiki.blast.hk/wiki/Creating_...g_Our_Settings, I think that I did just what was said, but maybe I'm mistaken, My current code:

Код:
#include <a_samp>
#include <dini>

#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"

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;
}
  
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 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[200];
    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[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[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.");
  }
}

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[150];
	  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);
}
I also HAVE created the required directory's. Could someone please help me with this? Thanks!
Reply
#2

Move your enum's and global new's above OnGameModeInit.
Reply
#3

Quote:
Originally Posted by zyx
Move your enum's and global new's above OnGameModeInit.
Above OnFilterscriptInIt.
Reply
#4

USE THESE BUT there are also errors

Код:
C:\DOCUME~1\ISMAIL~1\MIJNDO~1\SAMPNI~1\FILTER~1\WEAPON~1.PWN(273) : error 047: array sizes do not match, or destination array is too small
C:\DOCUME~1\ISMAIL~1\MIJNDO~1\SAMPNI~1\FILTER~1\WEAPON~1.PWN(276) : error 047: array sizes do not match, or destination array is too small
C:\DOCUME~1\ISMAIL~1\MIJNDO~1\SAMPNI~1\FILTER~1\WEAPON~1.PWN(310) : error 017: undefined symbol "GetPlayerId"
What happened?

use these:

Код:
#include <a_samp>
#include <dini>

#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"
#pragma tabsize 0

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;
}
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);
  dcmd(akill, 5, cmdtext);
  dcmd(announce, 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[200];
    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[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[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.");
  }
}

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[150];
	  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);
}
Reply
#5

make sure your defines or variables for SCRIPTMAIN, PLAYERMAIN etc are above your enums.
Reply
#6

hmm, you're right, there are still some errors:

Код:
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(216) : error 017: undefined symbol "num_hash"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(236) : error 017: undefined symbol "num_hash"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(273) : error 017: undefined symbol "strtok"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(273) : error 033: array must be indexed (variable "tmp")
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(276) : error 017: undefined symbol "strtok"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(276) : error 033: array must be indexed (variable "tmp2")
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(279) : error 017: undefined symbol "num_hash"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(272) : warning 203: symbol is never used: "index"
C:\Documents and Settings\Administrator\Desktop\samp02Xserver.win32\filterscripts\admin.pwn(310) : error 017: undefined symbol "isNumeric"
Reply
#7

Seems things are still out of order, show the script on pastebin
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)