Отново проблем с армий ранкс.

Въведение в PAWN скриптинга и поддръжка за същия.
Аватар
devilchy
Извън линия
Потребител
Потребител
Мнения: 223
Регистриран на: 03 Фев 2017, 14:08
Местоположение: Burgas
Се отблагодари: 3 пъти
Получена благодарност: 6 пъти
Обратна връзка:

Отново проблем с армий ранкс.

Мнение от devilchy » 09 Май 2022, 03:46

След което Zolfeca ми помогна за този проблем ==> Цъкни тук този проблем се оправи.Но сега пък възникна друг проблем дропи ми няква грешка в конзолата свързано със Mysql.

Въпросната грешка:

Код за потвърждение: Избери целия код

[army_ranks_syssql.amxx] Load Query failed. [1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's @ marKeLoNNN ~')' at line 1
кода на плъгина:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
//#include <fvault>
#include <fakemeta>
#include <hamsandwich>





#include <sqlx>  

new Host[]     = ""
new User[]    = ""
new Pass[]     = ""
new Db[]     = ""

new Handle:g_SqlTuple
new g_Error[512], g_db_status
#define TASK_BANK 78956
#define DB_NONE 0
#define DB_CONNECTING 1
#define DB_READY 2




#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU 	ADMIN_IMMUNITY 

//new const g_vault_name[] = "army_ranks";

enum _:PlData
{
	gExp,gLevel,gTempKey
};

//new bool:isLoadedInfo[33]

new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] = 
{
	"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",		
	"I_15","I_16","I_17","I_18","I_19","I_20"
};

new const gLevels[] = 
{
	0,200,350,550,900,1400,2000,2800,3800,4800,5900,7000,8200,9400,10700,12000,15000,18000,22000,25000
};

new const restrict_bonus[][] =
{
	"35hp",
	"most_wanted",
	"ka_wintershank"
};

new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb, gMinPlayers

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
	set_cvar_string("army_ranks",VERSION);
//
	gRestrictMaps 	= register_cvar( "restrict_maps",     	"1");// вкл запрет бонусов на карте.	
	gBonusLevel	= register_cvar( "level_bonus",     	"1");// вкл оружие при получении уровня.
	gFlash		= register_cvar( "flash_nades",     	"0");// вкл бонуса флешек
	gSmoke		= register_cvar( "smoke_nades",     	"0");// вкл бонуса дымовых
	gHe		= register_cvar( "he_nades",     	"1");// вкл бонуса осколочных
	gHpbylevel	= register_cvar( "hp_by_level",     	"3");// кол-во хп, которое дается за лвл, если = 0 - то выкл
	gApbylevel	= register_cvar( "ap_by_level",     	"5");// кол-во брони, которое дается за лвл, если = 0 - то выкл
	gArmyChat	= register_cvar( "army_chat",     	"1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
	gAdminGMsg	= register_cvar( "admin_color",    	"0");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
	gSlash 		= register_cvar( "slash_messages",     	"1");// не отображать команды со слэшем
	gTk 		= register_cvar( "team_kill_lost_xp",   	"1");// терять exp при тимкилле
	gLostXpTk 	= register_cvar( "lost_xp_val",     	"3");// кол-во теряемых exp при тк
	gLevelUpmsg	= register_cvar( "level_up_msg",     	"1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
	gAllChat	= register_cvar( "all_chat",     	"0");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
/***/	gProgressBar	= register_cvar( "progress_bar_pos",   	"0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
	gMinPlayers	= register_cvar( "min_players",     	"2");// мин.кол-во игроков для получения опыта за действия с бомбой
	gBomb		= register_cvar( "bomb_xp",     		"1");// вкл получения опыта над действиями с бомбой
	gBombDefuseXp	= register_cvar( "bdefuse_xp",     	"5");// кол-во получаемых exp при разминировании бомбы
	gBombPlantXp	= register_cvar( "bplant_xp",     	"4");// кол-во получаемых exp при минировании бомбы
	
	//register_forward(FM_Sys_Error, "fw_ServerDown");
	//register_forward(FM_GameShutdown, "fw_ServerDown");
	//register_forward(FM_ServerDeactivate, "fw_ServerDown");
	RegisterHam(Ham_Spawn, "player", "fwPlayerSpawn", 1)
	register_event( "DeathMsg","EventDeath","a");
	if(get_pcvar_num(gProgressBar) != 0){
		set_task(1.0,"StatusText",_,_,_, "b");
	} else { 
		set_task(1.0,"Info",_,_,_, "b");
	}
	
	register_clcmd("say /respawn","force_respawn")
	register_clcmd("say_team /respawn","force_respawn")

        //fvault_load(g_vault_name)
	
	register_message(get_user_msgid("SayText"), "msg_SayText");
	gStatusText = get_user_msgid("StatusText");
	gSayText = get_user_msgid ("SayText");

	g_MsgHud = CreateHudSyncObj();
	MaxPlayers = get_maxplayers();
	register_dictionary("army.txt");

	if(get_pcvar_num(gRestrictMaps))
	{
		new szMapName[64];
		get_mapname(szMapName,63);
		for(new a = 0; a < sizeof restrict_bonus; a++)
		{
			if(equal(szMapName, restrict_bonus[a]))
			{
				restr_blocked = true;
				log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
				break;
			} else {
				restr_blocked = false;
			}	
		}
	}
			
	if(get_pcvar_num(gArmyChat))
	{
		register_clcmd("say", "hookSay") 
		register_clcmd("say_team", "hookSayTeam");
	}

	register_clcmd("add_givexp", "add_exp_post")
	register_clcmd("amx_dail", "admin_menu")
	
	g_db_status = DB_NONE
	set_task(1.0, "MySql_Init")
}

public MySql_Init()
{
    g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
    
    new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(SqlConnection == Empty_Handle)
    {
        set_fail_state(g_Error)
    }
    new Handle:Queries
    Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS armyranks (name varchar(32),exp INT(11),level INT(11))")
    
    if(!SQL_Execute(Queries))
    {
        SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        set_fail_state(g_Error)   
	g_db_status = DB_NONE
    }
	else g_db_status = DB_READY
    
    SQL_FreeHandle(Queries)
    SQL_FreeHandle(SqlConnection)   
}




public plugin_end()
{
	if(g_db_status == DB_READY)
		SQL_FreeHandle(g_SqlTuple)
}  

public plugin_cfg()
{
	new szCfgDir[64], szFile[192];
	get_configsdir(szCfgDir, charsmax(szCfgDir));
	formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
	if(file_exists(szFile))
	server_cmd("exec %s", szFile);
}
public bomb_defused(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
		return

	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
	} else {
		UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
	}
}
public bomb_planted(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
		return

	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
	} else {
		UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
	}
}

public client_putinserver(id) 
{
	arrayset(UserData[id], 0, sizeof(UserData[]))
	
	Load_MySql(id);
	//set_task(30.0, "Save_MySql", id)
	set_task(60.0, "Save_Update", id+TASK_BANK, _, _, "b")
	set_task(5.0,"respawn_check", id)
}

public Save_Update(id)
{
	id -= TASK_BANK
	if(!is_user_connected(id))
		return
		
	if(g_db_status != DB_READY)
		return

	new szTemp[512]

	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	formatex(szTemp,charsmax(szTemp),"UPDATE `armyranks` SET `exp` = '%i' , `level` = '%i' WHERE `armyranks`.`name` = '%s'",UserData[id][gExp],UserData[id][gLevel], szName)
	SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
	
}

//public client_connect(id) Load_MySql(id);

public client_disconnected(id)
{
	if(g_SqlTuple != Empty_Handle)
		Save_MySql(id);
	
	remove_task(id+TASK_BANK)
}

public check_level(id)
{
	/*if(UserData[id][gLevel] <= 0)
		UserData[id][gLevel] = 1;
		
	if(UserData[id][gExp] < 0)
		UserData[id][gExp] = 0;*/

	while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]]) 
	{
		UserData[id][gLevel]++;
		levelUp[id] = 1;
		switch(get_pcvar_num(gLevelUpmsg))
		{
			case 1: 
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = formatex(buffer, charsmax(buffer), "^4[^3CS-BULGARIA^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += formatex(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += formatex(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += formatex(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(0,NORMAL,buffer);
			}
			case 2:
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = formatex(buffer, charsmax(buffer), "^4[^3CS-BULGARIA^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += formatex(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += formatex(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += formatex(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(id,NORMAL,buffer);
			}
		}

		if (UserData[id][gLevel] == sizeof(gLevels))
		{	
			break
		}
	}
}

public EventDeath()
{
	new iKiller = read_data(1);
	new iVictim = read_data(2);
	new head = read_data(3);
	
	set_task(1.0,"respawn_player", iVictim)
	
	if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
	{
		// if tk?
		if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
		{
			UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
			return PLUGIN_CONTINUE;
		}
		new weapon = get_user_weapon(iKiller);
		UserData[iKiller][gExp] += 3;
		if(weapon == CSW_KNIFE)
			UserData[iKiller][gExp] += 8;
			
		if(head)
			UserData[iKiller][gExp] += 4;

		check_level(iKiller);
		Save_MySql(iKiller);
	}
	return PLUGIN_CONTINUE;
}

public fwPlayerSpawn(id)
{
	if (!is_user_alive(id) || !is_user_connected(id) || (restr_blocked)) return
	
	Save_MySql(id);
		
	if(get_pcvar_num(gFlash) && UserData[id][gLevel] >= 3)
		give_item(id,"weapon_flashbang");
		
	if(get_pcvar_num(gSmoke) && UserData[id][gLevel] >= 8)
		give_item(id,"weapon_smokegrenade");
		
	if(get_pcvar_num(gHe) && UserData[id][gLevel] >= 11)
		give_item(id,"weapon_hegrenade");

	if(get_pcvar_num(gHpbylevel) != 0)
		set_user_health(id,(get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]));

	if(get_pcvar_num(gApbylevel) != 0)		
		cs_set_user_armor(id, 100+(get_pcvar_num(gApbylevel)*UserData[id][gLevel]), CS_ARMOR_VESTHELM);

	if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
	{
		GetWeapon(id);
		levelUp[id] = 0;
	}
	
	new iColors[3]
	iColors[0] = (get_user_team(id) == 1) ? 255 : 0
	iColors[1] = 0
	iColors[2] = (get_user_team(id) == 1) ? 0 : 255
	
	set_user_rendering(id, kRenderFxGlowShell, iColors[0], iColors[1], iColors[2], kRenderNormal, 20)
	set_user_godmode(id, 1)
	
	set_task(2.0, "remove_protection", id)
}

public remove_protection(id)
{
	if (!is_user_alive(id))
	{
		return
	}
	
	client_print(id, print_center, "Your spawn protection is OFF!")
        set_user_rendering(id)
	set_user_godmode(id, 0)
}

public respawn_player(id)
{
	if (!is_user_alive(id) && is_user_connected(id) && (get_user_team(id) == 1 || get_user_team(id) == 2))
	{
		ExecuteHamB(Ham_CS_RoundRespawn,id)
	}
	else
	{
		respawn_check(id)
	}
}

public respawn_check(id)
{
	if(!is_user_connected(id))
	{
		return
	}
	
	if(!is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2))
	{
		set_task(1.0,"respawn_player", id)
	}
	else 
	{
		set_task(5.0,"respawn_check",id)
	}
}

public force_respawn(id)
{
	remove_task(id)
	respawn_player(id)
}

/*
public save_usr(id)
{
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	new szData[64]
	formatex(szData, charsmax(szData), "%i|%i", UserData[id][gExp],UserData[id][gLevel])
	fvault_set_data(g_vault_name, szName, szData)	
}

public load_data(id)
{
	if (!is_user_connected(id))
	{
		return
	}
	
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	new szData[64]
	
	if (fvault_get_data(g_vault_name, szName, szData, charsmax(szData)))
	{	
		replace_all(szData, charsmax(szData), "|", " ")
		
		new playerXp[10], playerLevel[5]
		parse(szData, playerXp, charsmax(playerXp), playerLevel, charsmax(playerLevel))
		
		UserData[id][gExp] = str_to_num(playerXp)
		UserData[id][gLevel] = str_to_num(playerLevel)
	}
	else
	{
		UserData[id][gExp] = 0
		UserData[id][gLevel] = 1
	}
	
	isLoadedInfo[id] = true
}*/

public hookSay(id)
{
	if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
		return PLUGIN_CONTINUE;

	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
	
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"EMPTY_MSG")
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = formatex(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
			}
		}
		Chat(id,0,get_pcvar_num(gAllChat));
	}
	else 
	{
		Len = formatex(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
		Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
		Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		Chat(id,0,get_pcvar_num(gAllChat));
	}
	return PLUGIN_HANDLED_MAIN
}

public hookSayTeam(id)
{
	if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
		return PLUGIN_CONTINUE;

	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
		
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"EMPTY_MSG");
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);		
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
			{
				Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
			}
		}
		Chat(id,1,get_pcvar_num(gAllChat));
	}
	else 
	{
		Len = formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
		Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
		Len += formatex(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		Chat(id,1,get_pcvar_num(gAllChat));
	}
	return PLUGIN_HANDLED_MAIN
}

stock is_admin_msg(const Message[])
{
	if(Message[0] == '@')
		return true;
		
	return false;
}

stock is_empty_message(const Message[])
{
	if(equal(Message, "") || !strlen(Message))
		return true;
		
	return false;
}

stock Chat(id,team,chat_type)
{
	if(team)
	{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
			
				if(get_user_team(id) == get_user_team(i))
					send_message(gMessage, id, i);
			}
		} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
				
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
			} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
				
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
			}
		}
	} else{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
			
				send_message(gMessage, id, i);
			}
		} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
				
					send_message(gMessage, id, i);
				}
			} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
				
					send_message(gMessage, id, i);
				}
			}
		}
	}
}

stock send_message(const message[], const id, const i)
{
	message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
	write_byte(id)
	write_string(message)
	message_end()
}

stock is_has_slash(const Message[])
{
	if(Message[0] == '/')
		return true;
		
	return false;
}
/*
public client_infochanged(id)
{
	new newname[32],oldname[32]
	get_user_info(id, "name", newname,31)
	get_user_name(id,oldname,31)
	if(!is_user_connected(id) || is_user_bot(id)) 
		return PLUGIN_CONTINUE
		
	if(!equali(newname, oldname))
	{
		set_task(0.1,"Load_MySql",id);	
	}
	return PLUGIN_CONTINUE
}*/

public msg_SayText()
{
	new arg[32]
	get_msg_arg_string(2, arg, 31)
	if(containi(arg,"name")!=-1)
		return PLUGIN_HANDLED

	return PLUGIN_CONTINUE
}

public plugin_natives()
{
	register_native("get_user_exp", "native_get_user_exp", 1);
	register_native("get_user_lvl", "native_get_user_lvl", 1);
	register_native("set_user_exp", "native_set_user_exp", 1);
	register_native("set_user_lvl", "native_set_user_lvl", 1);
	register_native("get_user_rankname", "native_get_user_rankname", 1);
}

public native_set_user_exp(id,num)
{
	UserData[id][gExp] = num;
}

public native_set_user_lvl(id,num)
{
	UserData[id][gLevel] = num;
}

public native_get_user_exp(id)
{
	return UserData[id][gExp];
}

public native_get_user_lvl(id)
{
	return UserData[id][gLevel];
}

public native_get_user_rankname(id)
{
	static szRankName[64];
	formatex(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	return szRankName;
}

public Info()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id))
		{
			set_hudmessage(100, 100, 100, 0.01, 0.17, 0, 1.0, 1.0, _, _, -1)
			
			static buffer[576], len;
			len = formatex(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
			len += formatex(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += formatex(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
			} else {
				len += formatex(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
                        }      {
                                len += formatex(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_LEVEL",UserData[id][gLevel]);
			}
			ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
		}
	}
	return PLUGIN_CONTINUE
}

public StatusText()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
		{
			static buffer[300], len;
			len = formatex(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += formatex(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
			} else {
				len += formatex(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
                        }      {
                                len += formatex(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_LEVEL",UserData[id][gLevel]);
			}
			message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
			write_byte(0)
			write_string(buffer)
			message_end();
		}
	}
}

public GetWeapon(id)
{
	new szText[700 char];
	formatex(szText, charsmax(szText), "%L", id, "GW_TITLE");
	new menu = menu_create(szText, "gw_menu");

	formatex(szText, charsmax(szText), "AWP");
	menu_additem(menu, szText, "1", 0);

	formatex(szText, charsmax(szText), "AK-47");
	menu_additem(menu, szText, "2", 0);

	formatex(szText, charsmax(szText), "M4A1");
	menu_additem(menu, szText, "3", 0);

	formatex(szText, charsmax(szText), "FAMAS");
	menu_additem(menu, szText, "4", 0);

	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, menu,0);
	return PLUGIN_CONTINUE;
}

public gw_menu(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64], access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback);
	new key = str_to_num(data);
	switch(key)
	{
		case 1:
		{
			give_item(id,"weapon_awp");
			cs_set_user_bpammo(id, CSW_AWP, 100);
	        }
		case 2:
		{
			give_item(id,"weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 200);
		}
		case 3:
		{
			give_item(id,"weapon_m4a1");
			cs_set_user_bpammo(id, CSW_M4A1, 200);
		}
		case 4:
		{
			give_item(id,"weapon_famas");
			cs_set_user_bpammo(id, CSW_FAMAS, 200);
		}
	}
	
	return PLUGIN_HANDLED;
}

public fw_ServerDown() 
{ 
	for(new i = 0; i <= MaxPlayers; i++)
	{
		if(is_user_connected(i))
			Save_MySql(i)
	}
}

public admin_menu(id)
{
	new szText[700 char];
	formatex(szText, charsmax(szText), "%L", id, "ARMY_MENU");
	new menu = menu_create(szText, "admin_menu_hl");

	formatex(szText, charsmax(szText), "%L", id, "ADD_EXP");
	menu_additem(menu, szText, "1", 0 );
	formatex(szText, charsmax(szText), "%L", id, "SET_LVL");
	menu_additem(menu, szText, "2", 0 );

	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, menu,0);
	return PLUGIN_CONTINUE;
}

public admin_menu_hl(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64], access, callback;
	menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback);
	new key = str_to_num(data);
	switch(key)
	{
		case 1:
		{
			give_exp_menu(id);
		}
		case 2:
		{
			set_level_menu(id)
		}
	}
	
	return PLUGIN_HANDLED;
}

public give_exp_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("Give EXP Menu:", "give_exp_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}

public give_exp_hl(id, players_menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(players_menu)
		return PLUGIN_HANDLED
	}
	new data[6],accessmenu, iName[64], callback;
	menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
	new player = str_to_num(data)
	client_cmd(id, "messagemode ^"add_exp %i^"", player);
	ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
	return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new param[10]
		read_argv(2, param, charsmax(param))
		for (new x; x < strlen(param); x++)
		{
			if(!isdigit(param[x]))
			{ 
				ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"MUST_NUM")
				give_exp_menu(id)
				return PLUGIN_HANDLED
			}
		}
		new amount = str_to_num(param);
		if (amount < 1)
		{
			ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"MIN_EXP") 
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		if (amount > 999)
		{
			ColorChat(id,NORMAL,"^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"MAX_EXP")  
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		read_argv(1, param, charsmax(param))
		new player = str_to_num(param)	

		UserData[player][gExp] += amount;
		if(UserData[player][gLevel] <= 0)
			UserData[player][gLevel] = 1;
	
		while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]]) 
			UserData[player][gLevel]++;
		
		new names[2][32]
		get_user_name(id, names[0], 31)
		get_user_name(player, names[1], 31)
		ColorChat(0, NORMAL, "^4[^3CS-BULGARIA^4]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
		Save_MySql(player);
	}
	return PLUGIN_HANDLED
}

public set_level_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		UserData[id][gTempKey] = 0;
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("\rMenu Give Ranks:", "set_level_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}

public set_level_hl(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	UserData[id][gTempKey] = str_to_num(data);
	set_level_pl(id);
	return PLUGIN_CONTINUE
}

public set_level_pl(id)
{
	static szText[1024];
	formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
	new menu = menu_create( szText, "set_level_phl");
	//======
	for(new i = 1; i < sizeof(gRankNames); i++)
	{
		new szItem[100],lang[10],num[5];
		formatex(lang,9,"I_%d",i);
		formatex(num,4,"%d",i);
		formatex(szItem,charsmax(szItem),"%L",id,lang);
		menu_additem(menu,szItem,num);
	}
	//======
        menu_setprop(menu, MPROP_BACKNAME, "Back");
        menu_setprop(menu, MPROP_NEXTNAME, "Next");
        menu_setprop(menu, MPROP_EXITNAME, "Exit");
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}

public set_level_phl(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	new level = str_to_num(data);
	if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
	{
		UserData[UserData[id][gTempKey]][gLevel] = level;
		UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
		new szName[2][32];
		get_user_name(id, szName[0], 31);
		get_user_name(UserData[id][gTempKey], szName[1], 31);
		ColorChat(0, NORMAL, "^4[^3CS-BULGARIA^4]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
		Save_MySql(UserData[id][gTempKey]);
		} else {
		set_level_menu(id);
	}
	UserData[id][gTempKey] = 0;
	return PLUGIN_HANDLED;
}

public Save_MySql(id)
{
	if(!is_user_connected(id))
		return
	if(g_db_status != DB_READY)
		return
	
    /*new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
    if(g_SqlTuple == Empty_Handle)
        set_fail_state(g_Error)
		*/
	new szName[32], szTemp[512]
	get_user_name(id, szName, charsmax(szName))
	
	//server_print("UPDATE -> SAVE");
	//server_print("%i | %i",UserData[id][gExp],UserData[id][gLevel]);
    
	formatex(szTemp,charsmax(szTemp),"UPDATE `armyranks` SET `exp` = '%i' , `level` = '%i' WHERE `armyranks`.`name` = '%s'",UserData[id][gExp],UserData[id][gLevel], szName)
	SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    //SQL_FreeHandle(SqlConnection);
	
	//Load_MySql(id)
}


public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    SQL_FreeHandle(Query)
    return PLUGIN_HANDLED;
}

public Load_MySql(id)
{
	if(g_db_status != DB_READY)
		return
	
    /*new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    
    if(g_SqlTuple == Empty_Handle)
        set_fail_state(g_Error)*/
        
	new szName[32], szTemp[512]
	get_user_name(id, szName, charsmax(szName))
    
	new Data[1]
	Data[0] = id
	
	//server_print("Pravim Select");

	formatex(szTemp,charsmax(szTemp),"SELECT * FROM `armyranks` WHERE (`armyranks`.`name` = '%s')", szName)
	SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
    //SQL_FreeHandle(SqlConnection)
}

public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    else if(FailState == TQUERY_QUERY_FAILED)
        log_amx("Load Query failed. [%d] %s", Errcode, Error)

    new id = Data[0]
	
    
    if(SQL_NumResults(Query) < 1)
    {
        new szName[32]
        get_user_name(id, szName, charsmax(szName))
        
        new szTemp[512]
        
       /* new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
        if(g_SqlTuple == Empty_Handle)
            set_fail_state(g_Error)*/

	formatex(szTemp,charsmax(szTemp),"INSERT INTO `armyranks`(`name`, `exp`, `level`) VALUES ('%s', '0', '1')", szName)
        SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
		
	//server_print("INSERT -> name, 0, 0");

        //SQL_FreeHandle(SqlConnection)
    } 
    else 
    {
		//server_print("LOAD DATA SQL - %i | %i", SQL_ReadResult(Query, 1), SQL_ReadResult(Query, 2));
		
		UserData[id][gExp] = SQL_ReadResult(Query, 1)
		UserData[id][gLevel] = SQL_ReadResult(Query, 2)
		
		//server_print("LOAD DATA USER - %i | %i", UserData[id][gExp], UserData[id][gLevel]);
    }
    return PLUGIN_CONTINUE;
}
И също така от време на време почнаха да се губят хп на хората, Благодаря предварително на тия който ще се помъчат да ми помогнат...

Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Отново проблем с армий ранкс.

Мнение от Radeon » 10 Май 2022, 10:35

От гугъл има информация за грешката. https://www.inmotionhosting.com/support ... rror-1064/
Според мен имаш липсваща информация за някой играч, ето този LOFTY'S @ MARKELONNN ~
Ако можеш ръчно го изтрии от базата данни.

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Отново проблем с армий ранкс.

Мнение от Nikolow » 10 Май 2022, 13:02

Плъгина е написан зле и имаш предпоставка за SQL Injection, което ясно си личи от грешката.
Трябва да се пренапише SQL частта на плъгина с prepared statements, за да си спокоен, че няма да ти хакнат базата данни и да стане по-зле.
Съвет: Докато намериш решение, по-добре спри SQL запазването и ползвай друг вид (ако има вложено в плъгина, например vault).
Надали някой ще седне да преправи плъгина, особено при положение, че има вече няколко много кадърно написани плъгина, които изпълняват същата идея. С няколко редакции / допълнителни плъгина, може да постигнеш същият ефект с много по-добър и защитен код.
(Не съм гледал кода на плъгина в първият пост.)

Успех!
Tired and retired...

Аватар
devilchy
Извън линия
Потребител
Потребител
Мнения: 223
Регистриран на: 03 Фев 2017, 14:08
Местоположение: Burgas
Се отблагодари: 3 пъти
Получена благодарност: 6 пъти
Обратна връзка:

Отново проблем с армий ранкс.

Мнение от devilchy » 11 Май 2022, 13:21

Еми ще се пробвам, да ползвам плъгина на крома нямам друг избор ...

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Скриптиране”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта