Advertisement
Lorenc

gTeams - Include

Aug 4th, 2011
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.14 KB | None | 0 0
  1. /*
  2.  *
  3.  *      gTeam include created by Lorenc
  4.  *
  5.  *        Thanks to those INC creators
  6.  *
  7.  *
  8. */
  9.  
  10. #include                        <a_samp>
  11. #include                        <opsp>
  12. #include                        <YSI/y_hooks>
  13.  
  14. /* ** Penaltys ** */
  15. #define MAX_PENALTYS            6 // There are currently 6!
  16.  
  17. #define PENALTY_NOTHING         0 // Do nothing...
  18. #define PENALTY_KILL            1 // Kill the killerid
  19. #define PENALTY_EXPLODE         2 // Explode the killerid
  20. #define PENALTY_FLY             3 // Make the killerid fly
  21. #define PENALTY_KICK            4 // Kick the player
  22. #define PENALTY_WARN            5 // Warn the player
  23.  
  24. /* ** Configuration ** */
  25. #define INVALID_TEAM            (255)
  26. #define gT:                     gTeam_ // Style :O
  27. #define gPlayerTeam(%1)         g_PlayerTeam{%1} // So its pwetty for me :)
  28.  
  29. #define LoopTeams(%1)           for(new %1, t = GetTeamCount(); %1 < t ; %1++)
  30.  
  31. static
  32.     g_PlayerTeam[MAX_PLAYERS char];
  33.  
  34. new
  35.     Float: g_LastPosition[MAX_PLAYERS][4], bool: g_ToggledPos[MAX_PLAYERS char],
  36.     bool: g_Penalty[MAX_PENALTYS], bool: g_ToggledATeamKill, g_Teamscore_rate,
  37.     g_Teamscore_adder, gTeam_OPSP;
  38.  
  39. /* ** Colours ** */
  40. #if !defined COL_GREEN
  41.     #define COL_GREEN               "{6EF83C}"
  42. #endif
  43.  
  44. #if !defined COL_RED
  45.     #define COL_RED                 "{F81414}"
  46. #endif
  47.  
  48. #if !defined COL_LIGHTBLUE
  49.     #define COL_LIGHTBLUE           "{00C0FF}"
  50. #endif
  51.  
  52. #if !defined COL_LGREEN
  53.     #define COL_LGREEN              "{C9FFAB}"
  54. #endif
  55.  
  56. #if !defined COL_LRED
  57.     #define COL_LRED                "{FFA1A1}"
  58. #endif
  59.  
  60. #if !defined COLOR_GREEN
  61.     #define COLOR_GREEN             0x00CC00FF
  62. #endif
  63.  
  64. #if !defined COLOR_RED
  65.     #define COLOR_RED               0xFF0000FF
  66. #endif
  67.  
  68. #if !defined COLOR_YELLOW
  69.     #define COLOR_YELLOW            0xFFFF00FF
  70. #endif
  71.  
  72. #if !defined COLOR_ORANGE
  73.     #define COLOR_ORANGE            0xEE9911FF
  74. #endif
  75.  
  76. #if !defined COLOR_BLUE
  77.     #define COLOR_BLUE              0x60CED4FF
  78. #endif
  79.  
  80. enum Team_Data
  81. {
  82.     T_COLOR,
  83.     T_ID,
  84.     T_NAME[24],
  85.     T_MEMS,
  86.     T_SCORE,
  87.     bool: T_SCORE_ENABLED,
  88.     bool: T_CREATED,
  89. }
  90.  
  91. new gTeamData[254 char][Team_Data],
  92.     gTeamCount = -1;
  93.  
  94. /*
  95.     native gTeam_CreateTeam(teamname[], teamid, color, bool: teamscore)
  96.     native gTeam_ToggleAntiTeamKill(bool: toggle)
  97.     native gTeam_SetPlayerTeam(playerid, teamid)
  98.     native gTeam_SetTeamDeathPenalty(penaltyid)
  99.     native GetTeamName(teamid)
  100.     native GetTeamCount()
  101.     native gGetPlayerTeam(playerid)
  102.     native SetTeamScoreRate(adder = 1, multiplier = 0)
  103.     native GetTeamScore(teamid)
  104.     native SetTeamScore(teamid, score)
  105.     native GiveTeamScore(teamid, score)
  106.     native ReturnPlayerName(pid)
  107.     native bool:IsPlayerSpawned(pid)
  108. */
  109.  
  110. stock SetTeamScore(teamid, score) return gTeamData[teamid][T_SCORE] = score;
  111. stock GiveTeamScore(teamid, score) return gTeamData[teamid][T_SCORE] += score;
  112.  
  113. stock gGetPlayerTeam(playerid) return g_PlayerTeam{playerid};
  114.  
  115. stock gTeam_CreateTeam(teamname[], teamid, color, bool: v)
  116. {
  117.     gTeamCount++;
  118.     if(gTeamData[teamid][T_CREATED] == false)
  119.     {
  120.         format(gTeamData[teamid][T_NAME], 24, "%s", teamname);
  121.         gTeamData[teamid][T_ID] = teamid;
  122.         gTeamData[teamid][T_COLOR] = color;
  123.         gTeamData[teamid][T_MEMS] = 0;
  124.         gTeamData[teamid][T_CREATED] = true;
  125.         gTeamData[teamid][T_SCORE] = 0;
  126.         gTeamData[teamid][T_SCORE_ENABLED] = v;
  127.     }
  128.     else print("Couldn't create a team due to this TEAMID being created already.");
  129. }
  130.  
  131. stock SetTeamScoreRate(adder = 0, mu = 1) {
  132.     if(mu == 0) mu = 1;
  133.     g_Teamscore_adder = adder;
  134.     g_Teamscore_rate = mu;
  135. }
  136.  
  137. stock GetTeamScore(teamid) return gTeamData[teamid][T_SCORE];
  138. stock GetTeamCount() return gTeamCount;
  139.  
  140. stock IsTeamCreated(teamid)
  141. {
  142.     if(gTeamData[teamid][T_CREATED] == true) return true;
  143.     else return false;
  144.     return false;
  145. }
  146.  
  147. stock GetTeamName(teamid)
  148. {
  149.     new g_Name[25];
  150.     if(gTeamData[teamid][T_CREATED] == true) format(g_Name, sizeof(g_Name), "%s", gTeamData[teamid][T_NAME]);
  151.     else format(g_Name, sizeof(g_Name), "Non-created team");
  152.     return g_Name;
  153. }
  154.  
  155. stock gTeam_SetPlayerTeam(playerid, teamid)
  156. {
  157.     if(teamid >= INVALID_TEAM || teamid < 0 || teamid > gTeamCount) teamid = INVALID_TEAM; // RESET
  158.     gPlayerTeam(playerid) = teamid;
  159.     gTeamData[teamid][T_MEMS]++;
  160.     SetPlayerColor(playerid, gTeamData[teamid][T_COLOR]);
  161. }
  162.  
  163.  
  164. Hook:gTeams_OnFilterScriptInit()
  165. {
  166.     print("\nThis server uses Lorenc's gTeam include!\n");
  167.     gTeam_SetTeamDeathPenalty(PENALTY_NOTHING); // Premade for default.
  168.     g_ToggledATeamKill = true; // Automatically true..
  169.     SetTeamScoreRate(0, 1);
  170.     gTeam_OPSP = (funcidx("gTeam_OnPlayerShootPlayer") != -1);
  171. }
  172.  
  173. Hook:gTeams_OnGameModeInit()
  174. {
  175.     print("\nThis server uses Lorenc's gTeam include!\n");
  176.     gTeam_SetTeamDeathPenalty(PENALTY_NOTHING); // Premade for default.
  177.     g_ToggledATeamKill = true; // Automatically true..
  178.     SetTeamScoreRate(0, 1);
  179.     gTeam_OPSP = (funcidx("gTeam_OnPlayerShootPlayer") != -1);
  180. }
  181.  
  182. stock gTeam_ToggleAntiTeamKill(bool:ans) return g_ToggledATeamKill = ans;
  183.  
  184. stock bool:IsPlayerSpawned(playerid)
  185. {
  186.     new pstate = GetPlayerState(playerid);
  187.     if((pstate >= PLAYER_STATE_ONFOOT && pstate <= PLAYER_STATE_ENTER_VEHICLE_PASSENGER) || pstate == PLAYER_STATE_SPAWNED) return true;
  188.     return false;
  189. }
  190.  
  191. public OnPlayerShootPlayer(Shooter, Target, Float:HealthLost, Float:ArmourLost)
  192. {
  193.     gTeam_OnPlayerShootPlayerFunc(Shooter, Target, HealthLost, ArmourLost);
  194.     return (gTeam_OPSP) ? CallLocalFunction("gTeam_OnPlayerShootPlayer", "iiff",Shooter, Target, HealthLost, ArmourLost):1;
  195. }
  196. gTeam_OnPlayerShootPlayerFunc(Shooter, Target, Float:HealthLost, Float:ArmourLost)
  197. {
  198.     new Float: Armour, Float: Health;
  199.     if(g_ToggledATeamKill == true)
  200.     {
  201.         if(gPlayerTeam(Shooter) == gPlayerTeam(Target) && IsPlayerConnected(Shooter) && gPlayerTeam(Shooter) != INVALID_TEAM)
  202.         {
  203.             GetPlayerArmour(Target, Armour), GetPlayerHealth(Target, Health);
  204.             SetPlayerHealth(Target, Health + HealthLost);
  205.             SetPlayerArmour(Target, Armour + ArmourLost);
  206.         }
  207.     }
  208.     return 1;
  209. }
  210. #if defined _ALS_OnPlayerShootPlayer
  211.     #undef OnPlayerShootPlayer
  212. #else
  213.     #define _ALS_OnPlayerShootPlayer
  214. #endif
  215. #define OnPlayerShootPlayer gTeam_OnPlayerShootPlayer
  216. forward gTeam_OnPlayerShootPlayer(Shooter, Target, Float:HealthLost, Float:ArmourLost);
  217.  
  218. Hook:gTeams_OnPlayerDeath(playerid, killerid, reason)
  219. {
  220.     new Float: X[2], Float: Y[2], Float: Z[2], Float: CAM, string[128];
  221.     if(gPlayerTeam(killerid) == gPlayerTeam(playerid))
  222.     {
  223.         GetPlayerPos(playerid, X[0], Y[0], Z[0]);
  224.         GetPlayerPos(killerid, X[1], Y[1], Z[1]);
  225.         GetPlayerFacingAngle(playerid, CAM);
  226.        
  227.         g_LastPosition[playerid][0] = X[0];
  228.         g_LastPosition[playerid][1] = Y[0];
  229.         g_LastPosition[playerid][2] = Z[0];
  230.         g_LastPosition[playerid][3] = CAM;
  231.         g_ToggledPos{playerid} = true;
  232.        
  233.         SendClientMessage(playerid, -1, "Ohh no! Team killed, back to your last position you're going!");
  234.         if(IsPlayerSpawned(killerid) && IsPlayerConnected(killerid))
  235.         {
  236.             if(g_Penalty[PENALTY_KILL] == true)         SetPlayerHealth(killerid, -1);
  237.             else if(g_Penalty[PENALTY_EXPLODE] == true) CreateExplosion(X[1], Y[1], Z[1], 12, 1.0);
  238.             else if(g_Penalty[PENALTY_KICK] == true)    Kick(killerid);
  239.             else if(g_Penalty[PENALTY_FLY] == true)     SetPlayerPos(killerid, X[1], Y[1], Z[1]+1000);
  240.             else if(g_Penalty[PENALTY_WARN] == true)    SetPVarInt(killerid, "gTeam_Warned", GetPVarInt(killerid, "gTeam_Warned") + 1);
  241.             else if(GetPVarInt(killerid, "gTeam_Warned") >= 3)
  242.             {
  243.                 format(string, sizeof(string), "%s(%d) was kicked from the server! (Exceeded teamkill warnings)", ReturnPlayerName(killerid), killerid);
  244.                 SendClientMessageToAll(COLOR_YELLOW, string);
  245.                 Kick(killerid);
  246.             }
  247.         }
  248.     }
  249.     else
  250.     {
  251.         if(gTeamData[gGetPlayerTeam(killerid)][T_SCORE_ENABLED] == true)
  252.         {
  253.             gTeamData[gGetPlayerTeam(killerid)][T_SCORE] += (g_Teamscore_adder * g_Teamscore_rate);
  254.         }
  255.     }
  256. }
  257.  
  258. stock ReturnPlayerName(playerid)
  259. {
  260.     new pname[MAX_PLAYER_NAME];
  261.     GetPlayerName(playerid, pname, sizeof(pname));
  262.     return pname;
  263. }
  264.  
  265. stock gTeam_SetTeamDeathPenalty(penid)
  266. {
  267.     for(new i; i < MAX_PENALTYS; i++) g_Penalty[i] = false; // So all the current ones are deactivated and renewed.
  268.     switch(penid)
  269.     {
  270.         case PENALTY_NOTHING:   g_Penalty[PENALTY_NOTHING]  = true;
  271.         case PENALTY_KILL:      g_Penalty[PENALTY_KILL]     = true;
  272.         case PENALTY_EXPLODE:   g_Penalty[PENALTY_EXPLODE]  = true;
  273.         case PENALTY_FLY:       g_Penalty[PENALTY_FLY]      = true;
  274.         case PENALTY_KICK:      g_Penalty[PENALTY_KICK]     = true;
  275.         case PENALTY_WARN:      g_Penalty[PENALTY_WARN]     = true;
  276.     }
  277.     return 1;
  278. }
  279.  
  280.  
  281. Hook:gTeams_OnPlayerConnect(playerid)
  282. {
  283.     gPlayerTeam(playerid) = INVALID_TEAM;
  284. }
  285.  
  286. Hook:gTeams_OnPlayerDisconnect(playerid, reason)
  287. {
  288.     gPlayerTeam(playerid) = INVALID_TEAM;
  289.     g_ToggledPos{playerid} = false;
  290.     gTeamData[gPlayerTeam(playerid)][T_MEMS]--;
  291. }
  292.  
  293. Hook:gTeams_OnPlayerSpawn(playerid)
  294. {
  295.     if(g_ToggledPos{playerid}) {
  296.         SetTimerEx("g_SetBackToLast", 1500, false, "d", playerid);
  297.     }
  298. }
  299.  
  300. forward g_SetBackToLast(playerid);
  301. public g_SetBackToLast(playerid)
  302. {
  303.     SetPlayerPos(playerid, g_LastPosition[playerid][0], g_LastPosition[playerid][1], g_LastPosition[playerid][2]);
  304.     SetPlayerFacingAngle(playerid, g_LastPosition[playerid][3]);
  305.     g_ToggledPos{playerid} = false;
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement