Advertisement
ijontichy

quakebpak.c

Aug 15th, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.80 KB | None | 0 0
  1. #include "zcommon.acs"
  2. #library "quakebpak"
  3.  
  4. #include "commonFuncs.h"
  5.  
  6. #define WEPCOUNT  13
  7. #define AMMOCOUNT 4
  8.  
  9. int WEAPONS[WEPCOUNT] =
  10. {
  11.     "Chainsaw",
  12.     "Pistol",
  13.     "Shotgun",
  14.     "SuperShotgun",
  15.     "Chaingun",
  16.     "Minigun",
  17.     "RocketLauncher",
  18.     "GrenadeLauncher",
  19.     "PlasmaRifle",
  20.     "Railgun",
  21.     "BFG9000",
  22.     "BFG10k",
  23. };
  24.  
  25. int WEPNAME[WEPCOUNT] =
  26. {
  27.     "chainsaw",
  28.     "pistol",
  29.     "shotgun",
  30.     "super shotgun",
  31.     "chaingun",
  32.     "minigun",
  33.     "rocket launcher",
  34.     "grenade launcher",
  35.     "plasma rifle",
  36.     "railgun",
  37.     "BFG9000",
  38.     "BFG10k",
  39. };
  40.  
  41. int WEPAMMO[WEPCOUNT] =
  42. {
  43.     "",
  44.     "Clip",
  45.     "Shell",
  46.     "Shell",
  47.     "Clip",
  48.     "Clip",
  49.     "RocketAmmo",
  50.     "RocketAmmo",
  51.     "Cell",
  52.     "Cell",
  53.     "Cell",
  54.     "Cell",
  55. };
  56.  
  57. int WEPAMMO2[WEPCOUNT] = {""};
  58.  
  59. int AMMO[AMMOCOUNT] =
  60. {
  61.     "Clip",
  62.     "Shell",
  63.     "RocketAmmo",
  64.     "Cell",
  65. };
  66.  
  67. int AMMONAME[AMMOCOUNT] =
  68. {
  69.     "bullet",
  70.     "shell",
  71.     "rocket",
  72.     "cell",
  73. };
  74.  
  75. int pickupSlots[32] = {0};
  76. int prevAmmos[AMMOCOUNT] = {0};  // meant for clientside use
  77.  
  78. function int weaponOut(void)
  79. {
  80.     int i, w;
  81.     for (i = 0; i < WEPCOUNT; i++)
  82.     {
  83.         w = WEAPONS[i];
  84.         if (CheckWeapon(w))
  85.         {
  86.             return i;
  87.         }
  88.     }
  89.  
  90.     return "";
  91. }
  92.  
  93. script 393 (int mode)
  94. {
  95.     int pln = PlayerNumber();
  96.     int i, j, k;
  97.     int myX, myY, myZ;
  98.     int packWepNum = -1;
  99.     int packWep, packWepAmmo, packWepAmmo2, packWepAmmoCount, packWepAmmo2Count,
  100.         packTID;
  101.  
  102.     int packCheck = 96 + pln;
  103.  
  104.     switch (mode)
  105.     {
  106.       case 0:  // Drop
  107.         packTID = unusedTID(60000, 70000);
  108.         myX = GetActorX(0); myY = GetActorY(0); myZ = GetActorZ(0);
  109.  
  110.         Spawn("DropPack", myX, myY, myZ + 8.0, packTID);
  111.  
  112.         for (i = 0; i < AMMOCOUNT; i++)
  113.         {
  114.             j = CheckInventory(AMMO[i]);
  115.             GiveActorAmmo(packTID, AMMO[i], j);
  116.         }
  117.  
  118.         packWepNum = weaponOut();
  119.  
  120.         if (packWepNum != -1)
  121.         {
  122.             packWep          = WEAPONS[packWepNum];
  123.             packWepAmmo      = WEPAMMO[packWepNum];
  124.             packWepAmmo2     = WEPAMMO2[packWepNum];
  125.             packWepAmmoCount = CheckInventory(packWepAmmo);
  126.             packWepAmmo2Count= CheckInventory(packWepAmmo2);
  127.  
  128.             GiveActorInventory(packTID, packWep, 1);
  129.             j = CheckActorInventory(packTID, packWepAmmo) - packWepAmmoCount;
  130.             k = CheckActorInventory(packTID, packWepAmmo2) - packWepAmmo2Count;
  131.             TakeActorInventory(packTID, packWepAmmo, j);
  132.             TakeActorInventory(packTID, packWepAmmo2, k);
  133.         }
  134.         break;
  135.  
  136.       case 1:  // Pickup
  137.         packTID = ActivatorTID();
  138.  
  139.         SetActivatorToTarget(0);
  140.         if (GetActorProperty(0, APROP_Health) <= 0) { break; }
  141.         SetActivator(packTID);
  142.  
  143.         for (i = 0; i < WEPCOUNT; i++)
  144.         {
  145.             if (CheckInventory(WEAPONS[i]))
  146.             {
  147.                 packWepNum  = i;
  148.                 packWep     = WEAPONS[i];
  149.                 packWepAmmo = WEPAMMO[i];
  150.                 packWepAmmo2= WEPAMMO2[i];
  151.                 packWepAmmoCount = CheckInventory(packWepAmmo);
  152.                 break;
  153.             }
  154.         }
  155.  
  156.         SetActivatorToTarget(0);
  157.         if (packWepNum != -1)
  158.         {
  159.             j = CheckInventory(packWepAmmo);
  160.             k = CheckInventory(packWepAmmo2);
  161.  
  162.             GiveInventory(packWep, 1);
  163.             TakeInventory(packWepAmmo, CheckInventory(packWepAmmo)-j);
  164.             TakeInventory(packWepAmmo2, CheckInventory(packWepAmmo2)-k);
  165.         }
  166.  
  167.         for (i = 0; i < AMMOCOUNT; i++)
  168.         {
  169.             j = CheckActorInventory(packTID, AMMO[i]);
  170.             ACS_ExecuteAlways(394, 0, packCheck, i, j);
  171.             GiveAmmo(AMMO[i], j);
  172.         }
  173.  
  174.         GiveInventory("PickingUpDropPack", packCheck);
  175.  
  176.         Delay(1);
  177.         ActivatorSound("misc/w_pkup", 127);
  178.         FadeRange(255,255,0, 0.125, 255,255,0, 0.0, 1.0/4);
  179.         ACS_ExecuteAlways(395, 0, packCheck, packWepNum, 0);
  180.         Delay(1);
  181.  
  182.         TakeInventory("PickingUpDropPack", packCheck);
  183.  
  184.         SetActivator(packTID);
  185.         SetResultValue(1);
  186.         break;
  187.     }
  188. }
  189.  
  190.  
  191. script 394 (int check, int a1, int a2) clientside
  192. {
  193.     if (CheckInventory("PickingUpDropPack") != check) { terminate; }
  194.     prevAmmos[a1] = a2;
  195. }
  196.  
  197. script 395 (int check, int packWepNum) clientside
  198. {
  199.     int pln = PlayerNumber();
  200.     int logStr = "You got";
  201.     int i, j;
  202.  
  203.     if (PlayerIsBot(pln)) { terminate; }
  204.     if (CheckInventory("PickingUpDropPack") != check) { terminate; }
  205.  
  206.     if (packWepNum != -1)
  207.     {
  208.         logStr = StrParam(s:logStr, s:" a ", s:WEPNAME[packWepNum]);
  209.     }
  210.  
  211.     for (i = 0; i < AMMOCOUNT; i++)
  212.     {
  213.         j = prevAmmos[i];
  214.         if (j == 0) { continue; }
  215.         if ((packWepNum != -1) || (i > 0)) { logStr = StrParam(s:logStr, s:", "); }
  216.  
  217.         logStr = StrParam(s:logStr, d:j, s:" ", s:AMMONAME[i], s:cond(j == 1, "", "s"));
  218.     }
  219.  
  220.     Log(s:logStr);
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement