Как да направя така, че модела да излъчва glow & aura, щом играчът има този extra item?

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
bigexplosion
Извън линия
Потребител
Потребител
Мнения: 46
Регистриран на: 31 Окт 2021, 21:45
Се отблагодари: 14 пъти
Получена благодарност: 1 път

Как да направя така, че модела да излъчва glow & aura, щом играчът има този extra item?

Мнение от bigexplosion » 10 Яну 2023, 16:57

Добър ден, може ли да ми помогнете да направя така, че хората, които имат следния предмет:

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

#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <zombie_plague_advance>
	
#define _MarkPlayerHasMask(%0)   _bitPlayerHasMask |= (1 << (%0 & 31))
#define _ClearPlayerWithMask(%0)  _bitPlayerHasMask &= ~(1 << (%0 & 31))
#define _PlayerHasMask(%0)       _bitPlayerHasMask & (1 << (%0 & 31))
	
#define _PLUGIN   "[ZP43] Extra item: Gas Mask"
#define _VERSION             "3.0"
#define _AUTHOR           "H.RED.ZONE"

#define EV_INT_nadetype     EV_INT_flTimeStepSound
#define NADETYPE_INFECTION  1111 

new _ItemID

new _bitPlayerHasMask

new _gMaxPlayers, _gIcon, _gMsgSayText

public plugin_init() {
	register_plugin( _PLUGIN, _VERSION, _AUTHOR )
	
	RegisterHam( Ham_Spawn, "player", "_FW_PlayerSpawn", 1 )
	RegisterHam( Ham_Killed, "player", "_FW_PlayerKilled" )
		
	_ItemID = zp_register_extra_item( "Anti-Virus Mask \y(\rSingle-Use\y)", 200, ZP_TEAM_HUMAN )
	
	_gMaxPlayers = get_maxplayers( )
	_gIcon = get_user_msgid( "StatusIcon" ) 
	_gMsgSayText = get_user_msgid( "SayText" )
}

public plugin_precache() {
	RegisterHam( Ham_Think, "grenade", "_FW_ThinkGrenade", 1 ) 
}

public zp_extra_item_selected( plr, itemid ) {
        
	if( itemid == _ItemID ) {
		_MarkPlayerHasMask( plr )
		Icon_On( plr )
		ProtoChat(plr, "You now have Anti-Virus Mask. It will neutralize the effect of 1 infection grenade!")
	}
}

public _FW_ThinkGrenade( iEnt ) {
	
	if( is_valid_ent(iEnt) ) {
		
		if( entity_get_int(iEnt, EV_INT_nadetype) == NADETYPE_INFECTION ) {
			
			for( new plr = 1; plr <= _gMaxPlayers; plr++ ) {
				
				if( is_user_alive(plr) 
				
				&& _PlayerHasMask(plr) ) {
					
					if( get_entity_distance(iEnt, plr) <= 240 ) {
						
						_ClearPlayerWithMask( plr )
						remove_entity( iEnt )
						Icon_Off( plr )
						
						ProtoChat( plr, "Infection prevented! Your Anti-Virus mask can no longer be used." )
					}
				}
			}
		}
	}
}

public zp_user_infected_post( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public _FW_PlayerSpawn( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public _FW_PlayerKilled( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public client_disconnect( plr ) {
	Icon_Off( plr )
}

public Icon_On( plr ) {
	message_begin( MSG_ONE_UNRELIABLE, _gIcon, { 0, 0, 0 }, plr );
	write_byte( 1 )
	write_string( "dmg_gas" )
	write_byte( 0 )
	write_byte( 255 )
	write_byte( 0 )
	message_end( )
}

public Icon_Off( plr ) {
	message_begin( MSG_ONE_UNRELIABLE, _gIcon, { 0, 0, 0 }, plr )
	write_byte( 0 )
	write_string( "dmg_gas" )
	write_byte( 0 )
	write_byte( 255 )
	write_byte( 0 )
	message_end( )
}

ProtoChat( plr, const sFormat[], any:... ) {
	
	static i; i = plr ? plr : get_player( )
	
	if ( !i ) {
		return PLUGIN_HANDLED;
	}
	
	new sMessage[ 256 ]
	new len = formatex( sMessage, 255, "^x01[^x04ZP^x01] ")
	
	vformat( sMessage[len], 255-len, sFormat, 3 )
	sMessage[ 192 ] = '^0' 
	
	Make_SayText( plr, i, sMessage )
	
	return PLUGIN_CONTINUE
}

get_player( ) {
	for ( new plr; plr <= _gMaxPlayers; plr++ ) {
		if ( is_user_connected(plr) ) {
			return plr
		}
	}
	return PLUGIN_HANDLED
}

Make_SayText( Receiver, Sender, sMessage[] ) {
	if ( !Sender ) {
		return PLUGIN_HANDLED;
	}
	
	message_begin( Receiver ? MSG_ONE_UNRELIABLE : MSG_ALL, _gMsgSayText, {0,0,0}, Receiver )
	write_byte( Sender )
	write_string( sMessage )
	message_end( )
	
	return PLUGIN_CONTINUE;
}
Да излъчват glow и aura? Този предмет трае един рунд и може да се свали, ако притежателя му бъде засегнат от инфектираща граната. Това означава, че аурата и glow трябва да се махнат на следващия рунд, или на този рунд, ако притежателя е засегнат от инфектираща граната.

Благодаря. :)

Аватар
Dennis
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 177
Регистриран на: 25 Дек 2018, 04:14
Се отблагодари: 4 пъти
Получена благодарност: 10 пъти

Re: Как да направя така, че модела да излъчва glow & aura, щом играчът има този extra item?

Мнение от Dennis » 15 Яну 2023, 01:44

This is your glow, make sure you include fakemeta at the top.
The values "100, 255, 0" are your RGB colors, last const is the thickness amount of glow.

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

fm_set_rendering(id, kRenderFxGlowShell, 100, 255, 0, kRenderNormal, 5);
This is your aura

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

public aura(id)
{
	if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)
		return;
	
	if(!zp_get_user_frozen(id) && !zp_get_user_burning(id) && !zp_get_user_nodamage(id) && zp_get_extra_item_id("Anti-Virus Mask \y(\rSingle-Use\y") >= 1)
	{
		static iOrigin[3]            
		get_user_origin(id, iOrigin)

		message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
		write_byte(TE_DLIGHT) /** TE id */
		write_coord(iOrigin[0]) /** x */
		write_coord(iOrigin[1]) /** y */
		write_coord(iOrigin[2]) /** z */
		write_byte(10) /** radius */
		write_byte(100) /** r */
		write_byte(255) /** g */
		write_byte(0)  /** b */
		write_byte(2) /** life */
		write_byte(0) /** decay rate */
		message_end()
	}
	
	set_task(0.5, "aura", id)
}

When added together

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

public aura(id)
{
	if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)
		return;
	
	if(!zp_get_user_frozen(id) && !zp_get_user_burning(id) && !zp_get_user_nodamage(id) && zp_get_extra_item_id("Anti-Virus Mask \y(\rSingle-Use\y") >= 1)
	{
		static iOrigin[3]            
		get_user_origin(id, iOrigin)
		
		fm_set_rendering(id, kRenderFxGlowShell, 100, 255, 0, kRenderNormal, 5);

		message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
		write_byte(TE_DLIGHT) /** TE id */
		write_coord(iOrigin[0]) /** x */
		write_coord(iOrigin[1]) /** y */
		write_coord(iOrigin[2]) /** z */
		write_byte(10) /** radius */
		write_byte(100) /** r */
		write_byte(255) /** g */
		write_byte(0)  /** b */
		write_byte(2) /** life */
		write_byte(0) /** decay rate */
		message_end()
	}
	
	set_task(0.5, "aura", id)
}

At last

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

aura(id)
Which you should place in

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

zp_extra_item_selected
Refrain from renaming your extra item, since we're checking if the player has it in a hard-coded way.

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

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

Кой е на линия

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