Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
illusion
Извън линия
Администратор
Администратор
Мнения: 1792
Регистриран на: 27 Ное 2016, 17:47
Местоположение: Balkans
Се отблагодари: 151 пъти
Получена благодарност: 354 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от illusion » 31 Яну 2018, 21:27

Здравейте,
Имам един въпрос, който се разбира от заглавието. Как мога да изключа една функция примерно от плъгина да не работи с команда избрана от мен и със същата команда да се включва пак функцията. Ако не сте ме разбрали давам пример - имам админ префикс плъгин и искам да добавя команда за включване / изключване на префикса. Как става това? В случая това нещо ми трябва за Knife Distance плъгин. Искам примерно да добавя команда /distance, която да изключва САМО чат съобщенията и като се напише командата пак да се включват. Казвам само чат съобщенията, защото в плъгина има и HUD съобщения. Ето и плъгина:

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

#include <amxmodx>
#include <fakemeta>
#include <colorchat>

#pragma semicolon 1

enum AttackType
{
	STAB = 0,
	SLASH
};

enum TraceType
{
	TRACELINE = 0,
	TRACEHULL
};

enum Sound 
{
	WICKEDSICK = 0,
	GODLIKE
};

enum HitData
{
	AttackType:iAttack,
	Float:flDistance,
	iHitgroup,
	iAttacker,
	iVictim
};

new g_szTraceType[TraceType][] =
{
	"TraceLine",
	"TraceHull"
};

new g_szSound[Sound][] =
{
	"misc/wickedsick.wav",
	"misc/godlike.wav"
};

new g_HitData[HitData];

new g_szHitgroup[8][] =
{
	"Full Body",
	"Head",
	"Chest",
	"Stomach",
	"Left Arm",
	"Right Arm",
	"Left Leg",
	"Right Leg"
};

new bool:g_bKnifeHit;

new g_szNickname[33][32];

new g_pCVarFriendlyFire;

new g_pCVarSoundWickedSickStab;
new g_pCVarSoundGodlikeStab;
new g_pCVarSoundWickedSickSlash;
new g_pCVarSoundGodlikeSlash;

new g_pCVarHudColor;
new g_pCVarHudCoords;
new g_pCVarHudHoldtime;

public plugin_precache( )
{
	precache_sound( g_szSound[WICKEDSICK] );
	precache_sound( g_szSound[GODLIKE] );
}

public plugin_init( )
{
	register_plugin( "Knife Distance", "0.4", "SchlumPF" );
	
	g_pCVarSoundWickedSickStab = register_cvar( "kd_sound_wickedsick_stab", "30" );
	g_pCVarSoundGodlikeStab = register_cvar( "kd_sound_godlike_stab", "31" );
	g_pCVarSoundWickedSickSlash = register_cvar( "kd_sound_wickedsick_slash", "46" );
	g_pCVarSoundGodlikeSlash = register_cvar( "kd_sound_godlike_slash", "47" );
	
	g_pCVarHudColor = register_cvar( "kd_hud_color", "0 250 150" );
	g_pCVarHudCoords = register_cvar( "kd_hud_coords", "-0.75 -1.0" );
	g_pCVarHudHoldtime = register_cvar( "kd_hud_holdtime", "2.0" );
	
	register_forward( FM_TraceLine, "FM_TraceLine_Post", 1 );
	register_forward( FM_TraceHull, "FM_TraceHull_Post", 1 );
	
	register_event( "Damage", "eventDamage", "b" );
	
	g_pCVarFriendlyFire = get_cvar_pointer( "mp_friendlyfire" );
}

public FM_TraceLine_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, skipEnt, tr )
{ 
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static button;
	button = pev( skipEnt, pev_button );
	
	if( !( button & IN_ATTACK ) && !( button & IN_ATTACK2 ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}

	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit,  distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public FM_TraceHull_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, hull, skipEnt, tr )
{
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public GetTraceData( tr, attacker, victim, Float:distance, AttackType:attack )
{
	g_HitData[iAttack] = any:attack;
	g_HitData[flDistance] = any:distance;
	g_HitData[iHitgroup] = get_tr2( tr, TR_iHitgroup );
	g_HitData[iAttacker] = attacker;
	g_HitData[iVictim] = victim;
	
	g_bKnifeHit = true;
}

public eventDamage( )
{
	if( g_bKnifeHit )
	{
		g_bKnifeHit = false;
		
		static victim;
		victim = g_HitData[iVictim];
		
		if( !( 1 <= victim <= 32 ) )
		{
			return PLUGIN_CONTINUE;
		}
		
		static attacker;
		attacker = g_HitData[iAttacker];
		
		static Float:distance;
		distance = g_HitData[flDistance];
		
		static Float:health;
		pev( victim, pev_health, health );
		
		static r, g, b;
		GetHudColor( r, g, b );
		
		static Float:x, Float:y;
		GetHudCoords( x, y );
		
		set_hudmessage( r, g, b, x, y, 0, 0.0, get_pcvar_float( g_pCVarHudHoldtime ), 0.0, 0.0, 1 );
		
		if( g_HitData[iAttack] == STAB )
		{
			show_hudmessage( attacker, "Stab Stats (%s)^nDistance: %f (max: 32.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
		
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s stabbed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeStab ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
						
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickStab ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
		else
		{
			show_hudmessage( attacker, "Slash Stats (%s)^nDistance: %f (max: 48.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
			
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s slashed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeSlash ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickSlash ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public client_infochanged( plr )
{
	static curName[32], newName[32];
	get_user_name( plr, curName, 31 );
	get_user_info( plr, "name", newName, 31 );
	
	if( !equal( newName, curName ) )
	{
		copy( g_szNickname[plr], 31, newName );
	}
}

public GetHudColor( &r, &g, &b )
{
	static color[16], piece[5];
	get_pcvar_string( g_pCVarHudColor, color, 15 );
	
	strbreak( color, piece, 4, color, 15 );
	r = str_to_num( piece );
	
	strbreak( color, piece, 4, color, 15 );
	g = str_to_num( piece );
	b = str_to_num( color );
}

public GetHudCoords( &Float:x, &Float:y )
{
	static coords[16], piece[10];
	get_pcvar_string( g_pCVarHudCoords, coords, 15 );
	
	strbreak( coords, piece, 9, coords, 15 );
	x = str_to_float( piece );
	y = str_to_float( coords );
}
Извинете ме ако темата е в грешният раздел, просто това като цяло е въпрос към Amxmodx, а не да ми направите плъгина ..
Последно промяна от 1fRaNkkK на 31 Яну 2018, 21:39, променено общо 1 път.
Причина: Преместена тема, не си нов, би трябвало да знаеш, че темата не е за тук...

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

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от OciXCrom » 01 Фев 2018, 15:38

Правиш един глобален bool извън всички функции със стойност true по подразбиране.

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

new bool:g_bEnabled = true
Създаваш си командата (под предположение, че знаеш как става тази част) и в нея включваш/излючваш boola (правиш го true/false). Долният код ще направи boola false ако е бил true или true ако е бил false.

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

g_bEnabled = !g_bEnabled
След това намираш въпросната функция, която искаш да излючиш, и в началото ѝ слагаш проверка дали bool-ът е true и ако не е, ползваш return за да спреш изпълнението на функцията.

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

if(!g_bEnabled)
    return

Аватар
illusion
Извън линия
Администратор
Администратор
Мнения: 1792
Регистриран на: 27 Ное 2016, 17:47
Местоположение: Balkans
Се отблагодари: 151 пъти
Получена благодарност: 354 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от illusion » 01 Фев 2018, 17:21

Всичко разбрах, освен този факт - този код къде да го сложа?

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

g_bEnabled = !g_bEnabled
Команда знам как се прави (register_clcmd).

Аватар
WaLkZ
Извън линия
Администратор
Администратор
Мнения: 799
Регистриран на: 05 Окт 2016, 21:13
Местоположение: Варна
Се отблагодари: 75 пъти
Получена благодарност: 227 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от WaLkZ » 01 Фев 2018, 18:25

В началото на тялото на функцията.

Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от [N]eXuS » 17 Мар 2018, 18:30

Каква е разликата да се използва горното а не

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

new p_Active

p_Active = register_cvar("amx_active", "1")

if(get_pcvar_num(p_Active) == 1)
Не е остроумие а просто въпрос

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

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от OciXCrom » 17 Мар 2018, 21:35

Разликата е, че това твоето е cvar, а не команда. По принцип за подобни неща трябва да се ползва cvar, тъй като точно това им е целта.

Аватар
illusion
Извън линия
Администратор
Администратор
Мнения: 1792
Регистриран на: 27 Ное 2016, 17:47
Местоположение: Balkans
Се отблагодари: 151 пъти
Получена благодарност: 354 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от illusion » 20 Апр 2018, 00:45

UP. Още имам някакви грешки с това... ето кода, пробвах да го направя, ама все някакви грешки, кажете къде греша.. Аз добавих това с new bool:g_bEnabled = true

Искам във функцията public eventDamage( ) да вкарам bool-a да се изключва функцията с команда и да се включва

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

#include <amxmodx>
#include <fakemeta>
#include <colorchat>

#pragma semicolon 1

enum AttackType
{
	STAB = 0,
	SLASH
};

enum TraceType
{
	TRACELINE = 0,
	TRACEHULL
};

enum Sound 
{
	WICKEDSICK = 0,
	GODLIKE
};

enum HitData
{
	AttackType:iAttack,
	Float:flDistance,
	iHitgroup,
	iAttacker,
	iVictim
};

new g_szTraceType[TraceType][] =
{
	"TraceLine",
	"TraceHull"
};

new g_szSound[Sound][] =
{
	"misc/wickedsick.wav",
	"misc/godlike.wav"
};

new g_HitData[HitData];

new g_szHitgroup[8][] =
{
	"Full Body",
	"Head",
	"Chest",
	"Stomach",
	"Left Arm",
	"Right Arm",
	"Left Leg",
	"Right Leg"
};

new bool:g_bKnifeHit;

new g_szNickname[33][32];

new g_pCVarFriendlyFire;

new g_pCVarSoundWickedSickStab;
new g_pCVarSoundGodlikeStab;
new g_pCVarSoundWickedSickSlash;
new g_pCVarSoundGodlikeSlash;

new g_pCVarHudColor;
new g_pCVarHudCoords;
new g_pCVarHudHoldtime;

new bool:g_bEnabled = true

public plugin_precache( )
{
	precache_sound( g_szSound[WICKEDSICK] );
	precache_sound( g_szSound[GODLIKE] );
}

public plugin_init( )
{
	register_plugin( "Knife Distance", "0.4", "SchlumPF" );
	
	g_pCVarSoundWickedSickStab = register_cvar( "kd_sound_wickedsick_stab", "30" );
	g_pCVarSoundGodlikeStab = register_cvar( "kd_sound_godlike_stab", "31" );
	g_pCVarSoundWickedSickSlash = register_cvar( "kd_sound_wickedsick_slash", "46" );
	g_pCVarSoundGodlikeSlash = register_cvar( "kd_sound_godlike_slash", "47" );
	
	g_pCVarHudColor = register_cvar( "kd_hud_color", "0 250 150" );
	g_pCVarHudCoords = register_cvar( "kd_hud_coords", "-0.75 -1.0" );
	g_pCVarHudHoldtime = register_cvar( "kd_hud_holdtime", "2.0" );
	
	register_forward( FM_TraceLine, "FM_TraceLine_Post", 1 );
	register_forward( FM_TraceHull, "FM_TraceHull_Post", 1 );
	
	register_event( "Damage", "eventDamage", "b" );

	g_bEnabled = register_clcmd("say /distance", "")
	
	g_pCVarFriendlyFire = get_cvar_pointer( "mp_friendlyfire" );
}

public FM_TraceLine_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, skipEnt, tr )
{ 
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static button;
	button = pev( skipEnt, pev_button );
	
	if( !( button & IN_ATTACK ) && !( button & IN_ATTACK2 ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}

	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit,  distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public FM_TraceHull_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, hull, skipEnt, tr )
{
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public GetTraceData( tr, attacker, victim, Float:distance, AttackType:attack )
{
	g_HitData[iAttack] = any:attack;
	g_HitData[flDistance] = any:distance;
	g_HitData[iHitgroup] = get_tr2( tr, TR_iHitgroup );
	g_HitData[iAttacker] = attacker;
	g_HitData[iVictim] = victim;
	
	g_bKnifeHit = true;
}

public eventDamage( )
{
	g_bEnabled = !g_bEnabled
	if(!g_bEnabled)
	return
	if( g_bKnifeHit )
	{
		g_bKnifeHit = false;
		
		static victim;
		victim = g_HitData[iVictim];
		
		if( !( 1 <= victim <= 32 ) )
		{
			return PLUGIN_CONTINUE;
		}
		
		static attacker;
		attacker = g_HitData[iAttacker];
		
		static Float:distance;
		distance = g_HitData[flDistance];
		
		static Float:health;
		pev( victim, pev_health, health );
		
		static r, g, b;
		GetHudColor( r, g, b );
		
		static Float:x, Float:y;
		GetHudCoords( x, y );
		
		set_hudmessage( r, g, b, x, y, 0, 0.0, get_pcvar_float( g_pCVarHudHoldtime ), 0.0, 0.0, 1 );
		 
		if( g_HitData[iAttack] == STAB )
		{
			show_hudmessage( attacker, "Stab Stats (%s)^nDistance: %f (max: 32.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
		
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s stabbed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeStab ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
						
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickStab ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
		else
		{
			show_hudmessage( attacker, "Slash Stats (%s)^nDistance: %f (max: 48.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
			
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s slashed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeSlash ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickSlash ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public client_infochanged( plr )
{
	static curName[32], newName[32];
	get_user_name( plr, curName, 31 );
	get_user_info( plr, "name", newName, 31 );
	
	if( !equal( newName, curName ) )
	{
		copy( g_szNickname[plr], 31, newName );
	}
}

public GetHudColor( &r, &g, &b )
{
	static color[16], piece[5];
	get_pcvar_string( g_pCVarHudColor, color, 15 );
	
	strbreak( color, piece, 4, color, 15 );
	r = str_to_num( piece );
	
	strbreak( color, piece, 4, color, 15 );
	g = str_to_num( piece );
	b = str_to_num( color );
}

public GetHudCoords( &Float:x, &Float:y )
{
	static coords[16], piece[10];
	get_pcvar_string( g_pCVarHudCoords, coords, 15 );
	
	strbreak( coords, piece, 9, coords, 15 );
	x = str_to_float( piece );
	y = str_to_float( coords );
}

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

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от OciXCrom » 20 Апр 2018, 15:42

Като за начало махни #pragma semicolon 1 за да не се налага да слагаш ; в края на всеки ред и да се чудиш защо има грешки.

Тук не знам какво искаш да направиш:

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

g_bEnabled = register_clcmd("say /distance", "")

Аватар
illusion
Извън линия
Администратор
Администратор
Мнения: 1792
Регистриран на: 27 Ное 2016, 17:47
Местоположение: Balkans
Се отблагодари: 151 пъти
Получена благодарност: 354 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от illusion » 20 Апр 2018, 17:09

Ами нали трябва да е с команда => register_clcmd.. как да го направя тази команда да е към определена функция..

Ето плъгина без никакви добавки от мен (махнах прагмата):

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

#include <amxmodx>
#include <fakemeta>
#include <colorchat>

enum AttackType
{
	STAB = 0,
	SLASH
};

enum TraceType
{
	TRACELINE = 0,
	TRACEHULL
};

enum Sound 
{
	WICKEDSICK = 0,
	GODLIKE
};

enum HitData
{
	AttackType:iAttack,
	Float:flDistance,
	iHitgroup,
	iAttacker,
	iVictim
};

new g_szTraceType[TraceType][] =
{
	"TraceLine",
	"TraceHull"
};

new g_szSound[Sound][] =
{
	"misc/wickedsick.wav",
	"misc/godlike.wav"
};

new g_HitData[HitData];

new g_szHitgroup[8][] =
{
	"Full Body",
	"Head",
	"Chest",
	"Stomach",
	"Left Arm",
	"Right Arm",
	"Left Leg",
	"Right Leg"
};

new bool:g_bKnifeHit;

new g_szNickname[33][32];

new g_pCVarFriendlyFire;

new g_pCVarSoundWickedSickStab;
new g_pCVarSoundGodlikeStab;
new g_pCVarSoundWickedSickSlash;
new g_pCVarSoundGodlikeSlash;

new g_pCVarHudColor;
new g_pCVarHudCoords;
new g_pCVarHudHoldtime;

public plugin_precache( )
{
	precache_sound( g_szSound[WICKEDSICK] );
	precache_sound( g_szSound[GODLIKE] );
}

public plugin_init( )
{
	register_plugin( "Knife Distance", "0.4", "SchlumPF" );
	
	g_pCVarSoundWickedSickStab = register_cvar( "kd_sound_wickedsick_stab", "30" );
	g_pCVarSoundGodlikeStab = register_cvar( "kd_sound_godlike_stab", "31" );
	g_pCVarSoundWickedSickSlash = register_cvar( "kd_sound_wickedsick_slash", "46" );
	g_pCVarSoundGodlikeSlash = register_cvar( "kd_sound_godlike_slash", "47" );
	
	g_pCVarHudColor = register_cvar( "kd_hud_color", "0 250 150" );
	g_pCVarHudCoords = register_cvar( "kd_hud_coords", "-0.75 -1.0" );
	g_pCVarHudHoldtime = register_cvar( "kd_hud_holdtime", "2.0" );
	
	register_forward( FM_TraceLine, "FM_TraceLine_Post", 1 );
	register_forward( FM_TraceHull, "FM_TraceHull_Post", 1 );
	
	register_event( "Damage", "eventDamage", "b" );
	
	g_pCVarFriendlyFire = get_cvar_pointer( "mp_friendlyfire" );
}

public FM_TraceLine_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, skipEnt, tr )
{ 
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static button;
	button = pev( skipEnt, pev_button );
	
	if( !( button & IN_ATTACK ) && !( button & IN_ATTACK2 ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}

	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit,  distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public FM_TraceHull_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, hull, skipEnt, tr )
{
	if( !is_user_alive( skipEnt ) )
	{
		return FMRES_IGNORED;
	}
	
	if( get_user_weapon( skipEnt ) != CSW_KNIFE )
	{
		return FMRES_IGNORED;
	}
	
	static Float:flFraction;
	get_tr2( tr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		return FMRES_IGNORED;
	}
	
	static pHit;
	pHit = get_tr2( tr, TR_pHit );
	
	if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
	{
		return FMRES_IGNORED;
	}
	
	static Float:vecEndPos[3];
	get_tr2( tr, TR_vecEndPos, vecEndPos );

	static Float:distance;
	distance = vector_distance( vecSrc, vecEndPos );
	
	static Float:range;
	range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
	
	if( 31.89 < range < 32.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, STAB );
	}
	else if( 47.89 < range < 48.1 )
	{
		GetTraceData( tr, skipEnt, pHit, distance, SLASH );
	}
	
	return FMRES_IGNORED;
}

public GetTraceData( tr, attacker, victim, Float:distance, AttackType:attack )
{
	g_HitData[iAttack] = any:attack;
	g_HitData[flDistance] = any:distance;
	g_HitData[iHitgroup] = get_tr2( tr, TR_iHitgroup );
	g_HitData[iAttacker] = attacker;
	g_HitData[iVictim] = victim;
	
	g_bKnifeHit = true;
}

public eventDamage( )
{
	if( g_bKnifeHit )
	{
		g_bKnifeHit = false;
		
		static victim;
		victim = g_HitData[iVictim];
		
		if( !( 1 <= victim <= 32 ) )
		{
			return PLUGIN_CONTINUE;
		}
		
		static attacker;
		attacker = g_HitData[iAttacker];
		
		static Float:distance;
		distance = g_HitData[flDistance];
		
		static Float:health;
		pev( victim, pev_health, health );
		
		static r, g, b;
		GetHudColor( r, g, b );
		
		static Float:x, Float:y;
		GetHudCoords( x, y );
		
		set_hudmessage( r, g, b, x, y, 0, 0.0, get_pcvar_float( g_pCVarHudHoldtime ), 0.0, 0.0, 1 );
		 
		if( g_HitData[iAttack] == STAB )
		{
			show_hudmessage( attacker, "Stab Stats (%s)^nDistance: %f (max: 32.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
		
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s stabbed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeStab ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
						
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickStab ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s stabbed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
		else
		{
			show_hudmessage( attacker, "Slash Stats (%s)^nDistance: %f (max: 48.0)^nHit: %s (%s)^nDamage: %i"\
				, g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
				distance, g_szNickname[victim],\
				g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
			
			if( health < 0.0 )
			{
				ColorChat( victim, BLUE, "[Knife Distance] %s slashed you within %f units (%s)!",\
					g_szNickname[attacker],\
					distance, g_szHitgroup[g_HitData[iHitgroup]] );
				
				if( distance >= get_pcvar_float( g_pCVarSoundGodlikeSlash ) )
				{
					ColorChat( 0, RED, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
				}
				else if( distance >= get_pcvar_float( g_pCVarSoundWickedSickSlash ) )
				{
					ColorChat( 0, GREEN, "[Knife Distance] %s slashed %s within %f units (%s)!",\
						g_szNickname[attacker], g_szNickname[victim],\
						distance, g_szHitgroup[g_HitData[iHitgroup]] );
					client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
				}
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public client_infochanged( plr )
{
	static curName[32], newName[32];
	get_user_name( plr, curName, 31 );
	get_user_info( plr, "name", newName, 31 );
	
	if( !equal( newName, curName ) )
	{
		copy( g_szNickname[plr], 31, newName );
	}
}

public GetHudColor( &r, &g, &b )
{
	static color[16], piece[5];
	get_pcvar_string( g_pCVarHudColor, color, 15 );
	
	strbreak( color, piece, 4, color, 15 );
	r = str_to_num( piece );
	
	strbreak( color, piece, 4, color, 15 );
	g = str_to_num( piece );
	b = str_to_num( color );
}

public GetHudCoords( &Float:x, &Float:y )
{
	static coords[16], piece[10];
	get_pcvar_string( g_pCVarHudCoords, coords, 15 );
	
	strbreak( coords, piece, 9, coords, 15 );
	x = str_to_float( piece );
	y = str_to_float( coords );
}

Аватар
illusion
Извън линия
Администратор
Администратор
Мнения: 1792
Регистриран на: 27 Ное 2016, 17:47
Местоположение: Balkans
Се отблагодари: 151 пъти
Получена благодарност: 354 пъти
Обратна връзка:

Въпрос - как се прави функция с команда, която да изключва/включва друга функция?

Мнение от illusion » 21 Апр 2018, 14:11

МНЕНИЕТО Е СКРИТО ОТ СТРАНА НА МОДЕРАТОР! ЦЪКНИ ВЪРХУ ЛЕНТАТА ЗА ДА ГО ПРЕГЛЕДАШ.
Последно промяна от OciXCrom на 21 Апр 2018, 15:07, променено общо 1 път.
Причина: Следващият път предупреждение!

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

Обратно към “Помощ в скриптирането”

Кой е на линия

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