Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define GREEN (0x449735FF)
- #define RED (0xFF0000FF)
- #define ORANGE (0xF37E00FF)
- #define GREY (0x888888FF)
- #define MAX_SPEED (17.0) // UFOs movement speed
- #define MAX_ALIENS (5)
- #define ATTACK_DISTANCE (30.0)
- #define UFO (13607) // UFO ID (Do not change)
- #define MISSLE (354) // MISSLE ID (Do not change)
- enum atOpt
- {
- nAmmo,
- nScore,
- Float:fAlpha,
- Float:fBeta,
- aTimer,
- aliensKilled,
- cityDemage,
- nActiceID,
- Aliens[MAX_ALIENS],
- nMissle[4],
- mTimer[4],
- rTimer,
- nHits,
- Text:TDAimingSys[4],
- bool:bActive,
- bool:bReloading
- }
- new Float:Healthlvl[6] =
- {
- 100.0,
- 80.0,
- 60.0,
- 40.0,
- 20.0,
- 0.0
- };
- new Float:aliensPos[MAX_ALIENS][4] =
- {
- {1357.8501, -1148.0977, 547.2476, MAX_SPEED},
- {1243.2451, -1224.6387, 436.5256, MAX_SPEED},
- {1484.7338, -1582.3347, 340.7635, MAX_SPEED},
- {1711.7870, -1377.3308, 477.1380, MAX_SPEED},
- {1279.5264, -1132.9736, 285.2830, MAX_SPEED}
- };
- new Float:aliensMissles[8][3] =
- {
- {1397.3594,-1245.0995,185.2764},
- {1503.9987,-1266.6077,213.3657},
- {1537.8136,-1265.9868,262.8046},
- {1564.6628,-1327.3361,282.5501},
- {1566.2262,-1377.7350,290.7116},
- {1445.1620,-1460.4303,281.3541},
- {1328.8147,-1394.5541,271.7566},
- {1408.6711,-1318.2393,262.8651}
- };
- new g_AlienAttack[atOpt];
- forward EndPlayerGame(playerid);
- forward AliensMoved();
- forward Reload();
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Alien Attack");
- print("--------------------------------------\n");
- SetTimer("AliensMoved", 5000, 1);
- g_AlienAttack[TDAimingSys][0] = TextDrawCreate(210.000000, 105.000000, "[");
- g_AlienAttack[TDAimingSys][1] = TextDrawCreate(348.000000, 105.000000, "]");
- TextDrawLetterSize(g_AlienAttack[TDAimingSys][0], 3.6, 25.0);
- TextDrawLetterSize(g_AlienAttack[TDAimingSys][1], 3.6, 25.0);
- g_AlienAttack[TDAimingSys][2] = TextDrawCreate(178.000000, 342.000000, " ");
- g_AlienAttack[TDAimingSys][3] = TextDrawCreate(359.000000, 342.000000, " ");
- TextDrawSetShadow(g_AlienAttack[TDAimingSys][2], 1);
- TextDrawSetOutline(g_AlienAttack[TDAimingSys][2], 0);
- TextDrawSetShadow(g_AlienAttack[TDAimingSys][3], 1);
- TextDrawSetOutline(g_AlienAttack[TDAimingSys][3], 0);
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (strcmp("/alienattack", cmdtext, true) == 0)
- {
- if(g_AlienAttack[bActive] == true)
- {
- SendClientMessage(playerid, RED, "Somebody is still playing. Please \
- wait.");
- return 1;
- }
- new Float:Pos[3];
- g_AlienAttack[bActive] = true;
- g_AlienAttack[nAmmo] = 4;
- g_AlienAttack[nScore] = 0;
- g_AlienAttack[cityDemage] = 0;
- g_AlienAttack[aliensKilled] = 0;
- g_AlienAttack[nHits] = 0;
- g_AlienAttack[nActiceID] = playerid;
- for(new i; i < 4; i++)
- g_AlienAttack[nMissle][i] = -1;
- SetPlayerPos(playerid, 1550.0609, -1366.5972, 326.2109);
- SetPlayerInterior(playerid, 0);
- g_AlienAttack[Aliens][0] = CreateObject(UFO, 1357.8501, -1148.0977,
- 447.2476, 179.6226, 0.0000, 0.0000);
- g_AlienAttack[Aliens][1] = CreateObject(UFO, 1243.2451, -1224.6387,
- 336.5256, 179.6226, 0.0000, 0.0000);
- g_AlienAttack[Aliens][2] = CreateObject(UFO, 1484.7338, -1582.3347,
- 490.7635, 179.6226, 0.0000, 0.0000);
- g_AlienAttack[Aliens][3] = CreateObject(UFO, 1711.7870, -1377.3308,
- 577.1380, 179.6226, 0.0000, 0.0000);
- g_AlienAttack[Aliens][4] = CreateObject(UFO, 1279.5264, -1132.9736,
- 285.2830, 179.6226, 0.0000, 0.0000);
- SendClientMessage(playerid, RED, "Warning!!! Aliens have attacked city.");
- SendClientMessage(playerid, GREEN, "Use arrowrs to move cannon.");
- SendClientMessage(playerid, GREEN, "Use FIRE to launch a rocket");
- SendClientMessage(playerid, ORANGE, "Have a nice game.");
- TogglePlayerControllable(playerid, 0);
- g_AlienAttack[fAlpha] = 1.0;
- g_AlienAttack[fBeta] = 80.0;
- new str[30];
- for(new i; i < 4; i++)
- TextDrawShowForPlayer(playerid,g_AlienAttack[TDAimingSys][i]);
- format(str, sizeof(str), "~g~Angle: ~h~~h~%.1f", (80.0 - g_AlienAttack[fBeta]));
- TextDrawSetString(g_AlienAttack[TDAimingSys][3], str);
- format(str, sizeof(str), "~r~Ammo: ~h~~h~%i", g_AlienAttack[nAmmo]);
- TextDrawSetString(g_AlienAttack[TDAimingSys][2], str);
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 5.0, g_AlienAttack[fBeta]);
- SetPlayerCameraPos(playerid, 1544.1556, -1353.3815, 329.4742);
- SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
- SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
- g_AlienAttack[aTimer] = SetTimerEx("EndPlayerGame", 5*60*1000, 0, "d",
- playerid);
- return 1;
- }
- if (strcmp("/bye", cmdtext, true, 10) == 0)
- {
- EndPlayerGame(playerid);
- return 1;
- }
- return 0;
- }
- public AliensMoved()
- {
- for(new i; i < MAX_ALIENS; i++)
- {
- new rand = random(MAX_ALIENS);
- MoveObject(g_AlienAttack[Aliens][i], aliensPos[rand][0], aliensPos[rand]
- [1], aliensPos[rand][2], aliensPos[rand][3]);
- rand = random(5);
- new Float:Pos[3];
- GetObjectPos(g_AlienAttack[Aliens][i], Pos[0], Pos[1], Pos[2]);
- new missle = CreateObject(MISSLE, Pos[0], Pos[1], Pos[2], 0.0, 0.0, 0.0);
- if(rand == 3)
- MoveObject(missle, 1544.1556, -1353.3815, 329.4742, 60);
- else
- {
- rand = random(8);
- MoveObject(missle, aliensMissles[rand][0], aliensMissles[rand][1],
- aliensMissles[rand][2], 60);
- }
- }
- g_AlienAttack[cityDemage] += ((random(3) + 1) * (MAX_ALIENS - g_AlienAttack
- [aliensKilled]) * 1000);
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(g_AlienAttack[bActive] == true)
- {
- if(g_AlienAttack[nActiceID] == playerid)
- {
- if(newkeys == KEY_FIRE)
- {
- if(g_AlienAttack[bReloading] == true)
- {
- SendClientMessage(g_AlienAttack[nActiceID], RED, "Reloading");
- return 1;
- }
- if(g_AlienAttack[nAmmo] == 0)
- {
- SendClientMessage(playerid, RED, "Use JUMP to reload a cannon");
- return 1;
- }
- new Float:Pos[3];
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 300.0, g_AlienAttack[fBeta]);
- for(new i; i < 4; i++)
- {
- if(g_AlienAttack[nMissle][i] == -1)
- {
- g_AlienAttack[nMissle][i] = CreateObject(MISSLE, 1544.1556,
- -1353.3815, 329.4742, 0.0, 0.0, 0.0);
- MoveObject(g_AlienAttack[nMissle][i], Pos[0], Pos[1],
- Pos[2], 50);
- break;
- }
- }
- g_AlienAttack[nAmmo]--;
- }
- if(newkeys == KEY_JUMP)
- {
- if(g_AlienAttack[bReloading] == true)
- return 1;
- g_AlienAttack[rTimer] = SetTimer("Reload", 5000, 0);
- g_AlienAttack[bReloading] = true;
- SendClientMessage(g_AlienAttack[nActiceID], RED, "Reloading");
- }
- }
- }
- return 1;
- }
- public Reload()
- {
- KillTimer(g_AlienAttack[rTimer]);
- g_AlienAttack[bReloading] = false;
- g_AlienAttack[nAmmo] = 4;
- SendClientMessage(g_AlienAttack[nActiceID], GREEN, "Reload completed");
- }
- public OnPlayerUpdate(playerid)
- {
- if(g_AlienAttack[bActive] == true)
- {
- if(g_AlienAttack[nActiceID] != playerid)
- return 1;
- new
- Float:Pos[3],
- nKeys[3];
- GetPlayerKeys(playerid, nKeys[0], nKeys[1], nKeys[2]);
- SetPlayerHealth(playerid, Healthlvl[g_AlienAttack[nHits]]);
- if(nKeys[1] == 128)
- {
- g_AlienAttack[fBeta] += 1.0;
- if(g_AlienAttack[fBeta] >= 80)
- g_AlienAttack[fBeta] = 80;
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
- SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
- SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
- }
- if(nKeys[1] == -128)
- {
- g_AlienAttack[fBeta] -= 1.0;
- if(g_AlienAttack[fBeta] <= 1)
- g_AlienAttack[fBeta] = 1;
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
- SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
- SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
- }
- if(nKeys[2] == 128)
- {
- g_AlienAttack[fAlpha] += 1.0;
- if(g_AlienAttack[fAlpha] >= 360)
- g_AlienAttack[fAlpha] = 1.0;
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
- SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
- SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
- }
- if(nKeys[2] == -128)
- {
- g_AlienAttack[fAlpha] -= 1.0;
- if(g_AlienAttack[fAlpha] <= 0)
- g_AlienAttack[fAlpha] = 359.0;
- GetXYZ(1544.1556, -1353.3815, 329.4742, Pos[0], Pos[1], Pos[2],
- g_AlienAttack[fAlpha], 12.0, g_AlienAttack[fBeta]);
- SetPlayerCameraLookAt(playerid, Pos[0], Pos[1], Pos[2]);
- SetPlayerFacingAngle(playerid, g_AlienAttack[fAlpha]);
- }
- for(new i; i < 4; i++)
- {
- if(g_AlienAttack[nMissle][i] != -1)
- {
- new Float:aPos[3];
- GetObjectPos(g_AlienAttack[nMissle][i], aPos[0], aPos[1],
- aPos[2]);
- if(ExplodeInArea(aPos[0], aPos[1], ATTACK_DISTANCE))
- {
- DestroyObject(g_AlienAttack[nMissle][i]);
- g_AlienAttack[nMissle][i] = -1;
- CreateExplosion(aPos[0], aPos[1], aPos[2], 6, 60);
- g_AlienAttack[nScore] += (random(40) + 100);
- g_AlienAttack[aliensKilled]++;
- if(g_AlienAttack[aliensKilled] == 5)
- EndPlayerGame(playerid);
- break;
- }
- }
- }
- new str[30];
- format(str, sizeof(str), "~g~Angle: ~h~~h~%.1f", (80.0 - g_AlienAttack[fBeta]));
- TextDrawSetString(g_AlienAttack[TDAimingSys][3], str);
- format(str, sizeof(str), "~r~Ammo: ~h~~h~%i", g_AlienAttack[nAmmo]);
- TextDrawSetString(g_AlienAttack[TDAimingSys][2], str);
- }
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- for(new i; i < 4; i++)
- {
- if(g_AlienAttack[nMissle][i] == objectid)
- {
- g_AlienAttack[nMissle][i] = -1;
- DestroyObject(objectid);
- break;
- }
- }
- new Float:Pos[3];
- GetObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
- CreateExplosion(Pos[0], Pos[1], Pos[2], 6, 20);
- DestroyObject(objectid);
- if(Pos[0] == 1544.1556 && Pos[1] == -1353.3815 && Pos[2] == 329.4742)
- {
- g_AlienAttack[nHits]++;
- if(g_AlienAttack[nHits] == 5)
- {
- EndPlayerGame(g_AlienAttack[nActiceID]);
- SetPlayerHealth(g_AlienAttack[nActiceID], 100);
- }
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(g_AlienAttack[bActive] == true && g_AlienAttack[nActiceID] == playerid)
- EndPlayerGame(playerid);
- return 1;
- }
- public EndPlayerGame(playerid)
- {
- new
- str[120],
- strEnd[2][5] =
- {
- "UFO",
- "UFOs"
- };
- KillTimer(g_AlienAttack[aTimer]);
- format(str, sizeof(str), "~y~Score: ~h~~h~%i. ~n~~b~Destroyed %s ~h~~h~%i\
- ~n~~r~City damage ~h~~h~$%i", g_AlienAttack[nScore],
- (g_AlienAttack[aliensKilled] > 1) ? strEnd[1] : strEnd[0],
- g_AlienAttack[aliensKilled], g_AlienAttack[cityDemage]);
- GameTextForPlayer(playerid, str, 5000, 3);
- g_AlienAttack[bActive] = false;
- SpawnPlayer(playerid);
- for(new i; i < MAX_ALIENS; i++)
- {
- DestroyObject(g_AlienAttack[Aliens][i]);
- g_AlienAttack[Aliens][i] = -1;
- }
- for(new i; i < 4; i++)
- TextDrawHideForPlayer(playerid,g_AlienAttack[TDAimingSys][i]);
- return 1;
- }
- stock GetXYZ(Float:StartPosX, Float:StartPosY, Float:StartPosZ, &Float:NewX,
- &Float:NewY, &Float:NewZ, Float:alpha, Float:Dist, Float:Beta = 0.0)
- {
- NewX = floatadd(StartPosX, floatmul(floatsin(alpha, degrees), Dist));
- NewY = floatadd(StartPosY, floatmul(floatcos(alpha, degrees), Dist));
- NewZ = floatadd(StartPosZ, floatdiv(Dist, floattan(Beta, degrees)));
- }
- stock ExplodeInArea(Float:X, Float:Y, Float:Dist)
- {
- for(new i; i < MAX_ALIENS; i++)
- {
- if(g_AlienAttack[Aliens][i] == -1)
- continue;
- new Float:Pos[3];
- GetObjectPos(g_AlienAttack[Aliens][i], Pos[0], Pos[1], Pos[2]);
- Pos[0] -= X;
- Pos[1] -= Y;
- if (((Pos[0] < Dist) && (Pos[0] > -Dist)) && ((Pos[1] < Dist) &&
- (Pos[1] > -Dist)))
- {
- DestroyObject(g_AlienAttack[Aliens][i]);
- g_AlienAttack[Aliens][i] = -1;
- return 1;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement