Error 048 array dimensions do not match

error 048 : array dimensions do not match Scripting Help

Hello, can someone help me with this please ?

Code:

//// furien40_weapons2.sma
Scripting Compilerfurien40_weapons2.sma(220) : warning 213: tag mismatch
Scripting Compilerfurien40_weapons2.sma(220) : error 048: array dimensions do not match
Scripting Compilerfurien40_weapons2.sma(356) : warning 213: tag mismatch
Scripting Compilerfurien40_weapons2.sma(356) : error 048: array dimensions do not match
Scripting Compilerfurien40_weapons2.sma(358) : warning 213: tag mismatch
Scripting Compilerfurien40_weapons2.sma(358) : error 048: array dimensions do not match
Scripting Compilerfurien40_weapons2.sma(395) : warning 213: tag mismatch
Scripting Compilerfurien40_weapons2.sma(395) : error 048: array dimensions do not match
Scripting Compilerfurien40_weapons2.sma(396) : warning 213: tag mismatch
Scripting Compilerfurien40_weapons2.sma(396) : error 048: array dimensions do not match

Here is the full source

Code:

//#define POWERS
#define MAX_WEAPONS		100
#define EV_INT_WeaponKey	EV_INT_impulse

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>

#include "furien40/furien40.inc"
#if defined POWERS
#include "furien40/furien40_powers.inc"
#endif

#define PLUGIN "Weapons Menu"
#define VERSION "4.0"
#define AUTHOR "Aragon*"

//------| Settings |------//
#define VIP_LEVEL	ADMIN_LEVEL_H
#define ADMIN_LEVEL	ADMIN_LEVEL_G

//--| Primary Weapons |--//
#define OICW
#define THANATOS11
#define THANATOS7
//#define AEOLIS
#define JANUS11
//#define JANUS7
#define JANUS3
//#define SPEARGUN
//#define PETROLBOOMER
#define SALAMANDER
#define AT4
#define ETHEREAL
#define RAILCANNON
#define PLASMAGUN
#define CROSSBOW
//#define COMPOUNDBOW
#define HK416
#define AK47KNIFE
#define F2000
#define TAR21
#define K1ASES
#define DUALMP7A1
#define QUADBARREL
#define M1887
#define THOMPSON
#define M134
//#define SKULL5
//#define SL8
//#define AW50

//--| Secondary Weapons |--//
//#define DRAGONCANNON
//#define JANUS1
#define M79
#define DUALDEAGLE
#define INFINITY
#define SKULL1
//#define ANACONDA

//--| Knifes |--//
//#define CLAWS
//#define SUPERCLAWS
//#define DUALKATANA
//#define BALROG9
//#define JANUS9
//#define RUYISTICK
//#define DRAGONSWORD
//#define PAPIN

//--| Grenades |--//
//#define SNARK
//#define FIRENADE
//#define FROSTNADE
//#define SFNADE

//--| C4 |--//
//#define LASERMINE
//------| End Settings |------//

enum WeaponsList {
	WPN_PRIMARY = 0,
	WPN_SECONDARY,
	WPN_KNIFE,
	WPN_GRENADE,
	WPN_C4
}
enum WeaponData {
	WPN_MENUNAME = 0,
	WPN_TEAM,
	WPN_ACCES,
	WPN_LEVEL,
	WPN_NAME,
	WPN_ID,
	WPN_LIST,
	WPN_CLIP
};
enum WeaponTeam {
	WPN_TEAM_ALL = 0,
	WPN_TEAM_T,
	WPN_TEAM_CT
};
enum WeaponAcces {
	WPN_ACCES_ALL = 0,
	WPN_ACCES_VIP,
	WPN_ACCES_ADMIN
};

new Menu, bool:ShowMenu[33], Weapons[WeaponsList] = 1, HasChoose[33][WeaponsList][4], WeaponKey[33][WeaponsList][4],
PrimaryWeapon[MAX_WEAPONS+1][WeaponData][33], SecondaryWeapon[MAX_WEAPONS+1][WeaponData][33], Knife[MAX_WEAPONS+1][WeaponData][33],
Grenade[MAX_WEAPONS+1][WeaponData][33], C4[MAX_WEAPONS+1][WeaponData][33],
MSGID_WeaponList, MSGID_DeathMsg, MSGID_ScoreInfo, MSGID_SayText, 
MSGID_CurWeapon, MSGID_Crosshair/*, MSGID_ScreenFade, MSGID_ScreenShake*/;

//------| Weapons Menu |------//
#define PRIMARY_WEAPONS_BITSUM		(1<<CSW_SCOUT | 1<<CSW_XM1014 | 1<<CSW_MAC10 | 1<<CSW_AUG | 1<<CSW_UMP45 | 1<<CSW_SG550 | 1<<CSW_GALIL | 1<<CSW_FAMAS | 1<<CSW_AWP | 1<<CSW_MP5NAVY | 1<<CSW_M249 | 1<<CSW_M3 | 1<<CSW_M4A1 | 1<<CSW_TMP | 1<<CSW_G3SG1 | 1<<CSW_SG552 | 1<<CSW_AK47 | 1<<CSW_P90)
#define SECONDARY_WEAPONS_BITSUM 	(1<<CSW_GLOCK18 | 1<<CSW_USP | 1<<CSW_P228 | 1<<CSW_DEAGLE | 1<<CSW_FIVESEVEN | 1<<CSW_ELITE)
#define AMMOWP_NULL 			(1<<0 | 1<<CSW_KNIFE | 1<<CSW_FLASHBANG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)
new Shell, BloodSpray, BloodDrop,
WeaponsAmmo[][] = {
	{ -1, -1 },
	{ 13, 52 },
	{ -1, -1 },
	{ 10, 90 },
	{ -1, -1 },
	{ 7, 32 },
	{ -1, -1 },
	{ 30, 100 },
	{ 30, 90 },
	{ -1, -1 },
	{ 30, 120 },
	{ 20, 100 },
	{ 25, 100 },
	{ 30, 90 },
	{ 35, 90 },
	{ 25, 90 },
	{ 12, 100 },
	{ 20, 120 },
	{ 10, 30 },
	{ 30, 120 },
	{ 100, 200 },
	{ 8, 32 },
	{ 30, 90 },
	{ 30, 120 },
	{ 20, 90 },
	{ -1, -1 },
	{ 7, 35 },
	{ 30, 90 },
	{ 30, 90 },
	{ -1, -1 },
	{ 50, 100 }
},
Prefix[] = "[VitalCS]",
Contact[] = "gabi_ics";

#include "furien40/weapons/Config.h"
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	MSGID_WeaponList 	= get_user_msgid("WeaponList")
	MSGID_DeathMsg 		= get_user_msgid("DeathMsg")
	MSGID_ScoreInfo 	= get_user_msgid("ScoreInfo")
	MSGID_SayText 		= get_user_msgid("SayText")
	MSGID_CurWeapon 	= get_user_msgid("CurWeapon")
	MSGID_Crosshair 	= get_user_msgid("Crosshair")
	/*MSGID_ScreenFade 	= get_user_msgid("ScreenFade")
	MSGID_ScreenShake 	= get_user_msgid("ScreenShake");*/
	Shell 			= engfunc(EngFunc_PrecacheModel, "models/rshell.mdl");
	
	register_clcmd("guns", 				"CMD_Guns");
	register_clcmd("say guns", 			"CMD_Guns");
	register_clcmd("say /guns", 			"CMD_Guns");
	register_clcmd("say_team guns", 		"CMD_Guns");
	register_clcmd("say_team /guns", 		"CMD_Guns");
	
	register_event("CurWeapon", 			"EVENT_CurWeapon", "be", "1=1")
	RegisterHam(Ham_Spawn, "player", 		"HAM_Spawn_Post", 1);
	RegisterHam(Ham_Touch, "weaponbox", 		"HAM_Touch")
	RegisterHam(Ham_Touch, "armoury_entity", 	"HAM_Touch")
	RegisterHam(Ham_Touch, "weapon_shield", 	"HAM_Touch")
	
	
	weapons_init()
}

public plugin_precache() {
	BloodSpray 	= precache_model("sprites/bloodspray.spr");
	BloodDrop  	= precache_model("sprites/blood.spr");
	
	weapons_precache()
}

public plugin_natives() {
	register_native("RegisterPrimary", 	"native_register_primary", 1)
	register_native("RegisterSecondary", 	"native_register_secondary", 1)
	register_native("RegisterKnife", 	"native_register_knife", 1)
	register_native("RegisterGrenade", 	"native_register_grenade", 1)
	register_native("RegisterC4", 		"native_register_c4", 1)
	register_native("OpenWeaponsMenu", 	"CMD_Guns", 1)
	register_native("get_weapon", 		"get_weapon", 1)
	register_native("set_weapon", 		"set_weapon", 1)
	register_native("get_weapon_data", 	"get_weapon_data", 1)
	register_native("set_weapon_data", 	"set_weapon_data", 1)
	
	weapons_natives()
}

public client_putinserver(id) {
	ShowMenu[id] = true
}

public grenade_throw(id, grenade, GrenadeID) {
	if(is_valid_ent(grenade) && is_user_alive(id)) {
		for(new i = 1; i < Weapons[WPN_GRENADE]; i++) {
			if(GrenadeID == str_to_num(Grenade[WPN_ID]) && get_user_weapon(id) == GrenadeID && get_weapon(id, Grenade[WPN_NAME], str_to_num(Grenade[WPN_ID]), i))
				entity_set_int(grenade, EV_INT_impulse, i);
		}
	}
	return FMRES_IGNORED;
}

public EVENT_CurWeapon(id) {
	if(is_user_connected(id) && is_user_alive(id)) {
		new Weapon = read_data(2)
		
		if(!(AMMOWP_NULL &(1<<Weapon))) {		
			if(fm_get_user_bpammo(id, Weapon) < WeaponsAmmo[Weapon][1]) 
				fm_set_user_bpammo(id, Weapon, WeaponsAmmo[Weapon][1])
		}
	}
	return PLUGIN_CONTINUE
}

public HAM_Spawn_Post(id) {
	if(is_user_alive(id)) {
		HasChoose[id][WPN_PRIMARY][get_user_team(id)] = false
		HasChoose[id][WPN_SECONDARY][get_user_team(id)] = false
		HasChoose[id][WPN_KNIFE][get_user_team(id)] = false
		HasChoose[id][WPN_GRENADE][get_user_team(id)] = false
		HasChoose[id][WPN_C4][get_user_team(id)] = false

		#if defined FIRENADE
		set_weapon(id, WPN_GRENADE, firenade_id())
		#endif
		#if defined FROSTNADE
		set_weapon(id, WPN_GRENADE, frostnade_id())
		#endif
		#if defined SFNADE
		set_weapon(id, WPN_GRENADE, sfnade_id())
		#endif
		
		if(get_user_team(id) == TEAM_ANTIFURIEN) {			
			if(ShowMenu[id]) 
				EquipmentMenu(id)
			else if(!ShowMenu[id])
				GiveLastWeapons(id)
			
		}
	}
	return HAM_IGNORED;
}

public HAM_Touch(ent, id) {
	if(is_user_alive(id)) {
		if(get_user_team(id) == TEAM_FURIEN && entity_get_int(ent, EV_INT_impulse) == 2)
			return HAM_SUPERCEDE	
		if(get_user_team(id) == TEAM_ANTIFURIEN && entity_get_int(ent, EV_INT_impulse) == 1)
			return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}

public CMD_Guns(id) {
	if(!ShowMenu[id]) {
		ShowMenu[id] = true
		ColorChat(id, "!t%s!gMeniul de!t echipamente!g a fost!t re-activat!g.", Prefix);
	}
	if(!HasChoose[id][WPN_PRIMARY][2] && !HasChoose[id][WPN_SECONDARY][2] && !HasChoose[id][WPN_KNIFE][2])
		EquipmentMenu(id)
	else if(!HasChoose[id][WPN_PRIMARY][2])
		PrimaryWeaponMenu(id, 0)
	else if(!HasChoose[id][WPN_SECONDARY][2])
		SecondaryWeaponMenu(id)
	else if(!HasChoose[id][WPN_KNIFE][2])
		KnifesMenu(id)
	return PLUGIN_CONTINUE;
}

public EquipmentMenu(id) {
	if(is_user_alive(id) && get_user_team(id) == TEAM_ANTIFURIEN) {
		menu_cancel(id)
		
		Menu = menu_create("wAnti-Furien Weapons", "EquipmentCmd");
		menu_additem(Menu, "wArme noi", "1", 0);
		if(WeaponKey[id][WPN_PRIMARY][2] && WeaponKey[id][WPN_SECONDARY][2] && WeaponKey[id][WPN_KNIFE][2]) {
			menu_additem(Menu, "wArmele anterioare", "2", 0);
			menu_additem(Menu, "wNu arata meniul din nou^n", "3", 0);
		}
		else {
			menu_additem(Menu, "dArmele anterioare", "2", 0);
			menu_additem(Menu, "dNu arata meniul din nou^n", "3", 0);
		}
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
}

public EquipmentCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != TEAM_ANTIFURIEN) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64], Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data, 5, Name, 63, CallBack);
	menu_destroy(menu);
	
	switch(str_to_num(Data)) {
		case 1: {
			if(!HasChoose[id][WPN_PRIMARY][2])
				PrimaryWeaponMenu(id, 0)
			else if(!HasChoose[id][WPN_SECONDARY][2])
				SecondaryWeaponMenu(id)
			else if(!HasChoose[id][WPN_KNIFE][2])
				KnifesMenu(id)
		}
		case 2: {
			if(WeaponKey[id][WPN_PRIMARY][2] && WeaponKey[id][WPN_SECONDARY][2] && WeaponKey[id][WPN_KNIFE][2])
				GiveLastWeapons(id)
			else EquipmentMenu(id)
		}
		case 3: {
			if(WeaponKey[id][WPN_PRIMARY][2] && WeaponKey[id][WPN_SECONDARY][2] && WeaponKey[id][WPN_KNIFE][2]) {
				ShowMenu[id] = false
				GiveLastWeapons(id)
			}
			else EquipmentMenu(id)
		}
	}
	return PLUGIN_HANDLED;
}

public PrimaryWeaponMenu(id, VIP) {
	if(is_user_alive(id) && get_user_team(id) == TEAM_ANTIFURIEN && !HasChoose[id][WPN_PRIMARY][2]) {
		menu_cancel(id);
		
		Menu = menu_create("rPrimar", "PrimaryCmd");
		
		if(VIP == 0) {
			new UltimateWeapon = 0, VIPWeapon = 0
			for(new i = 1; i < Weapons[WPN_PRIMARY]; i++) {
				if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && WeaponAcces:str_to_num(PrimaryWeapon[WPN_ACCES]) == WPN_ACCES_ADMIN)
					UltimateWeapon++
				if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && WeaponAcces:str_to_num(PrimaryWeapon[WPN_ACCES]) == WPN_ACCES_VIP)
					VIPWeapon++
			}
			
			if(UltimateWeapon) {
				if(get_user_flags(id) & ADMIN_LEVEL)
					menu_additem(Menu, "rUltimate Weapons", "-2", 0);
				else
					menu_additem(Menu, "dUltimate Weapons w- rOnly Owner's", "-2", 0);
				
			}
			if(VIPWeapon) {
				if(get_user_flags(id) & VIP_LEVEL)
					menu_additem(Menu, "rVIP Weapons", "-1", 0);
				else
					menu_additem(Menu, "dVIP Weapons w- rOnly VIP's", "-1", 0);
				
			}
			if(UltimateWeapon || VIPWeapon)
				menu_addblank(Menu, 0);
			
			menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		}
		else {
			menu_setprop(Menu, MPROP_EXITNAME, "Meniu Principal")
			menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
		}
		
		#if defined POWERS
		for(new i = 0; i < MAX_LEVEL; i++) {
			for(new k = 1; k < Weapons[WPN_PRIMARY]; k++) {
				if(str_to_num(PrimaryWeapon[k][WPN_LEVEL]) == i && WeaponTeam:str_to_num(PrimaryWeapon[k][WPN_TEAM]) != WPN_TEAM_T && str_to_num(PrimaryWeapon[k][WPN_ACCES]) == VIP)
					AddWeapon(id, Menu, PrimaryWeapon[k][WPN_MENUNAME], PrimaryWeapon[k][WPN_ACCES], PrimaryWeapon[k][WPN_LEVEL], k);
			}
		}
		#else
		for(new i = 1; i < Weapons[WPN_PRIMARY]; i++) {
			if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && str_to_num(PrimaryWeapon[WPN_ACCES]) == VIP)
				AddWeapon(id, Menu, PrimaryWeapon[WPN_MENUNAME], PrimaryWeapon[i][WPN_ACCES], PrimaryWeapon[i][WPN_LEVEL], i);
		}
		#endif
		menu_display(id, Menu, 0);
	}
}

public PrimaryCmd(id, menu, item) {
	if(!is_user_alive(id) || get_user_team(id) != TEAM_ANTIFURIEN || HasChoose[id][WPN_PRIMARY][2]) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	else if(item == MENU_EXIT) {
		menu_destroy(menu);
		PrimaryWeaponMenu(id, 0)
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64], Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data, 5, Name, 63, CallBack);
	menu_destroy(menu);
	
	if(equal(Data, "-2")) {
		if(get_user_flags(id) & ADMIN_LEVEL)
			PrimaryWeaponMenu(id, 2)
		else {
			if(!HasChoose[id][WPN_PRIMARY][2])
				PrimaryWeaponMenu(id, 0)
			else if(!HasChoose[id][WPN_SECONDARY][2])
				SecondaryWeaponMenu(id)
			else if(!HasChoose[id][WPN_KNIFE][2])
				KnifesMenu(id)
			ColorChat(id, "!t%s!gPentru a cumpara!t Admin!g adauga ID:!t %s", Prefix, Contact);
		}
	}
	else if(equal(Data, "-1")) {
		if(get_user_flags(id) & VIP_LEVEL)
			PrimaryWeaponMenu(id, 1)
		else {
			if(!HasChoose[id][WPN_PRIMARY][2])
				PrimaryWeaponMenu(id, 0)
			else if(!HasChoose[id][WPN_SECONDARY][2])
				SecondaryWeaponMenu(id)
			else if(!HasChoose[id][WPN_KNIFE][2])
				KnifesMenu(id)
			ColorChat(id, "!t%s!gPentru a cumpara!t VIP!g adauga ID:!t %s", Prefix, Contact);
		}
	}
	else {
		GivePrimary(id, str_to_num(Data))
		
		if(!HasChoose[id][WPN_PRIMARY][2])
			PrimaryWeaponMenu(id, 0)
		else
			SecondaryWeaponMenu(id)
	}
	return PLUGIN_HANDLED;
}

public SecondaryWeaponMenu(id) {
	if(is_user_alive(id)  && get_user_team(id) == TEAM_ANTIFURIEN && !HasChoose[id][WPN_SECONDARY][2]) {
		menu_cancel(id);
		
		Menu = menu_create("rSecundar", "SecondaryCmd");
		
		#if defined POWERS		
		for(new i = 0; i < MAX_LEVEL; i++) {
			for(new k = 1; k < Weapons[WPN_SECONDARY]; k++) {
				if(WeaponTeam:str_to_num(SecondaryWeapon[k][WPN_TEAM]) != WPN_TEAM_T && str_to_num(SecondaryWeapon[k][WPN_LEVEL]) == i)
					AddWeapon(id, Menu, SecondaryWeapon[k][WPN_MENUNAME], SecondaryWeapon[k][WPN_ACCES], SecondaryWeapon[k][WPN_LEVEL], k);
			}
		}		
		#else
		for(new i = 1; i < Weapons[WPN_SECONDARY]; i++) {
			if(WeaponTeam:str_to_num(SecondaryWeapon[i][WPN_TEAM]) != WPN_TEAM_T)
				AddWeapon(id, Menu, SecondaryWeapon[i][WPN_MENUNAME], SecondaryWeapon[i][WPN_ACCES], SecondaryWeapon[i][WPN_LEVEL], i);
		}
		#endif
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public SecondaryCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != TEAM_ANTIFURIEN || HasChoose[id][WPN_SECONDARY][2]) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64], Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data, 5, Name, 63, CallBack);
	menu_destroy(menu);
	
	GiveSecondary(id, str_to_num(Data))
	
	if(!HasChoose[id][WPN_SECONDARY][2])
		SecondaryWeaponMenu(id)
	else
		KnifesMenu(id)
	
	return PLUGIN_HANDLED;
}

public KnifesMenu(id) {
	if(is_user_alive(id)  && get_user_team(id) == TEAM_ANTIFURIEN && !HasChoose[id][WPN_KNIFE][2]) {
		menu_cancel(id);
		
		Menu = menu_create("rCutit", "KnifesCmd");
		
		#if defined POWERS		
		for(new i = 0; i < MAX_LEVEL; i++) {
			for(new k = 1; k < Weapons[WPN_KNIFE]; k++) {
				if(WeaponTeam:str_to_num(Knife[k][WPN_TEAM]) != WPN_TEAM_T && str_to_num(Knife[k][WPN_LEVEL]) == i)
					AddWeapon(id, Menu, Knife[k][WPN_MENUNAME], Knife[k][WPN_ACCES], Knife[k][WPN_LEVEL], k);
			}
		}
		#else
		for(new i = 1; i < Weapons[WPN_KNIFE]; i++) {
			if(WeaponTeam:str_to_num(Knife[i][WPN_TEAM]) != WPN_TEAM_T)
				AddWeapon(id, Menu, Knife[i][WPN_MENUNAME], Knife[i][WPN_ACCES], Knife[i][WPN_LEVEL], i);
		}
		#endif
		menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
		menu_display(id, Menu, 0);
	}
	return PLUGIN_CONTINUE;
}

public KnifesCmd(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id) || get_user_team(id) != TEAM_ANTIFURIEN || HasChoose[id][WPN_KNIFE][2]) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new Data[6], Name[64], Access, CallBack;
	menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
	menu_destroy(menu);
	
	GiveKnife(id, str_to_num(Data))
	
	if(!HasChoose[id][WPN_KNIFE][2])
		KnifesMenu(id)
	return PLUGIN_HANDLED;
}

public GiveLastWeapons(id) {
	if(!HasChoose[id][WPN_PRIMARY][2] && WeaponKey[id][WPN_PRIMARY][2] != -1)
		GivePrimary(id, WeaponKey[id][WPN_PRIMARY][2])
	if(!HasChoose[id][WPN_SECONDARY][2] && WeaponKey[id][WPN_SECONDARY][2] != -1)
		GiveSecondary(id, WeaponKey[id][WPN_SECONDARY][2])
	if(!HasChoose[id][WPN_KNIFE][2] && WeaponKey[id][WPN_KNIFE][2] != -1)
		GiveKnife(id, WeaponKey[id][WPN_KNIFE][2])
	
	if(!HasChoose[id][WPN_PRIMARY][2]) {
		WeaponKey[id][WPN_PRIMARY][2] = -1
		PrimaryWeaponMenu(id, 0)
	}
	else if(!HasChoose[id][WPN_SECONDARY][2]) {
		WeaponKey[id][WPN_SECONDARY][2] = -1
		SecondaryWeaponMenu(id)
	}
	else if(!HasChoose[id][WPN_KNIFE][2]) {
		WeaponKey[id][WPN_KNIFE][2] = -1
		KnifesMenu(id)
	}
}

public native_register_primary(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[], WeaponName[], WeaponID, Weapon_List[], WeaponClip[]) {
	param_convert(1)
	param_convert(4)
	param_convert(5)
	param_convert(7)
	param_convert(8)
	
	return RegisterPrimary(MenuName, Team, Acces, Level, WeaponName, WeaponID, Weapon_List, WeaponClip)
}

public native_register_secondary(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[], WeaponName[], WeaponID, Weapon_List[], WeaponClip[]) {
	param_convert(1)
	param_convert(4)
	param_convert(5)
	param_convert(7)
	param_convert(8)
	
	return RegisterSecondary(MenuName, Team, Acces, Level, WeaponName, WeaponID, Weapon_List, WeaponClip)
}

public native_register_knife(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[], Weapon_List[]) {
	param_convert(1)
	param_convert(4)
	param_convert(5)
	
	return RegisterKnife(MenuName, Team, Acces, Level, Weapon_List)
}

public native_register_grenade(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[], WeaponName[], WeaponID, Weapon_List[]) {
	param_convert(1)
	param_convert(4)
	param_convert(5)
	param_convert(7)
	
	return RegisterGrenade(MenuName, Team, Acces, Level, WeaponName, WeaponID, Weapon_List)
}

public native_register_c4(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[], Weapon_List[]) {
	param_convert(1)
	param_convert(4)
	param_convert(5)
	
	return RegisterC4(MenuName, Team, Acces, Level, Weapon_List)
}

public get_weapon(id, weapon_[], CSW_, WeaponID) {
	if(is_user_connected(id)) {
		new Weapon = find_ent_by_owner(-1, weapon_, id);
		
		if(is_user_alive(id) && user_has_weapon(id, CSW_) && pev_valid(Weapon))
			return entity_get_int(Weapon, EV_INT_impulse) == WeaponID ? true : false
	}
	return false
}

public set_weapon(id, WeaponsList:WeaponSet, WeaponID) {
	switch(WeaponSet) {	
		case WPN_PRIMARY:
			return GivePrimary(id, WeaponID)
		case WPN_SECONDARY:
			return GiveSecondary(id, WeaponID)
		case WPN_KNIFE:
			return GiveKnife(id, WeaponID)
		case WPN_GRENADE:
			return GiveGrenade(id, WeaponID)
		case WPN_C4:
			return GiveC4(id, WeaponID)
	}
	return false
}

public get_weapon_data(WeaponsList:WeaponSet, WeaponID, WeaponData:Data, Buffer[], len) {
	param_convert(4)
	
	if(WeaponID > -1 && WeaponID < Weapons[WeaponSet]) {
		switch(WeaponSet) {
			case WPN_PRIMARY: 
				format(Buffer, len, PrimaryWeapon[WeaponID][Data])
			case WPN_SECONDARY: 
				format(Buffer, len, SecondaryWeapon[WeaponID][Data])
			case WPN_KNIFE: 
				format(Buffer, len, Knife[WeaponID][Data])
			case WPN_GRENADE: 
				format(Buffer, len, Grenade[WeaponID][Data])
			case WPN_C4: 
				format(Buffer, len, C4[WeaponID][Data])
		}
	}
}

public set_weapon_data(WeaponsList:WeaponSet, WeaponID, WeaponData:Data, Buffer[]) {
	param_convert(4)
	
	if(WeaponID > -1 && WeaponID < Weapons[WeaponSet]) {
		switch(WeaponSet) {
			case WPN_PRIMARY: 
				format(PrimaryWeapon[WeaponID][Data], 32, Buffer)
			case WPN_SECONDARY: 
				format(PrimaryWeapon[WeaponID][Data], 32, Buffer)
			case WPN_KNIFE: 
				format(PrimaryWeapon[WeaponID][Data], 32, Buffer)
			case WPN_GRENADE: 
				format(Grenade[WeaponID][Data], 32, Buffer)
			case WPN_C4: 
				format(C4[WeaponID][Data], 32, Buffer)
		}
	}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Stock's |
//==========================================================================================================
public AddWeapon(id, Menu, Name[], Acces[], Level[], WeaponID) {
	new Weapon[64], Num[32];
	if(WeaponAcces:str_to_num(Acces) == WPN_ACCES_VIP && !(get_user_flags(id) & VIP_LEVEL))
		formatex(Weapon, sizeof(Weapon)-1, "d%s w- rOnly VIP", Name);
	else if(WeaponAcces:str_to_num(Acces) == WPN_ACCES_ADMIN && !(get_user_flags(id) & ADMIN_LEVEL))
		formatex(Weapon, sizeof(Weapon)-1, "d%s w- rOnly ADMIN", Name);
	#if defined POWERS
	else if(get_user_level(id) < (str_to_num(Level) > MAX_LEVEL ? MAX_LEVEL : str_to_num(Level)))
		formatex(Weapon, sizeof(Weapon)-1, "d%s w- rLocked r[yLevel: r%d]", Name, (str_to_num(Level) > MAX_LEVEL) ? MAX_LEVEL : str_to_num(Level));
	#endif
	else
		formatex(Weapon, sizeof(Weapon)-1, "w%s", Name);
	formatex(Num, sizeof(Num)-1, "%d", WeaponID);
	
	menu_additem(Menu, Weapon, Num, 0);
	return
}

public CanAcces(id, Team[], Acces[], Level[]) {
	if(WeaponAcces:str_to_num(Acces) == WPN_ACCES_VIP && !(get_user_flags(id) & VIP_LEVEL) || WeaponAcces:str_to_num(Acces) == WPN_ACCES_ADMIN && !(get_user_flags(id) & ADMIN_LEVEL))
		return false;
	if(WeaponTeam:str_to_num(Team) == WPN_TEAM_T && WeaponTeam:get_user_team(id) != WPN_TEAM_T || WeaponTeam:str_to_num(Team) == WPN_TEAM_CT && WeaponTeam:get_user_team(id) != WPN_TEAM_CT)
		return false;
	#if defined POWERS
	else if(get_user_level(id) < (str_to_num(Level) > MAX_LEVEL ? MAX_LEVEL : str_to_num(Level)))
		return false;
	#endif
	return true;
}

stock RegisterPrimary(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[] = "0", WeaponName[], WeaponID, Weapon_List[] = "None", WeaponClip[] = "0") {
	if(Weapons[WPN_PRIMARY] < 1)
		Weapons[WPN_PRIMARY] = 1
	
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_MENUNAME], 	32, MenuName)
	if(Team > WeaponTeam || Team < WPN_TEAM_ALL)
		format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_TEAM], 	32, "%d", WPN_TEAM_ALL)
	else
		format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_TEAM], 	32, "%d", Team)
	if(Acces > WeaponAcces || Acces < WPN_ACCES_ALL)
		format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_ACCES], 	32, "%d", WPN_ACCES_ALL)
	else
		format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_ACCES], 	32, "%d", Acces)
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_LEVEL], 		32, Level)
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_NAME], 		32, WeaponName)
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_ID], 		32, "%d", WeaponID)
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_LIST], 		32, Weapon_List)
	format(PrimaryWeapon[Weapons[WPN_PRIMARY]][WPN_CLIP], 		32, WeaponClip)
	Weapons[WPN_PRIMARY]++
	
	return Weapons[WPN_PRIMARY] - 1
}

stock RegisterSecondary(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[] = "0", WeaponName[], WeaponID, Weapon_List[] = "None", WeaponClip[] = "0") {
	if(Weapons[WPN_SECONDARY] < 1)
		Weapons[WPN_SECONDARY] = 1
	
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_MENUNAME], 		32, MenuName)
	if(Team > WeaponTeam || Team < WPN_TEAM_ALL)
		format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_TEAM], 	32, "%d", WPN_TEAM_ALL)
	else
		format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_TEAM], 	32, "%d", Team)
	if(Acces > WeaponAcces || Acces < WPN_ACCES_ALL)
		format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_ACCES], 	32, "%d", WPN_ACCES_ALL)
	else
		format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_ACCES], 	32, "%d", Acces)
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_LEVEL], 		32, Level)
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_NAME], 		32, WeaponName)
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_ID], 		32, "%d", WeaponID)
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_LIST], 		32, Weapon_List)
	format(SecondaryWeapon[Weapons[WPN_SECONDARY]][WPN_CLIP], 		32, WeaponClip)
	Weapons[WPN_SECONDARY]++
	
	return Weapons[WPN_SECONDARY] - 1
}

stock RegisterKnife(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[] = "0", Weapon_List[] = "None") {
	if(Weapons[WPN_KNIFE] < 1)
		Weapons[WPN_KNIFE] = 1
	
	format(Knife[Weapons[WPN_KNIFE]][WPN_MENUNAME], 	32, MenuName)
	if(Team > WeaponTeam || Team < WPN_TEAM_ALL)
		format(Knife[Weapons[WPN_KNIFE]][WPN_TEAM], 	32, "%d", WPN_TEAM_ALL)
	else
		format(Knife[Weapons[WPN_KNIFE]][WPN_TEAM], 	32, "%d", Team)
	if(Acces > WeaponAcces || Acces < WPN_ACCES_ALL)
		format(Knife[Weapons[WPN_KNIFE]][WPN_ACCES], 	32, "%d", WPN_ACCES_ALL)
	else
		format(Knife[Weapons[WPN_KNIFE]][WPN_ACCES], 	32, "%d", Acces)
	format(Knife[Weapons[WPN_KNIFE]][WPN_LEVEL], 		32, Level)
	format(Knife[Weapons[WPN_KNIFE]][WPN_LIST], 		32, Weapon_List)
	Weapons[WPN_KNIFE]++
	
	return Weapons[WPN_KNIFE] - 1
}

stock RegisterGrenade(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[] = "0", WeaponName[], WeaponID, Weapon_List[] = "None") {
	if(Weapons[WPN_GRENADE] < 1)
		Weapons[WPN_GRENADE] = 1
	
	format(Grenade[Weapons[WPN_GRENADE]][WPN_MENUNAME], 		32, MenuName)
	if(Team > WeaponTeam || Team < WPN_TEAM_ALL)
		format(Grenade[Weapons[WPN_GRENADE]][WPN_TEAM], 	32, "%d", WPN_TEAM_ALL)
	else
		format(Grenade[Weapons[WPN_GRENADE]][WPN_TEAM], 	32, "%d", Team)
	if(Acces > WeaponAcces || Acces < WPN_ACCES_ALL)
		format(Grenade[Weapons[WPN_GRENADE]][WPN_ACCES], 	32, "%d", WPN_ACCES_ALL)
	else
		format(Grenade[Weapons[WPN_GRENADE]][WPN_ACCES], 	32, "%d", Acces)
	format(Grenade[Weapons[WPN_GRENADE]][WPN_LEVEL], 		32, Level)
	format(Grenade[Weapons[WPN_GRENADE]][WPN_NAME], 		32, WeaponName)
	format(Grenade[Weapons[WPN_GRENADE]][WPN_ID], 			32, "%d", WeaponID)
	format(Grenade[Weapons[WPN_GRENADE]][WPN_LIST], 		32, Weapon_List)
	Weapons[WPN_GRENADE]++
	
	return Weapons[WPN_GRENADE] - 1
}

stock RegisterC4(MenuName[], WeaponTeam:Team, WeaponAcces:Acces, Level[] = "0", Weapon_List[] = "None") {
	if(Weapons[WPN_C4] < 1)
		Weapons[WPN_C4] = 1
	
	format(C4[Weapons[WPN_C4]][WPN_MENUNAME], 	32, MenuName)
	if(Team > WeaponTeam || Team < WPN_TEAM_ALL)
		format(C4[Weapons[WPN_C4]][WPN_TEAM], 	32, "%d", WPN_TEAM_ALL)
	else
		format(C4[Weapons[WPN_C4]][WPN_TEAM], 	32, "%d", Team)
	if(Acces > WeaponAcces || Acces < WPN_ACCES_ALL)
		format(C4[Weapons[WPN_C4]][WPN_ACCES], 	32, "%d", WPN_ACCES_ALL)
	else
		format(C4[Weapons[WPN_C4]][WPN_ACCES], 	32, "%d", Acces)
	format(C4[Weapons[WPN_C4]][WPN_LEVEL], 		32, Level)
	format(C4[Weapons[WPN_C4]][WPN_LIST], 		32, Weapon_List)
	Weapons[WPN_C4]++
	
	return Weapons[WPN_C4] - 1
}

public GivePrimary(id, WeaponID) {
	if(is_user_alive(id)) {
		if(WeaponID > 0 && WeaponID < Weapons[WPN_PRIMARY]) {
			if(CanAcces(id, PrimaryWeapon[WeaponID][WPN_TEAM], PrimaryWeapon[WeaponID][WPN_ACCES], PrimaryWeapon[WeaponID][WPN_LEVEL])) {
				new Weapon, Impulse = entity_get_int(id, EV_INT_impulse)
				HasChoose[id][WPN_PRIMARY][get_user_team(id)] = true
				WeaponKey[id][WPN_PRIMARY][get_user_team(id)] = WeaponID
				/*if(get_user_team(id) == TEAM_FURIEN)
					special_primary(id, true)*/
				
				drop_primary_weapons(id);
				
				if(equal(PrimaryWeapon[WeaponID][WPN_LIST], "None"))
					WeaponList(id, str_to_num(PrimaryWeapon[WeaponID][WPN_ID]), PrimaryWeapon[WeaponID][WPN_NAME], 0)
				else
					WeaponList(id, str_to_num(PrimaryWeapon[WeaponID][WPN_ID]), PrimaryWeapon[WeaponID][WPN_LIST], 0)
				
				entity_set_int(id, EV_INT_impulse, WeaponID);
				Weapon = fm_give_item(id, PrimaryWeapon[WeaponID][WPN_NAME]);
				entity_set_int(Weapon, EV_INT_impulse, WeaponID)
				entity_set_int(id, EV_INT_impulse, Impulse);
				
				if(!equal(PrimaryWeapon[WeaponID][WPN_CLIP], "0"))
					cs_set_weapon_ammo(Weapon, str_to_num(PrimaryWeapon[WeaponID][WPN_CLIP]))
				return true
			}
		}
	}
	return false
}

public GiveSecondary(id, WeaponID) {
	if(is_user_alive(id)) {
		if(WeaponID > 0 && WeaponID < Weapons[WPN_SECONDARY]) {
			if(CanAcces(id, SecondaryWeapon[WeaponID][WPN_TEAM], SecondaryWeapon[WeaponID][WPN_ACCES], SecondaryWeapon[WeaponID][WPN_LEVEL])) {
				new Weapon, Impulse = entity_get_int(id, EV_INT_impulse)
				HasChoose[id][WPN_SECONDARY][get_user_team(id)] = true
				WeaponKey[id][WPN_SECONDARY][get_user_team(id)] = WeaponID
				/*if(get_user_team(id) == TEAM_FURIEN)
					special_secondary(id, true)*/
				
				drop_secondary_weapons(id);
				
				if(equal(SecondaryWeapon[WeaponID][WPN_LIST], "None"))
					WeaponList(id, str_to_num(SecondaryWeapon[WeaponID][WPN_ID]), SecondaryWeapon[WeaponID][WPN_NAME], 0)
				else
					WeaponList(id, str_to_num(SecondaryWeapon[WeaponID][WPN_ID]), SecondaryWeapon[WeaponID][WPN_LIST], 0)
				
				entity_set_int(id, EV_INT_impulse, WeaponID);
				Weapon = fm_give_item(id, SecondaryWeapon[WeaponID][WPN_NAME]);
				entity_set_int(Weapon, EV_INT_impulse, WeaponID)
				entity_set_int(id, EV_INT_impulse, Impulse);
				
				if(!equal(SecondaryWeapon[WeaponID][WPN_CLIP], "0"))
					cs_set_weapon_ammo(Weapon, str_to_num(SecondaryWeapon[WeaponID][WPN_CLIP]))
				return true
			}
		}
	}
	return false
}

public GiveKnife(id, WeaponID) {
	if(is_user_alive(id)) {
		if(WeaponID > 0 && WeaponID < Weapons[WPN_KNIFE]) {
			if(CanAcces(id, Knife[WeaponID][WPN_TEAM], Knife[WeaponID][WPN_ACCES], Knife[WeaponID][WPN_LEVEL])) {
				new Weapon, Impulse = entity_get_int(id, EV_INT_impulse)
				HasChoose[id][WPN_KNIFE][get_user_team(id)] = true
				WeaponKey[id][WPN_KNIFE][get_user_team(id)] = WeaponID
				
				bacon_strip_weapon(id, "weapon_knife");
				
				if(equal(Knife[WeaponID][WPN_LIST], "None"))
					WeaponList(id, CSW_KNIFE, Knife[WeaponID][WPN_NAME], 0)
				else
					WeaponList(id, CSW_KNIFE, Knife[WeaponID][WPN_LIST], 0)
				
				entity_set_int(id, EV_INT_impulse, WeaponID);
				Weapon = fm_give_item(id, "weapon_knife");
				entity_set_int(Weapon, EV_INT_impulse, WeaponID)
				entity_set_int(id, EV_INT_impulse, Impulse);
				return true
			}
		}
	}
	return false
}

public GiveGrenade(id, WeaponID) {
	if(is_user_alive(id)) {
		if(WeaponID > 0 && WeaponID < Weapons[WPN_GRENADE]) {
			if(CanAcces(id, Grenade[WeaponID][WPN_TEAM], Grenade[WeaponID][WPN_ACCES], Grenade[WeaponID][WPN_LEVEL])) {
				new Weapon, Impulse = entity_get_int(id, EV_INT_impulse)
				HasChoose[id][WPN_GRENADE][get_user_team(id)] = true
				WeaponKey[id][WPN_GRENADE][get_user_team(id)] = WeaponID
				
				bacon_strip_weapon(id, Grenade[WeaponID][WPN_NAME]);
				
				if(equal(Grenade[WeaponID][WPN_LIST], "None"))
					WeaponList(id, str_to_num(Grenade[WeaponID][WPN_ID]), Grenade[WeaponID][WPN_NAME], 0)
				else
					WeaponList(id, str_to_num(Grenade[WeaponID][WPN_ID]), Grenade[WeaponID][WPN_LIST], 0)
				
				entity_set_int(id, EV_INT_impulse, WeaponID);
				Weapon = fm_give_item(id, Grenade[WeaponID][WPN_NAME]);
				entity_set_int(Weapon, EV_INT_impulse, WeaponID)
				entity_set_int(id, EV_INT_impulse, Impulse);
				return true
			}
		}
	}
	return false
}

public GiveC4(id, WeaponID) {
	if(is_user_alive(id)) {
		if(WeaponID > 0 && WeaponID < Weapons[WPN_C4]) {
			if(CanAcces(id, C4[WeaponID][WPN_TEAM], C4[WeaponID][WPN_ACCES], C4[WeaponID][WPN_LEVEL])) {
				new Weapon, Impulse = entity_get_int(id, EV_INT_impulse)
				HasChoose[id][WPN_C4][get_user_team(id)] = true
				WeaponKey[id][WPN_C4][get_user_team(id)] = WeaponID
				
				bacon_strip_weapon(id, "weapon_c4");
				
				if(equal(C4[WeaponID][WPN_LIST], "None"))
					WeaponList(id, CSW_C4, C4[WeaponID][WPN_NAME], 0)
				else
					WeaponList(id, CSW_C4, C4[WeaponID][WPN_LIST], 0)
				
				entity_set_int(id, EV_INT_impulse, WeaponID);
				Weapon = fm_give_item(id, "weapon_c4");
				entity_set_int(Weapon, EV_INT_impulse, WeaponID)
				entity_set_int(id, EV_INT_impulse, Impulse);
				return true
			}
		}
	}
	return false
}

stock WeaponList(id, CSW_WEAPON, const Weapon[], Flag=0) {
	switch(CSW_WEAPON) {
		case CSW_P228: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(9);			// PrimaryAmmoID
			write_byte(52);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(3);			// NumberInSlot (1...N)
			write_byte(CSW_P228);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_SCOUT: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(2);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(9);			// NumberInSlot (1...N)
			write_byte(CSW_SCOUT);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_HEGRENADE: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(12);			// PrimaryAmmoID
			write_byte(1);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(3);			// SlotID (0...N)
			write_byte(1);			// NumberInSlot (1...N)
			write_byte(CSW_HEGRENADE);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_XM1014: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(5);			// PrimaryAmmoID
			write_byte(32);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(12);			// NumberInSlot (1...N)
			write_byte(CSW_XM1014);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_C4: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(14);			// PrimaryAmmoID
			write_byte(1);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(4);			// SlotID (0...N)
			write_byte(3);			// NumberInSlot (1...N)
			write_byte(CSW_C4);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_MAC10: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(6);			// PrimaryAmmoID
			write_byte(100);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(13);			// NumberInSlot (1...N)
			write_byte(CSW_MAC10);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_AUG: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(14);			// NumberInSlot (1...N)
			write_byte(CSW_AUG);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_SMOKEGRENADE: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(13);			// PrimaryAmmoID
			write_byte(1);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(3);			// SlotID (0...N)
			write_byte(3);			// NumberInSlot (1...N)
			write_byte(CSW_SMOKEGRENADE);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_ELITE: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(10);			// PrimaryAmmoID
			write_byte(120);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(5);			// NumberInSlot (1...N)
			write_byte(CSW_ELITE);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_FIVESEVEN: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(7);			// PrimaryAmmoID
			write_byte(100);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(6);			// NumberInSlot (1...N)
			write_byte(CSW_FIVESEVEN);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_UMP45: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(6);			// PrimaryAmmoID
			write_byte(100);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(15);			// NumberInSlot (1...N)
			write_byte(CSW_UMP45);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_SG550: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(16);			// NumberInSlot (1...N)
			write_byte(CSW_SG550);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_GALIL: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(17);			// NumberInSlot (1...N)
			write_byte(CSW_GALIL);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_FAMAS: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(18);			// NumberInSlot (1...N)
			write_byte(CSW_FAMAS);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_USP: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(6);			// PrimaryAmmoID
			write_byte(100);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(4);			// NumberInSlot (1...N)
			write_byte(CSW_USP);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_GLOCK18: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(10);			// PrimaryAmmoID
			write_byte(120);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(2);			// NumberInSlot (1...N)
			write_byte(CSW_GLOCK18);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_AWP: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(1);			// PrimaryAmmoID
			write_byte(30);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(2);			// NumberInSlot (1...N)
			write_byte(CSW_AWP);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_MP5NAVY: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(10);			// PrimaryAmmoID
			write_byte(120);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(7);			// NumberInSlot (1...N)
			write_byte(CSW_MP5NAVY);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_M249: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(3);			// PrimaryAmmoID
			write_byte(200);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(4);			// NumberInSlot (1...N)
			write_byte(CSW_M249);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_M3: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(5);			// PrimaryAmmoID
			write_byte(32);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(5);			// NumberInSlot (1...N)
			write_byte(CSW_M3);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_M4A1: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(6);			// NumberInSlot (1...N)
			write_byte(CSW_M4A1);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_TMP: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(10);			// PrimaryAmmoID
			write_byte(120);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(11);			// NumberInSlot (1...N)
			write_byte(CSW_TMP);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_G3SG1: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(2);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(3);			// NumberInSlot (1...N)
			write_byte(CSW_G3SG1);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_FLASHBANG: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(11);			// PrimaryAmmoID
			write_byte(2);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(3);			// SlotID (0...N)
			write_byte(2);			// NumberInSlot (1...N)
			write_byte(CSW_FLASHBANG);	// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_DEAGLE: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(8);			// PrimaryAmmoID
			write_byte(35);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(1);			// SlotID (0...N)
			write_byte(1);			// NumberInSlot (1...N)
			write_byte(CSW_DEAGLE);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_SG552: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(10);			// NumberInSlot (1...N)
			write_byte(CSW_SG552);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_AK47: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(2);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(1);			// NumberInSlot (1...N)
			write_byte(CSW_AK47);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_KNIFE: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(-1);			// PrimaryAmmoID
			write_byte(-1);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(2);			// SlotID (0...N)
			write_byte(1);			// NumberInSlot (1...N)
			write_byte(CSW_KNIFE);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
		case CSW_P90: {
			message_begin(MSG_ONE, MSGID_WeaponList, _, id);
			write_string(Weapon);		// WeaponName
			write_byte(7);			// PrimaryAmmoID
			write_byte(100);		// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(8);			// NumberInSlot (1...N)
			write_byte(CSW_P90);		// WeaponID
			write_byte(Flag);		// Flags
			message_end();
		}
	}
}

public death_message(killer, victim, const WeaponName[]) {
	if(is_user_connected(killer) && is_user_alive(victim)) {
		set_msg_block(MSGID_DeathMsg, BLOCK_SET);
		ExecuteHamB(Ham_Killed, victim, killer);
		set_msg_block(MSGID_DeathMsg, BLOCK_NOT);
		cs_set_user_money(killer, cs_get_user_money(killer) + 300);
		
		make_deathmsg(killer, victim, 0, WeaponName);
		
		message_begin(MSG_BROADCAST, MSGID_ScoreInfo);
		write_byte(killer); 				// id
		write_short(pev(killer, pev_frags)); 		// frags
		write_short(cs_get_user_deaths(killer)); 	// deaths
		write_short(0); 				// class?
		write_short(get_user_team(killer)); 		// team
		message_end();
		
		message_begin(MSG_BROADCAST, MSGID_ScoreInfo);
		write_byte(victim); 				// id
		write_short(pev(victim, pev_frags)); 		// frags
		write_short(cs_get_user_deaths(victim)); 	// deaths
		write_short(0); 				// class?
		write_short(get_user_team(victim)); 		// team
		message_end();
	}
}

public make_knockback(id, Float:origin[3], Float:maxspeed) {
	if(is_user_alive(id)) {
		new Float:Velocity[3], Float:Origin[3], Float:Distance[3],
		Float:Time = (vector_distance(Origin,origin) / maxspeed);
		entity_get_vector(id, EV_VEC_origin, Origin);
		
		Distance[0] = Origin[0] - origin[0], Distance[1] = Origin[1] - origin[1], Distance[2] = Origin[2] - origin[2];
		Velocity[0] = Distance[0] / Time, Velocity[1] = Distance[1] / Time, Velocity[2] = Distance[2] / Time;
		
		entity_set_vector(id, EV_VEC_velocity, Velocity);
	}
}

public make_blood(id, Amount) {
	if(is_user_alive(id)) {
		new BloodColor = ExecuteHam(Ham_BloodColor, id);
		
		if(BloodColor != -1) {
			new Float:Origin[3]
			pev(id, pev_origin, Origin);
			Amount *= 2; //according to HLSDK
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_BLOODSPRITE);
			write_coord(floatround(Origin[0]));
			write_coord(floatround(Origin[1]));
			write_coord(floatround(Origin[2]));
			write_short(BloodSpray);
			write_short(BloodDrop);
			write_byte(BloodColor);
			write_byte(min(max(3, Amount/10), 16));
			message_end();
		}
	}
}

public make_bullet(id, Float:Origin[3]) {
	if(is_user_alive(id)) {
		new Target, Body;
		get_user_aiming(id, Target, Body, 999999);
		
		if(is_user_connected(Target)) {
			new Float:Start[3], Float:End[3], Float:Res[3], Float:Vel[3], Res2;
			pev(id, pev_origin, Start);
			
			velocity_by_aim(id, 64, Vel);
			
			Start[0] = Origin[0];
			Start[1] = Origin[1];
			Start[2] = Origin[2];
			End[0] = Start[0]+Vel[0];
			End[1] = Start[1]+Vel[1];
			End[2] = Start[2]+Vel[2];
			
			engfunc(EngFunc_TraceLine, Start, End, 0, Target, Res2);
			get_tr2(Res2, TR_vecEndPos, Res);
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY) ;
			write_byte(TE_BLOODSPRITE);
			write_coord(floatround(Start[0]));
			write_coord(floatround(Start[1]));
			write_coord(floatround(Start[2]));
			write_short(BloodSpray);
			write_short(BloodDrop);
			write_byte(70);
			write_byte(random_num(1,2));
			message_end();
			
			
		} 
		else {
			if(Target) {
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_DECAL);
				write_coord(floatround(Origin[0]));
				write_coord(floatround(Origin[1]));
				write_coord(floatround(Origin[2]));
				write_byte(41);
				write_short(Target);
				message_end();
			} 
			else {
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_WORLDDECAL);
				write_coord(floatround(Origin[0]));
				write_coord(floatround(Origin[1]));
				write_coord(floatround(Origin[2]));
				write_byte(41);
				message_end();
			}
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_GUNSHOTDECAL);
			write_coord(floatround(Origin[0]));
			write_coord(floatround(Origin[1]));
			write_coord(floatround(Origin[2]));
			write_short(id);
			write_byte(41);
			message_end();
		}
	}
}

public set_weapon_anim(id, anim) {
	if(is_user_connected(id)) {
		set_pev(id, pev_weaponanim, anim);
		message_begin(MSG_ONE, SVC_WEAPONANIM, _, id);
		write_byte(anim);
		write_byte(pev(id, pev_body));
		message_end();
	}
}

public get_damage_body(body, Float:damage) {
	switch(body) {
		case HIT_HEAD:
			damage *= 2.0;
		case HIT_STOMACH: 
			damage *= 1.0;
		case HIT_CHEST: 
			damage *= 1.5;
		case HIT_LEFTARM: 
			damage *= 0.75;
		case HIT_RIGHTARM: 
			damage *= 0.75;
		case HIT_LEFTLEG: 
			damage *= 0.75;
		case HIT_RIGHTLEG: 
			damage *= 0.75;
		default: damage *= 1.0;
	}
	
	return floatround(damage);
}	

public velocity_to_aim(id, Float:Origin[3], Speed, Float:Velocity[3]) {
	if(is_user_alive(id)) {
		new Float:AimOrigin[3]
		fm_get_aim_origin(id, AimOrigin)
		
		Velocity[0] = AimOrigin[0] - Origin[0]
		Velocity[1] = AimOrigin[1] - Origin[1]
		Velocity[2] = AimOrigin[2] - Origin[2]
		
		new Float:X
		X = floatsqroot(Speed*Speed / (Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]))
		
		Velocity[0] *= X
		Velocity[1] *= X
		Velocity[2] *= X
	}
}

public get_position(id, Float:forw, Float:right, Float:up, Float:Start[]) {
	if(is_user_alive(id)) {
		new Float:Origin[3], Float:Angle[3], Float:Forward[3], Float:Right[3], Float:Up[3]
		pev(id, pev_origin, Origin)
		pev(id, pev_view_ofs, Up)
		xs_vec_add(Origin, Up, Origin)
		if(id <= get_maxplayers())
			pev(id, pev_v_angle, Angle)
		else 
			pev(id, pev_angles, Angle)
		
		angle_vector(Angle, ANGLEVECTOR_FORWARD, Forward)
		angle_vector(Angle, ANGLEVECTOR_RIGHT, Right)
		angle_vector(Angle, ANGLEVECTOR_UP, Up)
		
		Start[0] = Origin[0] + Forward[0] * forw + Right[0] * right + Up[0] * up
		Start[1] = Origin[1] + Forward[1] * forw + Right[1] * right + Up[1] * up
		Start[2] = Origin[2] + Forward[2] * forw + Right[2] * right + Up[2] * up
	}
}

public fm_get_user_bpammo(id, CSW_WEAPON) {
	if(is_user_alive(id)) {
		switch(CSW_WEAPON) {
			case CSW_AWP:
				return get_pdata_int(id, 377)
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: 
				return get_pdata_int(id, 378)
			case CSW_M249: 
				return get_pdata_int(id, 379)
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: 
				return get_pdata_int(id, 380)
			case CSW_M3, CSW_XM1014: 
				return get_pdata_int(id, 381)
			case CSW_USP, CSW_UMP45, CSW_MAC10: 
				return get_pdata_int(id, 382)
			case CSW_FIVESEVEN, CSW_P90: 
				return get_pdata_int(id, 383)
			case CSW_DEAGLE: 
				return get_pdata_int(id, 384)
			case CSW_P228: 
				return get_pdata_int(id, 385)
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, CSW_MP5NAVY: 
				return get_pdata_int(id, 386)
			default: return 0
		}
	}
	return 0
}

public fm_set_user_bpammo(id, CSW_WEAPON, Amount) {
	if(is_user_alive(id)) {
		switch(CSW_WEAPON) {
			case CSW_AWP:
				set_pdata_int(id, 377, Amount)
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: 
				set_pdata_int(id, 378, Amount)
			case CSW_M249: 
				set_pdata_int(id, 379, Amount)
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: 
				set_pdata_int(id, 380, Amount)
			case CSW_M3, CSW_XM1014: 
				set_pdata_int(id, 381, Amount)
			case CSW_USP, CSW_UMP45, CSW_MAC10: 
				set_pdata_int(id, 382, Amount)
			case CSW_FIVESEVEN, CSW_P90: 
				set_pdata_int(id, 383, Amount)
			case CSW_DEAGLE: 
				set_pdata_int(id, 384, Amount)
			case CSW_P228: 
				set_pdata_int(id, 385, Amount)
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, CSW_MP5NAVY: 
				set_pdata_int(id, 386, Amount)
			default: return 0
		}
	}
	return 1
}

public drop_primary_weapons(id) {
	if(is_user_alive(id)) {
		new Weapons[32], Num = 0, WeaponID;
		get_user_weapons(id, Weapons, Num);
		
		for(new i = 0; i < Num; i++) {
			WeaponID = Weapons[i];
			
			if(((1<<WeaponID) & PRIMARY_WEAPONS_BITSUM)) {
				new WName[32];
				get_weaponname(WeaponID, WName, charsmax(WName));
				
				engclient_cmd(id, "drop", WName);
			}
		}
	}
}

public drop_secondary_weapons(id) {
	if(is_user_alive(id)) {
		new Weapons[32], Num = 0, WeaponID;
		get_user_weapons(id, Weapons, Num);
		
		for(new i = 0; i < Num; i++) {
			WeaponID = Weapons[i];
			
			if(((1<<WeaponID) & SECONDARY_WEAPONS_BITSUM)) {
				new WName[32];
				get_weaponname(WeaponID, WName, charsmax(WName));
				
				engclient_cmd(id, "drop", WName);
			}
		}
	}
}

public bacon_strip_weapon(index, weapon[]) {
	if(is_user_alive(index) && equal(weapon, "weapon_", 7)) {
		new WeaponID = get_weaponid(weapon)
		
		if(WeaponID) {
			new WeaponEnt = fm_find_ent_by_owner(-1, weapon, index)
			
			if(WeaponEnt) {
				if(get_user_weapon(index) == WeaponID) 
					ExecuteHamB(Ham_Weapon_RetireWeapon, WeaponEnt)
				
				ExecuteHamB(Ham_RemovePlayerItem, index, WeaponEnt)
				ExecuteHamB(Ham_Item_Kill, WeaponEnt)
				set_pev(index, pev_weapons, pev(index, pev_weapons) & ~(1<<WeaponID))
			}
		}
	}
}

stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) {
	new Players[32], Num = 1, Player;
	
	if(id) Players[0] = id;
	else get_players(Players, Num, "ch"); {
		for(new i = 0; i < Num; i++) {
			Player = Players[i]
			
			if(is_user_connected(Player)) {
				new color = (clamp(blue, 0, 255) + (clamp(green, 0, 255) << 8) + (clamp(red, 0, 255) << 16))
				
				message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, Player);
				write_byte(strlen(message) + 31);
				write_byte(DRC_CMD_MESSAGE);
				write_byte(effects);
				write_long(color);
				write_long(_:x);
				write_long(_:y);
				write_long(_:fadeintime);
				write_long(_:fadeouttime);
				write_long(_:holdtime);
				write_long(_:fxtime);
				write_string(message);
				message_end();
			}
		}
	}
}

stock ColorChat(const id, const input[], any:...) {
	new Players[32], Message[191], Num = 1, Player;
	vformat(Message, 190, input, 3);
	
	replace_all(Message, 190, "!g", "^4");
	replace_all(Message, 190, "!y", "^1");
	replace_all(Message, 190, "!t", "^3");
	
	if(id) Players[0] = id;
	else get_players(Players, Num, "ch"); {
		for(new i = 0; i < Num; i++) {
			Player = Players[i]
			
			if(is_user_connected(Player)) {
				message_begin(MSG_ONE_UNRELIABLE, MSGID_SayText, _, Player);
				write_byte(Player);
				write_string(Message);
				message_end();
			}
		}
	} 
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\ rtf1\ ansi\ deff0{\ fonttbl{\ f0\ fnil Tahoma;}}n\ viewkind4\ uc1\ pard\ lang1033\ f0\ fs16 n\ par }
*/

If is easier for you, here are those lines with error :

Code:

			if(GrenadeID == str_to_num(Grenade[WPN_ID]) && get_user_weapon(id) == GrenadeID && get_weapon(id, Grenade[WPN_NAME], str_to_num(Grenade[WPN_ID]), i))
				entity_set_int(grenade, EV_INT_impulse, i);



				if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && WeaponAcces:str_to_num(PrimaryWeapon[WPN_ACCES]) == WPN_ACCES_ADMIN)
					UltimateWeapon++
				if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && WeaponAcces:str_to_num(PrimaryWeapon[WPN_ACCES]) == WPN_ACCES_VIP)
					VIPWeapon++



			if(WeaponTeam:str_to_num(PrimaryWeapon[WPN_TEAM]) != WPN_TEAM_T && str_to_num(PrimaryWeapon[WPN_ACCES]) == VIP)
				AddWeapon(id, Menu, PrimaryWeapon[WPN_MENUNAME], PrimaryWeapon[i][WPN_ACCES], PrimaryWeapon[i][WPN_LEVEL], i);

Last edited by Pegasus6; 07-21-2019 at 12:33.

Из названия все ясно. ИД’ы всех ошибок, фатальных ошибок, а также предупреждений в PAWNO. 

error 001: expected token: «%s», but found «%s» — пропущен символ «%s», но найден «%s»;

error 002: only a single statement (or expression) can follow each «case» — Только один оператор и и выражение может следовать после «case»;

error 003: declaration of a local variable must appear in a compound block — Локальные переменные должны быть в блоке;

error 004: function «%s» is not implemented — функция «%s» не определена;

error 005: function may not have arguments — Функция может не иметь аргументов;

error 006: must be assigned to an array — Это должно быть в массиве;

error 007: operator cannot be redefined — Оператор не может использоваться;

error 008: must be a constant expression; assumed zero — Это должно быть константой равной нулю;

error 009: invalid array size (negative or zero) — Неправильный размер массива. Отрицательное значение или ноль;

error 010: invalid function or declaration — Неправильная функция;

error 011: invalid outside functions — Неправильный вывод функции;

error 012: invalid function call, not a valid address — Неправильный вызов функции;

error 013: no entry point (no public functions) — Не точка входа;

error 014: invalid statement; not in switch — Неверная команда;

error 015: «default» case must be the last case in switch statement — Оператор «default» должен быть последним;

error 016: multiple defaults in «switch» — Несколько операторов «default» в «switch»;

error 017: undefined symbol «%s» — неизвестный символ (неопределённая переменная) «%s»;

error 018: initialization data exceeds declared size — несовпадение данных в массиве с указанными рамками (увеличить размер массива);

error 019: not a label: %s» — %s — не строка;

error 020: invalid symbol name «%s» — ошибочное название символа (начинается с цифры, например);

error 021: symbol already defined: %s» — символ уже определён (дважды встречается new одного и того-же символа);

error 022: must be lvalue (non-constant) — Должна быть левой частью;

error 023: array assignment must be simple assignment — начения массива должны быть простыми;

error 024: «break» or «continue» is out of context — Операторы «break» или «continue» вне границ блока;

error 025: function heading differs from prototype — Функция заголовка отличается от прототипа;

error 026: no matching «#if…» — «#if…» — не найдено;

error 027: invalid character constant — Неправильные символы константы;

error 028: invalid subscript (not an array or too many subscripts): %s» — неверное выражение, нет результата %s является недействительным массивом;

error 029: invalid expression, assumed zero — неверное выражение, нет результата;

error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла, поставить return 1;} в конец мода;

error 031: unknown directive — неверная директива (подключение плагина в дефайнах, неверное установка пути инклуда и тому подобное);

error 032: array index out of bounds (variable «%s») — Индекс массива превышен;

error 033: array must be indexed (variable «%s») — Массив неизвестен;

error 034: argument does not have a default value (argument %d) — Аргумент не имеет начального значения;

error 035: argument type mismatch (argument %d) — Несоответствие типов аргумента;

error 036: empty statement — Пустой оператор;

error 037: invalid string (possibly non-terminated string) — незавершённая строка (обычно бывает, если забывам ставить закрывающие ковычки);

error 038: extra characters on line — Лишние символы в строке;

error 039: constant symbol has no size — Символьная константа не имеет размера;

error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним и тем же параметром;

error 041: invalid ellipsis, array size is not known — Размер массива неизвестно;

error 042: invalid combination of class specifiers — Недопустимое сочетание класса;

error 043: character constant exceeds range for packed string — Символьная константа превышает размер строки;

error 044: positional parameters must precede all named parameters — ;

error 045: too many function arguments — Слишком много аргументов для функции;

error 046: unknown array size (variable «%s») — Неизвестный размер массива %s;

error 047: array sizes do not match, or destination array is too small — размеры массивов конфликтуют, либо целевой массив слишком маленький (нужно увеличить число в квадратных скобках);

error 048: array dimensions do not match — Размеры массива не совпадают;

error 049: invalid line continuation — Неправильное продолжении линии;

error 050: invalid range — Неправильный диапазон;

error 051: invalid subscript, use «[ ]» operators on major dimensions — Неправильный индекс. Используйте «[ ]»;

error 052: multi-dimensional arrays must be fully initialized — Много размерные массивы должны быть

полностью установлены;

error 053: exceeding maximum number of dimensions — Превышение максимального числа измерений;

error 054: unmatched closing brace — Непревзойденная закрывающаяся скобка;

error 055: start of function body without function header — описание функции без заголовка (пропущен public(…));

error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ;

error 057: unfinished expression before compiler directive — Незавершенное выражение для компилятора;

error 058: duplicate argument; same argument is passed twice — Дублирование аргумента. Аргумент передается несколько раз;

error 059: function argument may not have a default value (variable «%s») — Аргумент не может иметь значение по-умолчанию;

error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif»;

error 061: «#elseif» directive follows an «#else» directive — «#elseif» перед «#else»;

error 062: number of operands does not fit the operator — Количество операторов не соответствует оператору;

error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;

error 064: cannot change predefined operators — Невозможно изменить уже определенные операторы;

error 065: function argument may only have a single tag (argument %d) — В этой функции может быть только один аргумент %d;

error 066: function argument may not be a reference argument or an array (argument «%s») — Аргумент функции не может быть ссылкой или массивом;

error 067: variable cannot be both a reference and an array (variable «%s») — Переменная %s не может быть как массив или ссылка;

error 068: invalid rational number precision in #pragma — Неправильное число в #pragma;

error 069: rational number format already defined — Формат рационального числа уже определен;

error 070: rational number support was not enabled — Рациональное число не поддерживается;

error 071: user-defined operator must be declared before use (function «%s») — Объявленный оператор должен быть перед использованием;

error 072: «sizeof» operator is invalid on «function» symbols — Оператор «sizeof» не может быть использован для символов;

error 073: function argument must be an array (argument «%s») — Аргумент %s должен быть массивом;

error 074: #define %s must start with an alphabetic character — макрос %s должен начинаться с букв;

error 075: input line too long (after substitutions) — слишком длинная строка после интеграции параметров (возможно, много лишних пробелов, или результативные данные слишком велики для строки (по длине));

error 076: syntax error in the expression, or invalid function call — Неправильный синтаксис или неправильный вызов функции;

error 077: malformed UTF-8 encoding, or corrupted file: %s — Плохая кодировка UTF-8 или плохой файл %s;

error 078: function uses both «return» and «return <value>» — Функция использует два «return»;

error 079: inconsistent return types (array & non-array) — несовместимость типов возвращённых результатов (массив и немассив) (сопоставить данные в функции и изменить типы переменных);

error 080: unknown symbol, or not a constant symbol (symbol «%s») — Неизвестный или непостоянный символ %s;

error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — Нельзя взять значение в массив %s;

error 082: user-defined operators and native functions may not have states — нативы и пользовательские операторы не могут иметь переключателей;

error 083: a function may only belong to a single automaton (symbol «%s») — Функция может принадлежать только к одной автоматизации;

error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — для функции %s уже определенна данная state;

error 085: no states are defined for function «%s» — не определенна ни одна state для функции %s;

error 086: unknown automaton «%s» — Неизвестная автоматизация %s;

error 087: unknown state «%s» for automaton «%s» — не определен state %s, для переключения %s;

error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;  

fatal error 100: cannot read from file: «%s» — невозможно прочитать/найти файл %s в стандартной директории;

fatal error 107: too many error messages on one line — слишком много ошибок на одной строке (обычно из-за одного неправильного параметра);

warning 200: symbol «%s» is truncated to 31 characters — название переменной %s обрезается до 31 символа (укоротите название переменной %s);

warning 201: redefinition of constant/macro (symbol «%s») — двойное определение одинаковой константы (смотреть #define);

warning 202: number of arguments does not match definition — несовпадение количества аргументов;

warning 203: symbol is never used: «%» — символ «%» нигде не используется;

warning 204: symbol is assigned a value that is never used: «%s» — символ создан, ему присваивается значение, но далее он не используется.

warning 208: function with tag result used before definition, forcing reparse — функция с типовым результатом используется перед объявлением

warning 209: function «%s» should return a value — функция %s должна возвращать какое-либо значение (return 1; к примеру);

warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;

warning 213: tag mismatch — несовпадение тэгов;

warning 215: expression has no effect — выражение не имеет эффекта;

warning 216: nested comment — вложенный комментарий (вынесите его за функцию);

warning 217: loose indentation — невыровненная строка (return должен быть строго под телом функции по левому краю, либо можно добавить в начало мода строку #pragma tabsize 0, но это не рекомендуется, так как иногда может не понимать и не прочитывать скобки «{» и «}»);

warning 219: local variable «%s» shadows a variable at a preceding level — переменная дважды объявлена;

warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — должен быть определён размер массива %s (если определён статиком, заменить дефайном);

warning 225: unreachable code — невалидный код;

warning 235: public function lacks forward declaration (symbol «%s») — необходим форвард функции %s (перед функцией пишем forward %s; 

Пояснение: «%s — имя переменной/макроса/аргумента функции».

Авторы: OKStyle, webserfer, Kaza40k, [Nos]B[R]aiN[L], Ym[0]n, _volk_, ДениСыч, Roman1us. 

При копировании на другие ресурсы, обязательно указывайте авторов, не зря ведь люди старались:)

Posts: 106
Threads: 27
Joined: Oct 2010

Reputation:

0

Код:

error 048: array dimensions do not match
error 048: array dimensions do not match

pawn Код:

format(pInfo,sizeof(pInfo)," ~g~ Level Up! ~w~ Your now level: [%d]",pInfo[playerid][pLevel]);

That is the line giving me the errors. Is there anything wrong with it?

Posts: 1,942
Threads: 89
Joined: Nov 2010

Reputation:

0

I think its not pInfo, try this but i’m not sure.

pawn Код:

format(string,sizeof(string)," ~g~ Level Up! ~w~ Your now level: [%d]",pInfo[playerid][pLevel]);

Posts: 106
Threads: 27
Joined: Oct 2010

Reputation:

0

Quote:

Originally Posted by Ironboy
Посмотреть сообщение

I think its not pInfo, try this but i’m not sure.

pawn Код:

format(string,sizeof(string)," ~g~ Level Up! ~w~ Your now level: [%d]",pInfo[playerid][pLevel]);

When I added new string[128] I got this, without it I still got a few errors to so.

Код:

error 048: array dimensions do not match

Posts: 1,942
Threads: 89
Joined: Nov 2010

Reputation:

0

Quote:

Originally Posted by kujox222
Посмотреть сообщение

When I added new string[128] I got this, without it I still got a few errors to so.

Код:

error 048: array dimensions do not match

Try new string[256];

Posts: 1,662
Threads: 199
Joined: Dec 2011

Reputation:

0

pawn Код:

format(pInfo,sizeof(pInfo)," ~g~ Level Up! ~w~ Your now level: [%d]",pInfo[playerid][pLevel]);

Do you even see what you are doing?

You are defining A as «You are now level a» while A is obviously an integer, and therefor can not be formatted like this,

Posts: 106
Threads: 27
Joined: Oct 2010

Reputation:

0

Quote:

Originally Posted by Ironboy
Посмотреть сообщение

Try new string[256];

Код:

: error 048: array dimensions do not match

Gave me that error again.

Posts: 1,662
Threads: 199
Joined: Dec 2011

Reputation:

0

Quote:

Originally Posted by kujox222
Посмотреть сообщение

Код:

: error 048: array dimensions do not match

Gave me that error again.

Ow ffs,

pawn Код:

new string[128];
format(string,sizeof(string)," Level Up! Your now level: [%d]",pInfo[playerid][pLevel]);
SendClientMessage(playerid, -1, string);

Posts: 1,662
Threads: 199
Joined: Dec 2011

Reputation:

0

Quote:

Originally Posted by Ironboy
Посмотреть сообщение

Try new string[256];

This makes NO sense, as the size of a string is the maximum size to be used, and will never return a syntax error.
The worst it can do is not formatting the entire string because of the text being too long, but that is not what is happening.

Dimensions do not match can be explain as you trying to walk into the depth while playing a 2D game, which is not possible.

Posts: 1,942
Threads: 89
Joined: Nov 2010

Reputation:

0

Quote:

Originally Posted by milanosie
Посмотреть сообщение

This makes NO sense, as the size of a string is the maximum size to be used, and will never return a syntax error.
The worst it can do is not formatting the entire string because of the text being too long, but that is not what is happening.

Dimensions do not match can be explain as you trying to walk into the depth while playing a 2D game, which is not possible.

I told him the correct format but he didn’t use his sense! :/


#1

Пользователь офлайн
 

Отправлено 01 сентября 2019 — 01:08

  • Новичок
new.pwn(7481) : error 048: array dimensions do not match
Pawn compiler 3.10.20160702	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.

stock LoadGangs()
{
    mysql_query(dbHandle, "SELECT * FROM `gangs` ORDER BY `id`");
    if(cache_num_rows() != 5) print("Кол-во банд в базе не совпадает с предопределным количеством");
	else
	{
		if(cache_num_rows() > 0)
		{
			for(new i;i<cache_num_rows();i++)
			{
				new ranks[256], cars[200];
				cache_get_field_content(i, "ranks", ranks, dbHandle, strlen(ranks));
				cache_get_field_content(i, "cars", cars, dbHandle, strlen(cars));
                gGangDormLimit[i] = cache_get_field_content_int(i, "dormlimit");
                gGangDorm[i][0] = cache_get_field_content_int(i, "gunamount");
                gGangCode[i] = cache_get_field_content_int(i, "code");
                gGangDorm[i][1] = cache_get_field_content_int(i, "ammo");
                gGangDorm[i][2] = cache_get_field_content_int(i, "drugs");
                gGangAccess[i][0] = cache_get_field_content_int(i, "dorma");
                gGangAccess[i][1] = cache_get_field_content_int(i, "invite");
                gGangAccess[i][2] = cache_get_field_content_int(i, "uninvite");
                gGangAccess[i][3] = cache_get_field_content_int(i, "giverank");
Тут ошибка                explode(gGangCars[i],cars,"|");
				explode(gFractionRankName[i+2],ranks,",");
			}
		}
		printf("[Загрузка MYSQL]: Банды успешно загружены. Потрачено: 3 mc");
	}
	return 1;
}

Помогите пожалуйста

0



#2

Отправлено 04 сентября 2019 — 02:39

  • Новичок

У тебя размеры массива не совпадают, пройди по строкам которые в компиляторе выдало и проверь.

Если не поможет?

Настолько я понимаю то у тебя стандартный компилятор ? Или от Zeex ? Если стандартный то рекомендую скачать
Также если ты используешь Sublime Text 3 то на ошибки смотри в компиляторе . Как показывает моя практика то иногда Sublime показывает страние ошибки.

Не поможет? (Врядтле)

тогда просто возьми резервную копию мода и перенеси изменения.

Надеюсь у тебя все получится.

0



#3

Отправлено 04 сентября 2019 — 16:03

  • Профессионал

Просмотр сообщенияDromoStudius (04 сентября 2019 — 02:39) писал:

Нажмите сюда, чтобы прочитать это сообщение. [

Показать

]

Я уважаю твое умение гуглить, даже плюс поставил бы, но, ты хоть когда копирайтишь — кидай ссыль на источник, человеку так будет проще ориентироваться + сможет адаптировать чужую проблему к своей.

Просмотр сообщенияByBelarus (01 сентября 2019 — 01:08) писал:

Нажмите сюда, чтобы прочитать это сообщение. [

Показать

]

Скинь как ты объявляешь переменные, которые в explode, то есть: (gGangCars[i] и gFractionRankName[i+2])

Сообщение отредактировал Bredemar12: 04 сентября 2019 — 16:05

0



#4

Отправлено 10 сентября 2019 — 16:31

  • Новичок

0


  • ← Предыдущая тема
  • Проблемы с компилированием
  • Следующая тема →

  • Вы не можете создать новую тему
  • Тема закрыта


1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей

error 001 expected token: «%s», but found «%s» ожидался символ: «%s», но был найден «%s» error 002 only a single statement (or expression) can follow each «case» только одно заявление (или выражение) могут следовать за «case» error 003 declaration of a local variable must appear in a compound block объявленная локальная переменная должна использоваться в этом же блоке error 004 function «%s» is not implemented функция %s не реализована error 005 function may not have arguments функция не имеет аргументов error 006 must be assigned to an array должен быть присвоен массив error 007 operator cannot be redefined оператор не может быть установлен еще раз error 008 must be a constant expression; assumed zero должно быть постоянным выражением; равным нулю error 009 invalid array size (negative or zero) неверный размер массива (отрицательный или 0) error 010 invalid function or declaration неизвестная функция или декларация error 011 invalid outside functions неверно вне функции error 012 invalid function call, not a valid address неверный вызов функции, неверный адрес error 013 no entry point (no public functions) нет точки входа (не public функция) error 014 invalid statement; not in switch неверный оператор; не в switch error 015 default case must be the last case in switch statement default должен быть последним условием в switch error 016 multiple defaults in «switch» несколько «default» в switch error 017 undefined symbol «%s» неизвестный символ «%s» error 018 initialization data exceeds declared size данные массива превышают его размер error 019 not a label: «%s» не метка «%s» error 020 invalid symbol name «%s» неверное имя символа «%s» error 021 symbol already defined: «%s» символ уже объявлен: «%s» error 022 must be lvalue (non-constant) должно быть левосторонним (нет постоянной) error 023 array assignment must be simple assignment назначение массива должно быть простым error 024 break or «continue» is out of context break или «continue» вне контекста error 025 function heading differs from prototype функция заголовка отличается от прототипа error 026 no matching «#if…» не найдено «#if…» error 027 invalid character constant недопустимый символ в постоянной error 028 invalid subscript (not an array or too many subscripts): «%s» неверный индекс (это не массив или слишком много индексов): «%s» error 029 invalid expression, assumed zero неверное выражение, нет результата error 030 compound statement not closed at the end of file составной оператор не закрыт в конце файла error 031 unknown directive неизвестная директива error 032 array index out of bounds (variable «%s») индекс массива превышен error 033 array must be indexed (variable «%s») массив должен быть проиндексирован error 034 argument does not have a default value (argument %d) аргумент не имеет начального значения (аргумент %d) error 035 argument type mismatch (argument %d) несоответствие типа аргумента (аргумент %d) error 036 empty statement пустой оператор error 037 invalid string (possibly non-terminated string) неправильная строка error 038 extra characters on line лишние символы в строке error 039 constant symbol has no size символьная константа не имеет размера error 040 duplicate «case» label (value %d) несколько раз объявлен «case» с одним тем же параметром error 041 invalid ellipsis, array size is not known размер массива неизвестен error 042 invalid combination of class specifiers недопустимое сочетание класса error 043 character constant exceeds range for packed string символьная константа превышает размер строки error 044 positional parameters must precede all named parameters позиционные параметры должны предшествовать всем именованным параметрам error 045 too many function arguments слишком много аргументов у функции error 046 unknown array size (variable «%s») неизвестный размер массива error 047 array sizes do not match, or destination array is too small размеры массива конфликтуют, либо целевой массив слишком маленький error 048 array dimensions do not match размеры массива не совпадают error 049 invalid line continuation неправильное продолжение строки error 050 invalid range неверный диапазон error 051 invalid subscript, use «[ ]» operators on major dimensions неправильный индекс, используйте «[]» error 052 multi-dimensional arrays must be fully initialized много-размерные массивы должны быть полностью определены error 053 exceeding maximum number of dimensions превышение максимального числа измерений error 054 unmatched closing brace не найдена закрывающаяся скобка error 055 start of function body without function header начало функции без заголовка error 056 arrays, local variables and function arguments cannot be public (variable «%s») массивы, локальные переменные и аргументы функции не могут быть общедоступными (переменная «% s») error 057 unfinished expression before compiler directive который недействителен. error 058 duplicate argument; same argument is passed twice дублирование аргумента; аргумент передается несколько раз error 059 function argument may not have a default value (variable «%s») аргумент не может иметь значение по-умолчанию error 060 multiple «#else» directives between «#if … #endif» несколько «#else» между «#if и #endif» error 061 #elseif directive follows an «#else» directive #else перед «#elseif» error 062 number of operands does not fit the operator Количество операторов не соотвествует оператору error 063 function result tag of operator «%s» must be «%s» Результат функции %s должен быть %s error 064 cannot change predefined operators невозможно изменить уже определенные операторы error 065 function argument may only have a single tag (argument %d) в этой функции может быть только один аргумент error 066 function argument may not be a reference argument or an array (argument «%s») аргумент функции не может быть ссылкой или массивом error 067 variable cannot be both a reference and an array (variable «%s») Переменная не может быть как массив или ссылка error 068 invalid rational number precision in #pragma неверное число в #pragma error 069 rational number format already defined формат рационального числа уже определен error 070 rational number support was not enabled рациональное число не поддерживается error 071 user-defined operator must be declared before use (function «%s») объявленный оператор должен быть перед использованием error 072 sizeof operator is invalid on «function» symbols оператор «sizeof» не может быть использован для символов функции error 073 function argument must be an array (argument «%s») аргумент %s должен быть массивом error 074 #define pattern must start with an alphabetic character #define должен начинаться с буквы error 075 input line too long (after substitutions) введенная строка слишком длинная error 076 syntax error in the expression, or invalid function call неправильный синтаксис или неправильный вызов функции error 077 malformed UTF-8 encoding, or corrupted file: %s плохая кодировка UTF-8 или плохой файл: %s error 078 «»}»>function uses both «return» and «return <value>» «»}»>функция использует «return» и «return <значение>» error 079 inconsistent return types (array & non-array) несовместимость типов возвращенных результатов error 080 unknown symbol, or not a constant symbol (symbol «%s») неизвестный или непостоянный символ: %s error 081 cannot take a tag as a default value for an indexed array parameter (symbol «%s») Нельзя взять значение в массив %s error 082 user-defined operators and native functions may not have states созданные функции или операторы не имеют состояния error 083 a function may only belong to a single automaton (symbol «%s») функция может принадлежать только к одной автоматизации error 084 state conflict: one of the states is already assigned to another implementation (symbol «%s») для функции %s уже определенна данная state error 085 no states are defined for function «%s» нет состояний, определенных для функции «%s» error 086 unknown automaton «%s» неизвестная автоматизация «%s» error 087 unknown state «%s» for automaton «%s» неизвестное состояние «%s» в автоматизации «%s» error 088 number of arguments does not match definitionn количество аргументов не совпадает с объявленными в функции
error 001: expected token: "%s", but found "%s" - ожидался символ: "%s", но был найден "%s";
error 002: only a single statement (or expression) can follow each "case" - только одно заявление (или выражение) могут следовать за "case";
error 003: declaration of a local variable must appear in a compound block - объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function "%s" is not implemented - функция %s не реализована;
error 005: function may not have arguments - функция не имеет аргументов;
error 006: must be assigned to an array - должен быть присвоен массив;
error 007: operator cannot be redefined - оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero - должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) - неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration - неизвестная функция или декларация;
error 011: invalid outside functions - неверно вне функции;
error 012: invalid function call, not a valid address - неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) - нет точки входа (не public функция);
error 014: invalid statement; not in switch - неверный оператор; не в switch;
error 015: "default" case must be the last case in switch statement - "default" должен быть последним условием в switch;
error 016: multiple defaults in "switch" - несколько "default" в switch;
error 017: undefined symbol "%s" - неизвестный символ "%s";
error 018: initialization data exceeds declared size - данные массива превышают его размер;
error 019: not a label: %s" - не метка "%s";
error 020: invalid symbol name "%s" - неверное имя символа "%s";
error 021: symbol already defined: %s" - символ уже объявлен: "%s";
error 022: must be lvalue (non-constant) - должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment - назначение массива должно быть простым;
error 024: "break" or "continue" is out of context - "break" или "continue" вне контекста;
error 025: function heading differs from prototype - функция заголовка отличается от прототипа;
error 026: no matching "#if..." - не найдено "#if...";
error 027: invalid character constant - недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): "%s" - неверный индекс (это не массив или слишком много индексов): "%s";
error 029: invalid expression, assumed zero - неверное выражение, нет результата;
error 030: compound statement not closed at the end of file - составной оператор не закрыт в конце файла;
error 031: unknown directive - неизвестная директива;
error 032: array index out of bounds (variable "%s") - индекс массива превышен;
error 033: array must be indexed (variable "%s") - массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) - аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) - несоответствие типа аргумента (аргумент %d);
error 036: empty statement - пустой оператор;
error 037: invalid string (possibly non-terminated string) - неправильная строка;
error 038: extra characters on line - лишние символы в строке;
error 039: constant symbol has no size - символьная константа не имеет размера;
error 040: duplicate "case" label (value %d) - несколько раз объявлен "case" с одним тем же параметром;
error 041: invalid ellipsis, array size is not known - размер массива неизвестен;
error 042: invalid combination of class specifiers - недопустимое сочетание класса;
error 043: character constant exceeds range for packed string - символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters - позиционные параметры должны предшествовать всем именованным параметрам;
error 045: too many function arguments - слишком много аргументов у функции;
error 046: unknown array size (variable "%s") - неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small - размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match - размеры массива не совпадают;
error 049: invalid line continuation - неправильное продолжение строки;
error 050: invalid range - неверный диапазон;
error 051: invalid subscript, use "[ ]" operators on major dimensions - неправильный индекс, используйте "[]";
error 052: multi-dimensional arrays must be fully initialized - много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions - превышение максимального числа измерений;
error 054: unmatched closing brace - не найдена закрывающаяся скобка;
error 055: start of function body without function header - начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable "%s") - массивы, локальные переменные и аргументы функции не могут быть общедоступными;
error 057: unfinished expression before compiler directive - незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice - дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable "%s") - аргумент не может иметь значение по-умолчанию;
error 060: multiple "#else" directives between "#if ... #endif" - Несколько "#else" между "#if ... #endif" - несколько "#else" между "#if и #endif";
error 061: "#elseif" directive follows an "#else" directive - "#else" перед "#elseif";
error 062: number of operands does not fit the operator - количество операндов не соответствует оператору;
error 063: function result tag of operator "%s" must be "%s" - Результат функции %s должен быть %s;
error 064: cannot change predefined operators - невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) - в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument "%s") - аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable "%s") - Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma - неверное число в #pragma;
error 069: rational number format already defined - формат рационального числа уже определен;
error 070: rational number support was not enabled - рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function "%s") - объявленный оператор должен быть перед использованием;
error 072: "sizeof" operator is invalid on "function" symbols - оператор "sizeof" не может быть использован для символов функции;
error 073: function argument must be an array (argument "%s") - аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character - #define должен начинаться с буквы;
error 075: input line too long (after substitutions - введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call - неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s - плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both "return" and "return <value>" - функция использует "return" и "return <значение>";
error 079: inconsistent return types (array & non-array) - несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol "%s") - неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol "%s") - не может принимать тег в качестве значения по умолчанию для параметра индексированного массива;
error 082: user-defined operators and native functions may not have states - созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol "%s") - функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol "%s") - конфликт состояния: одно из состояний уже назначено на другую реализацию;
error 085: no states are defined for function "%s" - нет состояний, определенных для функции "%s";
error 086: unknown automaton "%s" - неизвестная автоматизация "%s";
error 087: unknown state "%s" for automaton "%s" - неизвестное состояние "%s" в автоматизации "%s";
error 088: number of arguments does not match definition - количество аргументов не совпадает с объявленными в функции;

  • Команда форума
  • #1

[SourcePawn] Урок 2Установка и компиляция плагинов

<- К содержанию

  • Установка плагинов:

    Типы файлов:

    • .smx— Сам плагин после компилирования (нужен для работы).
      Расположение: addons/sourcemod/plugins/
    • .sp — Файл с исходным кодом (исходник нужен для компиляции, не нужен для работы).
      Расположение: addons/sourcemod/scripting/
    • .phrases.txt — Файл перевода (нужен для работы).
      Расположение: addons/sourcemod/translations/
    • .inc — Файл, в котором хранятся функции плагина (нужен для компиляции, не нужен для работы).
      Расположение: addons/sourcemod/scripting/include/
    • .cfg — Файл конфигурации плагина (нужен для работы).
      Расположение зависит от плагина. Часто генерируется по пути cfg/sourcemod/
    • .txt — Может быть использован как конфиг или как языковой файл (нужен для работы).
      Расположение зависит от плагина.
    • .ini — Конфигурационный файл (нужен для работы).
      Расположение зависит от плагина.

    Для установки плагина нужно разложить все файлы плагина по папкам указанным выше.

    Чтобы проверить работу плагина:

    Запускаем сервер, заходим в его консоль и пишем sm plugins list . В консоли появиться список работающих плагинов:

    upload_2016-9-5_17-40-35.png

    Проверяем есть ли в списке установленный Вами плагин, если он там есть, значит Вы сделали все правильно.

    • Команды SourceMod для работы с плагинами:
      sm plugins команда
      Команды:

      • info — Information about a plugin/Показывает информацию о плагине
      • list — Show loaded plugins/Выводит список установленных плагинов
      • load — Load a plugin/Загружает указанный плагин
      • load_lock — Prevents any more plugins from being loaded/Блокирует загрузку плагинов
      • load_unlock — Re-enables plugin loading/Снимает блокировку загрузки плагинов
      • refresh — Reloads/refreshes all plugins in the plugins folder/Обновляет/перезагружает загруженные плагины
      • reload — Reloads a plugin/Перезагружает указанный плагин
      • unload — Unload a plugin/Выгружает указанный плагин
      • unload_all — Unloads all plugins/Выгружает все плагины
  • Компиляция плагинов:

    Для редактирования исходников плагинов рекомендую использовать редактор Notepad++ (кликабельно)

    • Если у вас код не в файле .sp, а например, с форума то:
      • Создайте новый файл с расширением .sp
      • Откройте его с помощь notepad++ (см. выше)
      • Установите для него кодировку UTF-8 без BOM

        upload_2016-9-5_20-1-13.png

      • Скопируйте в него нужный код
      • Сохраните изменения
      • Произведите компиляцию (см. ниже)
    • Компиляция на Windows

      Скачайте SourceMod и распакуйте файлы из архива (в частности папку addons/sourcemod/scripting/ со всем её содержимым) в любое место, например, на рабочий стол. Будем называть её «папкой компилятора«. Из всего её содержимого необходимы только 2 файла: compile.exe, spcomp.exe и папка include.
      Затем положите в папку компилятора исходники вашего плагина (файлы с расширением *.sp и если есть файлы *.inc в папку include/).
      Отредактируйте исходник как вам нужно и затем

      перетащите главный файл .sp на сompile.exe — вы увидите черное окно с отчетом о компиляции.
      Если все в порядке и ошибок нет закройте это окно и можете забирать *.smx файл из папки compiled/.

      upload_2016-9-5_17-47-18.png

      Если у вас возникли ошибки при компиляции — необходимо их исправить.

    • Компиляция на Linux

      Чтобы скомпилировать плагин в unix системах:

      1. Откройте терминал (консоль)
      2. Перейдите в директорию /addons/sourcemod/scripting/ с помощью команды cd
      3. Скопируйте файл содержащий исходный код плагина (имеет расширение *.sp) в эту директорию командой cp
      4. Для компиляции некоторых плагинов нужны *.inc файлы которые нужно копировать в папку addons/sourcemod/scripting/include и затем компилировать плагин
      5. Выполните команду:
        ./compile.sh имя_плагина.sp

        Плагин должен скомпилироваться.

    Внимание! Нет разницы на какой OC компилировать плагины. Если ваш сервер работает на Linux, то плагины скомпилированные на Windows там так же будут работать.

    Если при компиляции возникли ошибки вам сюда -> Ошибки и предупреждения при компиляции

    Часть информации взята здесь.

Последнее редактирование: 21 Июл 2017

  • Команда форума
  • #2

Возможные ошибки при компиляции

Для начала разберём разницу между ошибкой (error) и предупреждением (warning).

  • Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
  • Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.

Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «

сомневается

«)

Коды ошибок

  • error 001: expected token: «%s», but found «%s» — ожидался символ: «%s», но был найден «%s»;
  • error 002: only a single statement (or expression) can follow each «case» — только одно заявление (или выражение) могут следовать за «case»;
  • error 003: declaration of a local variable must appear in a compound block — объявленная локальная переменная должна использоваться в этом же блоке;
  • error 004: function «%s» is not implemented — функция %s не реализована;
  • error 005: function may not have arguments — функция не имеет аргументов;
  • error 006: must be assigned to an array — должен быть присвоен массив;
  • error 007: operator cannot be redefined — оператор не может быть установлен еще раз;
  • error 008: must be a constant expression; assumed zero — должно быть постоянным выражением; равным нулю;
  • error 009: invalid array size (negative or zero) — неверный размер массива (отрицательный или 0);
  • error 010: invalid function or declaration — неизвестная функция или декларация;
  • error 011: invalid outside functions — неверно вне функции;
  • error 012: invalid function call, not a valid address — неверный вызов функции, неверный адрес;
  • error 013: no entry point (no public functions) — нет точки входа (не public функция);
  • error 014: invalid statement; not in switch — неверный оператор; не в switch;
  • error 015: «default» case must be the last case in switch statement — «default» должен быть последним условием в switch;
  • error 016: multiple defaults in «switch» — несколько «default» в switch;
  • error 017: undefined symbol «%s» — неизвестный символ «%s»;
  • error 018: initialization data exceeds declared size — данные массива превышают его размер;
  • error 019: not a label: %s» — не метка «%s»;
  • error 020: invalid symbol name «%s» — неверное имя символа «%s»;
  • error 021: symbol already defined: %s» — символ уже объявлен: «%s»;
  • error 022: must be lvalue (non-constant) — должно быть левосторонним (нет постоянной);
  • error 023: array assignment must be simple assignment — назначение массива должно быть простым;
  • error 024: «break» or «continue» is out of context — «break» или «continue» вне контекста;
  • error 025: function heading differs from prototype — функция заголовка отличается от прототипа;
  • error 026: no matching «#if…» — не найдено «#if…»;
  • error 027: invalid character constant — недопустимый символ в постоянной;
  • error 028: invalid subscript (not an array or too many subscripts): «%s» — неверный индекс (это не массив или слишком много индексов): «%s»;
  • error 029: invalid expression, assumed zero — неверное выражение, нет результата;
  • error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла;
  • error 031: unknown directive — неизвестная директива;
  • error 032: array index out of bounds (variable «%s») — индекс массива превышен;
  • error 033: array must be indexed (variable «%s») — массив должен быть проиндексирован;
  • error 034: argument does not have a default value (argument %d) — аргумент не имеет начального значения (аргумент %d);
  • error 035: argument type mismatch (argument %d) — несоответствие типа аргумента (аргумент %d);
  • error 036: empty statement — пустой оператор;
  • error 037: invalid string (possibly non-terminated string) — неправильная строка;
  • error 038: extra characters on line — лишние символы в строке;
  • error 039: constant symbol has no size — символьная константа не имеет размера;
  • error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним тем же параметром;
  • error 041: invalid ellipsis, array size is not known — размер массива неизвестен;
  • error 042: invalid combination of class specifiers — недопустимое сочетание класса;
  • error 043: character constant exceeds range for packed string — символьная константа превышает размер строки;
  • error 044: positional parameters must precede all named parameters — позиционные параметры должны предшествовать всем именованные параметры;
  • error 045: too many function arguments — слишком много аргументов у функции;
  • error 046: unknown array size (variable «%s») — неизвестный размер массива;
  • error 047: array sizes do not match, or destination array is too small — размеры массива конфликтуют, либо целевой массив слишком маленький;
  • error 048: array dimensions do not match — размеры массива не совпадают;
  • error 049: invalid line continuation — неправильное продолжение строки;
  • error 050: invalid range — неверный диапазон;
  • error 051: invalid subscript, use «[ ]» operators on major dimensions — неправильный индекс, используйте «[]»;
  • error 052: multi-dimensional arrays must be fully initialized — много-размерные массивы должны быть полностью определены;
  • error 053: exceeding maximum number of dimensions — превышение максимального числа измерений;
  • error 054: unmatched closing brace — не найдена закрывающаяся скобка;
  • error 055: start of function body without function header — начало функции без заголовка;
  • error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ?????;
  • error 057: unfinished expression before compiler directive — незавершенное выражение для компилятора;
  • error 058: duplicate argument; same argument is passed twice — дублирование аргумента; Аргумент передается несколько раз;
  • error 059: function argument may not have a default value (variable «%s») — аргумент не может иметь значение по-умолчанию;
  • error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif» — несколько «#else» между «#if и #endif»;
  • error 061: «#elseif» directive follows an «#else» directive — «#else» перед «#elseif»;
  • error 062: number of operands does not fit the operator — число операндов не соответствует оператору;
  • error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
  • error 064: cannot change predefined operators — невозможно изменить уже определенные операторы;
  • error 065: function argument may only have a single tag (argument %d) — в этой функции может быть только один аргумент;
  • error 066: function argument may not be a reference argument or an array (argument «%s») — аргумент функции не может быть ссылкой или массивом;
  • error 067: variable cannot be both a reference and an array (variable «%s») — Переменная не может быть как массив или ссылка;
  • error 068: invalid rational number precision in #pragma — неверное число в #pragma;
  • error 069: rational number format already defined — формат рационального числа уже определен;
  • error 070: rational number support was not enabled — рациональное число не поддерживается;
  • error 071: user-defined operator must be declared before use (function «%s») — объявленный оператор должен быть перед использованием;
  • error 072: «sizeof» operator is invalid on «function» symbols — оператор «sizeof» не может быть использован для символов функции;
  • error 073: function argument must be an array (argument «%s») — аргумент %s должен быть массивом;
  • error 074: #define %s must start with an alphabetic character — #define должен начинаться с буквы;
  • error 075: input line too long (after substitutions — введенная строка слишком длинная;
  • error 076: syntax *error in the expression, or invalid function call — неправильный синтаксис или неправильный вызов функции;
  • error 077: malformed UTF-8 encoding, or corrupted file: %s — плохая кодировка UTF-8 или плохой файл: %s;
  • error 078: function uses both «return» and «return <value>» — функция использует «return» и «return <значение>»;
  • error 079: inconsistent return types (array & non-array) — несовместимость типов возвращенных результатов;
  • error 080: unknown symbol, or not a constant symbol (symbol «%s») — неизвестный или непостоянный символ: %s;
  • error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% S»);
  • error 082: user-defined operators and native functions may not have states — созданные функции или операторы не имеют состояния;
  • error 083: a function may only belong to a single automaton (symbol «%s») — функция может принадлежать только к одной автоматизации;
  • error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %s);
  • error 085: no states are defined for function «%s» — нет состояний, определенных для функции «%s»;
  • error 086: unknown automaton «%s» — неизвестная автоматизация «%s»;
  • error 087: unknown state «%s» for automaton «%s» — неизвестное состояние «%s» в автоматизации «%s»;
  • error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;

Коды «Фатальных ошибок»

  • fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
  • fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;

Коды предупреждений

  • warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
  • warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
  • warning 202: number of arguments does not match definition — несовпадение количества аргументов;
  • warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
  • warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
  • warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
  • warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
  • warning 213: tag mismatch — несоответствие аргументов;
  • warning 215: expression has no effect — выражение не имеет смысла;
  • warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
  • warning 217: loose indentation — не выровненная строка;
  • warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
  • warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
  • warning 225: unreachable code — невыполнимый код;
  • warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
  • warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);

Последнее редактирование: 6 Сен 2016

  • #3

Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «сомневается»)

Я бы пример добавил:
Например если ошибка на 37 строке:
/home/home/GIT/addons/sourcemod/scripting/my_plugin.sp(37) : error 017: undefined symbol «EventHookM»

+ ещё стоит написать что если даже при компиляции не возникло ошибок и предупреждений, то нужно проверить /addons/sourcemod/logs/errors<сегодняшнее число>.log после того как плагин немного поработает.

  • #4

Возможные ошибки при компиляции

Для начала разберём разницу между ошибкой (error) и предупреждением (warning).

  • Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
    Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.

Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «

сомневается

«)

Коды ошибок

  • error 001: expected token: «%s», but found «%s» — ожидался символ: «%s», но был найден «%s»;
    error 002: only a single statement (or expression) can follow each «case» — только одно заявление (или выражение) могут следовать за «case»;
    error 003: declaration of a local variable must appear in a compound block — объявленная локальная переменная должна использоваться в этом же блоке;
    error 004: function «%s» is not implemented — функция %s не реализована;
    error 005: function may not have arguments — функция не имеет аргументов;
    error 006: must be assigned to an array — должен быть присвоен массив;
    error 007: operator cannot be redefined — оператор не может быть установлен еще раз;
    error 008: must be a constant expression; assumed zero — должно быть постоянным выражением; равным нулю;
    error 009: invalid array size (negative or zero) — неверный размер массива (отрицательный или 0);
    error 010: invalid function or declaration — неизвестная функция или декларация;
    error 011: invalid outside functions — неверно вне функции;
    error 012: invalid function call, not a valid address — неверный вызов функции, неверный адрес;
    error 013: no entry point (no public functions) — нет точки входа (не public функция);
    error 014: invalid statement; not in switch — неверный оператор; не в switch;
    error 015: «default» case must be the last case in switch statement — «default» должен быть последним условием в switch;
    error 016: multiple defaults in «switch» — несколько «default» в switch;
    error 017: undefined symbol «%s» — неизвестный символ «%s»;
    error 018: initialization data exceeds declared size — данные массива превышают его размер;
    error 019: not a label: %s» — не метка «%s»;
    error 020: invalid symbol name «%s» — неверное имя символа «%s»;
    error 021: symbol already defined: %s» — символ уже объявлен: «%s»;
    error 022: must be lvalue (non-constant) — должно быть левосторонним (нет постоянной);
    error 023: array assignment must be simple assignment — назначение массива должно быть простым;
    error 024: «break» or «continue» is out of context — «break» или «continue» вне контекста;
    error 025: function heading differs from prototype — функция заголовка отличается от прототипа;
    error 026: no matching «#if…» — не найдено «#if…»;
    error 027: invalid character constant — недопустимый символ в постоянной;
    error 028: invalid subscript (not an array or too many subscripts): «%s» — неверный индекс (это не массив или слишком много индексов): «%s»;
    error 029: invalid expression, assumed zero — неверное выражение, нет результата;
    error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла;
    error 031: unknown directive — неизвестная директива;
    error 032: array index out of bounds (variable «%s») — индекс массива превышен;
    error 033: array must be indexed (variable «%s») — массив должен быть проиндексирован;
    error 034: argument does not have a default value (argument %d) — аргумент не имеет начального значения (аргумент %d);
    error 035: argument type mismatch (argument %d) — несоответствие типа аргумента (аргумент %d);
    error 036: empty statement — пустой оператор;
    error 037: invalid string (possibly non-terminated string) — неправильная строка;
    error 038: extra characters on line — лишние символы в строке;
    error 039: constant symbol has no size — символьная константа не имеет размера;
    error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним тем же параметром;
    error 041: invalid ellipsis, array size is not known — размер массива неизвестен;
    error 042: invalid combination of class specifiers — недопустимое сочетание класса;
    error 043: character constant exceeds range for packed string — символьная константа превышает размер строки;
    error 044: positional parameters must precede all named parameters — позиционные параметры должны предшествовать всем именованные параметры;
    error 045: too many function arguments — слишком много аргументов у функции;
    error 046: unknown array size (variable «%s») — неизвестный размер массива;
    error 047: array sizes do not match, or destination array is too small — размеры массива конфликтуют, либо целевой массив слишком маленький;
    error 048: array dimensions do not match — размеры массива не совпадают;
    error 049: invalid line continuation — неправильное продолжение строки;
    error 050: invalid range — неверный диапазон;
    error 051: invalid subscript, use «[ ]» operators on major dimensions — неправильный индекс, используйте «[]»;
    error 052: multi-dimensional arrays must be fully initialized — много-размерные массивы должны быть полностью определены;
    error 053: exceeding maximum number of dimensions — превышение максимального числа измерений;
    error 054: unmatched closing brace — не найдена закрывающаяся скобка;
    error 055: start of function body without function header — начало функции без заголовка;
    error 056: arrays, local variables and function arguments cannot be public (variable «%s») — ?????;
    error 057: unfinished expression before compiler directive — незавершенное выражение для компилятора;
    error 058: duplicate argument; same argument is passed twice — дублирование аргумента; Аргумент передается несколько раз;
    error 059: function argument may not have a default value (variable «%s») — аргумент не может иметь значение по-умолчанию;
    error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif» — несколько «#else» между «#if и #endif»;
    error 061: «#elseif» directive follows an «#else» directive — «#else» перед «#elseif»;
    error 062: number of operands does not fit the operator — число операндов не соответствует оператору;
    error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
    error 064: cannot change predefined operators — невозможно изменить уже определенные операторы;
    error 065: function argument may only have a single tag (argument %d) — в этой функции может быть только один аргумент;
    error 066: function argument may not be a reference argument or an array (argument «%s») — аргумент функции не может быть ссылкой или массивом;
    error 067: variable cannot be both a reference and an array (variable «%s») — Переменная не может быть как массив или ссылка;
    error 068: invalid rational number precision in #pragma — неверное число в #pragma;
    error 069: rational number format already defined — формат рационального числа уже определен;
    error 070: rational number support was not enabled — рациональное число не поддерживается;
    error 071: user-defined operator must be declared before use (function «%s») — объявленный оператор должен быть перед использованием;
    error 072: «sizeof» operator is invalid on «function» symbols — оператор «sizeof» не может быть использован для символов функции;
    error 073: function argument must be an array (argument «%s») — аргумент %s должен быть массивом;
    error 074: #define %s must start with an alphabetic character — #define должен начинаться с буквы;
    error 075: input line too long (after substitutions — введенная строка слишком длинная;
    error 076: syntax *error in the expression, or invalid function call — неправильный синтаксис или неправильный вызов функции;
    error 077: malformed UTF-8 encoding, or corrupted file: %s — плохая кодировка UTF-8 или плохой файл: %s;
    error 078: function uses both «return» and «return <value>» — функция использует «return» и «return <значение>»;
    error 079: inconsistent return types (array & non-array) — несовместимость типов возвращенных результатов;
    error 080: unknown symbol, or not a constant symbol (symbol «%s») — неизвестный или непостоянный символ: %s;
    error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% S»);
    error 082: user-defined operators and native functions may not have states — созданные функции или операторы не имеют состояния;
    error 083: a function may only belong to a single automaton (symbol «%s») — функция может принадлежать только к одной автоматизации;
    error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %s);
    error 085: no states are defined for function «%s» — нет состояний, определенных для функции «%s»;
    error 086: unknown automaton «%s» — неизвестная автоматизация «%s»;
    error 087: unknown state «%s» for automaton «%s» — неизвестное состояние «%s» в автоматизации «%s»;
    error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;

Коды «Фатальных ошибок»

  • fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
    fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;

Коды предупреждений

  • warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
    warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
    warning 202: number of arguments does not match definition — несовпадение количества аргументов;
    warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
    warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
    warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
    warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
    warning 213: tag mismatch — несоответствие аргументов;
    warning 215: expression has no effect — выражение не имеет смысла;
    warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
    warning 217: loose indentation — не выровненная строка;
    warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
    warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
    warning 225: unreachable code — невыполнимый код;
    warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
    warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);

Мой пост :D

  • Команда форума
  • #5

Я нашел в базе своего старого форума, решил что будет полезно

  • #6

Я нашел в базе своего старого форума, решил что будет полезно

Я знаю, поэтому и улыбнуло)

  • Команда форума
  • #7

@Антон Облаков, spcomp.exe так же обязан лежать в папке с компилятором.

  • #9

Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).
Оффтоп

  • Команда форума
  • #10

@alexmy, разве перевода не достаточно? Как по мне — вполне.

  • Команда форума
  • #11

Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).

Что именно интересует? Могу написать.

  • #12

пару примеров исправления ошибок и предупреждений

Можно создать основную тему по исправлению

error/warning

, по мере наполнения базы вопросов/ответов, рядом с ‘Кодом №’ — сделать отсылки на примерное решение.

В самой теме перед реквестом, обязательное прочтение (‘Кодом №’) на уже готовые более-менее решения.

  • #13

Смысл такой, есть вообщем старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис. Вот плагин [L4D(2)] MultiSlots — AlliedModders куча ошибок, меня интересует сами части исправления. В интернете нечего подобного нету попадает хлам всякий и не более.

  • Команда форума
  • #14

@alexmy, оно даже под 1.7 не компилится.
upload_2017-3-3_18-56-10.png

  • #15

@alexmy, оно даже под 1.7 не компилится.
Посмотреть вложение 21768

И такого хлама все больше и больше будет с обновлением SM :D. Вот хотелось бы хотя бы простые примеры с исправление. не обязательно с этим плагином.

  • Команда форума
  • #16

@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.

  • #17

@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.

Ну вот я пробовал компилятором 1.5.3 почему то не выдает не одной ошибки и не предупреждение. Вот ошибка с плагина по ссылке

error 017: undefined symbol "SpawnFakeClientAndTeleport"

Вот это часть:
Оффтоп
тут её не должно быть… по сути или я что то не понимаю или компилятор в другой части когда находит это ошибку и бьет по всем SpawnFakeClientAndTeleport

  • #18

старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис.

Ошибки ввида ‘error 147: new-style declarations are required’ при ‘#pragma newdecls required’ лучше преобрести отдельную тему ‘new-style SourcePawn Transitional Syntax’ , например если @R1KO согласится, то за основу содержания ‘Темы Сообщения’ — перевода на новый синтаксис, можно взять Ядро плагина — [VIP] Core (либо другой, где присутствует множество функций) — [Shop] Core, Ядро плагина — [Shop] Core (Fork).

Что имеем:
#a. некоторый разбор перевода new-style.
#b. перевод большого выбранного ядра.
#c. возможное нахождение трудно замечаемых ошибок/недочетов.
#d. отсутствующие примеры функций будут позже в комментариях.

Если с выходом нового sm — старый синтаксис будет обратно

не совместим

, то к этому времени у большенства будет имется некий опыт, для перевода

не

обновляемых

нужных

плагинов, на актуальный sm.

Чем больше придерживаются к актуальному, прежде всего стабильному sm — тем ошибки идентичные, которые легче найти/отписать решение, либо иначе самому написать в BugReport т.к. ситуация позволяет.

P.S.:
для (v34) старее sm_1.7- есть обновляемая тема [CS:S v34] SourceMod 1.6.x/1.7.x/1.8.x.

Если создавать эти темы, то лучше именно обладателю ядра @R1KO, @FrozDark, …, т.к. может быть будет не приятно, если будут иные «ковырять» код.
И если согласятся, то думаю другие тоже подключаться.

Или просто написать гайд по переводу Ru:Introduction to SourcePawn 1.7, SourcePawn Transitional Syntax и простеньких «побольше» примеров.

Последнее редактирование: 3 Мар 2017

  • Команда форума
  • #19

@DarklSide, у меня уже есть отдельная версия, которую я буду переводить. можно на её примере

  • #20

@R1KO, тогда могу присоединится, т.к. большенство действий является «однотипное» для большого кол-ва кода.
При этом

пометить

места, которые могут войти в содержание темы.

[HR][/HR]

error 001: expected token: «%s», but found «%s» — пропущен символ «%s», но найден «%s»;

error 002: only a single statement (or expression) can follow each «case» — Только один оператор или выражение может
следовать после «case»;

error 003: declaration of a local variable must appear in a compound block — Локальные переменные должны быть в блоке;
error 004: function «%s» is not implemented — функция «%s» не определена;
error 005: function may not have arguments — Функция может не иметь аргументов;
error 006: must be assigned to an array — Это должно быть в массиве;
error 007: operator cannot be redefined — Оператор не может использоваться;
error 008: must be a constant expression; assumed zero — Это должно быть константой равной нулю;
error 009: invalid array size (negative or zero) — Неправильный размер массива. Отрицательное
значение или ноль;

error 010: invalid function or declaration — Неправильная функция;
error 011: invalid outside functions — Неправильный вывод функции;
error 012: invalid function call, not a valid address — Неправильный вызов функции;
error 013: no entry point (no public functions) — Не точка входа;
error 014: invalid statement; not in switch — Неверная команда;
error 015: «default» case must be the last case in switch statement — Оператор «default» должен быть последним;
error 016: multiple defaults in «switch» — Несколько операторов «default» в «switch»;
error 017: undefined symbol «%s» — неизвестный символ (неопределённая переменная) «%s»;
error 018: initialization data exceeds declared size — несовпадение данных в массиве с указанными рамками (увеличить размер массива);
error 019: not a label: %s» — %s — не строка;
error 020: invalid symbol name «%s» — ошибочное название символа (начинается с цифры, например);
error 021: symbol already defined: %s» — символ уже определён (дважды встречается new одного и того же символа);
error 022: must be lvalue (non-constant) — Должна быть левой частью;
error 023: array assignment must be simple assignment — значения массива должны быть простыми;
error 024: «break» or «continue» is out of context — Операторы «break» или «continue» вне границ
блока;

error 025: function heading differs from prototype — Функция заголовка отличается от прототипа;
error 026: no matching «#if…» — «#if…» — не найдено;
error 027: invalid character constant — Неправильные символы константы;
error 028: invalid subsсript (not an array or too many subsсripts): %s» — неверное выражение, нет результата
%s является недействительным массивом;
error 029: invalid expression, assumed zero — неверное выражение, нет результата;
error 030: compound statement not closed at the end of file — составной оператор не закрыт в конце файла, поставить return 1;} в конец мода;
error 031: unknown directive — неверная директива (подключение плагина в дефайнах, неверное установка пути инклюда и тому подобное);
error 032: array index out of bounds (variable «%s») — Индекс массива превышен;
error 033: array must be indexed (variable «%s») — Массив неизвестен;
error 034: argument does not have a default value (argument %d) — Аргумент не имеет начального значения;
error 035: argument type mismatch (argument %d) — Несоответствие типов аргумента;
error 036: empty statement — Пустой оператор;
error 037: invalid string (possibly non-terminated string) — незавершённая строка (обычно бывает, если забывам ставить закрывающие ковычки);
error 038: extra characters on line — Лишние символы в строке;
error 039: constant symbol has no size — Символьная константа не имеет размера;
error 040: duplicate «case» label (value %d) — несколько раз объявлен «case» с одним и тем же параметром;
error 041: invalid ellipsis, array size is not known — Размер массива неизвестно;
error 042: invalid combination of class specifiers — Недопустимое сочетание класса;
error 043: character constant exceeds range for packed string — Символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters — return ;
error 045: too many function arguments — Слишком много аргументов для функции;
error 046: unknown array size (variable «%s») — Неизвестный размер массива %s;
error 047: array sizes do not match, or destination array is too small — размеры массивов конфликтуют, либо целевой массив слишком маленький (нужно увеличить число в квадратных скобках);
error 048: array dimensions do not match — Размеры массива не совпадают;
error 049: invalid line continuation — Неправильное продолжении линии;
error 050: invalid range — Неправильный диапазон;
error 051: invalid subsсript, use «[ ]» operators on major dimensions — Неправильный индекс. Используйте «[ ]»;
error 052: multi-dimensional arrays must be fully initialized — Много размерные массивы должны быть
полностью установлены;

error 053: exceeding maximum number of dimensions — Превышение максимального числа измерений;
error 054: unmatched closing brace — Непревзойденная закрывающаяся скобка;
error 055: start of function body without function header — описание функции без заголовка (пропущен public(…));
error 056: arrays, local variables and function arguments cannot be public (variable «%s») — return;
error 057: unfinished expression before compiler directive — Незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice — Дублирование аргумента. Аргумент передается
несколько раз;

error 059: function argument may not have a default value (variable «%s») — Аргумент не может иметь значение по-умолчанию;
error 060: multiple «#else» directives between «#if … #endif» — Несколько «#else» между «#if … #endif»;
error 061: «#elseif» directive follows an «#else» directive — «#elseif» перед «#else»;
error 062: number of operands does not fit the operator — Количество операторов не соотвествует
оператору;

error 063: function result tag of operator «%s» must be «%s» — Результат функции %s должен быть %s;
error 064: cannot change predefined operators — Невозможно изменить уже определенные
операторы;

error 065: function argument may only have a single tag (argument %d) — В этой функции может быть только один аргумент
%d;

error 066: function argument may not be a reference argument or an array (argument «%s») — Аргумент функции не может быть ссылкой или
массивом;

error 067: variable cannot be both a reference and an array (variable «%s») — Переменная %s не может быть как массив или
ссылка;

error 068: invalid rational number precision in #pragma — Неправильное число в #pragma;
error 069: rational number format already defined — Формат рационального числа уже определен;
error 070: rational number support was not enabled — Рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function «%s») — Объявленный оператор должен быть перед
использованием;

error 072: «sizeof» operator is invalid on «function» symbols — Оператор «sizeof» не может быть использован для
символов;

error 073: function argument must be an array (argument «%s») — Аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character — макрос %s должен начинаться с буквы;
error 075: input line too long (after substitutions) — слишком длинная строка после интеграции параметров (возможно, много лишних пробелов, или результативные данные слишком велики для строки (по длине));
error 076: syntax error in the expression, or invalid function call — Неправильный синтаксис или неправильный вызов
функции;

error 077: malformed UTF-8 encoding, or corrupted file: %s — Плохая кодировка UTF-8 или плохой файл %s;
error 078: function uses both «return» and «return <value>» — Функция использует два «return»;
error 079: inconsistent return types (array & non-array) — несовместимость типов возвращённых результатов (массив и немассив) (сопоставить данные в функции и изменить типы переменных);
error 080: unknown symbol, or not a constant symbol (symbol «%s») — Неизвестный или непостоянный символ %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol «%s») — Нельзя взять значение в массив %s;
error 082: user-defined operators and native functions may not have states — найтивы и пользоваельские операторы не могут иметь переключателей;
error 083: a function may only belong to a single automaton (symbol «%s») — Функция может принадлежать только к одной
автоматизации;

error 084: state conflict: one of the states is already assigned to another implementation (symbol «%s») — для функции %s уже определенна данная state;
error 085: no states are defined for function «%s» — не определенна ни одна state для функции %s;
error 086: unknown automaton «%s» — Неизвестная автоматизация %s;
error 087: unknown state «%s» for automaton «%s» — не определен state %s, для переключения %s;
error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;

Критические
ошибки:

fatal error 100: cannot read from file: «%s» — невозможно прочитать/найти файл %s в стандартной директории;
fatal error 107: too many error messages on one line — слишком много ошибок на одной строке (обычно из-за одного неправильного параметра);

Варнинги:

warning 200: symbol «%s» is truncated to 31 characters — название переменной %s обрезается до 31 символа (укоротите название переменной %s);
warning 201: redefinition of constant/macro (symbol «%s») — двойное определение одинаковой константы (смотреть #define);
warning 202: number of arguments does not match definition — несовпадение количества аргументов;
warning 203: symbol is never used: «%» — символ «%» нигде не используется;
warning 204: symbol is assigned a value that is never used: «%s» — символ создан, ему присваивается значение, но далее он не используется.
warning 209: function «%s» should return a value — функция %s должна возвращать какое-либо значение (return 1; к примеру);
warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
warning 213: tag mismatch — несовпадение тэгов;
warning 215: expression has no effect — выражение не имеет эффекта;
warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
warning 217: loose indentation — невыровненная строка (return должен быть строго под телом функции по левому краю, либо можно добавить в начало мода строку #pragma tabsize 0, но это не рекомендуется, так как иногда может не понимать и не прочитывать скобки «{» и «}»);
warning 219: local variable «%s» shadows a variable at a preceding level — переменная дважды объявлена;
warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — должен быть определён размер массива %s (если определён статиком, заменить дефайном);
warning 225: unreachable code — невалидный код;
warning 235: public function lacks forward declaration (symbol «%s») — необходим форвард функции %s (перед функцией пишем forward %s;

[/LEFT]

[HR][/HR]

Примечание:

Если Вы заметили какую нибудь ошибку либо недочёт, прошу отписать в данной теме.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error 037 invalid string possibly non terminated string
  • Error 036 павно
  • Error 036 empty statement amxx
  • Error 035 pawn
  • Error 033 array must be indexed variable unknown

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии