Guest User

CS Team Changer

a guest
Mar 26th, 2014
737
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.89 KB | None | 0 0
  1. #include "amxxmodule.h"
  2. #include "Header.h"
  3.  
  4. static INT g_TeamInfo = (INT)0xFFFFFFF;
  5.  
  6. CHAR IsPlayer(INT Player)
  7. {
  8.     return Player < (INT)1U || Player > (INT)gpGlobals->maxClients ? CHAR(FALSE) : CHAR(TRUE);
  9. }
  10.  
  11. CHAR IsPlayerSafe(INT Player)
  12. {
  13.     return MF_IsPlayerIngame((INT)Player) ? CHAR(TRUE) : CHAR(FALSE);
  14. }
  15.  
  16. static cell AMX_NATIVE_CALL CSSetTeam(AMX * Handle, cell * Parameter)
  17. {
  18.     static edict_t * Entity = NULL;
  19.     static INT Player = 0U;
  20.     static CHAR Team = CHAR(0U);
  21.  
  22.     Player = INT(Parameter[1U]);
  23.     Team = CHAR(Parameter[2U]);
  24.  
  25.     if (g_TeamInfo == 0xFFFFFFF)
  26.     {
  27.         g_TeamInfo = GET_USER_MSG_ID(PLID, "TeamInfo", NULL);
  28.  
  29.         if (g_TeamInfo == 0xFFFFFFF)
  30.         {
  31.             MF_LogError(Handle, AMX_ERR_NATIVE, "Unable to reach TeamInfo message!");
  32.  
  33.             return 0U;
  34.         }
  35.     }
  36.  
  37.     else if (!IsPlayer(Player))
  38.     {
  39.         MF_LogError(Handle, AMX_ERR_NATIVE, "Player %d is not valid!", (INT)Player);
  40.  
  41.         return 0U;
  42.     }
  43.  
  44.     else if (!IsPlayerSafe(Player))
  45.     {
  46.         MF_LogError(Handle, AMX_ERR_NATIVE, "Cannot access player %d, it's not safe enough!", (INT)Player);
  47.  
  48.         return 0U;
  49.     }
  50.  
  51.     Entity = MF_GetPlayerEdict(Player);
  52.  
  53.     *((PINT)Entity->pvPrivateData + CSTeamOffset) = INT(Team);
  54.  
  55.     MESSAGE_BEGIN(MSG_BROADCAST, (INT)g_TeamInfo);
  56.     WRITE_BYTE(Player);
  57.  
  58.     switch (Team)
  59.     {
  60.     case CSTEAM_UNASSIGNED:
  61.         MF_SetPlayerTeamInfo(Player, Team, NULL);
  62.  
  63.         WRITE_STRING("UNASSIGNED");
  64.  
  65.         break;
  66.  
  67.     case CSTEAM_TERRORIST:
  68.         MF_SetPlayerTeamInfo(Player, Team, "TERRORIST");
  69.  
  70.         WRITE_STRING("TERRORIST");
  71.  
  72.         break;
  73.  
  74.     case CSTEAM_CT:
  75.         MF_SetPlayerTeamInfo(Player, Team, "CT");
  76.  
  77.         WRITE_STRING("CT");
  78.  
  79.         break;
  80.  
  81.     case CSTEAM_SPECTATOR:
  82.         MF_SetPlayerTeamInfo(Player, Team, NULL);
  83.  
  84.         WRITE_STRING("SPECTATOR");
  85.  
  86.         break;
  87.     }
  88.  
  89.     MESSAGE_END();
  90.  
  91.     return 1U;
  92. }
  93.  
  94. static cell AMX_NATIVE_CALL CSSetTeamIndex(AMX * Handle, cell * Parameter)
  95. {
  96.     static INT Player = 0U;
  97.     static CHAR Team = 0U;
  98.  
  99.     Player = Parameter[1U];
  100.     Team = CHAR(Parameter[2U]);
  101.  
  102.     if (!IsPlayer(Player))
  103.     {
  104.         MF_LogError(Handle, AMX_ERR_NATIVE, "Player %d is not valid!", (INT)Player);
  105.  
  106.         return 0U;
  107.     }
  108.  
  109.     else if (!IsPlayerSafe(Player))
  110.     {
  111.         MF_LogError(Handle, AMX_ERR_NATIVE, "Cannot access player %d, it's not safe enough!", (INT)Player);
  112.  
  113.         return 0U;
  114.     }
  115.  
  116.     switch (Team)
  117.     {
  118.     case CSTEAM_TERRORIST:
  119.         MF_SetPlayerTeamInfo(Player, Team, "TERRORIST");
  120.  
  121.         break;
  122.  
  123.     case CSTEAM_CT:
  124.         MF_SetPlayerTeamInfo(Player, Team, "CT");
  125.  
  126.         break;
  127.  
  128.     default:
  129.         MF_SetPlayerTeamInfo(Player, Team, NULL);
  130.  
  131.         break;
  132.     }
  133.  
  134.     return 1U;
  135. }
  136.  
  137. static cell AMX_NATIVE_CALL CSSetTeamOffset(AMX * Handle, cell * Parameter)
  138. {
  139.     static edict_t * Entity = NULL;
  140.     static INT Player = 0U;
  141.     static CHAR Team = 0U;
  142.  
  143.     Player = Parameter[1U];
  144.     Team = CHAR(Parameter[2U]);
  145.  
  146.     if (!IsPlayer(Player))
  147.     {
  148.         MF_LogError(Handle, AMX_ERR_NATIVE, "Player %d is not valid!", (INT)Player);
  149.  
  150.         return 0U;
  151.     }
  152.  
  153.     else if (!IsPlayerSafe(Player))
  154.     {
  155.         MF_LogError(Handle, AMX_ERR_NATIVE, "Cannot access player %d, it's not safe enough!", (INT)Player);
  156.  
  157.         return 0U;
  158.     }
  159.  
  160.     Entity = MF_GetPlayerEdict(Player);
  161.  
  162.     *((PINT)Entity->pvPrivateData + CSTeamOffset) = (INT)Team;
  163.  
  164.     return 1U;
  165. }
  166.  
  167. static cell AMX_NATIVE_CALL CSSetTeamScoresTable(AMX * Handle, cell * Parameter)
  168. {
  169.     static INT Player = 0U;
  170.     static CHAR Team = 0U;
  171.  
  172.     Player = Parameter[1U];
  173.     Team = (CHAR)Parameter[2U];
  174.  
  175.     if (g_TeamInfo == 0xFFFFFFF)
  176.     {
  177.         g_TeamInfo = GET_USER_MSG_ID(PLID, "TeamInfo", NULL);
  178.  
  179.         if (g_TeamInfo == 0xFFFFFFF)
  180.         {
  181.             MF_LogError(Handle, AMX_ERR_NATIVE, "Unable to reach TeamInfo message!");
  182.  
  183.             return 0U;
  184.         }
  185.     }
  186.  
  187.     else if (!IsPlayer(Player))
  188.     {
  189.         MF_LogError(Handle, AMX_ERR_NATIVE, "Player %d is not valid!", (INT)Player);
  190.  
  191.         return 0U;
  192.     }
  193.  
  194.     else if (!IsPlayerSafe(Player))
  195.     {
  196.         MF_LogError(Handle, AMX_ERR_NATIVE, "Cannot access player %d, it's not safe enough!", (INT)Player);
  197.  
  198.         return 0U;
  199.     }
  200.  
  201.     MESSAGE_BEGIN(MSG_BROADCAST, (INT)g_TeamInfo);
  202.     WRITE_BYTE(Player);
  203.  
  204.     switch (Team)
  205.     {
  206.     case CSTEAM_UNASSIGNED:
  207.         WRITE_STRING("UNASSIGNED");
  208.  
  209.         break;
  210.  
  211.     case CSTEAM_TERRORIST:
  212.         WRITE_STRING("TERRORIST");
  213.  
  214.         break;
  215.  
  216.     case CSTEAM_CT:
  217.         WRITE_STRING("CT");
  218.  
  219.         break;
  220.  
  221.     case CSTEAM_SPECTATOR:
  222.         WRITE_STRING("SPECTATOR");
  223.  
  224.         break;
  225.     }
  226.  
  227.     MESSAGE_END();
  228.  
  229.     return 1U;
  230. }
  231.  
  232. CONST AMX_NATIVE_INFO g_CSTeamChangerFunctions[] =
  233. {
  234.     { "cs_set_team", CSSetTeam },
  235.     { "cs_set_team_id", CSSetTeamIndex },
  236.     { "cs_set_team_offset", CSSetTeamOffset },
  237.     { "cs_set_team_tablescore", CSSetTeamScoresTable },
  238.  
  239.     { NULL, NULL }
  240. };
  241.  
  242. VOID OnAmxxAttach(VOID)
  243. {
  244.     MF_AddNatives(g_CSTeamChangerFunctions);
  245. }
  246.  
  247. BOOL AmxxCheckGame(CONST CHAR * Game)
  248. {
  249.     if (!_stricmp(Game, "CStrike") || !_stricmp(Game, "CZero"))
  250.     {
  251.         return AMXX_GAME_OK;
  252.     }
  253.  
  254.     return AMXX_GAME_BAD;
  255. }
  256.  
  257. INT RegUserMsg_Post(CONST CHAR * Name, INT)
  258. {
  259.     if (!_stricmp(Name, "TeamInfo"))
  260.     {
  261.         g_TeamInfo = (INT)META_RESULT_ORIG_RET(INT);
  262.     }
  263.  
  264.     RETURN_META_VALUE(MRES_IGNORED, (INT)0U);
  265. }
Advertisement
Add Comment
Please, Sign In to add comment