Поправяне на армий ранкс плъгин.

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

Поправяне на армий ранкс плъгин.

Мнение от devilchy » 06 Май 2022, 18:34

Здравейте, искам да ви помоля както се личи и от заглавието, на последък забелязвам в конзолата на сървъра накъв спам като на Снимка
по моята гледна точка: плъгина ми е направен да работи по база данни, явно праща заявки всяка секунда, или не знам.Нека да се направи някак си на 1 минута ли 2 ли нз някак и да ми кажете къде горе долу да редактирам че после да може да си го сменям до като намеря подходящото време за мен:
Ето го и кода на плъгина: Благодаря предварително на тези който ще се помъчат да помогнат :)

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

#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;
}

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Поправяне на армий ранкс плъгин.

Мнение от OciXCrom » 06 Май 2022, 20:17

Каква е причината да не ползваш това?

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

Поправяне на армий ранкс плъгин.

Мнение от devilchy » 06 Май 2022, 20:47

Този моя е настроен работи си със моята смс система могат да се купуват рангове и т.н с една дума ми е настроен всичко както трябва и не ми се сменя плъгина, а и преди време бяхме го ползвали този нещо не се оправихме с него имаше май проблем с базата данни или не съм сигурен гадая в момента но бяхме се срещнали с нещо ...
OciXCrom написа: 06 Май 2022, 20:17 Каква е причината да не ползваш това?

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

Поправяне на армий ранкс плъгин.

Мнение от zolfeca » 06 Май 2022, 21:13

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

server_print()
Може да коментираш редовете с //.

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

Поправяне на армий ранкс плъгин.

Мнение от devilchy » 07 Май 2022, 16:10

zolfeca написа: 06 Май 2022, 21:13

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

server_print()
Може да коментираш редовете с //.

Нали няма да има проблеми със запазването на хп то ?

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

Поправяне на армий ранкс плъгин.

Мнение от zolfeca » 07 Май 2022, 16:43

Няма да има проблеми.

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

Поправяне на армий ранкс плъгин.

Мнение от devilchy » 07 Май 2022, 17:30

zolfeca написа: 07 Май 2022, 16:43 Няма да има проблеми.
Получи се, Благодаря :lock:

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

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

Кой е на линия

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