Advertisement
Guest User

Extended Grenade.inc

a guest
Nov 21st, 2019
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 34.99 KB | None | 0 0
  1. /****************************************************************************************************
  2.  *                                                                                                  *
  3.  *                                         Extended Grenade                                         *
  4.  *                                                                                                  *
  5.  * Copyright © 2019 Abyss Morgan. All rights reserved.                                              *
  6.  *                                                                                                  *
  7.  * Website:  adm.ct8.pl                                                                             *
  8.  * Download: adm.ct8.pl/r/download                                                                  *
  9.  *                                                                                                  *
  10.  * Plugins: Streamer, ColAndreas                                                                    *
  11.  * Modules: 3DTryg                                                                                  *
  12.  *                                                                                                  *
  13.  * File Version: 1.1.0                                                                              *
  14.  * Streamer Version: 2.9.4                                                                          *
  15.  * ColAndreas Version: 1.4.0                                                                        *
  16.  * 3DTryg Version: 4.8.5                                                                            *
  17.  *                                                                                                  *
  18.  * Functions:                                                                                       *
  19.  * Grenade::IsWeaponEnable(playerid,special_weaponid);                                              *
  20.  * Grenade::WeaponEnable(playerid,special_weaponid,bool:enable);                                    *
  21.  * Grenade::GetSpecialAmmo(playerid,special_weaponid);                                              *
  22.  * Grenade::SetSpecialAmmo(playerid,special_weaponid,ammo);                                         *
  23.  * Grenade::GetEffectID(playerid,special_weaponid);                                                 *
  24.  * Grenade::SetEffectID(playerid,special_weaponid,effectid);                                        *
  25.  * Grenade::GetDamage(playerid,special_weaponid);                                                   *
  26.  * Grenade::SetDamage(playerid,special_weaponid,Float:damage);                                      *
  27.  * Grenade::GetVehicleDamage(playerid,special_weaponid);                                            *
  28.  * Grenade::SetVehicleDamage(playerid,special_weaponid,Float:damage);                               *
  29.  * Grenade::GetTime(playerid,special_weaponid);                                                     *
  30.  * Grenade::SetTime(playerid,special_weaponid,seconds);                                             *
  31.  * Grenade::IsToggleGasMask(playerid);                                                              *
  32.  * Grenade::ToggleGasMask(playerid,bool:toggle);                                                    *
  33.  * Grenade::GetSpecialWeaponID(weaponid);                                                           *
  34.  * Grenade::GrenadeEffectByPlayer(playerid,special_weaponid,Float:x,Float:y,Float:z);               *
  35.  * Grenade::CreateGrenadeEffect(special_weaponid,effectid,Float:x,Float:y,Float:z,worldid,          *
  36.  *                              interiorid,playerid,Float:streamdistance,Float:damage,              *
  37.  *                              Float:veh_damage,active_time=25,byplayerid=INVALID_PLAYER_ID);      *
  38.  * Grenade::DestroyEffect(mobid);                                                                   *
  39.  *                                                                                                  *
  40.  ****************************************************************************************************/
  41.  
  42. #if defined _samp_included
  43.     #if (!defined GetPlayerPoolSize || !defined GetSVarInt)
  44.         #error [ADM] This include requires SA:MP version 0.3.7 (adm.ct8.pl/r/download)
  45.     #endif
  46. #else
  47.     #error [ADM] This include requires SA:MP Include
  48. #endif
  49.  
  50. #if ((!defined Streamer_GetItemPos) || (!defined INVALID_STREAMER_ID) || (!defined STREAMER_TYPE_ACTOR))
  51.     #error [ADM] You need Streamer v2.9.4 (github.com/samp-incognito/samp-streamer-plugin/releases)
  52. #endif
  53.  
  54. #if !defined COLANDREAS
  55.     #error [ADM] You need ColAndreas v1.4.0 (github.com/Pottus/ColAndreas/releases)
  56. #endif
  57.  
  58. #if defined _dynamic_mine_system
  59.     #error [ADM] Please include Mines.inc after ExtendedGrenade.inc for improvements
  60. #endif
  61.  
  62. #if defined _veh_missile_launcher
  63.     #error [ADM] Please include VehicleMissileCol.inc after ExtendedGrenade.inc for improvements
  64. #endif
  65.  
  66. //Check Version 3DTryg.inc
  67. #if !defined TRYG3D_SAMP_INCLUDE
  68.     #error [ADM] You need 3DTryg.inc v4.8.5 (adm.ct8.pl/d/3DTryg.inc)
  69. #elseif !defined TRYG3D_VERSION
  70.     #error [ADM] Update you 3DTryg.inc to v4.8.5 (adm.ct8.pl/d/3DTryg.inc)
  71. #elseif (TRYG3D_VERSION < 40805)
  72.     #error [ADM] Update you 3DTryg.inc to v4.8.5 (adm.ct8.pl/d/3DTryg.inc)
  73. #endif
  74.  
  75. #if defined _GRENADE_INCLUDE
  76.     #endinput
  77. #endif
  78. #define _GRENADE_INCLUDE
  79. #define DYNAMIC_FILTERSCRIPT                            "ALS:HOOK:METHOD"
  80.  
  81. #define EXTENDED_GRENADE_VERSION                        (10100) //a.b.c 10000*a+100*b+c
  82.  
  83. #define Grenade::                                       Grenade_
  84.  
  85. #if !defined MAX_GRENADE_EFFECT
  86.     #define MAX_GRENADE_EFFECT                          2048
  87. #endif
  88.  
  89. #if !defined GRENADE_DOT_TEAR_GAS
  90.     #define GRENADE_DOT_TEAR_GAS                        1.0
  91. #endif
  92.  
  93. #if !defined GRENADE_DOT_FIRE
  94.     #define GRENADE_DOT_FIRE                            3.0
  95. #endif
  96.  
  97. #if !defined GRENADE_EFFECT_TIME
  98.     #define GRENADE_EFFECT_TIME                         25  //seconds
  99. #endif
  100.  
  101. #if !defined GRENADE_DEFAULT_PLAYER_DAMAGE
  102.     #define GRENADE_DEFAULT_PLAYER_DAMAGE               82.5
  103. #endif
  104.  
  105. #if !defined GRENADE_DEFAULT_VEHICLE_DAMAGE
  106.     #define GRENADE_DEFAULT_VEHICLE_DAMAGE              825.0
  107. #endif
  108.  
  109. #define INVALID_GRENADE_ID                              -1
  110.  
  111. #define WEAPON_SUFFOCATION                              100
  112. #define WEAPON_NAPALM                                   101
  113.  
  114. #define GRENADE_MAX_SPECIAL_WEAPON                      4
  115.  
  116. #define GRENADE_SPECIAL_WEAPON_NONE                     0
  117. #define GRENADE_SPECIAL_WEAPON_GRENADE                  1
  118. #define GRENADE_SPECIAL_WEAPON_TEARGAS                  2
  119. #define GRENADE_SPECIAL_WEAPON_MOLTOV                   3
  120.  
  121. #define GRENADE_EFFECT_NONE                             0
  122.  
  123. #define GRENADE_EFFECT_CLUSTER_BOMB_1                   1
  124. #define GRENADE_EFFECT_CLUSTER_BOMB_2                   2
  125. #define GRENADE_EFFECT_CLUSTER_BOMB_3                   3
  126. #define GRENADE_EFFECT_CLUSTER_BOMB_4                   4
  127. #define GRENADE_EFFECT_BANG_GRENADE                     5
  128.  
  129. #define GRENADE_EFFECT_SMALL_SMOKE                      1
  130. #define GRENADE_EFFECT_HUGE_SMOKE_1                     2
  131. #define GRENADE_EFFECT_HUGE_SMOKE_2                     3
  132. #define GRENADE_EFFECT_HUGE_SMOKE_3                     4
  133.  
  134. #define GRENADE_EFFECT_NAPALM                           1
  135.  
  136. #define GRENADE_EXTRA_ID_OFFSET                         1200000
  137.  
  138. enum Grenade::EnumPlayer {
  139.     bool:   Grenade::Enabled[GRENADE_MAX_SPECIAL_WEAPON],
  140.     bool:   Grenade::GasMask,
  141.             Grenade::EffectID[GRENADE_MAX_SPECIAL_WEAPON],
  142.             Grenade::Ammo[GRENADE_MAX_SPECIAL_WEAPON],
  143.     Float:  Grenade::Damage[GRENADE_MAX_SPECIAL_WEAPON],
  144.     Float:  Grenade::VehicleDamage[GRENADE_MAX_SPECIAL_WEAPON],
  145.             Grenade::Time[GRENADE_MAX_SPECIAL_WEAPON],
  146.             Grenade::StunTime,
  147.     Float:  Grenade::GasDOT,
  148.     Float:  Grenade::FireDOT
  149. };
  150.  
  151. enum Grenade::EnumEffect {
  152.     bool:                   Grenade::Active,
  153.                             Grenade::Type,
  154.                             Grenade::Time,
  155.     Float:                  Grenade::DOT,
  156.                             Grenade::PlayerID,
  157.     STREAMER_TAG_AREA:      Grenade::Area,
  158.     STREAMER_TAG_OBJECT:    Grenade::Object[17]
  159. };
  160.  
  161. new Grenade::PlayerData[MAX_PLAYERS][Grenade::EnumPlayer],
  162.     Grenade::EffectData[MAX_GRENADE_EFFECT][Grenade::EnumEffect],
  163.     Grenade::UpperBound = -1,
  164.     Grenade::UpdateTimer,
  165.     Text: Grenade::TextDrawFlash[3];
  166.  
  167. #define Grenade_IsWeaponEnable(%0,%1)           (Grenade::PlayerData[(%0)][Grenade::Enabled][(%1)])
  168. #define Grenade_WeaponEnable(%0,%1,%2)          (Grenade::PlayerData[(%0)][Grenade::Enabled][(%1)] = (%2))
  169.  
  170. #define Grenade_GetSpecialAmmo(%0,%1)           (Grenade::PlayerData[(%0)][Grenade::Ammo][(%1)])
  171. #define Grenade_SetSpecialAmmo(%0,%1,%2)        (Grenade::PlayerData[(%0)][Grenade::Ammo][(%1)] = (%2))
  172.  
  173. #define Grenade_GetEffectID(%0,%1)              (Grenade::PlayerData[(%0)][Grenade::EffectID][(%1)])
  174. #define Grenade_SetEffectID(%0,%1,%2)           (Grenade::PlayerData[(%0)][Grenade::EffectID][(%1)] = (%2))
  175.  
  176. #define Grenade_GetDamage(%0,%1)                (Grenade::PlayerData[(%0)][Grenade::Damage][(%1)])
  177. #define Grenade_SetDamage(%0,%1,%2)             (Grenade::PlayerData[(%0)][Grenade::Damage][(%1)] = (%2))
  178.  
  179. #define Grenade_GetVehicleDamage(%0,%1)         (Grenade::PlayerData[(%0)][Grenade::VehicleDamage][(%1)])
  180. #define Grenade_SetVehicleDamage(%0,%1,%2)      (Grenade::PlayerData[(%0)][Grenade::VehicleDamage][(%1)] = (%2))
  181.  
  182. #define Grenade_GetTime(%0,%1)                  (Grenade::PlayerData[(%0)][Grenade::Time][(%1)])
  183. #define Grenade_SetTime(%0,%1,%2)               (Grenade::PlayerData[(%0)][Grenade::Time][(%1)] = (%2))
  184.  
  185. #define Grenade_IsToggleGasMask(%0)             (Grenade::PlayerData[(%0)][Grenade::GasMask])
  186. #define Grenade_ToggleGasMask(%0,%1)            (Grenade::PlayerData[(%0)][Grenade::GasMask] = (%1))
  187.  
  188. stock Grenade::GetSpecialWeaponID(weaponid){
  189.     switch(weaponid){
  190.         case WEAPON_GRENADE: return GRENADE_SPECIAL_WEAPON_GRENADE;
  191.         case WEAPON_TEARGAS: return GRENADE_SPECIAL_WEAPON_TEARGAS;
  192.         case WEAPON_MOLTOV: return GRENADE_SPECIAL_WEAPON_MOLTOV;
  193.     }
  194.     return GRENADE_SPECIAL_WEAPON_NONE;
  195. }
  196.  
  197. stock Grenade::GetFreeID(){
  198.     for(new mobid = 1; mobid < MAX_GRENADE_EFFECT; mobid++){
  199.         if(!Grenade::EffectData[mobid][Grenade::Active]) return mobid;
  200.     }
  201.     return INVALID_GRENADE_ID;
  202. }
  203.  
  204. stock Grenade::CreateGrenadeEffect(special_weaponid,effectid,Float:x,Float:y,Float:z,worldid,interiorid,playerid,Float:streamdistance,Float:damage,Float:veh_damage,active_time=25,byplayerid=INVALID_PLAYER_ID){
  205.     if(special_weaponid == GRENADE_SPECIAL_WEAPON_NONE || effectid == GRENADE_EFFECT_NONE) return INVALID_GRENADE_ID;
  206.     new Float:tx,Float:ty,Float:tz,Float:rx,Float:rz;
  207.     if(special_weaponid == GRENADE_SPECIAL_WEAPON_GRENADE){
  208.         switch(effectid){
  209.             case GRENADE_EFFECT_CLUSTER_BOMB_1: {
  210.                 for(new i = 0; i < 10; i++){
  211.                     Random::PointInCircle(x,y,5.0,tx,ty);
  212.                     ColAndreas::FindZ_For2DCoord(tx,ty,tz);
  213.                     CreateDynamicExplosionDMG(tx,ty,tz+0.2,12,2.0,worldid,interiorid,playerid,streamdistance,damage,veh_damage,byplayerid);
  214.                 }
  215.             }
  216.             case GRENADE_EFFECT_CLUSTER_BOMB_2: {
  217.                 for(new i = 0; i < 8; i++){
  218.                     Random::PointInCircle(x,y,15.0,tx,ty);
  219.                     ColAndreas::FindZ_For2DCoord(tx,ty,tz);
  220.                     CreateDynamicExplosionDMG(tx,ty,tz+0.2,2,2.0,worldid,interiorid,playerid,streamdistance,damage,veh_damage,byplayerid);
  221.                 }
  222.             }
  223.             case GRENADE_EFFECT_CLUSTER_BOMB_3: {
  224.                 for(new i = 0; i < 6; i++){
  225.                     Random::PointInCircle(x,y,15.0,tx,ty);
  226.                     ColAndreas::FindZ_For2DCoord(tx,ty,tz);
  227.                     CreateDynamicExplosionDMG(tx,ty,tz+0.2,6,2.0,worldid,interiorid,playerid,streamdistance,damage,veh_damage,byplayerid);
  228.                 }
  229.             }
  230.             case GRENADE_EFFECT_CLUSTER_BOMB_4: {
  231.                 for(new i = 0; i < 6; i++){
  232.                     Random::PointInCircle(x,y,20.0,tx,ty);
  233.                     ColAndreas::FindZ_For2DCoord(tx,ty,tz);
  234.                     CreateDynamicExplosionDMG(tx,ty,tz+0.2,7,2.0,worldid,interiorid,playerid,streamdistance,damage,veh_damage,byplayerid);
  235.                 }
  236.             }
  237.             case GRENADE_EFFECT_BANG_GRENADE: {
  238.                 Tryg3D::Foreach(i){
  239.                     GetPlayerPos(i,tx,ty,tz);
  240.                     GetPlayerCameraRotation(i,rx,rz);
  241.                     if(Area::PointInSphericalSectorEx(x,y,z,tx,ty,tz,rx,rz,100.0,VERTICAL_CAMERA_RADIUS,HORIZONTAL_CAMERA_RADIUS,true,true)){
  242.                         if(Grenade::PlayerData[i][Grenade::StunTime] == 0){
  243.                             Grenade::PlayerData[i][Grenade::StunTime] = GetTickCount() + 5000;
  244.                         } else {
  245.                             Grenade::PlayerData[i][Grenade::StunTime] += 5000;
  246.                         }
  247.                         TextDrawShowForPlayer(i,Grenade::TextDrawFlash[0]);
  248.                         TextDrawHideForPlayer(i,Grenade::TextDrawFlash[1]);
  249.                         TextDrawHideForPlayer(i,Grenade::TextDrawFlash[2]);
  250.                     }
  251.                 }
  252.             }
  253.         }
  254.         return INVALID_GRENADE_ID;
  255.     }
  256.     new mobid = Grenade::GetFreeID();
  257.     if(mobid == INVALID_GRENADE_ID) return INVALID_GRENADE_ID;
  258.     if(mobid > Grenade::UpperBound) Grenade::UpperBound = mobid;
  259.     Grenade::EffectData[mobid][Grenade::Active] = true;
  260.     Grenade::EffectData[mobid][Grenade::Type] = special_weaponid;
  261.     Grenade::EffectData[mobid][Grenade::Time] = GetTickCount() + (active_time*1000);
  262.     Grenade::EffectData[mobid][Grenade::PlayerID] = byplayerid;
  263.    
  264.     new Float:Grenade::Modiffier;
  265.     switch(special_weaponid){
  266.         case GRENADE_SPECIAL_WEAPON_TEARGAS: {
  267.             switch(effectid){
  268.                 case GRENADE_EFFECT_SMALL_SMOKE: {
  269.                     Grenade::EffectData[mobid][Grenade::DOT] += damage;
  270.                    
  271.                     Grenade::EffectData[mobid][Grenade::Object][0] = CreateDynamicObject(18715,x,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  272.                    
  273.                     Grenade::EffectData[mobid][Grenade::Area] = CreateDynamicSphere(x,y,z,5.0,worldid,interiorid,-1);
  274.                     Streamer::SetIntData(STREAMER_TYPE_AREA,Grenade::EffectData[mobid][Grenade::Area],E_STREAMER_EXTRA_ID,GRENADE_EXTRA_ID_OFFSET+mobid);
  275.                 }
  276.                 case GRENADE_EFFECT_HUGE_SMOKE_1: {
  277.                     Grenade::EffectData[mobid][Grenade::DOT] += damage;
  278.                    
  279.                     Grenade::Modiffier = 7.0;
  280.                     Grenade::EffectData[mobid][Grenade::Object][0] = CreateDynamicObject(18715,x,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  281.                    
  282.                     Grenade::EffectData[mobid][Grenade::Object][1] = CreateDynamicObject(18715,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  283.                     Grenade::EffectData[mobid][Grenade::Object][2] = CreateDynamicObject(18715,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  284.                     Grenade::EffectData[mobid][Grenade::Object][3] = CreateDynamicObject(18715,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  285.                     Grenade::EffectData[mobid][Grenade::Object][4] = CreateDynamicObject(18715,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  286.                    
  287.                     Grenade::EffectData[mobid][Grenade::Object][5] = CreateDynamicObject(18715,x,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  288.                     Grenade::EffectData[mobid][Grenade::Object][6] = CreateDynamicObject(18715,x,y-Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  289.                     Grenade::EffectData[mobid][Grenade::Object][7] = CreateDynamicObject(18715,x+Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  290.                     Grenade::EffectData[mobid][Grenade::Object][8] = CreateDynamicObject(18715,x-Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  291.                    
  292.                     Grenade::EffectData[mobid][Grenade::Area] = CreateDynamicSphere(x,y,z,21.0,worldid,interiorid,-1);
  293.                     Streamer::SetIntData(STREAMER_TYPE_AREA,Grenade::EffectData[mobid][Grenade::Area],E_STREAMER_EXTRA_ID,GRENADE_EXTRA_ID_OFFSET+mobid);
  294.                 }
  295.                 case GRENADE_EFFECT_HUGE_SMOKE_2: {
  296.                     Grenade::EffectData[mobid][Grenade::DOT] += damage;
  297.                    
  298.                     Grenade::Modiffier = 8.0;
  299.                     Grenade::EffectData[mobid][Grenade::Object][0] = CreateDynamicObject(18671,x,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  300.                    
  301.                     Grenade::EffectData[mobid][Grenade::Object][1] = CreateDynamicObject(18671,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  302.                     Grenade::EffectData[mobid][Grenade::Object][2] = CreateDynamicObject(18671,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  303.                     Grenade::EffectData[mobid][Grenade::Object][3] = CreateDynamicObject(18671,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  304.                     Grenade::EffectData[mobid][Grenade::Object][4] = CreateDynamicObject(18671,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  305.                    
  306.                     Grenade::EffectData[mobid][Grenade::Object][5] = CreateDynamicObject(18671,x,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  307.                     Grenade::EffectData[mobid][Grenade::Object][6] = CreateDynamicObject(18671,x,y-Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  308.                     Grenade::EffectData[mobid][Grenade::Object][7] = CreateDynamicObject(18671,x+Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  309.                     Grenade::EffectData[mobid][Grenade::Object][8] = CreateDynamicObject(18671,x-Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  310.                    
  311.                     Grenade::EffectData[mobid][Grenade::Area] = CreateDynamicSphere(x,y,z,24.0,worldid,interiorid,-1);
  312.                     Streamer::SetIntData(STREAMER_TYPE_AREA,Grenade::EffectData[mobid][Grenade::Area],E_STREAMER_EXTRA_ID,GRENADE_EXTRA_ID_OFFSET+mobid);
  313.                 }
  314.                 case GRENADE_EFFECT_HUGE_SMOKE_3: {
  315.                     Grenade::EffectData[mobid][Grenade::DOT] += damage;
  316.                    
  317.                     Grenade::Modiffier = 10.0;
  318.                     Grenade::EffectData[mobid][Grenade::Object][0] = CreateDynamicObject(18697,x,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  319.                    
  320.                     Grenade::EffectData[mobid][Grenade::Object][1] = CreateDynamicObject(18697,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  321.                     Grenade::EffectData[mobid][Grenade::Object][2] = CreateDynamicObject(18697,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  322.                     Grenade::EffectData[mobid][Grenade::Object][3] = CreateDynamicObject(18697,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  323.                     Grenade::EffectData[mobid][Grenade::Object][4] = CreateDynamicObject(18697,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  324.                    
  325.                     Grenade::EffectData[mobid][Grenade::Object][5] = CreateDynamicObject(18697,x,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  326.                     Grenade::EffectData[mobid][Grenade::Object][6] = CreateDynamicObject(18697,x,y-Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  327.                     Grenade::EffectData[mobid][Grenade::Object][7] = CreateDynamicObject(18697,x+Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  328.                     Grenade::EffectData[mobid][Grenade::Object][8] = CreateDynamicObject(18697,x-Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  329.                    
  330.                     Grenade::EffectData[mobid][Grenade::Area] = CreateDynamicSphere(x,y,z,30.0,worldid,interiorid,-1);
  331.                     Streamer::SetIntData(STREAMER_TYPE_AREA,Grenade::EffectData[mobid][Grenade::Area],E_STREAMER_EXTRA_ID,GRENADE_EXTRA_ID_OFFSET+mobid);
  332.                 }
  333.             }
  334.         }
  335.         case GRENADE_SPECIAL_WEAPON_MOLTOV: {
  336.             switch(effectid){
  337.                 case GRENADE_EFFECT_NAPALM: {
  338.                     Grenade::EffectData[mobid][Grenade::DOT] += damage;
  339.                    
  340.                     Grenade::Modiffier = 2.0;
  341.                     z-= 1.0;
  342.                     Grenade::EffectData[mobid][Grenade::Object][0] = CreateDynamicObject(18691,x,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  343.                    
  344.                     Grenade::EffectData[mobid][Grenade::Object][1] = CreateDynamicObject(18691,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  345.                     Grenade::EffectData[mobid][Grenade::Object][2] = CreateDynamicObject(18691,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  346.                     Grenade::EffectData[mobid][Grenade::Object][3] = CreateDynamicObject(18691,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  347.                     Grenade::EffectData[mobid][Grenade::Object][4] = CreateDynamicObject(18691,x+Grenade::Modiffier,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  348.                    
  349.                     Grenade::EffectData[mobid][Grenade::Object][5] = CreateDynamicObject(18691,x,y+Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  350.                     Grenade::EffectData[mobid][Grenade::Object][6] = CreateDynamicObject(18691,x,y-Grenade::Modiffier,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  351.                     Grenade::EffectData[mobid][Grenade::Object][7] = CreateDynamicObject(18691,x+Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  352.                     Grenade::EffectData[mobid][Grenade::Object][8] = CreateDynamicObject(18691,x-Grenade::Modiffier,y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  353.                    
  354.                     Grenade::EffectData[mobid][Grenade::Object][9] = CreateDynamicObject(18691,x+(Grenade::Modiffier*2.0),y+(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  355.                     Grenade::EffectData[mobid][Grenade::Object][10] = CreateDynamicObject(18691,x+(Grenade::Modiffier*2.0),y+(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  356.                     Grenade::EffectData[mobid][Grenade::Object][11] = CreateDynamicObject(18691,x+(Grenade::Modiffier*2.0),y+(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  357.                     Grenade::EffectData[mobid][Grenade::Object][12] = CreateDynamicObject(18691,x+(Grenade::Modiffier*2.0),y+(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  358.                    
  359.                     Grenade::EffectData[mobid][Grenade::Object][13] = CreateDynamicObject(18691,x,y+(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  360.                     Grenade::EffectData[mobid][Grenade::Object][14] = CreateDynamicObject(18691,x,y-(Grenade::Modiffier*2.0),z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  361.                     Grenade::EffectData[mobid][Grenade::Object][15] = CreateDynamicObject(18691,x+(Grenade::Modiffier*2.0),y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  362.                     Grenade::EffectData[mobid][Grenade::Object][16] = CreateDynamicObject(18691,x-(Grenade::Modiffier*2.0),y,z,0.0,0.0,0.0,worldid,interiorid,-1,streamdistance,streamdistance);
  363.                    
  364.                     Grenade::EffectData[mobid][Grenade::Area] = CreateDynamicSphere(x,y,z,10.0,worldid,interiorid,-1);
  365.                     Streamer::SetIntData(STREAMER_TYPE_AREA,Grenade::EffectData[mobid][Grenade::Area],E_STREAMER_EXTRA_ID,GRENADE_EXTRA_ID_OFFSET+mobid);
  366.                 }
  367.             }
  368.         }
  369.     }
  370.     return mobid;
  371. }
  372.  
  373. stock Grenade::GrenadeEffectByPlayer(playerid,special_weaponid,Float:x,Float:y,Float:z){
  374.     return Grenade::CreateGrenadeEffect(special_weaponid,Grenade::GetEffectID(playerid,special_weaponid),x,y,z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,300.0,Grenade::GetDamage(playerid,special_weaponid),Grenade::GetVehicleDamage(playerid,special_weaponid),Grenade::GetTime(playerid,special_weaponid),playerid);
  375. }
  376.  
  377. stock Grenade::DestroyEffect(mobid){
  378.     for(new i = 0; i < 9; i++){
  379.         if(IsValidDynamicObject(Grenade::EffectData[mobid][Grenade::Object][i])){
  380.             DestroyDynamicObject(Grenade::EffectData[mobid][Grenade::Object][i]);
  381.             Grenade::EffectData[mobid][Grenade::Object][i] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
  382.         }
  383.     }
  384.     if(Grenade::EffectData[mobid][Grenade::Type] == GRENADE_SPECIAL_WEAPON_MOLTOV){
  385.         for(new i = 9; i < 17; i++){
  386.             if(IsValidDynamicObject(Grenade::EffectData[mobid][Grenade::Object][i])){
  387.                 DestroyDynamicObject(Grenade::EffectData[mobid][Grenade::Object][i]);
  388.                 Grenade::EffectData[mobid][Grenade::Object][i] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
  389.             }
  390.         }
  391.     }
  392.     if(IsValidDynamicArea(Grenade::EffectData[mobid][Grenade::Area])){
  393.         DestroyDynamicArea(Grenade::EffectData[mobid][Grenade::Area]);
  394.         Grenade::EffectData[mobid][Grenade::Area] = STREAMER_TAG_AREA:INVALID_STREAMER_ID;
  395.     }
  396.     Grenade::EffectData[mobid][Grenade::PlayerID] = INVALID_PLAYER_ID;
  397.     Grenade::EffectData[mobid][Grenade::Time] = 0;
  398.     Grenade::EffectData[mobid][Grenade::DOT] = 0.0;
  399.     Grenade::EffectData[mobid][Grenade::Type] = GRENADE_SPECIAL_WEAPON_NONE;
  400.     Grenade::EffectData[mobid][Grenade::Active] = false;
  401.     if(mobid == Grenade::UpperBound) Grenade::UpperBound--;
  402. }
  403.  
  404. T3D:function Grenade::OnUpdate(){
  405.     new cur_tick = GetTickCount(),Float:T3D:health,Float:T3D:armour,byplayerid,STREAMER_TAG_AREA:player_areas[128], mobid;
  406.     Tryg3D::Foreach(playerid){
  407.         if(!IsPlayerInAnyVehicle(playerid)){
  408.             byplayerid = INVALID_PLAYER_ID;
  409.             GetPlayerArmour(playerid,T3D:armour);
  410.             GetPlayerHealth(playerid,T3D:health);
  411.             if(T3D:armour == 0.0 && T3D:health-(Grenade::PlayerData[playerid][Grenade::GasDOT]+Grenade::PlayerData[playerid][Grenade::FireDOT]) <= 0.0){
  412.                 new max_areas = GetPlayerNumberDynamicAreas(playerid);
  413.                 if(max_areas){
  414.                     GetPlayerDynamicAreas(playerid,player_areas,max_areas);
  415.                     for(new k = 0; k < max_areas; k++){
  416.                         if(k >= 128) break;
  417.                         mobid = Streamer::GetIntData(STREAMER_TYPE_AREA,player_areas[k],E_STREAMER_EXTRA_ID) - GRENADE_EXTRA_ID_OFFSET;
  418.                         if(mobid >= 0 && mobid < MAX_GRENADE_EFFECT){
  419.                             if(player_areas[k] == Grenade::EffectData[mobid][Grenade::Area]){
  420.                                 byplayerid = Grenade::EffectData[mobid][Grenade::PlayerID];
  421.                             }
  422.                         }
  423.                     }
  424.                 }
  425.             }
  426.             if(!Grenade::PlayerData[playerid][Grenade::GasMask]){
  427.                 if(Grenade::PlayerData[playerid][Grenade::GasDOT] > 0.0){
  428.                     Tryg3D::GivePlayerDamage(playerid,Grenade::PlayerData[playerid][Grenade::GasDOT],byplayerid,WEAPON_SUFFOCATION,9)
  429.                 }
  430.             }
  431.             if(Grenade::PlayerData[playerid][Grenade::FireDOT] > 0.0){
  432.                 Tryg3D::GivePlayerDamage(playerid,Grenade::PlayerData[playerid][Grenade::FireDOT],byplayerid,WEAPON_NAPALM,9)
  433.             }
  434.         }
  435.         if(Grenade::PlayerData[playerid][Grenade::StunTime] != 0){
  436.             if(cur_tick >= Grenade::PlayerData[playerid][Grenade::StunTime]){
  437.                 Grenade::PlayerData[playerid][Grenade::StunTime] = 0;
  438.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[0]);
  439.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[1]);
  440.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[2]);
  441.             } else if(cur_tick >= Grenade::PlayerData[playerid][Grenade::StunTime]-1500){
  442.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[0]);
  443.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[1]);
  444.                 TextDrawShowForPlayer(playerid,Grenade::TextDrawFlash[2]);
  445.             } else if(cur_tick >= Grenade::PlayerData[playerid][Grenade::StunTime]-3000){
  446.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[0]);
  447.                 TextDrawShowForPlayer(playerid,Grenade::TextDrawFlash[1]);
  448.                 TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[2]);
  449.             }
  450.         }
  451.     }
  452.     for(mobid = 1; mobid <= Grenade::UpperBound; mobid++){
  453.         if(cur_tick >= Grenade::EffectData[mobid][Grenade::Time]){
  454.             Grenade::DestroyEffect(mobid);
  455.         }
  456.     }
  457. }
  458.  
  459. stock Grenade::Init(){
  460.     Grenade::TextDrawFlash[0] = TextDrawCreate(0.0,0.0,"~n~~n~~n~~n~~n~~n~~n~");
  461.     TextDrawLetterSize(Grenade::TextDrawFlash[0],0.0,10.0);
  462.     TextDrawUseBox(Grenade::TextDrawFlash[0],1);
  463.     TextDrawBoxColor(Grenade::TextDrawFlash[0],0xFFFFFFEE);
  464.    
  465.     Grenade::TextDrawFlash[1] = TextDrawCreate(0.0,0.0,"~n~~n~~n~~n~~n~~n~~n~");
  466.     TextDrawLetterSize(Grenade::TextDrawFlash[1],0.0,10.0);
  467.     TextDrawUseBox(Grenade::TextDrawFlash[1],1);
  468.     TextDrawBoxColor(Grenade::TextDrawFlash[1],0xFFFFFFAA);
  469.    
  470.     Grenade::TextDrawFlash[2] = TextDrawCreate(0.0,0.0,"~n~~n~~n~~n~~n~~n~~n~");
  471.     TextDrawLetterSize(Grenade::TextDrawFlash[2],0.0,10.0);
  472.     TextDrawUseBox(Grenade::TextDrawFlash[2],1);
  473.     TextDrawBoxColor(Grenade::TextDrawFlash[2],0xFFFFFF50);
  474.    
  475.     for(new playerid = 0; playerid < MAX_PLAYERS; playerid++){
  476.         Grenade::SetDamage(playerid,GRENADE_SPECIAL_WEAPON_GRENADE,GRENADE_DEFAULT_PLAYER_DAMAGE);
  477.         Grenade::SetVehicleDamage(playerid,GRENADE_SPECIAL_WEAPON_GRENADE,GRENADE_DEFAULT_VEHICLE_DAMAGE);
  478.        
  479.         Grenade::SetDamage(playerid,GRENADE_SPECIAL_WEAPON_TEARGAS,GRENADE_DOT_TEAR_GAS);
  480.         Grenade::SetTime(playerid,GRENADE_SPECIAL_WEAPON_TEARGAS,GRENADE_EFFECT_TIME);
  481.        
  482.         Grenade::SetDamage(playerid,GRENADE_SPECIAL_WEAPON_MOLTOV,GRENADE_DOT_FIRE);
  483.         Grenade::SetTime(playerid,GRENADE_SPECIAL_WEAPON_MOLTOV,GRENADE_EFFECT_TIME);
  484.     }
  485.     Grenade::UpdateTimer = SetTimer("Grenade_OnUpdate",1000,true);
  486. }
  487.  
  488. stock Grenade::Exit(){
  489.     TextDrawDestroy(Grenade::TextDrawFlash[0]);
  490.     TextDrawDestroy(Grenade::TextDrawFlash[1]);
  491.     TextDrawDestroy(Grenade::TextDrawFlash[2]);
  492.     KillTimer(Grenade::UpdateTimer);
  493. }
  494.  
  495. //Hook: OnPlayerConnect
  496. public OnPlayerConnect(playerid){
  497.     Grenade::ToggleGasMask(playerid,false);
  498.     #if defined EG_OnPlayerConnect
  499.         EG_OnPlayerConnect(playerid);
  500.     #endif
  501.     return 1;
  502. }
  503.  
  504. #if defined _ALS_OnPlayerConnect
  505.     #undef OnPlayerConnect
  506. #else
  507.     #define _ALS_OnPlayerConnect
  508. #endif
  509. #define OnPlayerConnect EG_OnPlayerConnect
  510. #if defined EG_OnPlayerConnect
  511.     forward EG_OnPlayerConnect(playerid);
  512. #endif
  513.  
  514. //Hook: OnPlayerSpawn
  515. public OnPlayerSpawn(playerid){
  516.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[0]);
  517.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[1]);
  518.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[2]);
  519.     Grenade::PlayerData[playerid][Grenade::GasDOT] = 0.0;
  520.     Grenade::PlayerData[playerid][Grenade::FireDOT] = 0.0;
  521.     #if defined EG_OnPlayerSpawn
  522.         EG_OnPlayerSpawn(playerid);
  523.     #endif
  524.     return 1;
  525. }
  526.  
  527. #if defined _ALS_OnPlayerSpawn
  528.     #undef OnPlayerSpawn
  529. #else
  530.     #define _ALS_OnPlayerSpawn
  531. #endif
  532. #define OnPlayerSpawn EG_OnPlayerSpawn
  533. #if defined EG_OnPlayerSpawn
  534.     forward EG_OnPlayerSpawn(playerid);
  535. #endif
  536.  
  537. //Hook: OnPlayerDeath
  538. public OnPlayerDeath(playerid, killerid, reason){
  539.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[0]);
  540.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[1]);
  541.     TextDrawHideForPlayer(playerid,Grenade::TextDrawFlash[2]);
  542.     Grenade::PlayerData[playerid][Grenade::GasDOT] = 0.0;
  543.     Grenade::PlayerData[playerid][Grenade::FireDOT] = 0.0;
  544.     #if defined EG_OnPlayerDeath
  545.         EG_OnPlayerDeath(playerid, killerid, reason);
  546.     #endif
  547.     return 1;
  548. }
  549.  
  550. #if defined _ALS_OnPlayerDeath
  551.     #undef OnPlayerDeath
  552. #else
  553.     #define _ALS_OnPlayerDeath
  554. #endif
  555. #define OnPlayerDeath EG_OnPlayerDeath
  556. #if defined EG_OnPlayerDeath
  557.     forward EG_OnPlayerDeath(playerid, killerid, reason);
  558. #endif
  559.  
  560. //Hook: OnPlayerEnterDynamicArea
  561. public OnPlayerEnterDynamicArea(playerid,STREAMER_TAG_AREA:areaid){
  562.     new mobid = Streamer::GetIntData(STREAMER_TYPE_AREA,areaid,E_STREAMER_EXTRA_ID) - GRENADE_EXTRA_ID_OFFSET;
  563.     if(mobid > 0 && mobid < MAX_GRENADE_EFFECT){
  564.         if(Grenade::EffectData[mobid][Grenade::Area] == areaid){
  565.             switch(Grenade::EffectData[mobid][Grenade::Type]){
  566.                 case GRENADE_SPECIAL_WEAPON_TEARGAS: {
  567.                     Grenade::PlayerData[playerid][Grenade::GasDOT] += Grenade::EffectData[mobid][Grenade::DOT];
  568.                 }
  569.                 case GRENADE_SPECIAL_WEAPON_MOLTOV: {
  570.                     Grenade::PlayerData[playerid][Grenade::FireDOT] += Grenade::EffectData[mobid][Grenade::DOT];
  571.                 }
  572.             }
  573.            
  574.         }
  575.     }
  576.     #if defined EG_OnPlayerEnterDynamicArea
  577.         EG_OnPlayerEnterDynamicArea(playerid,areaid);
  578.     #endif
  579.     return 1;
  580. }
  581.  
  582. #if defined _ALS_OnPlayerEnterDynamicArea
  583.     #undef OnPlayerEnterDynamicArea
  584. #else
  585.     #define _ALS_OnPlayerEnterDynamicArea
  586. #endif
  587. #define OnPlayerEnterDynamicArea EG_OnPlayerEnterDynamicArea
  588. #if defined EG_OnPlayerEnterDynamicArea
  589.     forward EG_OnPlayerEnterDynamicArea(playerid,STREAMER_TAG_AREA:areaid);
  590. #endif
  591.  
  592. //Hook: OnPlayerLeaveDynamicArea
  593. public OnPlayerLeaveDynamicArea(playerid,STREAMER_TAG_AREA:areaid){
  594.     new mobid = Streamer::GetIntData(STREAMER_TYPE_AREA,areaid,E_STREAMER_EXTRA_ID) - GRENADE_EXTRA_ID_OFFSET;
  595.     if(mobid > 0 && mobid < MAX_GRENADE_EFFECT){
  596.         if(Grenade::EffectData[mobid][Grenade::Area] == areaid){
  597.             switch(Grenade::EffectData[mobid][Grenade::Type]){
  598.                 case GRENADE_SPECIAL_WEAPON_TEARGAS: {
  599.                     Grenade::PlayerData[playerid][Grenade::GasDOT] -= Grenade::EffectData[mobid][Grenade::DOT];
  600.                 }
  601.                 case GRENADE_SPECIAL_WEAPON_MOLTOV: {
  602.                     Grenade::PlayerData[playerid][Grenade::FireDOT] -= Grenade::EffectData[mobid][Grenade::DOT];
  603.                 }
  604.             }
  605.         }
  606.     }
  607.     #if defined EG_OnPlayerLeaveDynamicArea
  608.         EG_OnPlayerLeaveDynamicArea(playerid,areaid);
  609.     #endif
  610.     return 1;
  611. }
  612.  
  613. #if defined _ALS_OnPlayerLeaveDynamicArea
  614.     #undef OnPlayerLeaveDynamicArea
  615. #else
  616.     #define _ALS_OnPlayerLeaveDynamicArea
  617. #endif
  618. #define OnPlayerLeaveDynamicArea EG_OnPlayerLeaveDynamicArea
  619. #if defined EG_OnPlayerLeaveDynamicArea
  620.     forward EG_OnPlayerLeaveDynamicArea(playerid,STREAMER_TAG_AREA:areaid);
  621. #endif
  622.  
  623. //Hook: OnPlayerDroppingGrenade
  624. public OnPlayerDroppingGrenade(playerid,weaponid,Float:x,Float:y,Float:z){
  625.     new special_weaponid = Grenade::GetSpecialWeaponID(weaponid);
  626.     if(special_weaponid != GRENADE_SPECIAL_WEAPON_NONE){
  627.         if(Grenade::IsWeaponEnable(playerid,special_weaponid) && Grenade::GetSpecialAmmo(playerid,special_weaponid) > 0){
  628.             Grenade::SetSpecialAmmo(playerid,special_weaponid,Grenade::GetSpecialAmmo(playerid,special_weaponid)-1);
  629.             Grenade::GrenadeEffectByPlayer(playerid,special_weaponid,x,y,z);
  630.         }
  631.     }
  632.     #if defined EG_OnPlayerDroppingGrenade
  633.         EG_OnPlayerDroppingGrenade(playerid,weaponid,x,y,z);
  634.     #endif
  635.     return 1;
  636. }
  637.  
  638. #if defined EG_OnPlayerDroppingGrenade
  639.     forward EG_OnPlayerDroppingGrenade(playerid,weaponid,Float:x,Float:y,Float:z);
  640. #endif
  641. #if defined _ALS_OnPlayerDroppingGrenade
  642.     #undef OnPlayerDroppingGrenade
  643. #else
  644.     #define _ALS_OnPlayerDroppingGrenade
  645. #endif
  646. #define OnPlayerDroppingGrenade EG_OnPlayerDroppingGrenade
  647.  
  648. new CRC_ExtendedGrenadenInit = true,
  649.     CRC_ExtendedGrenadenExit = true;
  650.  
  651. //Hook: OnFilterScriptInit
  652. public OnFilterScriptInit(){
  653.     if(CRC_ExtendedGrenadenInit){
  654.         CRC_ExtendedGrenadenInit = false;
  655.         Grenade::Init();
  656.     }
  657.     #if defined EG_OnFilterScriptInit
  658.         EG_OnFilterScriptInit();
  659.     #endif
  660.     return 1;
  661. }
  662.  
  663. #if defined _ALS_OnFilterScriptInit
  664.     #undef OnFilterScriptInit
  665. #else
  666.     #define _ALS_OnFilterScriptInit
  667. #endif
  668. #define OnFilterScriptInit EG_OnFilterScriptInit
  669. #if defined EG_OnFilterScriptInit
  670.     forward EG_OnFilterScriptInit();
  671. #endif
  672.  
  673. //Hook: OnGameModeInit
  674. public OnGameModeInit(){
  675.     if(CRC_ExtendedGrenadenInit){
  676.         CRC_ExtendedGrenadenInit = false;
  677.         Grenade::Init();
  678.     }
  679.     #if defined EG_OnGameModeInit
  680.         EG_OnGameModeInit();
  681.     #endif
  682.     return 1;
  683. }
  684.  
  685. #if defined _ALS_OnGameModeInit
  686.     #undef OnGameModeInit
  687. #else
  688.     #define _ALS_OnGameModeInit
  689. #endif
  690. #define OnGameModeInit EG_OnGameModeInit
  691. #if defined EG_OnGameModeInit
  692.     forward EG_OnGameModeInit();
  693. #endif
  694.  
  695. //Hook: OnFilterScriptExit
  696. public OnFilterScriptExit(){
  697.     if(CRC_ExtendedGrenadenExit){
  698.         CRC_ExtendedGrenadenExit = false;
  699.         Grenade::Exit();
  700.     }
  701.     #if defined EG_OnFilterScriptExit
  702.         EG_OnFilterScriptExit();
  703.     #endif
  704.     return 1;
  705. }
  706.  
  707. #if defined _ALS_OnFilterScriptExit
  708.     #undef OnFilterScriptExit
  709. #else
  710.     #define _ALS_OnFilterScriptExit
  711. #endif
  712. #define OnFilterScriptExit EG_OnFilterScriptExit
  713. #if defined EG_OnFilterScriptExit
  714.     forward EG_OnFilterScriptExit();
  715. #endif
  716.  
  717. //Hook: OnGameModeExit
  718. public OnGameModeExit(){
  719.     if(CRC_ExtendedGrenadenExit){
  720.         CRC_ExtendedGrenadenExit = false;
  721.         Grenade::Exit();
  722.     }
  723.     #if defined EG_OnGameModeExit
  724.         EG_OnGameModeExit();
  725.     #endif
  726.     return 1;
  727. }
  728.  
  729. #if defined _ALS_OnGameModeExit
  730.     #undef OnGameModeExit
  731. #else
  732.     #define _ALS_OnGameModeExit
  733. #endif
  734. #define OnGameModeExit EG_OnGameModeExit
  735. #if defined EG_OnGameModeExit
  736.     forward EG_OnGameModeExit();
  737. #endif
  738. //EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement