Advertisement
Guest User

Semiclip Ultimate

a guest
Oct 5th, 2013
1,023
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1. #include <assert.h>
  2.  
  3. #include "amxxmodule.h"
  4. #include "entity_state.h"
  5.  
  6. static const size_t MaximumPlayers = 32U;
  7.  
  8. class Player
  9. {
  10. public:
  11.     bool Solid;
  12.     bool Restore;
  13.  
  14.     int Team;
  15. };
  16.  
  17. static Player g_Player[MaximumPlayers + 1U];
  18. static bool g_VariablesRegistered = false;
  19. static cvar_t * g_pEffects = NULL;
  20. static cvar_t * g_pTransparencyAmount = NULL;
  21.  
  22. void OnAmxxAttach(void)
  23. {
  24.  
  25. }
  26.  
  27. void OnAmxxDetach(void)
  28. {
  29.  
  30. }
  31.  
  32. void OnMetaAttach(void)
  33. {
  34.     static int Iterator = 0U;
  35.  
  36.     for (Iterator = 1U; Iterator <= gpGlobals->maxClients; Iterator++)
  37.     {
  38.         g_Player[Iterator].Solid = false;
  39.         g_Player[Iterator].Restore = false;
  40.         g_Player[Iterator].Team = 0U;
  41.     }
  42.  
  43.     if (!g_VariablesRegistered)
  44.     {
  45.         static cvar_t Version = { "semiclip_extension", "Ultimate", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_UNLOGGED | FCVAR_SPONLY };
  46.         static cvar_t Effects = { "semiclip_effects", "1", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY };
  47.         static cvar_t TransparencyAmount = { "semiclip_transparency_amount", "180", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY };
  48.  
  49.         CVAR_REGISTER(&Version);
  50.         CVAR_REGISTER(&Effects);
  51.         CVAR_REGISTER(&TransparencyAmount);
  52.  
  53.         g_pEffects = CVAR_GET_POINTER(Effects.name);
  54.         g_pTransparencyAmount = CVAR_GET_POINTER(TransparencyAmount.name);
  55.  
  56.         assert(g_pEffects);
  57.         assert(g_pTransparencyAmount);
  58.     }
  59. }
  60.  
  61. void OnMetaDetach(void)
  62. {
  63.  
  64. }
  65.  
  66. void PlayerPreThink(edict_t * pPlayer)
  67. {
  68.     static int Client = 0U;
  69.     static int Iterator = 0U;
  70.     static int Flag = 0U;
  71.  
  72.     Client = ENTINDEX(pPlayer);
  73.  
  74.     if (Flag > Client)
  75.     {
  76.         for (Iterator = 1U; Iterator <= gpGlobals->maxClients; Iterator++)
  77.         {
  78.             if (!MF_IsPlayerAlive(Iterator))
  79.             {
  80.                 g_Player[Iterator].Solid = false;
  81.  
  82.                 continue;
  83.             }
  84.  
  85.             pPlayer = MF_GetPlayerEdict(Iterator);
  86.  
  87.             g_Player[Iterator].Team = MF_GetPlayerTeamID(Iterator);
  88.             g_Player[Iterator].Solid = pPlayer->v.solid == SOLID_SLIDEBOX ? true : false;
  89.         }
  90.     }
  91.  
  92.     Flag = Client;
  93.  
  94.     if (!g_Player[Client].Solid)
  95.     {
  96.         RETURN_META(MRES_IGNORED);
  97.     }
  98.  
  99.     for (Iterator = 1U; Iterator <= gpGlobals->maxClients; Iterator++)
  100.     {
  101.         if (!g_Player[Iterator].Solid || Client == Iterator || g_Player[Iterator].Team != g_Player[Client].Team)
  102.         {
  103.             continue;
  104.         }
  105.  
  106.         pPlayer = MF_GetPlayerEdict(Iterator);
  107.  
  108.         pPlayer->v.solid = SOLID_NOT;
  109.  
  110.         g_Player[Iterator].Restore = true;
  111.     }
  112.  
  113.     RETURN_META(MRES_IGNORED);
  114. }
  115.  
  116. void PlayerPostThink(edict_t *)
  117. {
  118.     static int Iterator = 0U;
  119.  
  120.     static edict_t * pPlayer = NULL;
  121.  
  122.     for (Iterator = 1U; Iterator <= gpGlobals->maxClients; Iterator++)
  123.     {
  124.         if (g_Player[Iterator].Restore)
  125.         {
  126.             pPlayer = MF_GetPlayerEdict(Iterator);
  127.  
  128.             pPlayer->v.solid = SOLID_SLIDEBOX;
  129.  
  130.             g_Player[Iterator].Restore = false;
  131.         }
  132.     }
  133.  
  134.     RETURN_META(MRES_IGNORED);
  135. }
  136.  
  137. int AddToFullPack_Post(entity_state_s * pEntityState, int, edict_t * pEntity, edict_t * pHost, int, int Player, unsigned char *)
  138. {
  139.     if (Player)
  140.     {
  141.         static int Entity = 0U;
  142.         static int Host = 0U;
  143.  
  144.         Entity = ENTINDEX(pEntity);
  145.         Host = ENTINDEX(pHost);
  146.  
  147.         if (g_Player[Entity].Solid && g_Player[Host].Solid && g_Player[Entity].Team == g_Player[Host].Team)
  148.         {
  149.             if ((bool) g_pEffects->value)
  150.             {
  151.                 pEntityState->rendermode = kRenderTransAlpha;
  152.                 pEntityState->renderamt = (int) g_pTransparencyAmount->value;
  153.             }
  154.  
  155.             pEntityState->solid = SOLID_NOT;
  156.         }
  157.     }
  158.  
  159.     RETURN_META_VALUE(MRES_IGNORED, 0U);
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement