Advertisement
ijontichy

tacticaldm.c

Aug 24th, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 23.86 KB | None | 0 0
  1. #include "zcommon.acs"
  2.  
  3. #library "tacticaldm"
  4.  
  5. #include "tactFunctions.h"
  6. #include "tactConstants.h"
  7.  
  8. #define classCount 8
  9.  
  10. // I'll ignore the 80-char line thing just for this
  11.  
  12. int classNames[classCount]   = {"Soldier",        "Scout",        "Shotgunner",        "Auto-Soldier",       "Chaingunner",        "Rocketeer",        "Minigunner",        "Det-Man"};
  13. int classImgs[classCount]    = {"SOLDIERD",       "SCOUTD",       "SSGERD",            "SOLDIERD",           "SOLDIERD",           "SSGERD",           "SOLDIERD",          "SSGERD"};
  14. int classPacks[classCount]   = {"SoldierPack",    "ScoutPack",    "ShotgunnerPack",    "AutoSoldierPack",    "ChaingunnerPack",    "RocketeerPack",    "MinigunnerPack",    "DetManPack"};
  15. int botPacks[classCount]     = {"SoldierPackBot", "ScoutPackBot", "ShotgunnerPackBot", "AutoSoldierPackBot", "ChaingunnerPackBot", "RocketeerPackBot", "MinigunnerPackBot", "DetManPackBot"};
  16. int classHealths[classCount] = {100,              85,             90,                  100,                  140,                  100,                140,                 100};
  17. int classSpeeds[classCount]  = {0.9,              1.1,            1.0,                 0.85,                 0.6,                  1.0,                0.6,                 1.0};
  18. int classJumpZs[classCount]  = {7.0,              8.0,            8.0,                 7.0,                  6.0,                  8.0,                6.0,                 8.0};
  19. int classCosts[classCount]   = {0,                0,              500,                 500,                  5000,                 5000,               20000,               20000};
  20.  
  21.  
  22. int teamNames[5] = {"Blue", "Red", "Green", "Gold", "No"};
  23.  
  24. int canSwitch[32];
  25. int teamNewCash[5][5];
  26. int teamNewCashReason[5][5];
  27.  
  28. int classWeapNames[classCount] =
  29. {
  30.     "Assault Rifle, 4 Grenades",
  31.     "Scattergun",
  32.     "Shotgun, SSG, 2 Grenades",
  33.     "Automatic Assault Rifle, 4 Grenades",
  34.     "Heavy Chaingun, 4 Grenades",
  35.     "Shotgun, Rocket Launcher, 4 Grenades",
  36.     "Shotgun, Grinder, 4 Grenades",
  37.     "Semi-Shotgun, Rocket Launcher,\nGrenade Launcher, \ca10\cj Grenades"
  38. };
  39.  
  40. int classStrengths[classCount] =
  41. {
  42.     "Can hit reliably, is free",
  43.     "Frickin' fast, is free",
  44.     "Hits \careally\c- hard at close range",
  45.     "It's a good all-arounder",
  46.     "Kills whatever you point your chaingun at",
  47.     "If you can lead rockets, you're a god",
  48.     "Makes everything die",
  49.     "Like the rocketeer, but even \camore\c- versatile",
  50. };
  51.  
  52. int classWeaknesses[classCount] =
  53. {
  54.     "Is easily blown away at close range\nNot accurate enough for long range",
  55.     "Is torn apart at any range other than short",
  56.     "Too clumsy for any range other than short",
  57.     "Not great at anything",
  58.     "Slow and easy to hit\nTakes extra damage from explosives",
  59.     "You can easily kill yourself\nTakes extra damage from bullets",
  60.     "Expensive and slow\nExplosions hit hard",
  61.     "Easy to kill yourself",
  62. };
  63.  
  64. int classStrats[classCount] =
  65. {
  66.     "Peck away at a distance",
  67.     "Hit and run, never play fair",
  68.     "Get close and let loose",
  69.     "Pelt enemies at a distance",
  70.     "Keep wary, and fire liberally",
  71.     "Ambush your enemies before they see you",
  72.     "Let loose if you have any suspicion",
  73.     "Flush out your enemies and blow them to high heaven"
  74. };
  75.  
  76. global int 4:teamCash[];
  77. global int 5:playerClassNums[];
  78. int playerTeams[32];
  79.  
  80. function int isCooperative(void)
  81. {
  82.     int ret = (GetCVar("teamplay") == false) && (GetCVar("ctf") == false) &&
  83.                 (GetCVar("deathmatch") == false);
  84.  
  85.     return ret;
  86. }
  87.  
  88. function int getTeam(int pln)
  89. {
  90.     int team = playerTeams[pln];
  91.  
  92.     if (team == 0)
  93.     {
  94.         return 4;
  95.     }
  96.  
  97.     return team - 1;
  98. }
  99.  
  100. function int getClass(int pln)
  101. {
  102.     return playerClassNums[pln] - 1;
  103. }
  104.  
  105. function int getTeamCash(int team)
  106. {
  107.     return teamCash[team*2];
  108. }
  109.  
  110. function void setTeamCash(int team, int amount)
  111. {
  112.     teamCash[team*2] = max(0, amount);
  113. }
  114.  
  115. function void changeTeamCash(int team, int amount)
  116. {
  117.     teamCash[team*2] = max(0, teamCash[team*2]+amount);
  118. }
  119.  
  120.  
  121. // hudmessage(text; HUDMSG_FADEOUT, id, color, (float)x, (float)y, (float)holdTime, (float)fadetime);
  122.  
  123.  
  124. script TACDM_AUTO_COMMON (void)
  125. {
  126.     int pln = PlayerNumber();
  127.     int plc = playerClassNums[pln];
  128.     playerTeams[pln] = GetPlayerInfo(pln, PlAYERINFO_TEAM) + 1;
  129.  
  130.     TakeInventory("ClassSwitcherNoInvuln", 1);
  131.  
  132.     if (PlayerIsBot(pln))
  133.     {
  134.         GiveInventory("IsBot", 1);
  135.     }
  136.     else if (plc == 0)   // assume TACDM_AUTO_ENTER wasn't called
  137.     {
  138.         ACS_ExecuteAlways(TACDM_HUD, 0, 0,0,0);
  139.     }
  140. }
  141.  
  142.  
  143. script TACDM_AUTO_OPEN open
  144. {
  145.     int i;
  146.  
  147.     if (GetCVar("tacdm_varsexist") != 3)
  148.     {
  149.         ConsoleCommand("set tacdm_varsexist        3");
  150.         ConsoleCommand("set tacdm_startcash        3000");
  151.         ConsoleCommand("set tacdm_moneyperkill     50");
  152.         ConsoleCommand("set tacdm_moneylostondeath 50");
  153.         ConsoleCommand("set tacdm_monstermult      2");
  154.  
  155.         ConsoleCommand("archivecvar tacdm_varsexist");
  156.         ConsoleCommand("archivecvar tacdm_startcash");
  157.         ConsoleCommand("archivecvar tacdm_moneyperkill");
  158.         ConsoleCommand("archivecvar tacdm_moneylostondeath");
  159.         ConsoleCommand("archivecvar tacdm_monstermult");
  160.  
  161.         Log(s:"For any server hosts:\nCVars (all preceded by \"tacdm_\": startcash moneyperkill moneylostondeath monstermult");
  162.     }
  163.  
  164.     for (i = 0; i < 5; i++)
  165.     {
  166.         if (isCooperative())
  167.         {
  168.             if (teamCash[(i*2)+1] == 1)
  169.             {
  170.                 continue;
  171.             }
  172.             else
  173.             {
  174.                 teamCash[(i*2)+1] = 1;
  175.             }
  176.         }
  177.  
  178.         setTeamCash(i, GetCVar("tacdm_startcash"));
  179.     }
  180. }
  181.  
  182.  
  183. script TACDM_AUTO_OPEN_CLIENT open clientside
  184. {
  185.     if (GetCVar("tacdm_client_varsexist") != 1)
  186.     {
  187.         ConsoleCommand("set tacdm_client_varsexist   1");
  188.         ConsoleCommand("set tacdm_client_showclasses 1");
  189.  
  190.         ConsoleCommand("archivecvar tacdm_client_varsexist");
  191.         ConsoleCommand("archivecvar tacdm_client_showclasses");
  192.  
  193.         Log(s:"CVars (all preceded by \"tacdm_client_\": showclasses");
  194.     }
  195. }
  196.  
  197. script TACDM_AUTO_ENTER enter
  198. {
  199.     int pln    = PlayerNumber();
  200.     int plc    = playerClassNums[pln];
  201.     int isCoop = isCooperative();
  202.  
  203.     ACS_ExecuteAlways(TACDM_AUTO_COMMON, 0, 0,0,0);
  204.  
  205.     if (!isCoop || plc == 0)
  206.     {
  207.         ACS_ExecuteAlways(TACDM_CHOOSECLASS, 0, 0,0,0);
  208.     }
  209. }
  210.  
  211.  
  212. script TACDM_AUTO_RESPAWN respawn
  213. {
  214.     int pln    = PlayerNumber();
  215.     int plc    = playerClassNums[pln];
  216.     int bDown = GetPlayerInput(-1, INPUT_BUTTONS);
  217.  
  218.     ACS_ExecuteAlways(TACDM_AUTO_COMMON, 0, 0,0,0);
  219.  
  220.     if ((bDown & BT_ALTATTACK) || (plc == 0) || (PlayerIsBot(pln) && random(GetCVar("skill"), 4) == 4))
  221.     {
  222.         ACS_ExecuteAlways(TACDM_CHOOSECLASS,  0, plc,0,0);
  223.     }
  224.     else
  225.     {
  226.         ACS_ExecuteAlways(TACDM_SETUPCLASS,  0, 0,0,0);
  227.     }
  228. }
  229.  
  230.  
  231. script TACDM_AUTO_DEATH death
  232. {
  233.     SetHudSize(640, 480, 1);
  234.  
  235.     SetFont("SMALLFONT");
  236.     HudMessage(s:"Hold \cf", k:"+altattack", s:"\cd when respawning to choose a new class";
  237.     HUDMSG_FADEOUT | HUDMSG_COLORSTRING,  TACDM_CLASSPRINTOFFSET+1, "Green", 320.4, 460.1, 1.0, 2.0);
  238. }
  239.  
  240.  
  241.  
  242. script TACDM_AUTO_DISCONNECT (int pln) disconnect
  243. {
  244.     int team = getTeam(pln);
  245.  
  246.     ACS_ExecuteAlways(TACDM_INTERNAL_CHANGEMONEY, 0, team, classCosts[playerClassNums[pln] - 1],  REASON_SOLDCLASS);
  247.  
  248.     playerClassNums[pln] = 0;
  249.     playerTeams[pln] = 0;
  250. }
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258. script TACDM_SCALESPEED (int argInt, int argFrac, int which)
  259. {
  260.     int arg = (argInt << 16) + ((argFrac << 16) / 100);
  261.  
  262.     SetActorProperty(0, APROP_Speed, arg);
  263. }
  264.  
  265. script TACDM_ITEM_CLASS (int noProtect)
  266. {
  267.     int plc = playerClassNums[PlayerNumber()];
  268.  
  269.     ACS_ExecuteAlways(TACDM_CHOOSECLASS, 0, plc, noProtect);
  270. }
  271.  
  272.  
  273.  
  274. script TACDM_CHOOSECLASS (int lastClass, int noProtect)
  275. {
  276.     int i; int j;
  277.     int choseClass;
  278.     int bDown; int bLast; int bOld; int bHeld; int bPressed; int bReleased;
  279.     int firstGo = 1;
  280.  
  281.     int pln = PlayerNumber();
  282.     int myClass = playerClassNums[pln];
  283.     int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);
  284.     int classScrolled = max(0, lastClass - 1);
  285.     int flash; int noSelect;
  286.  
  287.     ClearInventory();
  288.  
  289.     GiveInventory("SpawnStop", 1);
  290.     if (!noProtect)
  291.     {
  292.         GiveInventory("SpawnProtection", 1);
  293.     }
  294.  
  295.     if (PlayerIsBot(pln))
  296.     {
  297.         classScrolled = classCount-1;
  298.         while (classCosts[classScrolled] > getTeamCash(team))
  299.         {
  300.             if (classCosts[myClass - 1] > classCosts[classScrolled])
  301.             {
  302.                 classScrolled = max(0, lastClass - 1);  // last ditch as soldier
  303.                 noSelect = 1;
  304.                 break;
  305.             }
  306.  
  307.             classScrolled--;
  308.         }
  309.  
  310.         if (!noSelect)
  311.         {
  312.         i = classCosts[classScrolled];
  313.  
  314.             for (j = classScrolled - 1; j > 0; j--)
  315.             {
  316.                 if (classCosts[j] != i)
  317.                 {
  318.                      break;
  319.                 }
  320.             }
  321.             classScrolled = random(j, classScrolled);
  322.         }
  323.     }
  324.     else
  325.     {
  326.         while (PlayerInGame(pln))
  327.         {
  328.             flash = 0;
  329.             bLast      = bDown;
  330.             bDown      = GetPlayerInput(-1, INPUT_BUTTONS);
  331.             bPressed   = (bDown ^ bLast) & bDown;
  332.             // *  unnecessary for now
  333.             // ~ bHeld      = bLast & bOld;
  334.             // ~ bReleased  = (bDown ^ bLast) & bOld;
  335.  
  336.             if ((bPressed & BT_MOVERIGHT) || (bPressed & BT_BACK) || (bPressed & BT_ALTATTACK))
  337.             {
  338.                 flash = -1;
  339.                 classScrolled = (classScrolled + 1) % classCount;
  340.             }
  341.  
  342.             if ((bPressed & BT_MOVELEFT) || (bPressed & BT_FORWARD))
  343.             {
  344.                 flash = -1;
  345.                 if (classScrolled == 0)
  346.                 {
  347.                     classScrolled = classCount-1;
  348.                 }
  349.                 else
  350.                 {
  351.                     classScrolled--;
  352.                 }
  353.             }
  354.  
  355.             if ((firstGo == 0) && ((bPressed & BT_ATTACK) || (bPressed & BT_USE)))
  356.             {
  357.                 if (classScrolled == lastClass - 1)
  358.                 {
  359.                     break;
  360.                 }
  361.  
  362.                 if (classCosts[classScrolled] > getTeamCash(team))
  363.                 {
  364.                     flash = 1;
  365.                 }
  366.                 else
  367.                 {
  368.                     break;
  369.                 }
  370.             }
  371.  
  372.             ACS_ExecuteAlways(TACDM_PRINTCLASSDESC, 0, (lastClass << 16) + classScrolled, flash, getTeamCash(team));
  373.             Delay(1);
  374.             firstGo = 0;
  375.         }
  376.     }
  377.  
  378.     playerTeams[pln] = team + 1;
  379.     playerClassNums[pln] = classScrolled + 1;
  380.  
  381.     if (classScrolled + 1 != lastClass)
  382.     {
  383.         if (lastClass != 0)
  384.         {
  385.             ACS_ExecuteAlways(TACDM_INTERNAL_CHANGEMONEY, 0, team, classCosts[lastClass - 1],  REASON_SOLDCLASS);
  386.         }
  387.  
  388.         ACS_ExecuteAlways(TACDM_INTERNAL_CHANGEMONEY, 0, team, -classCosts[classScrolled], REASON_BOUGHTCLASS);
  389.     }
  390.  
  391.     ACS_ExecuteAlways(TACDM_SETUPCLASS,  0, 0,0,0);
  392.  
  393.     GiveInventory("EndSpawnProtection", 1);
  394. }
  395.  
  396.  
  397.  
  398. script TACDM_PRINTCLASSDESC (int whichClass, int flashCost, int moneyAmount) clientside
  399. {
  400.     int i; int c;
  401.  
  402.     int lastClass = whichClass >> 16;
  403.     whichClass    = whichClass & 65535;
  404.  
  405.     SetHudSize(320, 240, 1);
  406.  
  407.     SetFont("BIGFONT");
  408.     HudMessage(s:classNames[whichClass]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  409.     TACDM_CLASSPRINTOFFSET, "Yellow", 160.4, 12.1, 3.0, 2.0);
  410.  
  411.  
  412.     SetHudSize(640, 480, 1);
  413.  
  414.     SetFont("BIGFONT");
  415.  
  416.     HudMessage(s:"HP: \cj", d:classHealths[whichClass];
  417.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-20,
  418.         "Brick", 140.1, 120.1, 1.0, 1.0);
  419.  
  420.  
  421.     HudMessage(s:"Speed: \cj", d:round(classSpeeds[whichClass]*100), s:"%";
  422.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-21,
  423.         "Gold", 400.1, 120.1, 1.0, 1.0);
  424.  
  425.     HudMessage(s:"\ciWeapons: \cj", s:classWeapNames[whichClass];
  426.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-22,
  427.         "White", 320.4, 160.1, 1.0, 1.0);
  428.  
  429.     SetHudSize(800, 600, 1);
  430.  
  431.     HudMessage(s:"\cnStrengths:\n", s:classStrengths[whichClass];
  432.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-23,
  433.         "White", 400.4, 280.1, 1.0, 1.0);
  434.  
  435.     HudMessage(s:"\cgWeaknesses:\n", s:classWeaknesses[whichClass];
  436.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-24,
  437.         "White", 400.4, 365.1, 1.0, 1.0);
  438.  
  439.     HudMessage(s:"\cdStrategy: \cj", s:classStrats[whichClass];
  440.         HUDMSG_FADEOUT | HUDMSG_COLORSTRING, TACDM_CLASSPRINTOFFSET-25,
  441.         "White", 400.4, 450.1, 1.0, 1.0);
  442.  
  443.     SetHudSize(640, 480, 1);
  444.  
  445.     SetFont("SMALLFONT");
  446.  
  447.     if (flashCost == -1)
  448.     {
  449.         HudMessage(s:""; HUDMSG_FADEOUT, TACDM_CLASSPRINTOFFSET-3, 0, 320.4, 75.1, 1.0, 2.0);
  450.     }
  451.  
  452.     if (classCosts[whichClass] == 0)
  453.     {
  454.         HudMessage(s:"Cost: \ci$", d:classCosts[whichClass]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  455.         TACDM_CLASSPRINTOFFSET-2, "White", 320.4, 75.1, 1.0, 2.0);
  456.     }
  457.     else if (flashCost == 1)
  458.     {
  459.         HudMessage(s:"Cost: \cg$", d:classCosts[whichClass]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  460.         TACDM_CLASSPRINTOFFSET-3, "White", 320.4, 75.1, 1.0, 2.0);
  461.     }
  462.     else if (moneyAmount < classCosts[whichClass])
  463.     {
  464.         HudMessage(s:"Cost: \ca$", d:classCosts[whichClass]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  465.         TACDM_CLASSPRINTOFFSET-2, "White", 320.4, 75.1, 1.0, 2.0);
  466.     }
  467.     else
  468.     {
  469.         HudMessage(s:"Cost: \cd$", d:classCosts[whichClass]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  470.         TACDM_CLASSPRINTOFFSET-2, "White", 320.4, 75.1, 1.0, 2.0);
  471.     }
  472.  
  473.     // yeah, these next lines run over D:
  474.     HudMessage(s:"Press \cf", k:"+moveleft", s:"\cd or \cf", k:"+forward", s:"\cd to scroll up,",
  475.                s:" \cf", k:"+moveright", s:"\cd, \cf", k:"+back", s:"\cd, or \cf", k:"+altattack", s:"\cd to scroll down,",
  476.                s:" and \cf", k:"+attack", s:"\cd or \cf", k:"+use", s:"\cd to select";
  477.     HUDMSG_FADEOUT | HUDMSG_COLORSTRING,  TACDM_CLASSPRINTOFFSET+1, "Green", 320.4, 440.1, 1.0, 2.0);
  478.  
  479.     for (i = 0; i < 5; i++)
  480.     {
  481.         c = whichClass + (i - 2);
  482.  
  483.         while (c < 0)
  484.         {
  485.             c += classCount;
  486.  
  487.         }
  488.  
  489.         while (c >= classCount)
  490.         {
  491.             c -= classCount;
  492.         }
  493.  
  494.         if (i == 2)
  495.         {
  496.             if (c == (lastClass - 1))
  497.             {
  498.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  499.                 TACDM_CLASSPRINTOFFSET-5-i, "Gold", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  500.             }
  501.             else if (classCosts[c] == 0)
  502.             {
  503.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  504.                 TACDM_CLASSPRINTOFFSET-5-i, "Yellow", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  505.             }
  506.             else if (classCosts[c] > moneyAmount)
  507.             {
  508.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  509.                 TACDM_CLASSPRINTOFFSET-5-i, "Dark Grey", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  510.             }
  511.             else
  512.             {
  513.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  514.                 TACDM_CLASSPRINTOFFSET-5-i, "Green", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  515.             }
  516.         }
  517.         else
  518.         {
  519.             if (c == (lastClass - 1))
  520.             {
  521.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  522.                 TACDM_CLASSPRINTOFFSET-5-i, "Yellow", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  523.             }
  524.             else if (classCosts[c] == 0)
  525.             {
  526.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  527.                 TACDM_CLASSPRINTOFFSET-5-i, "Orange", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  528.             }
  529.             else if (classCosts[c] > moneyAmount)
  530.             {
  531.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  532.                 TACDM_CLASSPRINTOFFSET-5-i, "Black", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  533.             }
  534.             else
  535.             {
  536.                 HudMessage(s:classNames[c]; HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  537.                 TACDM_CLASSPRINTOFFSET-5-i, "Dark Green", 60.4, 20.1+((i*TACDM_NAMESPACING) << 16), 1.0, 0.5);
  538.             }
  539.         }
  540.     }
  541. }
  542.  
  543.  
  544. script TACDM_SETUPCLASS (void)
  545. {
  546.     int pln = PlayerNumber();
  547.     int classNum = playerClassNums[pln] - 1;
  548.  
  549.     ClearInventory();
  550.  
  551.     if (PlayerIsBot(pln))
  552.     {
  553.         GiveInventory(botPacks[classNum], 1);
  554.     }
  555.     else
  556.     {
  557.         GiveInventory(classPacks[classNum], 1);
  558.     }
  559.  
  560.     SetActorProperty(0, APROP_HEALTH,      classHealths[classNum]);
  561.     SetActorProperty(0, APROP_SPAWNHEALTH, classHealths[classNum]);
  562.     SetActorProperty(0, APROP_SPEED,       classSpeeds[classNum]);
  563.     SetActorProperty(0, APROP_JUMPZ,       classJumpZs[classNum]);
  564. }
  565.  
  566.  
  567.  
  568.  
  569.  
  570. script TACDM_HUD (void)
  571. {
  572.     int tic;
  573.     int i;
  574.     int c1; int c2; int c3; int c4;
  575.     int pln = PlayerNumber();
  576.     int newCash; int reason; int color;
  577.  
  578.     int team    = getTeam(pln);
  579.     int oldTeam = team;
  580.     int cash    = getTeamCash(team);
  581.     int oldCash = cash;
  582.  
  583.  
  584.     while (PlayerInGame(pln))
  585.     {
  586.         team = getTeam(pln);
  587.         cash = getTeamCash(team);
  588.  
  589.         c1   = oldCash != cash;
  590.         c2   = oldTeam != team;
  591.         c3   = !(tic % HUD_UPDATERATE);
  592.         c4   = CheckInventory("HudUpdateSignal") && !(tic % 35);
  593.  
  594.         if (c1 || c2 || c3 || c4)
  595.         {
  596.             tic = 0;
  597.  
  598.  
  599.             ACS_ExecuteAlways(TACDM_CLIENT_PRINTMONEY, 0, team, cash);
  600.  
  601.             for (i = 0; i < 5; i++)
  602.             {
  603.                 newCash = teamNewCash[team][i];
  604.                 reason  = teamNewCashReason[team][i];
  605.                 color   = reasonColors[reason];
  606.  
  607.                 ACS_ExecuteAlways(TACDM_CLIENT_PRINTNEWMONEY, 0, i, newCash, color);
  608.             }
  609.  
  610.             for (i = 0; i < classCount; i++)
  611.             {
  612.                 ACS_ExecuteAlways(TACDM_CLIENT_PRINTCLASSES, 0, i, cash, classCosts[i]);
  613.             }
  614.  
  615.             TakeInventory("HudUpdateSignal", 1);
  616.         }
  617.  
  618.         oldTeam = team;
  619.         oldCash = cash;
  620.         tic++;
  621.  
  622.         Delay(1);
  623.     }
  624. }
  625.  
  626. script TACDM_CLIENT_PRINTMONEY (int team, int cash) clientside
  627. {
  628.     int name = teamNames[team];
  629.     int rate = ((HUD_UPDATERATE << 16) / 35) + 0.5;
  630.  
  631.     SetHudSize(HUD_ASPECT1_W, HUD_ASPECT1_H, 1);
  632.  
  633.     HudMessage(s:name, s:" team's Cash: \cd$", d:cash;
  634.         HUDMSG_PLAIN | HUDMSG_COLORSTRING,
  635.         TACDM_HUDPRINTOFFSET, name,
  636.         HUD_TEAMMONEY_X, HUD_TEAMMONEY_Y, rate);
  637. }
  638.  
  639.  
  640. script TACDM_CLIENT_PRINTNEWMONEY (int i, int value, int color) clientside
  641. {
  642.     int incX; int incY;
  643.     SetHudSize(HUD_ASPECT1_W, HUD_ASPECT1_H, 1);
  644.  
  645.     if (value > 0)
  646.     {
  647.         incY = (i * HUD_SPACING_Y) << 16;
  648.         HudMessage(s:"+$", d:value;
  649.             HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  650.             TACDM_HUDPRINTOFFSET+1+i, color,
  651.             HUD_NEWMONEY_X, HUD_NEWMONEY_Y+incY, 2.0, 0.25);
  652.     }
  653.     else if (value < 0)
  654.     {
  655.         incY = (i * HUD_SPACING_Y) << 16;
  656.         HudMessage(s:"-$", d:-value;
  657.             HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  658.             TACDM_HUDPRINTOFFSET+1+i, color,
  659.             HUD_NEWMONEY_X, HUD_NEWMONEY_Y+incY, 2.0, 0.25);
  660.     }
  661. }
  662.  
  663. script TACDM_CLIENT_PRINTCLASSES (int i, int cash, int cost) clientside
  664. {
  665.     if (GetCVar("tacdm_client_showclasses") == 0)
  666.     {
  667.         HudMessage(s:""; HUDMSG_PLAIN, TACDM_HUDPRINTOFFSET-39-i, 0, 0, 0, 0.0, 0.0);
  668.         terminate;
  669.     }
  670.  
  671.     int incX; int incY;
  672.     int rate = ((HUD_UPDATERATE << 16) / 35) + 0.5;
  673.     SetHudSize(HUD_ASPECT2_W, HUD_ASPECT2_H, 1);
  674.  
  675.     if (cost == 0)
  676.     {
  677.         incX = ((i / HUD_MAX) * HUD_SPACING_X) << 16;
  678.         incY = ((i % HUD_MAX) * HUD_SPACING_Y) << 16;
  679.         HudMessage(s:classNames[i];
  680.             HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  681.             TACDM_HUDPRINTOFFSET-39-i, "Yellow",
  682.             HUD_NEWCLASS_X + incX, HUD_NEWCLASS_Y + incY, rate, 0.5);
  683.     }
  684.     else if (cash >= cost)
  685.     {
  686.         incX = ((i / HUD_MAX) * HUD_SPACING_X) << 16;
  687.         incY = ((i % HUD_MAX) * HUD_SPACING_Y) << 16;
  688.         HudMessage(s:classNames[i];
  689.             HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  690.             TACDM_HUDPRINTOFFSET-39-i, "Green",
  691.             HUD_NEWCLASS_X + incX, HUD_NEWCLASS_Y + incY, rate, 0.5);
  692.     }
  693.     else
  694.     {
  695.         incX = ((i / HUD_MAX) * HUD_SPACING_X) << 16;
  696.         incY = ((i % HUD_MAX) * HUD_SPACING_Y) << 16;
  697.         HudMessage( s:classNames[i];
  698.             HUDMSG_FADEOUT | HUDMSG_COLORSTRING,
  699.             TACDM_HUDPRINTOFFSET-39-i, "Black",
  700.             HUD_NEWCLASS_X + incX, HUD_NEWCLASS_Y + incY, rate, 0.5);
  701.     }
  702. }
  703.  
  704.  
  705.  
  706.  
  707.  
  708. script TACDM_ADDMONEY (int team, int amount, int maxAmount)
  709. {
  710.     int emptySlot;
  711.     int addAmount;
  712.     int addGap;
  713.     int reason = REASON_GOTKILL;
  714.  
  715.     if (amount < 0)
  716.     {
  717.         reason = REASON_SUICIDE;
  718.     }
  719.  
  720.     if (amount == 0)
  721.     {
  722.         amount = GetCVar("tacdm_moneyperkill");
  723.     }
  724.  
  725.     if (maxAmount == 0)
  726.     {
  727.         maxAmount = 0x7FFFFFFF;
  728.     }
  729.  
  730.     addAmount = getTeamCash(team)+amount;
  731.     addGap    = addAmount - min(addAmount, maxAmount);
  732.     addAmount = amount - addGap;
  733.  
  734.     ACS_ExecuteAlways(TACDM_INTERNAL_CHANGEMONEY, 0, team, addAmount, reason);
  735. }
  736.  
  737.  
  738. script TACDM_TAKEMONEY (int team, int amount, int minAmount)
  739. {
  740.     int emptySlot;
  741.     int takeAmount;
  742.     int takeGap;
  743.     int ret;
  744.     int reason = REASON_SUICIDE;
  745.  
  746.     if (amount < 0)
  747.     {
  748.         reason = REASON_GOTKILL;
  749.     }
  750.  
  751.     if (amount == 0)
  752.     {
  753.         amount = GetCVar("tacdm_moneylostondeath");
  754.     }
  755.  
  756.     takeAmount = getTeamCash(team)-amount;
  757.     takeGap    = max(takeAmount, minAmount) - takeAmount;
  758.     ret        = -(amount - takeGap);
  759.  
  760.     ACS_ExecuteAlways(TACDM_INTERNAL_CHANGEMONEY, 0, team, ret, reason);
  761. }
  762.  
  763.  
  764. script TACDM_PAYFORKILL (int isMonster, int amount)
  765. {
  766.     int killedHP = GetActorProperty(0, APROP_SpawnHealth);  // in case monster
  767.     int killedPln = PlayerNumber();
  768.     int killedTeam = getTeam(killedPln);
  769.  
  770.     SetActivatorToTarget(0);
  771.  
  772.     int killerPln = PlayerNumber();
  773.     int killerTeam = getTeam(killerPln);
  774.  
  775.     if (!amount)
  776.     {
  777.         amount = GetCVar("tacdm_moneyperkill");
  778.     }
  779.  
  780.     int newAmount;
  781.  
  782.     if (isMonster)
  783.     {
  784.         amount = (killedHP / 10) * GetCVar("tacdm_monstermult");
  785.         ACS_ExecuteAlways(TACDM_ADDMONEY, 0, killerTeam, amount, 0);
  786.         ACS_ExecuteAlways(TACDM_LETTHEREBESWITCH, 0, 105,0,0);
  787.     }
  788.     else
  789.     {
  790.         newAmount = amount + (classCosts[getClass(killedPln)] / 4);
  791.  
  792.         if (killedTeam == killerTeam)
  793.         {
  794.             if ((killedTeam == 4) && (killedPln != killerPln))
  795.             {
  796.                 ACS_ExecuteAlways(TACDM_ADDMONEY, 0, killerTeam, newAmount, 0);
  797.                 ACS_ExecuteAlways(TACDM_LETTHEREBESWITCH, 0, SWITCH_TIME,0,0);
  798.             }
  799.             else
  800.             {
  801.                 ACS_ExecuteAlways(TACDM_TAKEMONEY, 0, killerTeam, amount, 0);
  802.             }
  803.         }
  804.         else
  805.         {
  806.             ACS_ExecuteAlways(TACDM_ADDMONEY, 0, killerTeam, newAmount, 0);
  807.             ACS_ExecuteAlways(TACDM_LETTHEREBESWITCH, 0, SWITCH_TIME,0,0);
  808.         }
  809.     }
  810. }
  811.  
  812. script TACDM_INTERNAL_CHANGEMONEY (int team, int amount, int reason)
  813. {
  814.     SetActivator(0);
  815.     int i; int emptySlot = 4;
  816.  
  817.     changeTeamCash(team, amount);
  818.  
  819.     for (i = 0; i < 5; i++)
  820.     {
  821.         if (teamNewCash[team][i] == 0)
  822.         {
  823.             emptySlot = i;
  824.             break;
  825.         }
  826.     }
  827.  
  828.     teamNewCash[team][emptySlot] += amount;
  829.     teamNewCashReason[team][emptySlot] = reason;
  830.  
  831.     Delay(70);
  832.  
  833.     teamNewCash[team][emptySlot] -= amount;
  834. }
  835.  
  836.  
  837. script TACDM_LETTHEREBESWITCH (int time)
  838. {
  839.     int pln = PlayerNumber();
  840.  
  841.     GiveInventory("ClassSwitcherNoInvuln", 1);
  842.     canSwitch[pln] += 1;
  843.  
  844.     Delay(time);
  845.     canSwitch[pln] -= 1;
  846.  
  847.     if (!canSwitch[pln])
  848.     {
  849.         TakeInventory("ClassSwitcherNoInvuln", 1);
  850.     }
  851. }
  852.  
  853.  
  854.  
  855. script TACDM_CLASSBONUSES (int choice)
  856. {
  857.     switch (choice)
  858.     {
  859.         case 1:
  860.             SetAmmoCapacity("TacDMRocketAmmo", 40);
  861.             SetAmmoCapacity("PineappleGrenade", 10);
  862.             GiveInventory("TacDMRocketAmmo", 40);
  863.             GiveInventory("PineappleGrenade", 10);
  864.             break;
  865.  
  866.         case 2:
  867.             SetAmmoCapacity("Buckshot", 50);
  868.             GiveInventory("Buckshot", 50);
  869.             break;
  870.     }
  871. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement