Half-Life и Adrenaline Gamer форум
http://www.aghl.ru/forum/

[REQ] [Weapon] Frost Grenade
http://www.aghl.ru/forum/viewtopic.php?f=42&t=2716
Страница 1 из 1

Автор:  BIGs [ 06 июл 2017, 01:02 ]
Заголовок сообщения:  [REQ] [Weapon] Frost Grenade

Я хотел бы попросить написать плагин Frost Grenade (Граната - заморозка) как из Zombie Plague для Weapon Mod.
Хочу разместить ее у себя на сервере.
За ранее спасибо.

Вложения:
53dc93ddc5461.jpg
53dc93ddc5461.jpg [ 279.32 КБ | Просмотров: 5778 ]

Автор:  BIGs [ 09 июл 2017, 16:16 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Так , я немного поработал , до той степени куда где еще хоть что нибудь понимал.
как реализовать далее? полет гранаты , взрыв , а дальше я сам.
 

Автор:  yemet123 [ 10 июл 2017, 07:12 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

it's not easy.

Автор:  BIGs [ 10 июл 2017, 12:39 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Я то понимаю что not easy, но бросать этого я не собираюсь.
Мне нужно сочинить простую гранату со взрывом, которую я в дальнейшем переделаю под frost.

Автор:  Lev [ 14 июл 2017, 17:07 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Для взрыва есть натив в вепонмоде, попробуй пока поискать в других оружиях тут на форуме. Например, был какой-то гранатомет.

Автор:  BIGs [ 15 июл 2017, 13:44 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Это то есть. Но вот а спавн модели и полет?

Автор:  Lev [ 17 июл 2017, 00:39 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Ну, раз там гранатомет, то и спавн и полет там должны быть.
Тык.

Автор:  Glaster [ 18 дек 2020, 13:46 ]
Заголовок сообщения:  Re: [REQ] [Weapon] Frost Grenade

Чисто теоретически, граната в руках - это однозарядный гранатомёт. Так что, думаю, подойдёт код от Бульдога.

Код:
//**********************************************
//* Launch a contact grenade.               *
//**********************************************
//добавь CGrenada__Launcher(iPlayer) в Primary Attack
CGrenade__Launch( iPlayer )
{
   new pGrenade = create_entity( "info_target" );
   
   if( pGrenade <= 0 )
      return;
      
   // classname
   set_pev( pGrenade, pev_classname,   GRENADE_CLASSNAME );
   
   // model
   engfunc( EngFunc_SetModel, pGrenade,   MODEL_CLIP );
   
   // origin
   static Float:vecSrc[ 3 ];
   UTIL_MakeVectors( iPlayer, v_angle + punchangle );
   GetGunPosition( iPlayer, vecSrc );
   engfunc( EngFunc_SetOrigin, pGrenade,   vecSrc );
   
   // fly in the air
   set_pev( pGrenade, pev_gravity,      0.5 );
   
   // movetype
   set_pev( pGrenade, pev_movetype,   g_iCurrentMode[ iPlayer ] == MODE_BOUNCE ? MOVETYPE_BOUNCE : MOVETYPE_TOSS );
   
   // interaction
   set_pev( pGrenade, pev_solid,      SOLID_BBOX );
   
   // size
   engfunc( EngFunc_SetSize, pGrenade,   gVecZero, gVecZero );
   
   // owner
   set_pev( pGrenade, pev_owner,      iPlayer );
   
   // store grenade mode
   set_pev( pGrenade, pev_iuser1,      g_iCurrentMode[ iPlayer ] );
   
   // damage
   set_pev( pGrenade, pev_dmg,      WEAPON_DAMAGE );
   
   // next think
   set_pev( pGrenade, pev_nextthink,   get_gametime( ) + 0.6 );
   
   // Velocity
   static Float:vecVelocity[ 3 ];
   velocity_by_aim( iPlayer, GRENADE_VELOCITY, vecVelocity );
   set_pev( pGrenade, pev_velocity,   vecVelocity );
   
   // angles
   static Float:vecAngles[ 3 ];
   engfunc( EngFunc_VecToAngles, vecVelocity, vecAngles );
   set_pev( pGrenade, pev_angles,       vecAngles );
   
   // trail
   message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
   write_byte( TE_BEAMFOLLOW );
   write_short( pGrenade );
   write_short( g_sModelIndexTrail );
   write_byte( 25 );
   write_byte( 5 );
   write_byte( 250 );
   write_byte( 0 );
   write_byte( 0 );
   write_byte( 250 );
   message_end( );
}

//**********************************************
//* Grenade is ticking away.              *
//**********************************************

public CGP25Grenade__Think( pGrenade )
{
   if( !pev_valid( pGrenade ) )
      return;
      
   switch( pev( pGrenade, pev_iuser1 ) )
   {
      case MODE_BOUNCE:
      {
         static Float:vecVelocity[ 3 ];
         pev( pGrenade, pev_velocity, vecVelocity );
         
         if( xs_vec_len( vecVelocity ) <= 10.0 )
         {
            CGP25__Explode( pGrenade );
         }
      }
   }
}

//**********************************************
//* Grenade hit something.                 *
//**********************************************

public CGP25Grenade__Touch( pGrenade, pOther )
{
   if( !pev_valid( pGrenade ) )
      return;
      
   switch( pev( pGrenade, pev_iuser1 ) )
   {
      case MODE_BOUNCE:
      {
         static Float:vecVelocity[ 3 ];
         pev( pGrenade, pev_velocity, vecVelocity );
         
         xs_vec_mul_scalar( vecVelocity, 0.4, vecVelocity );
         set_pev( pGrenade, pev_velocity, vecVelocity );
         
         if( pev( pGrenade, pev_fuser1 ) <= 0.0 )
         {
            emit_sound( pGrenade, CHAN_ITEM, SOUND_BOUNCE, VOL_NORM, ATTN_NORM, 0, 97 );
            set_pev( pGrenade, pev_fuser1, random_float( 0.5, 0.9 ) );
         }
         
         set_pev( pGrenade, pev_nextthink, get_gametime( ) + 0.16 );
      }
      case MODE_INSTANT:
      {
         CGP25__Explode( pGrenade );
      }
   }
}

//**********************************************
//* Grenade explode.                 *
//**********************************************

CGP25__Explode( pGrenade )
{
   if( !pev_valid( pGrenade ) )
      return;
      
   static Float:vecSrc[ 3 ], Float:flDmg;
   pev( pGrenade, pev_origin, vecSrc );
   pev( pGrenade, pev_dmg, flDmg );
   
   // sprite
   engfunc( EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecSrc, 0 );
   write_byte( TE_EXPLOSION );
   engfunc( EngFunc_WriteCoord, vecSrc[ 0 ] );
   engfunc( EngFunc_WriteCoord, vecSrc[ 1 ] );
   engfunc( EngFunc_WriteCoord, vecSrc[ 2 ] );
   write_short( g_sModelIndexExplode );
   write_byte( floatround( ( flDmg - 50.0 ) * 0.6 ) );
   write_byte( 15 );
   write_byte( TE_EXPLFLAG_NONE );
   message_end( );
   
   static pevOwner;
   pevOwner = pev( pGrenade, pev_owner );
   
   // damage
   wpnmod_radius_damage( vecSrc, pGrenade, pevOwner, flDmg, GRENADE_RADIUS, CLASS_NONE, DMG_BLAST | DMG_ALWAYSGIB );
      
   engfunc( EngFunc_RemoveEntity, pGrenade );   
}
UTIL_MakeVectors( Player, bsType )
{
   static Float:vPunchAngle[ 3 ], Float:vAngle[ 3 ];

   if( bsType & v_angle )   
      pev( Player, pev_v_angle, vAngle );
   if( bsType & punchangle )
      pev( Player, pev_punchangle, vPunchAngle );

   xs_vec_add( vAngle, vPunchAngle, vAngle );
   engfunc( EngFunc_MakeVectors, vAngle );
}
GetGunPosition( pPlayer, Float:vecRet[ 3 ] )
{
   static Float:vecSrc[ 3 ], Float:vForward[ 3 ], Float:vRight[ 3 ], Float:vUp[ 3 ];
   pev( pPlayer, pev_origin, vecSrc );
   global_get( glb_v_forward, vForward );
   global_get( glb_v_right, vRight );
   global_get( glb_v_up, vUp );
   
   vecRet[ 0 ] = vecSrc[ 0 ] + vForward[ 0 ] * 25.0 + vRight[ 0 ] * 20.0 + vUp[ 0 ] * 10.0;
   vecRet[ 1 ] = vecSrc[ 1 ] + vForward[ 1 ] * 25.0 + vRight[ 1 ] * 20.0 + vUp[ 1 ] * 10.0;
   vecRet[ 2 ] = vecSrc[ 2 ] + vForward[ 2 ] * 25.0 + vRight[ 2 ] * 20.0 + vUp[ 2 ] * 10.0;
}

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/