Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2010
737
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.37 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define GREEN               (0x449735FF)
  4. #define RED                 (0xFF0000FF)
  5. #define ORANGE              (0xF37E00FF)
  6. #define GREY                (0x888888FF)
  7.  
  8. #define MAX_SPEED           (17.0)           // UFOs movement speed
  9. #define MAX_ALIENS          (5)
  10. #define ATTACK_DISTANCE     (30.0)
  11. #define UFO                 (13607)          // UFO ID (Do not change)
  12. #define MISSLE              (354)            // MISSLE ID (Do not change)
  13. enum atOpt
  14. {
  15.     nAmmo,
  16.     nScore,
  17.     Float:fAlpha,
  18.     Float:fBeta,
  19.     aTimer,
  20.     aliensKilled,
  21.     cityDemage,
  22.     nActiceID,
  23.     Aliens[MAX_ALIENS],
  24.     nMissle[4],
  25.     mTimer[4],
  26.     rTimer,
  27.     nHits,
  28.     Text:TDAimingSys[4],
  29.     bool:bActive,
  30.     bool:bReloading
  31. }
  32.  
  33. new Float:Healthlvl[6] =
  34. {
  35.     100.0,
  36.     80.0,
  37.     60.0,
  38.     40.0,
  39.     20.0,
  40.     0.0
  41. };
  42.  
  43. new Float:aliensPos[MAX_ALIENS][4] =
  44. {
  45.     {1357.8501, -1148.0977, 547.2476, MAX_SPEED},
  46.     {1243.2451, -1224.6387, 436.5256, MAX_SPEED},
  47.     {1484.7338, -1582.3347, 340.7635, MAX_SPEED},
  48.     {1711.7870, -1377.3308, 477.1380, MAX_SPEED},
  49.     {1279.5264, -1132.9736, 285.2830, MAX_SPEED}
  50. };
  51.  
  52. new Float:aliensMissles[8][3] =
  53. {
  54.     {1397.3594,-1245.0995,185.2764},
  55.     {1503.9987,-1266.6077,213.3657},
  56.     {1537.8136,-1265.9868,262.8046},
  57.     {1564.6628,-1327.3361,282.5501},
  58.     {1566.2262,-1377.7350,290.7116},
  59.     {1445.1620,-1460.4303,281.3541},
  60.     {1328.8147,-1394.5541,271.7566},
  61.     {1408.6711,-1318.2393,262.8651}
  62. };
  63.  
  64. new g_AlienAttack[atOpt];
  65.  
  66. forward EndPlayerGame(playerid);
  67. forward AliensMoved();
  68. forward Reload();
  69.  
  70. public OnFilterScriptInit()
  71. {
  72.     print("\n--------------------------------------");
  73.     print(" Alien Attack");
  74.     print("--------------------------------------\n");
  75.    
  76.     SetTimer("AliensMoved", 5000, 1);
  77.    
  78.     g_AlienAttack[TDAimingSys][0] = TextDrawCreate(210.000000, 105.000000, "[");
  79.     g_AlienAttack[TDAimingSys][1] = TextDrawCreate(348.000000, 105.000000, "]");
  80.    
  81.     TextDrawLetterSize(g_AlienAttack[TDAimingSys][0], 3.6, 25.0);
  82.     TextDrawLetterSize(g_AlienAttack[TDAimingSys][1], 3.6, 25.0);
  83.    
  84.     g_AlienAttack[TDAimingSys][2] = TextDrawCreate(178.000000, 342.000000, " ");
  85.     g_AlienAttack[TDAimingSys][3] = TextDrawCreate(359.000000, 342.000000, " ");
  86.     TextDrawSetShadow(g_AlienAttack[TDAimingSys][2], 1);
  87.     TextDrawSetOutline(g_AlienAttack[TDAimingSys][2], 0);
  88.     TextDrawSetShadow(g_AlienAttack[TDAimingSys][3], 1);
  89.     TextDrawSetOutline(g_AlienAttack[TDAimingSys][3], 0);
  90.    
  91.     return 1;
  92. }
  93.  
  94. public OnFilterScriptExit()
  95. {
  96.     return 1;
  97. }
  98.  
  99. public OnPlayerCommandText(playerid, cmdtext[])
  100. {
  101.     if (strcmp("/alienattack", cmdtext, true) == 0)
  102.     {
  103.         if(g_AlienAttack[bActive] == true)
  104.         {
  105.             SendClientMessage(playerid, RED, "Somebody is still playing. Please \
  106.              wait.");
  107.             return 1;
  108.         }
  109.         new Float:Pos[3];
  110.        
  111.         g_AlienAttack[bActive] = true;
  112.         g_AlienAttack[nAmmo] = 4;
  113.         g_AlienAttack[nScore] = 0;
  114.         g_AlienAttack[cityDemage] = 0;
  115.         g_AlienAttack[aliensKilled] = 0;
  116.         g_AlienAttack[nHits] = 0;
  117.         g_AlienAttack[nActiceID] = playerid;
  118.        
  119.         for(new i; i < 4; i++)
  120.             g_AlienAttack[nMissle][i] = -1;
  121.        
  122.         SetPlayerPos(playerid, 1550.0609, -1366.5972, 326.2109);
  123.         SetPlayerInterior(playerid, 0);
  124.        
  125.         g_AlienAttack[Aliens][0] = CreateObject(UFO, 1357.8501, -1148.0977,
  126.          447.2476, 179.6226, 0.0000, 0.0000);
  127.         g_AlienAttack[Aliens][1] = CreateObject(UFO, 1243.2451, -1224.6387,
  128.          336.5256, 179.6226, 0.0000, 0.0000);
  129.         g_AlienAttack[Aliens][2] = CreateObject(UFO, 1484.7338, -1582.3347,
  130.          490.7635, 179.6226, 0.0000, 0.0000);
  131.         g_AlienAttack[Aliens][3] = CreateObject(UFO, 1711.7870, -1377.3308,
  132.          577.1380, 179.6226, 0.0000, 0.0000);
  133.         g_AlienAttack[Aliens][4] = CreateObject(UFO, 1279.5264, -1132.9736,
  134.          285.2830, 179.6226, 0.0000, 0.0000);
  135.        
  136.  
  137.         SendClientMessage(playerid, RED, "Warning!!! Aliens have attacked city.");
  138.         SendClientMessage(playerid, GREEN, "Use arrowrs to move cannon.");
  139.         SendClientMessage(playerid, GREEN, "Use FIRE to launch a rocket");
  140.         SendClientMessage(playerid, ORANGE, "Have a nice game.");
  141.  
  142.         TogglePlayerControllable(playerid, 0);
  143.         g_AlienAttack[fAlpha] = 1.0;
  144.         g_AlienAttack[fBeta] = 80.0;
  145.        
  146.         new str[30];
  147.        
  148.         for(new i; i < 4; i++)
  149.             TextDrawShowForPlayer(playerid,g_AlienAttack[TDAimingSys][i]);
  150.        
  151.         format(str, sizeof(str), "~g~Angle: ~h~~h~%.1f", (80.0 - g_AlienAttack[fBeta]));
  152.         TextDrawSetString(g_AlienAttack[TDAimingSys][3], str);
  153.         format(str, sizeof(str), "~r~Ammo: ~h~~h~%i", g_AlienAttack[nAmmo]);
  154.         TextDrawSetString(g_AlienAttack[TDAimingSys][2], str);
  155.        
  156.         GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  157.          g_AlienAttack[fAlpha], 5.0, g_AlienAttack[fBeta]);
  158.         SetPlayerCameraPos(playerid, 1544.1556, -1353.3815, 329.4742);
  159.         SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
  160.  
  161.         SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
  162.  
  163.         g_AlienAttack[aTimer] = SetTimerEx("EndPlayerGame", 5*60*1000, 0, "d",
  164.          playerid);
  165.  
  166.         return 1;
  167.     }
  168.  
  169.     if (strcmp("/bye", cmdtext, true, 10) == 0)
  170.     {
  171.         EndPlayerGame(playerid);
  172.         return 1;
  173.     }
  174.    
  175.     return 0;
  176. }
  177.  
  178. public AliensMoved()
  179. {
  180.     for(new i; i < MAX_ALIENS; i++)
  181.     {
  182.         new rand = random(MAX_ALIENS);
  183.         MoveObject(g_AlienAttack[Aliens][i], aliensPos[rand][0], aliensPos[rand]
  184.          [1], aliensPos[rand][2], aliensPos[rand][3]);
  185.  
  186.         rand = random(5);
  187.        
  188.         new Float:Pos[3];
  189.         GetObjectPos(g_AlienAttack[Aliens][i], Pos[0], Pos[1], Pos[2]);
  190.         new missle = CreateObject(MISSLE, Pos[0], Pos[1], Pos[2], 0.0, 0.0, 0.0);
  191.  
  192.         if(rand == 3)
  193.             MoveObject(missle, 1544.1556, -1353.3815, 329.4742, 60);
  194.         else
  195.         {
  196.             rand = random(8);
  197.             MoveObject(missle, aliensMissles[rand][0], aliensMissles[rand][1],
  198.              aliensMissles[rand][2], 60);
  199.         }
  200.     }
  201.  
  202.     g_AlienAttack[cityDemage] += ((random(3) + 1) * (MAX_ALIENS - g_AlienAttack
  203.      [aliensKilled]) * 1000);
  204.    
  205.     return 1;
  206. }
  207.  
  208. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  209. {
  210.     if(g_AlienAttack[bActive] == true)
  211.     {
  212.         if(g_AlienAttack[nActiceID] == playerid)
  213.         {
  214.             if(newkeys == KEY_FIRE)
  215.             {
  216.                 if(g_AlienAttack[bReloading] == true)
  217.                 {
  218.                     SendClientMessage(g_AlienAttack[nActiceID], RED, "Reloading");
  219.                     return 1;
  220.                 }
  221.                 if(g_AlienAttack[nAmmo] == 0)
  222.                 {
  223.                     SendClientMessage(playerid, RED, "Use JUMP to reload a cannon");
  224.                     return 1;
  225.                 }
  226.                
  227.                 new Float:Pos[3];
  228.                 GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  229.                  g_AlienAttack[fAlpha], 300.0, g_AlienAttack[fBeta]);
  230.                  
  231.                 for(new i; i < 4; i++)
  232.                 {
  233.                         if(g_AlienAttack[nMissle][i] == -1)
  234.                         {
  235.                         g_AlienAttack[nMissle][i] = CreateObject(MISSLE, 1544.1556,
  236.                          -1353.3815, 329.4742, 0.0, 0.0, 0.0);
  237.                          
  238.                         MoveObject(g_AlienAttack[nMissle][i], Pos[0], Pos[1],
  239.                          Pos[2], 50);
  240.                          
  241.                         break;
  242.                         }
  243.                     }
  244.                 g_AlienAttack[nAmmo]--;
  245.  
  246.             }
  247.             if(newkeys == KEY_JUMP)
  248.             {
  249.                 if(g_AlienAttack[bReloading] == true)
  250.                         return 1;
  251.                    
  252.                 g_AlienAttack[rTimer] = SetTimer("Reload", 5000, 0);
  253.                 g_AlienAttack[bReloading] = true;
  254.                 SendClientMessage(g_AlienAttack[nActiceID], RED, "Reloading");
  255.             }
  256.         }
  257.     }
  258.     return 1;
  259. }
  260.  
  261. public Reload()
  262. {
  263.     KillTimer(g_AlienAttack[rTimer]);
  264.     g_AlienAttack[bReloading] = false;
  265.     g_AlienAttack[nAmmo] = 4;
  266.     SendClientMessage(g_AlienAttack[nActiceID], GREEN, "Reload completed");
  267. }
  268.  
  269. public OnPlayerUpdate(playerid)
  270. {
  271.     if(g_AlienAttack[bActive] == true)
  272.     {
  273.         if(g_AlienAttack[nActiceID] != playerid)
  274.             return 1;
  275.            
  276.         new
  277.             Float:Pos[3],
  278.             nKeys[3];
  279.  
  280.         GetPlayerKeys(playerid, nKeys[0], nKeys[1], nKeys[2]);
  281.         SetPlayerHealth(playerid, Healthlvl[g_AlienAttack[nHits]]);
  282.  
  283.         if(nKeys[1] == 128)
  284.         {
  285.             g_AlienAttack[fBeta] += 1.0;
  286.             if(g_AlienAttack[fBeta] >= 80)
  287.                 g_AlienAttack[fBeta] = 80;
  288.  
  289.                 GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  290.              g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
  291.              
  292.             SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
  293.             SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
  294.         }
  295.  
  296.         if(nKeys[1] == -128)
  297.         {
  298.             g_AlienAttack[fBeta] -= 1.0;
  299.             if(g_AlienAttack[fBeta] <= 1)
  300.                 g_AlienAttack[fBeta] = 1;
  301.  
  302.                 GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  303.              g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
  304.              
  305.             SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
  306.             SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
  307.         }
  308.  
  309.         if(nKeys[2] == 128)
  310.        
  311.         {
  312.             g_AlienAttack[fAlpha] += 1.0;
  313.             if(g_AlienAttack[fAlpha] >= 360)
  314.                 g_AlienAttack[fAlpha] = 1.0;
  315.  
  316.                 GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  317.              g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
  318.              
  319.             SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
  320.             SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
  321.         }
  322.  
  323.         if(nKeys[2] == -128)
  324.         {
  325.             g_AlienAttack[fAlpha] -= 1.0;
  326.             if(g_AlienAttack[fAlpha] <= 0)
  327.                 g_AlienAttack[fAlpha] = 359.0;
  328.  
  329.                 GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
  330.              g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
  331.              
  332.             SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
  333.             SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
  334.         }
  335.        
  336.         for(new i; i < 4; i++)
  337.         {
  338.             if(g_AlienAttack[nMissle][i] != -1)
  339.             {
  340.                 new Float:aPos[3];
  341.                 GetObjectPos(g_AlienAttack[nMissle][i], aPos[0], aPos[1],
  342.                  aPos[2]);
  343.                  
  344.                 if(ExplodeInArea(aPos[0], aPos[1], ATTACK_DISTANCE))
  345.                 {
  346.                     DestroyObject(g_AlienAttack[nMissle][i]);
  347.                     g_AlienAttack[nMissle][i] = -1;
  348.                     CreateExplosion(aPos[0], aPos[1], aPos[2], 6, 60);
  349.                     g_AlienAttack[nScore] += (random(40) + 100);
  350.                     g_AlienAttack[aliensKilled]++;
  351.                     if(g_AlienAttack[aliensKilled] == 5)
  352.                         EndPlayerGame(playerid);
  353.                     break;
  354.                    
  355.                    
  356.                 }
  357.             }
  358.         }
  359.         new str[30];
  360.  
  361.         format(str, sizeof(str), "~g~Angle: ~h~~h~%.1f", (80.0 - g_AlienAttack[fBeta]));
  362.         TextDrawSetString(g_AlienAttack[TDAimingSys][3], str);
  363.         format(str, sizeof(str), "~r~Ammo: ~h~~h~%i", g_AlienAttack[nAmmo]);
  364.         TextDrawSetString(g_AlienAttack[TDAimingSys][2], str);
  365.     }
  366.    
  367.     return 1;
  368. }
  369.  
  370. public OnObjectMoved(objectid)
  371. {
  372.     for(new i; i < 4; i++)
  373.     {
  374.         if(g_AlienAttack[nMissle][i] == objectid)
  375.         {
  376.             g_AlienAttack[nMissle][i] = -1;
  377.             DestroyObject(objectid);
  378.             break;
  379.         }
  380.     }
  381.    
  382.     new Float:Pos[3];
  383.     GetObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
  384.     CreateExplosion(Pos[0], Pos[1], Pos[2], 6, 20);
  385.     DestroyObject(objectid);
  386.     if(Pos[0] == 1544.1556 && Pos[1] == -1353.3815 && Pos[2] == 329.4742)
  387.     {
  388.         g_AlienAttack[nHits]++;
  389.         if(g_AlienAttack[nHits] == 5)
  390.         {
  391.             EndPlayerGame(g_AlienAttack[nActiceID]);
  392.             SetPlayerHealth(g_AlienAttack[nActiceID], 100);
  393.         }
  394.     }
  395.     return 1;
  396. }
  397.  
  398. public OnPlayerDeath(playerid, killerid, reason)
  399. {
  400.     if(g_AlienAttack[bActive] == true && g_AlienAttack[nActiceID] == playerid)
  401.         EndPlayerGame(playerid);
  402.        
  403.     return 1;
  404. }
  405.  
  406. public EndPlayerGame(playerid)
  407. {
  408.     new
  409.         str[120],
  410.         strEnd[2][5] =
  411.         {
  412.             "UFO",
  413.             "UFOs"
  414.         };
  415.        
  416.     KillTimer(g_AlienAttack[aTimer]);
  417.  
  418.     format(str, sizeof(str), "~y~Score: ~h~~h~%i. ~n~~b~Destroyed %s ~h~~h~%i\
  419.      ~n~~r~City damage ~h~~h~$%i", g_AlienAttack[nScore],
  420.      (g_AlienAttack[aliensKilled] > 1) ? strEnd[1] : strEnd[0],
  421.      g_AlienAttack[aliensKilled], g_AlienAttack[cityDemage]);
  422.      
  423.     GameTextForPlayer(playerid, str, 5000, 3);
  424.  
  425.     g_AlienAttack[bActive] = false;
  426.  
  427.     SpawnPlayer(playerid);
  428.  
  429.     for(new i; i < MAX_ALIENS; i++)
  430.     {
  431.         DestroyObject(g_AlienAttack[Aliens][i]);
  432.         g_AlienAttack[Aliens][i] = -1;
  433.     }
  434.    
  435.     for(new i; i < 4; i++)
  436.         TextDrawHideForPlayer(playerid,g_AlienAttack[TDAimingSys][i]);
  437.  
  438.     return 1;
  439. }
  440.  
  441. stock GetXYZ(Float:StartPosX, Float:StartPosY, Float:StartPosZ, &Float:NewX,
  442.  &Float:NewY, &Float:NewZ, Float:alpha, Float:Dist, Float:Beta = 0.0)
  443. {
  444.     NewX = floatadd(StartPosX, floatmul(floatsin(alpha, degrees), Dist));
  445.     NewY = floatadd(StartPosY, floatmul(floatcos(alpha, degrees), Dist));
  446.         NewZ = floatadd(StartPosZ, floatdiv(Dist, floattan(Beta, degrees)));
  447. }
  448.  
  449. stock ExplodeInArea(Float:X, Float:Y, Float:Dist)
  450. {
  451.     for(new i; i < MAX_ALIENS; i++)
  452.     {
  453.         if(g_AlienAttack[Aliens][i] == -1)
  454.             continue;
  455.  
  456.         new Float:Pos[3];
  457.  
  458.         GetObjectPos(g_AlienAttack[Aliens][i], Pos[0], Pos[1], Pos[2]);
  459.  
  460.         Pos[0] -= X;
  461.         Pos[1] -= Y;
  462.  
  463.         if (((Pos[0] < Dist) && (Pos[0] > -Dist)) && ((Pos[1] < Dist) &&
  464.          (Pos[1] > -Dist)))
  465.         {
  466.             DestroyObject(g_AlienAttack[Aliens][i]);
  467.             g_AlienAttack[Aliens][i] = -1;
  468.             return 1;
  469.         }
  470.     }
  471.     return 0;
  472. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement