Debugging Help
#1

why is this giving me the errors

Код:
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(153) : warning 217: loose indentation
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(157) : warning 217: loose indentation
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(235) : error 017: undefined symbol "dcmd_register"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(236) : error 017: undefined symbol "dcmd_login"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(237) : error 017: undefined symbol "dcmd_logout"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(238) : error 017: undefined symbol "dcmd_password"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(239) : error 017: undefined symbol "dcmd_register"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(244) : error 017: undefined symbol "params"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(244) : warning 215: expression has no effect
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(244) : error 001: expected token: ";", but found "]"
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(244) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Austin\My Documents\GTA Eternal Scratch\gamemodes\eternal.pwn(244) : fatal error 107: too many error messages on one line
My Code :
Код:
#include <a_samp>
#include <dini>
#include <dutils>
#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 GREEN  0x33AA33AA
#define RED    0xAA3333AA
#define YELLOW 0xFFFF00AA
#define BLUE   0x33CCFFAA
#define ORANGE 0xFF9900AA
#define PlayerFile 	"accounts/%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];

main()
{
	print("  -------------------------------");
	print("  Eternal RP - Eternal Develoment");
	print("  -------------------------------");
}

public OnGameModeInit()
{
	SetGameModeText("ERPB");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	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 OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	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, 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, 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, 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 OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(register, 8, cmdtext);
    dcmd(login, 5, cmdtext);
    dcmd(logout, 6, cmdtext);
    dcmd(password, 8, cmdtext);
	dcmd_register(playerid, params[])
	{
	    if(gPlayerInfo[playerid][PLAYER_REGGED] == 1) {
	    	return SendClientMessage(playerid, ORANGE, "ERROR: You have already registered!");
		}
	    else if(!params[0]) {
			return SendClientMessage(playerid, 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, 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, BLUE, string);
	    }
	}
    dcmd_login(playerid, params[])
	{
	    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
		{
			return SendClientMessage(playerid, 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, ORANGE, "ERROR: You are already logged-in.");
		}
		else if(!params[0])
		{
			return SendClientMessage(playerid, 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, BLUE, "You have successfully logged in to your account.");
			}
			else
			{
				return SendClientMessage(playerid,ORANGE, "ERROR: Incorrect password.");
			}
		}
	}
    dcmd_logout(playerid, params[])
	{
	    #pragma unused params
	    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
	    {
			return SendClientMessage(playerid, ORANGE, "ERROR: You must register first to do that! Use /register [password] to register.");
		}
		else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 0)
		{
			return SendClientMessage(playerid, ORANGE, "ERROR: You are already logged-out.");
		}
		else
	    {
			gPlayerInfo[playerid][PLAYER_LOGGED] = 0;
			return SendClientMessage(playerid, BLUE, "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, ORANGE, "USAGE: /password [password] [new password]");
			}
			tmp2 = strtok(params, index);
			if(!strlen(tmp2))
			{
	    		return SendClientMessage(playerid, 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, 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, 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, BLUE, string);
			}
			else
			{
				return SendClientMessage(playerid, 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, ORANGE, string);
	    }
	    else if(!strlen(params))
	    {
	        return SendClientMessage(playerid, 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, ORANGE, string);
			    format(string, sizeof(string), "You have successfully admin-killed player \'%s\'.", gPlayerInfo[id][PLAYER_NAME]);
			    return SendClientMessage(playerid, BLUE, string);
			}
			else
			{
		 	   return SendClientMessage(playerid, 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, ORANGE, string);
	    }
	    else if(!strlen(params))
	    {
	        return SendClientMessage(playerid, ORANGE, "USAGE: /announce [message]");
		}
		else
		{
	        return GameTextForAll(params, gSettings[ANNOUNCE_SECONDS] * 1000, 3);
		}
	}
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
	return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
	return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
	return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
	return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
	return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
	return 1;
}
Reply
#2

I just debugged this code...
no responsibility for any bugs in commands or so...

Код:
#include <a_samp>
#include <dini>
#include <dutils>
#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 GREEN  0x33AA33AA
#define RED    0xAA3333AA
#define YELLOW 0xFFFF00AA
#define BLUE   0x33CCFFAA
#define ORANGE 0xFF9900AA
#define PlayerFile 	"accounts/%s.ini"
#define SettingFile "settings/MainSettings.ini"
#define CommandFile "settings/Commands.ini"

#pragma unused ret_memcpy
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];

main()
{
	print("  -------------------------------");
	print("  Eternal RP - Eternal Develoment");
	print("  -------------------------------");
}

public OnGameModeInit()
{
	SetGameModeText("ERPB");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	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 OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	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, 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, 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, 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 OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
	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, ORANGE, "ERROR: You have already registered!");
	}
    else if(!params[0]) {
		return SendClientMessage(playerid, 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, 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, BLUE, string);
    }
}
dcmd_login(playerid, params[])
{
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
	{
		return SendClientMessage(playerid, 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, ORANGE, "ERROR: You are already logged-in.");
	}
	else if(!params[0])
	{
		return SendClientMessage(playerid, 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, BLUE, "You have successfully logged in to your account.");
		}
		else
		{
			return SendClientMessage(playerid,ORANGE, "ERROR: Incorrect password.");
		}
	}
}
dcmd_logout(playerid, params[])
{
    #pragma unused params
    if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
    {
		return SendClientMessage(playerid, ORANGE, "ERROR: You must register first to do that! Use /register [password] to register.");
	}
	else if(gPlayerInfo[playerid][PLAYER_LOGGED] == 0)
	{
		return SendClientMessage(playerid, ORANGE, "ERROR: You are already logged-out.");
	}
	else
    {
		gPlayerInfo[playerid][PLAYER_LOGGED] = 0;
		return SendClientMessage(playerid, BLUE, "You have successfully logged out of your account.");
    }
}
dcmd_password(playerid, params[])
{
   	if(gPlayerInfo[playerid][PLAYER_REGGED] != 1)
   	{
       	return SendClientMessage(playerid, 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, 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, ORANGE, "USAGE: /password [password] [new password]");
		}
		tmp2 = strtok(params, index);
		if(!strlen(tmp2))
		{
   		return SendClientMessage(playerid, 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, 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, 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, BLUE, string);
		}
		else
		{
		return SendClientMessage(playerid, 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, ORANGE, string);
    }
    else if(!strlen(params))
    {
        return SendClientMessage(playerid, ORANGE, "USAGE: /akill [id | name]");
	}
	else
    {
		new id = strval(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, ORANGE, string);
		    format(string, sizeof(string), "You have successfully admin-killed player \'%s\'.", gPlayerInfo[id][PLAYER_NAME]);
		    return SendClientMessage(playerid, BLUE, string);
		}
		else
		{
	 	   return SendClientMessage(playerid, 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, ORANGE, string);
    }
    else if(!strlen(params))
    {
        return SendClientMessage(playerid, ORANGE, "USAGE: /announce [message]");
	}
	else
	{
        return GameTextForAll(params, gSettings[ANNOUNCE_SECONDS] * 1000, 3);
	}
}


public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
	return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
	return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
	return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
	return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
	return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
	return 1;
}
stock isNumeric(const string[]) {
	new length=strlen(string);
	if (length==0) return false;
	for (new i = 0; i < length; i++) {
		if (
		(string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
		|| (string[i]=='-' && i!=0)                                             // A '-' but not at first.
		|| (string[i]=='+' && i!=0)                                             // A '+' but not at first.
		) return false;
	}
	if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
	return true;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)