1. Na samą górę kodu nad modułami dodajemy:
#pragma semicolon 1
2. Po niższe zmienne dajemy nad: plugin_init
new gMaxPlayers, gMessageDeathMsg, gCvarRadius, gCvarDamage, gCylinderSprite; new const gExplodeSound[] = "weapons/rocketfire1.wav";
3. Potem zabieramy się za dodanie eventów i cvarów do plugin_init
gCvarRadius = register_cvar("cod_promien_wybuchu", "200");
gCvarDamage = register_cvar("cod_obrazenia_przez_wybuch", "100.0"); || obrażenia zawsze podajemy w FLOACIE, czyli np: 10.1.
gMaxPlayers = get_maxplayers();
gMessageDeathMsg = get_user_msgid("DeathMsg");
4. Szukamy teraz:
public Death()I dodajemy:
new iKiller = read_data( 1 );
new iVictim = read_data( 2 );
new szWeapon[ 30 ];
read_data( 4, szWeapon, charsmax( szWeapon ) );
if( iVictim == iKiller )
{
return PLUGIN_CONTINUE;
}
if(klasa_gracza[id] == Nasza_klasa_Wybuchajaca) || Tutaj wpisujesz swoją klasę, która ma wybuchnąć przy zabiciu.
{
new iOrigin[3];
get_user_origin(iVictim, iOrigin);
new iRadius = get_pcvar_num(gCvarRadius);
Create_BeamCylinder(iOrigin,120,gCylinderSprite,0,0,6,16,0,random(255),random(255),random(255),255,0);
Create_BeamCylinder(iOrigin,320,gCylinderSprite,0,0,6,16,0,random(255),random(255),random(255),255,0);
Create_BeamCylinder(iOrigin,iRadius,gCylinderSprite,0,0,6,16,0,random(255),random(255),random(255),255,0);
Blast_ExplodeDamage(iVictim,get_pcvar_float(gCvarDamage),float(iRadius));
emit_sound(iVictim,CHAN_BODY,gExplodeSound,VOL_NORM,ATTN_NORM,0,PITCH_NORM);
}
5. Następnie "stocki" na sam dół moda:
stock Blast_ExplodeDamage( entid, Float:damage, Float:range )
{
new Float:flOrigin1[ 3 ];
entity_get_vector( entid, EV_VEC_origin, flOrigin1 );
new Float:flDistance;
new Float:flTmpDmg;
new Float:flOrigin2[ 3 ];
for( new i = 1; i <= gMaxPlayers; i++ )
{
if( is_user_alive( i ) && get_user_team( entid ) != get_user_team( i ) )
{
entity_get_vector( i, EV_VEC_origin, flOrigin2 );
flDistance = get_distance_f( flOrigin1, flOrigin2 );
static const szWeaponName[] = "Blast Explosion";
if( flDistance <= range )
{
flTmpDmg = damage - ( damage / range ) * flDistance;
fakedamage( i, szWeaponName, flTmpDmg, DMG_BLAST );
message_begin( MSG_BROADCAST, gMessageDeathMsg );
write_byte( entid );
write_byte( i );
write_byte( 0 );
write_string( szWeaponName );
message_end();
}
}
}
}
stock Create_BeamCylinder( origin[ 3 ], addrad, sprite, startfrate, framerate, life, width, amplitude, red, green, blue, brightness, speed )
{
message_begin( MSG_PVS, SVC_TEMPENTITY, origin );
write_byte( TE_BEAMCYLINDER );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + addrad );
write_short( sprite );
write_byte( startfrate );
write_byte( framerate );
write_byte(life );
write_byte( width );
write_byte( amplitude );
write_byte( red );
write_byte( green );
write_byte( blue );
write_byte( brightness );
write_byte( speed );
message_end();
}
6. Do precache_plugin, czyli do pobieranych od pluginu plików do gracza dodajemy efekt wybuchowy sprite:
gCylinderSprite = precache_model( "sprites/shockwave.spr" ); precache_sound( gExplodeSound );[/sma][/spoiler]
7. Do cvarów do amxx.cfg dodajemy:
Cytat
cod_promien_wybuchu "200" || W jakim obrębie iluś metrów ma wybuchnąć gracz i zadać obrażenia.
cod_obrazenia_przez_wybuch "100.0" || ile ma zabrać HP za wybuch.
cod_obrazenia_przez_wybuch "100.0" || ile ma zabrać HP za wybuch.






Do góry








