Solved [ZP] M3 Black Dragon

Unpaid Requests, Public Plugins
Post Reply
User avatar
konno
Member
Member
Brazil
Posts: 44
Joined: 6 years ago
Location: Brazil
Contact:

[ZP] M3 Black Dragon

#1

Post by konno » 5 years ago

Hello,
can someone covert those guns to our zombie mod?
Attachments
[ZP] M3 Black Dragon.rar
(2.24 MiB) Downloaded 733 times
[ZP] M3 Black Dragon.rar
(2.24 MiB) Downloaded 733 times

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#2

Post by Night Fury » 5 years ago

Try:
  1. #include <zombie_escape>
  2. #include <fakemeta_util>
  3.  
  4. #define PLUGIN                  "[ZP] Extra: CSO Weapon Buff M3"
  5. #define VERSION                 "1.0"
  6. #define AUTHOR                  "KORD_12.7"
  7.  
  8.  
  9. //**********************************************
  10. //* Weapon Settings.                           *
  11. //**********************************************
  12.  
  13. #define WPNLIST
  14.  
  15. // Main
  16. #define WEAPON_KEY              785442
  17. #define WEAPON_NAME                 "weapon_m3dragon"
  18.  
  19. #define WEAPON_REFERANCE            "weapon_xm1014"
  20. #define WEAPON_MAX_CLIP             8
  21. #define WEAPON_DEFAULT_AMMO         32
  22.  
  23. #define WEAPON_TIME_NEXT_IDLE           15.0
  24. #define WEAPON_TIME_NEXT_ATTACK         1.0
  25. #define WEAPON_TIME_DELAY_DEPLOY        1.0
  26.  
  27. #define WEAPON_MULTIPLIER_DAMAGE        1.5
  28.  
  29. #define WEAPON_RADIUS_DRAGON_ATTACK     200.0
  30. #define WEAPON_DRAGON_DAMAGE_ATTACK     random_float(400.0, 500.0)
  31.  
  32. #define WEAPON_BALL_RADIUS_EXP          150.0          
  33. #define WEAPON_DAMAGE_BALL_EXP          random_float(150.0, 200.0)
  34.  
  35. #define ZE_ITEM_NAME                "buffm3"
  36. #define ZE_ITEM_COST                0
  37. #define ZE_ITEM_LIMIT               0
  38.  
  39. // Models
  40. #define MODEL_WORLD             "models/w_m3dragon.mdl"
  41. #define MODEL_VIEW              "models/v_m3dragon.mdl"
  42. #define MODEL_PLAYER                "models/p_m3dragon.mdl"
  43. #define MODEL_DRAGON                "models/m3dragon_effect.mdl"
  44. #define MODEL_FIREBALL              "models/ef_fireball2.mdl"
  45.  
  46. // Sounds
  47. #define SOUND_FIRE              "weapons/m3dragon_shoot1.wav"
  48. #define SOUND_FIRE_B                "weapons/m3dragon_shoot2.wav"
  49. #define SOUND_EXPLODE               "weapons/m3dragon_exp.wav"
  50. #define SOUND_DRAGON                "weapons/m3dragon_dragon_fx.wav"
  51.  
  52. // Sprites
  53. #define WEAPON_HUD_TXT              "sprites/weapon_m3dragon.txt"
  54. #define WEAPON_HUD_SPR              "sprites/640hud18.spr"
  55. #define WEAPON_HUD_SPR2             "sprites/640hud177.spr"
  56. #define WEAPON_SPR_EXP              "sprites/fexplo.spr"
  57. #define WEAPON_SPR_SMOKE            "sprites/steam1.spr"
  58. #define WEAPON_MUZZLE               "sprites/m3dragon_flame.spr"
  59. #define WEAPON_MUZZLE_B             "sprites/m3dragon_flame2.spr"
  60.  
  61. // Animation
  62. #define ANIM_EXTENSION              "shotgun"
  63.  
  64. // Animation sequences
  65. enum
  66. {  
  67.     ANIM_IDLE,
  68.     ANIM_SHOOT,
  69.     ANIM_SHOOT2,
  70.     ANIM_INSERT,
  71.     ANIM_AFTER_RELOAD,
  72.     ANIM_BEFOR_RELOAD,
  73.     ANIM_DRAW,
  74.  
  75.     ANIM_IDLE_B,
  76.     ANIM_SHOOT_B,
  77.     ANIM_INSERT_B,
  78.     ANIM_AFTER_RELOAD_B,
  79.     ANIM_BEFOR_RELOAD_B,
  80.     ANIM_DRAW_B,
  81. };
  82. //**********************************************
  83. //* Some macroses.                             *
  84. //**********************************************
  85.  
  86. #define MDLL_Spawn(%0)              dllfunc(DLLFunc_Spawn, %0)
  87. #define MDLL_Touch(%0,%1)           dllfunc(DLLFunc_Touch, %0, %1)
  88. #define MDLL_USE(%0,%1)             dllfunc(DLLFunc_Use, %0, %1)
  89.  
  90. #define SET_MODEL(%0,%1)            engfunc(EngFunc_SetModel, %0, %1)
  91. #define SET_ORIGIN(%0,%1)           engfunc(EngFunc_SetOrigin, %0, %1)
  92.  
  93. #define PRECACHE_MODEL(%0)          engfunc(EngFunc_PrecacheModel, %0)
  94. #define PRECACHE_SOUND(%0)          engfunc(EngFunc_PrecacheSound, %0)
  95. #define PRECACHE_GENERIC(%0)            engfunc(EngFunc_PrecacheGeneric, %0)
  96.  
  97. #define MESSAGE_BEGIN(%0,%1,%2,%3)      engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
  98. #define MESSAGE_END()               message_end()
  99.  
  100. #define WRITE_ANGLE(%0)             engfunc(EngFunc_WriteAngle, %0)
  101. #define WRITE_BYTE(%0)              write_byte(%0)
  102. #define WRITE_COORD(%0)             engfunc(EngFunc_WriteCoord, %0)
  103. #define WRITE_STRING(%0)            write_string(%0)
  104. #define WRITE_SHORT(%0)             write_short(%0)
  105.  
  106. #define BitSet(%0,%1)               (%0 |= (1 << (%1 - 1)))
  107. #define BitClear(%0,%1)             (%0 &= ~(1 << (%1 - 1)))
  108. #define BitCheck(%0,%1)             (%0 & (1 << (%1 - 1)))
  109.  
  110. //**********************************************
  111. //* PvData Offsets.                            *
  112. //**********************************************
  113.  
  114. // Linux extra offsets
  115. #define extra_offset_weapon         4
  116. #define extra_offset_player         5
  117.  
  118. new g_bitIsConnected;
  119.  
  120. #define m_rgpPlayerItems_CWeaponBox     34
  121.  
  122. // CBasePlayerItem
  123. #define m_pPlayer               41
  124. #define m_pNext                 42
  125. #define m_iId                               43
  126.  
  127. // CBasePlayerWeapon
  128. #define m_fInSuperBullets           30
  129. #define m_flNextPrimaryAttack           46
  130. #define m_flNextSecondaryAttack         47
  131. #define m_flTimeWeaponIdle          48
  132. #define m_iPrimaryAmmoType          49
  133. #define m_iClip                 51
  134. #define m_fInSpecialReload              55
  135. #define m_fWeaponState              74
  136. #define m_flNextAttack              83
  137. #define m_iLastZoom                 109
  138.  
  139. // CBasePlayer
  140. #define m_flVelocityModifier            108
  141. #define m_fResumeZoom                   110
  142. #define m_iFOV                  363
  143. #define m_rgpPlayerItems_CBasePlayer        367
  144. #define m_pActiveItem               373
  145. #define m_rgAmmo_CBasePlayer            376
  146. #define m_szAnimExtention           492
  147.  
  148. #define IsValidPev(%0)              (pev_valid(%0) == 2)
  149.  
  150. #define MUZZLE_CLASSNAME_LEFT           "MuzzleLeft"
  151. #define MUZZLE_CLASSNAME_RIGHT          "MuzzleRight"
  152. #define BALL_CLASSNAME              "FireBall"
  153. #define DRAGON_CLASSNAME            "FireDragon"
  154.  
  155. //**********************************************
  156. //* Let's code our weapon.                     *
  157. //**********************************************
  158.  
  159. new iBlood[4];
  160. new iSpriteleft[33];
  161. new iSpriteright[33];
  162.  
  163. Weapon_OnPrecache()
  164. {
  165.     PRECACHE_MODEL(MODEL_WORLD);
  166.     PRECACHE_MODEL(MODEL_VIEW);
  167.     PRECACHE_MODEL(MODEL_PLAYER);
  168.     PRECACHE_MODEL(MODEL_DRAGON);
  169.     PRECACHE_MODEL(MODEL_FIREBALL);
  170.    
  171.     PRECACHE_SOUND(SOUND_FIRE);
  172.     PRECACHE_SOUND(SOUND_FIRE_B);
  173.     PRECACHE_SOUND(SOUND_EXPLODE);
  174.     PRECACHE_SOUND(SOUND_DRAGON);
  175.     precache_sound("weapons/m3dragon_secondary_draw.wav")
  176.     precache_sound("weapons/m3dragon_reload_insert.wav")
  177.     precache_sound("weapons/m3dragon_fire_loop.wav")
  178.     precache_sound("weapons/m3dragon_after_reload.wav")
  179.    
  180.     #if defined WPNLIST
  181.     PRECACHE_GENERIC(WEAPON_HUD_TXT);
  182.     PRECACHE_GENERIC(WEAPON_HUD_SPR);
  183.     PRECACHE_GENERIC(WEAPON_HUD_SPR2);
  184.     #endif
  185.    
  186.     PRECACHE_MODEL(WEAPON_MUZZLE);
  187.     PRECACHE_MODEL(WEAPON_MUZZLE_B);
  188.    
  189.     iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
  190.     iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
  191.     iBlood[2] = PRECACHE_MODEL(WEAPON_SPR_EXP);
  192.     iBlood[3] = PRECACHE_MODEL(WEAPON_SPR_SMOKE);
  193. }
  194.  
  195. Weapon_OnSpawn(const iItem)
  196. {
  197.     // Setting world model.
  198.     SET_MODEL(iItem, MODEL_WORLD);
  199. }
  200.  
  201. Weapon_OnDeploy(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  202. {
  203.     #pragma unused iClip, iAmmoPrimary, iReloadMode
  204.     static iszViewModel;
  205.     if (iszViewModel || (iszViewModel = engfunc(EngFunc_AllocString, MODEL_VIEW)))
  206.     {
  207.         set_pev_string(iPlayer, pev_viewmodel2, iszViewModel);
  208.     }
  209.     static iszPlayerModel;
  210.     if (iszPlayerModel || (iszPlayerModel = engfunc(EngFunc_AllocString, MODEL_PLAYER)))
  211.     {
  212.         set_pev_string(iPlayer, pev_weaponmodel2, iszPlayerModel);
  213.     }
  214.  
  215.     set_pdata_int(iItem, m_fInSpecialReload, false, extra_offset_weapon);
  216.  
  217.     set_pdata_string(iPlayer, m_szAnimExtention * 4, ANIM_EXTENSION, -1, extra_offset_player * 4);
  218.    
  219.     set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_DELAY_DEPLOY, extra_offset_weapon);
  220.     set_pdata_float(iPlayer, m_flNextAttack, WEAPON_TIME_DELAY_DEPLOY, extra_offset_player);
  221.  
  222.     Weapon_DefaultDeploy(iPlayer, MODEL_VIEW, MODEL_PLAYER, iMode ? ANIM_DRAW_B:ANIM_DRAW, ANIM_EXTENSION);
  223.    
  224.     Update_HUD(iItem, iPlayer, 0);
  225.     Update_HUD(iItem, iPlayer, 1);
  226.    
  227.     if (iMode)
  228.     {
  229.         MuzzleFlash_Left(iPlayer, WEAPON_MUZZLE, 0.08, 20.0);
  230.         MuzzleFlash_Right(iPlayer, WEAPON_MUZZLE_B, 0.08, 20.0);
  231.     }
  232. }
  233.  
  234. Weapon_OnHolster(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  235. {
  236.     #pragma unused iPlayer, iClip, iAmmoPrimary, iMode, iReloadMode
  237.    
  238.     set_pdata_int(iItem, m_fInSpecialReload, false, extra_offset_weapon);
  239.    
  240.     Update_HUD(iItem, iPlayer, 0);
  241.    
  242.     if (pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
  243.     {
  244.         set_pev(iSpriteleft[iPlayer], pev_fuser1, get_gametime() + 0.0);
  245.         set_pev(iSpriteright[iPlayer], pev_fuser2, get_gametime() + 0.0);
  246.     }
  247. }
  248.  
  249. Weapon_OnReload(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  250. {
  251.     if(iAmmoPrimary <= 0)
  252.     {
  253.         return HAM_IGNORED;
  254.     }
  255.    
  256.     if (iClip >=WEAPON_MAX_CLIP)
  257.     {
  258.         return HAM_IGNORED;
  259.     }
  260.  
  261.     switch(iReloadMode)
  262.     {
  263.         case 0:
  264.         {
  265.             Weapon_SendAnim(iPlayer, iMode ? ANIM_BEFOR_RELOAD_B:ANIM_BEFOR_RELOAD);
  266.            
  267.             set_pdata_float(iItem, m_flNextPrimaryAttack, 0.5, extra_offset_weapon);
  268.             set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
  269.            
  270.             set_pdata_int(iItem, m_fInSpecialReload, 1, extra_offset_weapon);
  271.            
  272.             return HAM_IGNORED;
  273.         }
  274.         case 1:
  275.         {      
  276.             if (get_pdata_int(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
  277.             {
  278.                 return HAM_IGNORED;
  279.             }
  280.                
  281.             Weapon_SendAnim(iPlayer, iMode ? ANIM_INSERT_B : ANIM_INSERT);
  282.                    
  283.             set_pdata_int(iItem, m_fInSpecialReload, 2, extra_offset_weapon);
  284.             set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
  285.                
  286.             static szAnimation[64];
  287.  
  288.             formatex(szAnimation, charsmax(szAnimation), "ref_reload_shotgun");
  289.             Player_SetAnimation(iPlayer, szAnimation);
  290.                
  291.         }
  292.         case 2:
  293.         {
  294.             set_pdata_int(iItem, m_iClip, iClip + 1, extra_offset_weapon);
  295.             set_pdata_int(iPlayer, 381, iAmmoPrimary-1, extra_offset_player);
  296.             set_pdata_int(iItem, m_fInSpecialReload, 1, extra_offset_weapon);
  297.         }
  298.     }
  299.    
  300.     switch(iReloadMode)
  301.     {
  302.         case 0:
  303.         {
  304.             Weapon_SendAnim(iPlayer, iMode ? ANIM_BEFOR_RELOAD_B : ANIM_BEFOR_RELOAD);
  305.            
  306.             set_pdata_float(iItem, m_flNextPrimaryAttack, 0.5, extra_offset_weapon);
  307.             set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
  308.            
  309.             set_pdata_int(iItem, m_fInSpecialReload, 1, extra_offset_weapon);
  310.            
  311.             return HAM_IGNORED;
  312.         }
  313.     }
  314.     return HAM_IGNORED;
  315. }
  316.  
  317.  
  318. Weapon_OnIdle(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  319. {
  320.     #pragma unused iClip, iAmmoPrimary
  321.    
  322.     ExecuteHamB(Ham_Weapon_ResetEmptySound, iItem);
  323.  
  324.     if(iClip == WEAPON_MAX_CLIP)
  325.     {
  326.         if(iReloadMode == 2)
  327.         {
  328.             Weapon_ReloadEnd(iItem, iPlayer, iMode);
  329.             return;
  330.         }
  331.     }
  332.    
  333.     if(iAmmoPrimary <= 0)
  334.     {
  335.         if(iReloadMode == 2)
  336.         {
  337.             Weapon_ReloadEnd(iItem, iPlayer, iMode);
  338.             return;
  339.         }
  340.     }
  341.  
  342.     switch(iReloadMode)
  343.     {
  344.         case 1:
  345.         {      
  346.             if (get_pdata_int(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
  347.             {
  348.                 return;
  349.             }
  350.            
  351.             Weapon_SendAnim(iPlayer, iMode ? ANIM_INSERT_B: ANIM_INSERT);
  352.                
  353.             set_pdata_int(iItem, m_fInSpecialReload, 2, extra_offset_weapon);
  354.             set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
  355.            
  356.             static szAnimation[64];
  357.  
  358.             formatex(szAnimation, charsmax(szAnimation), "ref_reload_shotgun");
  359.             Player_SetAnimation(iPlayer, szAnimation);
  360.            
  361.         }
  362.         case 2:
  363.         {
  364.             set_pdata_int(iItem, m_iClip, iClip + 1, extra_offset_weapon);
  365.             set_pdata_int(iPlayer, 381, iAmmoPrimary-1, extra_offset_player);
  366.             set_pdata_int(iItem, m_fInSpecialReload, 1, extra_offset_weapon);
  367.         }
  368.     }
  369.    
  370.     if(!iReloadMode)
  371.     {
  372.         if (get_pdata_int(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
  373.         {
  374.             return;
  375.         }
  376.    
  377.         set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_NEXT_IDLE, extra_offset_weapon);
  378.         Weapon_SendAnim(iPlayer, iMode ? ANIM_IDLE_B : ANIM_IDLE);
  379.     }
  380. }  
  381.  
  382. Weapon_OnPrimaryAttack(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  383. {
  384.     #pragma unused iAmmoPrimary
  385.    
  386.     static iFlags, iAnimDesired;
  387.     static szAnimation[64];iFlags = pev(iPlayer, pev_flags);
  388.  
  389.     if(iReloadMode > 0 && iClip > 0)
  390.     {
  391.         Weapon_ReloadEnd(iItem, iPlayer, iMode);
  392.         return;
  393.     }
  394.    
  395.     CallOrigFireBullets3(iItem, iPlayer)
  396.  
  397.     if (iClip <= 0 || pev(iPlayer, pev_waterlevel) == 3)
  398.     {
  399.         return;
  400.     }
  401.  
  402.     Punchangle(iPlayer, .iVecx = -2.0, .iVecy = 0.0, .iVecz = 0.0);
  403.  
  404.     Weapon_SendAnim(iPlayer, iMode ? ANIM_SHOOT_B:ANIM_SHOOT);
  405.                
  406.     formatex(szAnimation, charsmax(szAnimation), iFlags & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", ANIM_EXTENSION);
  407.                                
  408.     if ((iAnimDesired = lookup_sequence(iPlayer, szAnimation)) == -1)
  409.     {
  410.         iAnimDesired = 0;
  411.     }
  412.                    
  413.     set_pev(iPlayer, pev_sequence, iAnimDesired);
  414.  
  415.     set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_TIME_NEXT_ATTACK, extra_offset_weapon);
  416.     set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_NEXT_ATTACK+1.0, extra_offset_weapon);
  417.    
  418.     engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_FIRE, 0.9, ATTN_NORM, 0, PITCH_NORM);
  419. }
  420.  
  421. Weapon_OnSecondaryAttack(const iItem, const iPlayer, const iClip, const iAmmoPrimary, const iMode, const iReloadMode)
  422. {
  423.     #pragma unused iAmmoPrimary
  424.  
  425.     if(iReloadMode > 0 && iClip > 0)
  426.     {
  427.         Weapon_ReloadEnd(iItem, iPlayer, iMode);
  428.         return;
  429.     }
  430.  
  431.     if (get_pdata_float(iItem, m_flNextSecondaryAttack, extra_offset_weapon) > 0.0)
  432.     {
  433.         return;
  434.     }
  435.    
  436.     if (pev(iPlayer, pev_button) & IN_ATTACK2)
  437.     {
  438.         if (!iMode || pev(iPlayer, pev_waterlevel) == 3)
  439.         {
  440.             return;
  441.         }
  442.    
  443.         static iFlags;
  444.         static iAnimDesired;
  445.         static szAnimation[64];iFlags = pev(iPlayer, pev_flags);
  446.         static pEntity;
  447.         static Float:fOrigin[3],Float:vecEnd[3];fm_get_aim_origin(iPlayer, vecEnd);Get_Position(iPlayer, 15.0, 0.0, -5.0, fOrigin);
  448.         static iszAllocStringCached;
  449.  
  450.         Punchangle(iPlayer, .iVecx = -4.0, .iVecy = 0.0, .iVecz = 0.0);
  451.        
  452.         Weapon_SendAnim(iPlayer, ANIM_SHOOT2);
  453.  
  454.         engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_FIRE_B, 0.9, ATTN_NORM, 0, PITCH_NORM);
  455.                
  456.         formatex(szAnimation, charsmax(szAnimation), iFlags & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", ANIM_EXTENSION);
  457.                                
  458.         if ((iAnimDesired = lookup_sequence(iPlayer, szAnimation)) == -1)
  459.         {
  460.             iAnimDesired = 0;
  461.         }
  462.                    
  463.         set_pev(iPlayer, pev_sequence, iAnimDesired);
  464.  
  465.         set_pdata_float(iItem, m_flNextSecondaryAttack, 2.0, extra_offset_weapon);
  466.         set_pdata_float(iItem, m_flTimeWeaponIdle, 2.0, extra_offset_weapon);
  467.  
  468.         if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "info_target")))
  469.         {
  470.             pEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
  471.         }
  472.        
  473.         if (pev_valid(pEntity))
  474.         {
  475.             set_pev(pEntity, pev_movetype, MOVETYPE_FLYMISSILE);
  476.             set_pev(pEntity, pev_owner, iPlayer);
  477.            
  478.             SET_MODEL(pEntity,MODEL_FIREBALL)
  479.             SET_ORIGIN(pEntity,fOrigin)
  480.    
  481.             set_pev(pEntity, pev_classname, BALL_CLASSNAME);
  482.             set_pev(pEntity, pev_mins, Float:{-0.01, -0.01, -0.01});
  483.             set_pev(pEntity, pev_maxs, Float:{0.01, 0.01, 0.01});
  484.             set_pev(pEntity, pev_gravity, 0.01);
  485.             set_pev(pEntity, pev_solid, SOLID_BBOX);
  486.             set_pev(pEntity, pev_nextthink, get_gametime() + 0.1);
  487.    
  488.             static Float:Velocity[3];Get_Speed_Vector(fOrigin, vecEnd, 1000.0, Velocity);
  489.             set_pev(pEntity, pev_velocity, Velocity);
  490.                
  491.             Sprite_SetTransparency(pEntity, kRenderTransAdd, Float:{255.255,255.0,255.0}, 150.0);
  492.         }
  493.        
  494.         Update_HUD(iItem, iPlayer, 0);
  495.         set_pdata_int(iItem, m_fWeaponState, 0, extra_offset_weapon);
  496.         set_pdata_int(iItem, m_fInSuperBullets, 0, extra_offset_weapon);
  497.         Update_HUD(iItem, iPlayer, 1);
  498.        
  499.         if (pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
  500.         {
  501.             set_pev(iSpriteleft[iPlayer], pev_fuser1, get_gametime() + 0.0);
  502.             set_pev(iSpriteright[iPlayer], pev_fuser2, get_gametime() + 0.0);
  503.         }
  504.     }
  505. }
  506.  
  507. Weapon_ReloadEnd(const iItem, const iPlayer, const iMode)
  508. {
  509.     Weapon_SendAnim(iPlayer, iMode ? ANIM_AFTER_RELOAD_B:ANIM_AFTER_RELOAD);
  510.    
  511.     set_pdata_float(iItem, m_flNextPrimaryAttack, 0.6, extra_offset_weapon);
  512.     set_pdata_float(iItem, m_flTimeWeaponIdle, 1.4, extra_offset_weapon);
  513.    
  514.     set_pdata_int(iItem, m_fInSpecialReload, 0, extra_offset_weapon);
  515. }
  516.  
  517. Update_HUD(const iItem, const iPlayer, UpdateMode)
  518. {
  519.     new iSprite[33];
  520.     static iMode;iMode=get_pdata_int(iItem, m_fWeaponState, extra_offset_weapon);
  521.     format(iSprite, charsmax(iSprite), "number_%d", iMode);
  522.  
  523.     if(UpdateMode && iMode > 0)
  524.     {
  525.         message_begin(MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, iPlayer);
  526.         write_byte(1);
  527.         write_string(iSprite);
  528.         write_byte(30);
  529.         write_byte(144);
  530.         write_byte(255);
  531.         message_end();
  532.     }
  533.     else
  534.     {
  535.         message_begin(MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, iPlayer);
  536.         write_byte(0);
  537.         write_string(iSprite);
  538.         write_byte(30);
  539.         write_byte(144);
  540.         write_byte(255);
  541.         message_end();
  542.     }
  543. }
  544.  
  545.  
  546. //*********************************************************************
  547. //*           Don't modify the code below this line unless            *
  548. //*              you know _exactly_ what you are doing!!!             *
  549. //*********************************************************************
  550.  
  551. #define MSGID_WEAPONLIST 78
  552.  
  553. new g_iItemID;
  554. new RoundEend;
  555.  
  556. #define IsCustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
  557.  
  558. public plugin_precache()
  559. {
  560.     Weapon_OnPrecache();
  561.     #if defined WPNLIST
  562.     register_clcmd(WEAPON_NAME, "Cmd_WeaponSelect");
  563.     register_message(MSGID_WEAPONLIST, "MsgHook_WeaponList");
  564.     #endif
  565. }
  566.  
  567. public plugin_init()
  568. {
  569.     register_plugin(PLUGIN, VERSION, AUTHOR);
  570.    
  571.     register_forward(FM_PlaybackEvent,              "FakeMeta_PlaybackEvent",    false);
  572.     register_forward(FM_SetModel,                   "FakeMeta_SetModel",         false);
  573.     register_forward(FM_UpdateClientData,               "FakeMeta_UpdateClientData_Post",true);
  574.     register_forward(FM_Touch,                  "FakeMeta_Touch",        false);
  575.     register_forward(FM_Think,                  "FakeMeta_Think",        false);
  576.    
  577.     RegisterHam(Ham_Spawn,          "weaponbox",        "HamHook_Weaponbox_Spawn_Post", true);
  578.  
  579.     RegisterHam(Ham_TraceAttack,        "func_breakable",   "HamHook_Entity_TraceAttack",   false);
  580.     RegisterHam(Ham_TraceAttack,        "info_target",      "HamHook_Entity_TraceAttack",   false);
  581.     RegisterHam(Ham_TraceAttack,        "player",       "HamHook_Entity_TraceAttack",   false);
  582.  
  583.     RegisterHam(Ham_Item_Deploy,        WEAPON_REFERANCE,   "HamHook_Item_Deploy_Post", true);
  584.     RegisterHam(Ham_Item_Holster,       WEAPON_REFERANCE,   "HamHook_Item_Holster",     false);
  585.     RegisterHam(Ham_Item_AddToPlayer,   WEAPON_REFERANCE,   "HamHook_Item_AddToPlayer", false);
  586.     RegisterHam(Ham_Item_PostFrame,     WEAPON_REFERANCE,   "HamHook_Item_PostFrame",   false);
  587.    
  588.     RegisterHam(Ham_Weapon_Reload,      WEAPON_REFERANCE,   "HamHook_Item_Reload",      false);
  589.     RegisterHam(Ham_Weapon_WeaponIdle,  WEAPON_REFERANCE,   "HamHook_Item_WeaponIdle"false);
  590.     RegisterHam(Ham_Weapon_PrimaryAttack,   WEAPON_REFERANCE,   "HamHook_Item_PrimaryAttack",   false);
  591.    
  592.     g_iItemID = ze_register_item(ZE_ITEM_NAME, ZE_ITEM_COST, ZE_ITEM_LIMIT)
  593. }
  594.    
  595. public ze_select_item_pre(id, itemid)
  596. {
  597.     if (itemid != g_iItemID)
  598.         return ZE_ITEM_AVAILABLE
  599.  
  600.     if (ze_is_user_zombie(id))
  601.         return ZE_ITEM_DONT_SHOW
  602.  
  603.     return ZE_ITEM_AVAILABLE
  604. }
  605.  
  606. public ze_select_item_post(id, itemid)
  607. {
  608.     if (itemid != g_iItemID)
  609.         return
  610.  
  611.     Weapon_Give(id)
  612. }
  613.  
  614. public ze_user_infected(iPlayer)
  615. {
  616.     if (pev_valid(iSpriteleft[iPlayer]) && pev_valid(iSpriteright[iPlayer]))
  617.     {
  618.         set_pev(iSpriteleft[iPlayer], pev_fuser1, get_gametime() + 0.0);
  619.         set_pev(iSpriteright[iPlayer], pev_fuser2, get_gametime() + 0.0);
  620.     }
  621. }
  622.  
  623. public plugin_natives()
  624. {
  625.     register_native("geating_m3", "NativeGiveWeapon", true)
  626. }
  627.  
  628. public NativeGiveWeapon(iPlayer)
  629. {
  630.     Weapon_Give(iPlayer);
  631. }
  632.  
  633. public StartRound()RoundEend=false;
  634. public EndRound()RoundEend=true;
  635.  
  636. //**********************************************
  637. //* Block client weapon.                       *
  638. //**********************************************
  639.  
  640. public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
  641. {
  642.     static iActiveItem;iActiveItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
  643.    
  644.     if (!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
  645.     {
  646.         return FMRES_IGNORED;
  647.     }
  648.  
  649.     set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
  650.     return FMRES_IGNORED;
  651. }
  652.  
  653. public FakeMeta_Touch(const iEnt, const iOther)
  654. {
  655.     if(!pev_valid(iEnt))
  656.     {
  657.         return FMRES_IGNORED;
  658.     }
  659.    
  660.     static Classname[32];pev(iEnt, pev_classname, Classname, sizeof(Classname));
  661.     static Float:Origin[3];pev(iEnt, pev_origin, Origin);
  662.     static iAttacker; iAttacker = pev(iEnt, pev_owner);
  663.     static pevVictim; pevVictim = -1;
  664.     static iEntity;
  665.     static iszAllocStringCached2;
  666.    
  667.     if (!equal(Classname, BALL_CLASSNAME))
  668.     {
  669.         return FMRES_IGNORED;
  670.     }
  671.  
  672.     if (engfunc(EngFunc_PointContents, Origin) == CONTENTS_SKY || engfunc(EngFunc_PointContents, Origin) == CONTENTS_WATER)
  673.     {
  674.         set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  675.         return FMRES_SUPERCEDE;
  676.     }
  677.    
  678.     if (!is_user_connected(iAttacker))
  679.     {
  680.         set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  681.         return FMRES_IGNORED;
  682.     }
  683.    
  684.     if (iszAllocStringCached2 || (iszAllocStringCached2 = engfunc(EngFunc_AllocString, "info_target")))
  685.     {
  686.         iEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached2);
  687.     }
  688.        
  689.     if (pev_valid(iEntity))
  690.     {  
  691.         SET_MODEL(iEntity,MODEL_DRAGON)
  692.         SET_ORIGIN(iEntity,Origin)
  693.    
  694.         set_pev(iEntity, pev_classname, DRAGON_CLASSNAME);
  695.         set_pev(iEntity, pev_movetype, MOVETYPE_FLY);
  696.         set_pev(iEntity, pev_solid, SOLID_NOT);
  697.         set_pev(iEntity, pev_owner, iAttacker);
  698.         set_pev(iEntity, pev_framerate, 0.9);
  699.         set_pev(iEntity, pev_sequence, 0);
  700.         set_pev(iEntity, pev_animtime, get_gametime());
  701.         set_pev(iEntity, pev_fuser2, get_gametime() + 3.4);
  702.         set_pev(iEntity, pev_nextthink, get_gametime() + 1.0);
  703.         Sprite_SetTransparency(iEntity, kRenderTransAdd, Float:{255.255,255.0,255.0}, 200.0);
  704.     }
  705.  
  706.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0);
  707.     write_byte(TE_EXPLOSION);
  708.     WRITE_COORD(Origin[0]);
  709.     WRITE_COORD(Origin[1]);
  710.     WRITE_COORD(Origin[2] + 10.0);
  711.     write_short(iBlood[2]);
  712.     write_byte(20);
  713.     write_byte(15);
  714.     write_byte(TE_EXPLFLAG_NOSOUND);
  715.     message_end();
  716.    
  717.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0);
  718.     write_byte(TE_SMOKE)
  719.     WRITE_COORD(Origin[0]);
  720.     WRITE_COORD(Origin[1]);
  721.     WRITE_COORD(Origin[2] - 20.0);
  722.     write_short(iBlood[3]);
  723.     write_byte(30);
  724.     write_byte(5);
  725.     message_end();
  726.    
  727.     engfunc(EngFunc_EmitSound, iEnt, CHAN_VOICE, SOUND_DRAGON, 0.9, ATTN_NORM, 0, PITCH_NORM);
  728.     engfunc(EngFunc_EmitSound, iEnt, CHAN_ITEM, SOUND_EXPLODE, 0.9, ATTN_NORM, 0, PITCH_NORM);
  729.            
  730.     while((pevVictim = engfunc(EngFunc_FindEntityInSphere, pevVictim, Origin, WEAPON_BALL_RADIUS_EXP)) != 0 )
  731.     {
  732.         if (!is_user_alive(pevVictim))continue;
  733.         if (!ze_is_user_zombie(pevVictim))continue;
  734.         if (RoundEend)continue;
  735.        
  736.         static Float:vOrigin[3];pev(pevVictim, pev_origin, vOrigin);
  737.  
  738.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  739.         write_byte(TE_BLOODSPRITE)
  740.         WRITE_COORD(vOrigin[0])
  741.         WRITE_COORD(vOrigin[1])
  742.         WRITE_COORD(vOrigin[2])
  743.         write_short(iBlood[0])
  744.         write_short(iBlood[1])
  745.         write_byte(76)
  746.         write_byte(18)
  747.         message_end()
  748.        
  749.         set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.02, 0.05);
  750.         show_hudmessage(iAttacker, " \     /^n^n/     \");
  751.        
  752.         ExecuteHamB(Ham_TakeDamage, pevVictim, iEnt, iAttacker, WEAPON_DAMAGE_BALL_EXP, DMG_SONIC);
  753.     }
  754.    
  755.     set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  756.    
  757.     return FMRES_IGNORED;
  758. }
  759.  
  760. public FakeMeta_Think(const iSprite)
  761. {
  762.     if (!pev_valid(iSprite))
  763.     {
  764.         return FMRES_IGNORED;
  765.     }
  766.    
  767.     static Classname[32];pev(iSprite, pev_classname, Classname, sizeof(Classname));
  768.  
  769.     static iAttacker; iAttacker = pev(iSprite, pev_owner);
  770.    
  771.     if (equal(Classname,  DRAGON_CLASSNAME))
  772.     {
  773.         static Float:Origin[3];pev(iSprite, pev_origin, Origin);
  774.         static Float:iTime;pev(iSprite, pev_fuser2, iTime);
  775.         static iVictim;iVictim = -1
  776.        
  777.         if (iTime <= get_gametime())
  778.         {
  779.             engfunc(EngFunc_RemoveEntity, iSprite);
  780.             return FMRES_SUPERCEDE;
  781.         }
  782.        
  783.         while((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, Origin, WEAPON_RADIUS_DRAGON_ATTACK)) != 0)
  784.         {
  785.             static Float:iVelo[3];pev(iVictim, pev_velocity, iVelo);
  786.            
  787.             if (!is_user_alive(iVictim))continue;
  788.             if (!ze_is_user_zombie(iVictim))continue;  
  789.             if (RoundEend)continue;
  790.            
  791.             iVelo[0] = 0.0;
  792.             iVelo[1] = 0.0;
  793.             iVelo[2] = 250.0;
  794.            
  795.             set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.02, 0.05);
  796.             show_hudmessage(iAttacker, " \     /^n^n/     \");
  797.            
  798.             ExecuteHamB(Ham_TakeDamage, iVictim, iSprite, iAttacker, WEAPON_DRAGON_DAMAGE_ATTACK, DMG_SONIC);
  799.            
  800.             set_pdata_float(iVictim, m_flVelocityModifier, 1.0,  extra_offset_player);
  801.             set_pev(iVictim, pev_velocity, iVelo);
  802.         }
  803.    
  804.         set_pev(iSprite, pev_nextthink, get_gametime() + 0.08);
  805.     }
  806.    
  807.     if (equal(Classname, MUZZLE_CLASSNAME_LEFT))
  808.     {  
  809.         static Float:flFrame;
  810.         static Float:iTime;pev(iSprite, pev_fuser1, iTime);
  811.        
  812.         flFrame+=1.0
  813.        
  814.         if (iTime <= get_gametime() || pev(iAttacker, pev_deadflag) == DAMAGE_YES)
  815.         {
  816.             set_pev(iSprite, pev_flags, pev(iSprite, pev_flags) | FL_KILLME);
  817.             return FMRES_SUPERCEDE;
  818.         }
  819.    
  820.         set_pev(iSprite, pev_frame, flFrame);  
  821.         set_pev(iSprite, pev_nextthink, get_gametime() + 0.01);
  822.     }
  823.    
  824.     if (equal(Classname, MUZZLE_CLASSNAME_RIGHT))
  825.     {  
  826.         static Float:flFrame;
  827.         static Float:iTime2;pev(iSprite, pev_fuser2, iTime2);
  828.        
  829.         flFrame+=1.0
  830.        
  831.         if (iTime2 <= get_gametime() || pev(iAttacker, pev_deadflag) == DAMAGE_YES)
  832.         {
  833.             set_pev(iSprite, pev_flags, pev(iSprite, pev_flags) | FL_KILLME);
  834.             return FMRES_SUPERCEDE;
  835.         }
  836.    
  837.         set_pev(iSprite, pev_frame, flFrame);  
  838.         set_pev(iSprite, pev_nextthink, get_gametime() + 0.01);
  839.     }
  840.    
  841.    
  842.     return FMRES_IGNORED;
  843. }
  844.  
  845. //**********************************************
  846. //* Item (weapon) hooks.                       *
  847. //**********************************************
  848.  
  849.     #define _call.%0(%1,%2) \
  850.                                     \
  851.     Weapon_On%0                         \
  852.     (                               \
  853.         %1,                             \
  854.         %2,                         \
  855.                                     \
  856.         get_pdata_int(%1, m_iClip, extra_offset_weapon),    \
  857.         GetAmmoInventory(%2, PrimaryAmmoIndex(%1)),     \
  858.         get_pdata_int(%1, m_fWeaponState, extra_offset_weapon), \
  859.         get_pdata_int(%1, m_fInSpecialReload, extra_offset_weapon) \
  860.     )
  861.  
  862. public HamHook_Item_Deploy_Post(const iItem)
  863. {
  864.     new iPlayer;
  865.    
  866.     if (!CheckItem(iItem, iPlayer))
  867.     {
  868.         return HAM_IGNORED;
  869.     }
  870.    
  871.     _call.Deploy(iItem, iPlayer);
  872.     return HAM_IGNORED;
  873. }
  874.  
  875. public HamHook_Item_Holster(const iItem)
  876. {
  877.     new iPlayer;
  878.    
  879.     if (!CheckItem(iItem, iPlayer))
  880.     {
  881.         return HAM_IGNORED;
  882.     }
  883.    
  884.     set_pev(iPlayer, pev_viewmodel, 0);
  885.     set_pev(iPlayer, pev_weaponmodel, 0);
  886.    
  887.     _call.Holster(iItem, iPlayer);
  888.     return HAM_SUPERCEDE;
  889. }
  890.  
  891. public HamHook_Item_WeaponIdle(const iItem)
  892. {
  893.     static iPlayer;
  894.    
  895.     if (!CheckItem(iItem, iPlayer))
  896.     {
  897.         return HAM_IGNORED;
  898.     }
  899.  
  900.     _call.Idle(iItem, iPlayer);
  901.     return HAM_SUPERCEDE;
  902. }
  903.  
  904. public HamHook_Item_Reload(const iItem)
  905. {
  906.     static iPlayer;
  907.    
  908.     if (!CheckItem(iItem, iPlayer))
  909.     {
  910.         return HAM_IGNORED;
  911.     }
  912.    
  913.     _call.Reload(iItem, iPlayer);
  914.     return HAM_SUPERCEDE;
  915. }
  916.  
  917. public HamHook_Item_PrimaryAttack(const iItem)
  918. {
  919.     static iPlayer;
  920.    
  921.     if (!CheckItem(iItem, iPlayer))
  922.     {
  923.         return HAM_IGNORED;
  924.     }
  925.    
  926.     _call.PrimaryAttack(iItem, iPlayer);
  927.     return HAM_SUPERCEDE;
  928. }
  929.  
  930. public HamHook_Item_PostFrame(const iItem)
  931. {
  932.     static iPlayer;
  933.    
  934.     if (!CheckItem(iItem, iPlayer))
  935.     {
  936.         return HAM_IGNORED;
  937.     }
  938.    
  939.     if (get_pdata_float(iItem, m_flNextPrimaryAttack, extra_offset_weapon) <= 0.0 && get_pdata_int(iItem, m_fInSpecialReload, extra_offset_weapon) <= 0)
  940.     {
  941.         _call.SecondaryAttack(iItem, iPlayer);
  942.     }
  943.    
  944.     return HAM_IGNORED;
  945. }  
  946.  
  947. //**********************************************
  948. //* Fire Bullets.                              *
  949. //**********************************************
  950.  
  951. CallOrigFireBullets3(const iItem, const iPlayer)
  952. {
  953.     static FakeMetaTraceLine;FakeMetaTraceLine=register_forward(FM_TraceLine,"FakeMeta_TraceLine",true)
  954.     state FireBullets: Enabled;
  955.     static Float: vecPuncheAngle[3];pev(iPlayer, pev_punchangle, vecPuncheAngle);
  956.    
  957.     ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
  958.     set_pev(iPlayer, pev_punchangle, vecPuncheAngle);
  959.    
  960.     state FireBullets: Disabled;
  961.     unregister_forward(FM_TraceLine,FakeMetaTraceLine,true)
  962. }
  963.  
  964. public FakeMeta_PlaybackEvent() <FireBullets: Enabled>
  965. {
  966.     return FMRES_SUPERCEDE;
  967. }
  968.  
  969. public FakeMeta_TraceLine(Float:vecStart[3], Float:vecEnd[3], iFlag, iIgnore, iTrase)
  970. {
  971.     if (iFlag & IGNORE_MONSTERS)
  972.     {
  973.         return FMRES_IGNORED;
  974.     }
  975.    
  976.     static Float:vecfEnd[3],iHit,iDecal,glassdecal;
  977.    
  978.     if(!glassdecal)
  979.     {  
  980.         glassdecal=engfunc( EngFunc_DecalIndex, "{bproof1" )
  981.     }
  982.    
  983.     iHit=get_tr2(iTrase,TR_pHit)
  984.    
  985.     if(iHit>0 && pev_valid(iHit))
  986.         if(pev(iHit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED
  987.         else if(pev(iHit,pev_rendermode)!=0)iDecal=glassdecal
  988.         else iDecal=random_num(41,45)
  989.     else iDecal=random_num(41,45)
  990.  
  991.     get_tr2(iTrase, TR_vecEndPos, vecfEnd)
  992.    
  993.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecfEnd, 0)
  994.     write_byte(TE_GUNSHOTDECAL)
  995.     WRITE_COORD(vecfEnd[0])
  996.     WRITE_COORD(vecfEnd[1])
  997.     WRITE_COORD(vecfEnd[2])
  998.     write_short(iHit > 0 ? iHit : 0)
  999.     write_byte(iDecal)
  1000.     message_end()
  1001.  
  1002.     return FMRES_IGNORED
  1003. }
  1004.  
  1005. public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, const Float: flDamage) <FireBullets: Enabled>
  1006. {
  1007.     static iItem;iItem = get_pdata_cbase(iAttacker, m_pActiveItem, extra_offset_player);
  1008.  
  1009.     if (!BitCheck(g_bitIsConnected, iAttacker) || !IsValidPev(iAttacker))
  1010.     {
  1011.         return;
  1012.     }
  1013.    
  1014.     if (!IsValidPev(iItem))
  1015.     {
  1016.         return;
  1017.     }
  1018.    
  1019.     if (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) == 31)
  1020.     {
  1021.         MuzzleFlash_Left(iAttacker, WEAPON_MUZZLE, 0.08, 20.0);
  1022.         MuzzleFlash_Right(iAttacker, WEAPON_MUZZLE_B, 0.08, 20.0);
  1023.         Update_HUD(iItem, iAttacker, 0);
  1024.         set_pdata_int(iItem, m_fWeaponState, 1, extra_offset_weapon);
  1025.         Update_HUD(iItem, iAttacker, 1);
  1026.     }
  1027.    
  1028.     if (is_user_alive(iEntity) && get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) < 32 && ze_is_user_zombie(iEntity))
  1029.     {
  1030.         set_pdata_int(iItem, m_fInSuperBullets, (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon)+1), extra_offset_weapon);
  1031.     }
  1032.    
  1033.     set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.05);
  1034.     show_hudmessage(iAttacker, " \     /^n^n/     \");
  1035.    
  1036.     SetHamParamFloat(3, flDamage * WEAPON_MULTIPLIER_DAMAGE);
  1037. }
  1038.  
  1039. public MsgHook_Death()          </* Empty statement */>     { /* Fallback */ }
  1040. public MsgHook_Death()          <FireBullets: Disabled>     { /* Do notning */ }
  1041.  
  1042. public FakeMeta_PlaybackEvent()     </* Empty statement */>     { return FMRES_IGNORED; }
  1043. public FakeMeta_PlaybackEvent()     <FireBullets: Disabled>     { return FMRES_IGNORED; }
  1044.  
  1045. public HamHook_Entity_TraceAttack()     </* Empty statement */>     { /* Fallback */ }
  1046. public HamHook_Entity_TraceAttack()     <FireBullets: Disabled>     { /* Do notning */ }
  1047.  
  1048.  
  1049. Weapon_Create(const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0})
  1050. {
  1051.     new iWeapon;
  1052.  
  1053.     static iszAllocStringCached;
  1054.     if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_REFERANCE)))
  1055.     {
  1056.         iWeapon = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
  1057.     }
  1058.    
  1059.     if (!IsValidPev(iWeapon))
  1060.     {
  1061.         return FM_NULLENT;
  1062.     }
  1063.    
  1064.     MDLL_Spawn(iWeapon);
  1065.     SET_ORIGIN(iWeapon, vecOrigin);
  1066.    
  1067.     set_pdata_int(iWeapon, m_iClip, WEAPON_MAX_CLIP, extra_offset_weapon);
  1068.     set_pdata_int(iWeapon, m_fWeaponState, 0, extra_offset_weapon);
  1069.     set_pdata_int(iWeapon, m_fInSuperBullets, 0, extra_offset_weapon);
  1070.  
  1071.     set_pev(iWeapon, pev_impulse, WEAPON_KEY);
  1072.     set_pev(iWeapon, pev_angles, vecAngles);
  1073.    
  1074.     Weapon_OnSpawn(iWeapon);
  1075.    
  1076.     return iWeapon;
  1077. }
  1078.  
  1079. Weapon_Give(const iPlayer)
  1080. {
  1081.     if (!IsValidPev(iPlayer))
  1082.     {
  1083.         return FM_NULLENT;
  1084.     }
  1085.    
  1086.     new iWeapon, Float: vecOrigin[3];
  1087.     pev(iPlayer, pev_origin, vecOrigin);
  1088.    
  1089.     if ((iWeapon = Weapon_Create(vecOrigin)) != FM_NULLENT)
  1090.     {
  1091.         Player_DropWeapons(iPlayer, ExecuteHamB(Ham_Item_ItemSlot, iWeapon));
  1092.         set_pev(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
  1093.         MDLL_Touch(iWeapon, iPlayer);
  1094.         SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO);
  1095.        
  1096.         return iWeapon;
  1097.     }
  1098.    
  1099.     return FM_NULLENT;
  1100. }
  1101.  
  1102. Player_DropWeapons(const iPlayer, const iSlot)
  1103. {
  1104.     new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, extra_offset_player);
  1105.  
  1106.     while (IsValidPev(iItem))
  1107.     {
  1108.         pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
  1109.         engclient_cmd(iPlayer, "drop", szWeaponName);
  1110.  
  1111.         iItem = get_pdata_cbase(iItem, m_pNext, extra_offset_weapon);
  1112.     }
  1113. }
  1114.  
  1115. Weapon_SendAnim(const iPlayer, const iAnim)
  1116. {
  1117.     set_pev(iPlayer, pev_weaponanim, iAnim);
  1118.  
  1119.     MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, iPlayer);
  1120.     WRITE_BYTE(iAnim);
  1121.     WRITE_BYTE(0);
  1122.     MESSAGE_END();
  1123. }
  1124.  
  1125. stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
  1126. {
  1127.     set_pev(iPlayer, pev_viewmodel2, szViewModel);
  1128.     set_pev(iPlayer, pev_weaponmodel2, szWeaponModel);
  1129.     set_pev(iPlayer, pev_fov, 90.0);
  1130.    
  1131.     set_pdata_int(iPlayer, m_iFOV, 90, extra_offset_player);
  1132.     set_pdata_int(iPlayer, m_fResumeZoom, 0, extra_offset_player);
  1133.     set_pdata_int(iPlayer, m_iLastZoom, 90, extra_offset_player);
  1134.    
  1135.     set_pdata_string(iPlayer, m_szAnimExtention * 4, szAnimExt, -1, extra_offset_player * 4);
  1136.    
  1137.     Weapon_SendAnim(iPlayer, iAnim);
  1138. }
  1139.  
  1140. stock Punchangle(iPlayer, Float:iVecx = 0.0, Float:iVecy = 0.0, Float:iVecz = 0.0)
  1141. {
  1142.     static Float:iVec[3];pev(iPlayer, pev_punchangle,iVec);
  1143.     iVec[0] = iVecx;iVec[1] = iVecy;iVec[2] = iVecz
  1144.     set_pev(iPlayer, pev_punchangle, iVec);
  1145. }
  1146.  
  1147. stock Get_Position(id,Float:forw, Float:right, Float:up, Float:vStart[])
  1148. {
  1149.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3];
  1150.    
  1151.     pev(id, pev_origin, vOrigin);
  1152.     pev(id, pev_view_ofs, vUp);
  1153.    
  1154.     xs_vec_add(vOrigin, vUp, vOrigin);
  1155.    
  1156.     pev(id, pev_v_angle, vAngle);
  1157.    
  1158.     angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward);
  1159.     angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight);
  1160.     angle_vector(vAngle, ANGLEVECTOR_UP, vUp);
  1161.    
  1162.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up;
  1163.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up;
  1164.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up;
  1165. }
  1166.  
  1167. stock Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
  1168. {
  1169.     new_velocity[0] = origin2[0] - origin1[0]
  1170.     new_velocity[1] = origin2[1] - origin1[1]
  1171.     new_velocity[2] = origin2[2] - origin1[2]
  1172.     new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
  1173.     new_velocity[0] *= num
  1174.     new_velocity[1] *= num
  1175.     new_velocity[2] *= num
  1176. }
  1177.  
  1178. #define BitSet(%0,%1) (%0 |= (1 << (%1 - 1)))
  1179. #define BitClear(%0,%1) (%0 &= ~(1 << (%1 - 1)))
  1180. #define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))
  1181.  
  1182. public client_putinserver(id)
  1183. {
  1184.     BitSet(g_bitIsConnected, id);
  1185. }
  1186.  
  1187. public client_disconnect(id)
  1188. {
  1189.     BitClear(g_bitIsConnected, id);
  1190. }
  1191.  
  1192.  
  1193. bool: CheckItem(const iItem, &iPlayer)
  1194. {
  1195.     if (!IsValidPev(iItem) || !IsCustomItem(iItem))
  1196.     {
  1197.         return false;
  1198.     }
  1199.    
  1200.     iPlayer = get_pdata_cbase(iItem, m_pPlayer, extra_offset_weapon);
  1201.    
  1202.     if (!IsValidPev(iPlayer) || !BitCheck(g_bitIsConnected, iPlayer))
  1203.     {
  1204.         return false;
  1205.     }
  1206.    
  1207.     return true;
  1208. }
  1209.  
  1210. //**********************************************
  1211. //* Weapon list update.                        *
  1212. //**********************************************
  1213. #if defined WPNLIST
  1214. public Cmd_WeaponSelect(const iPlayer)
  1215. {
  1216.     engclient_cmd(iPlayer, WEAPON_REFERANCE);
  1217.     return PLUGIN_HANDLED;
  1218. }
  1219. #endif
  1220. public HamHook_Item_AddToPlayer(const iItem, const iPlayer)
  1221. {
  1222.     switch(pev(iItem, pev_impulse))
  1223.     {
  1224.         case 0: MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
  1225.         case WEAPON_KEY:
  1226.         {
  1227.             #if defined WPNLIST
  1228.             MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
  1229.             #endif
  1230.             SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iItem), pev(iItem, pev_iuser2));
  1231.         }
  1232.     }
  1233.    
  1234.     return HAM_IGNORED;
  1235. }
  1236.  
  1237. public MsgHook_WeaponList(const iMsgID, const iMsgDest, const iMsgEntity)
  1238. {
  1239.     static arrWeaponListData[8];
  1240.    
  1241.     if (!iMsgEntity)
  1242.     {
  1243.         new szWeaponName[32];
  1244.         get_msg_arg_string(1, szWeaponName, charsmax(szWeaponName));
  1245.        
  1246.         if (!strcmp(szWeaponName, WEAPON_REFERANCE))
  1247.         {
  1248.             for (new i, a = sizeof arrWeaponListData; i < a; i++)
  1249.             {
  1250.                 arrWeaponListData[i] = get_msg_arg_int(i + 2);
  1251.             }
  1252.         }
  1253.     }
  1254.     else
  1255.     {
  1256.         if (!IsCustomItem(iMsgDest) && pev(iMsgDest, pev_impulse))
  1257.         {
  1258.             return;
  1259.         }
  1260.        
  1261.         MESSAGE_BEGIN(MSG_ONE, iMsgID, {0.0, 0.0, 0.0}, iMsgEntity);
  1262.         WRITE_STRING(IsCustomItem(iMsgDest) ? WEAPON_NAME : WEAPON_REFERANCE);
  1263.        
  1264.         for (new i, a = sizeof arrWeaponListData; i < a; i++)
  1265.         {
  1266.             WRITE_BYTE(arrWeaponListData[i]);
  1267.         }
  1268.        
  1269.         MESSAGE_END();
  1270.     }
  1271. }
  1272.  
  1273. //**********************************************
  1274. //* Muzzleflash stuff.                *
  1275. //**********************************************
  1276.  
  1277. stock Sprite_SetTransparency(const iSprite, const iRendermode, const Float: vecColor[3], const Float: flAmt, const iFx = kRenderFxNone)
  1278. {
  1279.     set_pev(iSprite, pev_rendermode, iRendermode);
  1280.     set_pev(iSprite, pev_rendercolor, vecColor);
  1281.     set_pev(iSprite, pev_renderamt, flAmt);
  1282.     set_pev(iSprite, pev_renderfx, iFx);
  1283. }
  1284.  
  1285. stock MuzzleFlash_Right(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flFramerate)
  1286. {
  1287.     if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
  1288.     {
  1289.         return FM_NULLENT;
  1290.     }
  1291.    
  1292.     static iszAllocStringCached;
  1293.     if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
  1294.     {
  1295.         iSpriteright[iPlayer] = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
  1296.     }
  1297.    
  1298.     if (!IsValidPev(iSpriteright[iPlayer]))
  1299.     {
  1300.        
  1301.         return FM_NULLENT;
  1302.     }
  1303.    
  1304.     set_pev(iSpriteright[iPlayer], pev_model, szMuzzleSprite);
  1305.    
  1306.     set_pev(iSpriteright[iPlayer], pev_classname, MUZZLE_CLASSNAME_RIGHT);
  1307.     set_pev(iSpriteright[iPlayer], pev_owner, iPlayer);
  1308.     set_pev(iSpriteright[iPlayer], pev_aiment, iPlayer);
  1309.     set_pev(iSpriteright[iPlayer], pev_body, 4);
  1310.     set_pev(iSpriteright[iPlayer], pev_frame, 0.0);
  1311.    
  1312.     Sprite_SetTransparency(iSpriteright[iPlayer], kRenderTransAdd, Float:{0.0,0.0,0.0}, 255.0);
  1313.    
  1314.     set_pev(iSpriteright[iPlayer], pev_framerate, flFramerate);
  1315.     set_pev(iSpriteright[iPlayer], pev_scale, flScale);
  1316.    
  1317.     set_pev(iSpriteright[iPlayer], pev_fuser2, get_gametime() + 40.0);
  1318.     set_pev(iSpriteright[iPlayer], pev_nextthink, get_gametime() + 0.01);
  1319.    
  1320.     MDLL_Spawn(iSpriteright[iPlayer]);
  1321.  
  1322.     return iSpriteright[iPlayer];
  1323. }
  1324.  
  1325. stock MuzzleFlash_Left(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flFramerate)
  1326. {
  1327.     if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
  1328.     {
  1329.         return FM_NULLENT;
  1330.     }
  1331.    
  1332.     static iszAllocStringCached;
  1333.     if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
  1334.     {
  1335.         iSpriteleft[iPlayer] = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
  1336.     }
  1337.    
  1338.     if (!IsValidPev(iSpriteleft[iPlayer]))
  1339.     {
  1340.        
  1341.         return FM_NULLENT;
  1342.     }
  1343.    
  1344.     set_pev(iSpriteleft[iPlayer], pev_model, szMuzzleSprite);
  1345.    
  1346.     set_pev(iSpriteleft[iPlayer], pev_classname, MUZZLE_CLASSNAME_LEFT);
  1347.     set_pev(iSpriteleft[iPlayer], pev_owner, iPlayer);
  1348.     set_pev(iSpriteleft[iPlayer], pev_aiment, iPlayer);
  1349.     set_pev(iSpriteleft[iPlayer], pev_body, 3);
  1350.     set_pev(iSpriteleft[iPlayer], pev_frame, 0.0);
  1351.    
  1352.     Sprite_SetTransparency(iSpriteleft[iPlayer], kRenderTransAdd, Float:{0.0,0.0,0.0}, 255.0);
  1353.    
  1354.     set_pev(iSpriteleft[iPlayer], pev_framerate, flFramerate);
  1355.     set_pev(iSpriteleft[iPlayer], pev_scale, flScale);
  1356.    
  1357.     set_pev(iSpriteleft[iPlayer], pev_fuser1, get_gametime() + 40.0);
  1358.     set_pev(iSpriteleft[iPlayer], pev_nextthink, get_gametime() + 0.01);
  1359.    
  1360.     MDLL_Spawn(iSpriteleft[iPlayer]);
  1361.  
  1362.     return iSpriteleft[iPlayer];
  1363. }
  1364.  
  1365. //**********************************************
  1366. //* Weaponbox world model.                     *
  1367. //**********************************************
  1368.  
  1369. public HamHook_Weaponbox_Spawn_Post(const iWeaponBox)
  1370. {
  1371.     if (IsValidPev(iWeaponBox))
  1372.     {
  1373.         state (IsValidPev(pev(iWeaponBox, pev_owner))) WeaponBox: Enabled;
  1374.     }
  1375.    
  1376.     return HAM_IGNORED;
  1377. }
  1378.  
  1379. public FakeMeta_SetModel(const iEntity) <WeaponBox: Enabled>
  1380. {
  1381.     state WeaponBox: Disabled;
  1382.    
  1383.     if (!IsValidPev(iEntity))
  1384.     {
  1385.         return FMRES_IGNORED;
  1386.     }
  1387.    
  1388.     #define MAX_ITEM_TYPES  6
  1389.    
  1390.     for (new i, iItem; i < MAX_ITEM_TYPES; i++)
  1391.     {
  1392.         iItem = get_pdata_cbase(iEntity, m_rgpPlayerItems_CWeaponBox + i, extra_offset_weapon);
  1393.        
  1394.         if (IsValidPev(iItem) && IsCustomItem(iItem))
  1395.         {
  1396.             SET_MODEL(iEntity, MODEL_WORLD);   
  1397.             set_pev(iItem, pev_iuser2, GetAmmoInventory(pev(iEntity,pev_owner), PrimaryAmmoIndex(iItem)))
  1398.             return FMRES_SUPERCEDE;
  1399.         }
  1400.     }
  1401.    
  1402.     return FMRES_IGNORED;
  1403. }
  1404.  
  1405. public FakeMeta_SetModel()  </* Empty statement */> { /*  Fallback  */ return FMRES_IGNORED; }
  1406. public FakeMeta_SetModel()  < WeaponBox: Disabled > { /* Do nothing */ return FMRES_IGNORED; }
  1407.  
  1408. //**********************************************
  1409. //* Ammo Inventory.                            *
  1410. //**********************************************
  1411.  
  1412. PrimaryAmmoIndex(const iItem)
  1413. {
  1414.     return get_pdata_int(iItem, m_iPrimaryAmmoType, extra_offset_weapon);
  1415. }
  1416.  
  1417. GetAmmoInventory(const iPlayer, const iAmmoIndex)
  1418. {
  1419.     if (iAmmoIndex == -1)
  1420.     {
  1421.         return -1;
  1422.     }
  1423.  
  1424.     return get_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, extra_offset_player);
  1425. }
  1426.  
  1427. SetAmmoInventory(const iPlayer, const iAmmoIndex, const iAmount)
  1428. {
  1429.     if (iAmmoIndex == -1)
  1430.     {
  1431.         return 0;
  1432.     }
  1433.  
  1434.     set_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, iAmount, extra_offset_player);
  1435.     return 1;
  1436. }
  1437. //vk.com/l.shvendik0
  1438. stock Player_SetAnimation(const iPlayer, const szAnim[])
  1439. {
  1440.        if(!is_user_alive(iPlayer))return;
  1441.        
  1442.        #define ACT_RANGE_ATTACK1   28
  1443.        
  1444.        // Linux extra offsets
  1445.        #define extra_offset_animating   4
  1446.        
  1447.        // CBaseAnimating
  1448.        #define m_flFrameRate      36
  1449.        #define m_flGroundSpeed      37
  1450.        #define m_flLastEventCheck   38
  1451.        #define m_fSequenceFinished   39
  1452.        #define m_fSequenceLoops   40
  1453.        
  1454.        // CBaseMonster
  1455.        #define m_Activity      73
  1456.        #define m_IdealActivity      74
  1457.        
  1458.        // CBasePlayer
  1459.        #define m_flLastAttackTime   220
  1460.        
  1461.        new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
  1462.          
  1463.        if ((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
  1464.        {
  1465.           iAnimDesired = 0;
  1466.        }
  1467.    
  1468.        new Float: flGametime = get_gametime();
  1469.    
  1470.        set_pev(iPlayer, pev_frame, 0.0);
  1471.        set_pev(iPlayer, pev_framerate, 1.0);
  1472.        set_pev(iPlayer, pev_animtime, flGametime );
  1473.        set_pev(iPlayer, pev_sequence, iAnimDesired);
  1474.        
  1475.        set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating);
  1476.        set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating);
  1477.        
  1478.        set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating);
  1479.        set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating);
  1480.        set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating);
  1481.        
  1482.        set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player);
  1483.        set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player);  
  1484.        set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player);
  1485. }
  1486. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1487. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
  1488. */
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
konno
Member
Member
Brazil
Posts: 44
Joined: 6 years ago
Location: Brazil
Contact:

#3

Post by konno » 5 years ago

tks Jack

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: Bing [Bot] and 4 guests