Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <zcmd>
- #include <peds>
- main()
- {
- print("The Long Night | Zombie mod loaded...");
- }
- #define DETECTION_RANGE 20.0//range at which a zombie will start chasing the playe
- //Recomendation: must be smaller or less than 20.0 for not colliding with other obstacles
- new timer;
- new zombieskins[] =//add your zombie skins here (these are mine)
- {
- 64, 77, 78, 79, 134, 135, 136, 137, 158, 159, 160, 162, 168, 181, 195, 200, 212, 213, 222, 230, 239, 241, 256
- };
- public OnGameModeInit()
- {
- //short form of AddPlayerClass !:D!
- #define CLASS(%1) AddPlayerClass(%1, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0)
- //addming classes
- CLASS(274);
- CLASS(275);
- CLASS(276);
- CLASS(277);
- CLASS(278);
- CLASS(279);
- CLASS(280);
- CLASS(281);
- CLASS(282);
- CLASS(283);
- CLASS(284);
- CLASS(285);
- CLASS(286);
- CLASS(287);
- CLASS(288);
- //0.3.7 skins
- CLASS(300);
- CLASS(301);
- CLASS(302);
- CLASS(306);
- CLASS(307);
- CLASS(308);
- CLASS(309);
- CLASS(310);
- CLASS(311);
- //lets create our PEDS/Zombies!
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1809.23, -1079.08, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1797.29, -1078.93, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1805.85, -1071.70, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1800.51, -1075.48, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1797.01, -1081.59, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1787.35, -1083.40, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1785.68, -1077.03, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1776.17, -1059.98, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1784.24, -1054.39, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1788.60, -1057.20, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1791.74, -1055.42, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1773.69, -1054.01, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1796.42, -1043.25, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1790.72, -1038.78, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1792.10, -1044.12, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1774.53, -1028.32, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1775.90, -1036.86, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1763.08, -1029.73, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1754.34, -1041.06, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1742.77, -1032.41, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1737.53, -1010.72, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1740.91, -1013.66, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1714.65, -1026.30, 23.91, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1707.39, -1035.04, 23.90, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1706.72, -1050.50, 23.90, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1711.54, -1060.69, 23.90, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1725.40, -1054.32, 23.93, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1741.41, -1051.23, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1750.03, -1054.20, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1750.85, -1064.50, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1752.79, -1078.91, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1744.83, -1080.97, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1724.20, -1074.95, 23.92, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1698.17, -1086.85, 23.90, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1679.38, -1081.74, 23.91, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1673.91, -1066.01, 23.89, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1649.62, -1065.80, 23.96, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1654.24, -1061.61, 24.62, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1665.19, -1060.98, 24.64, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1660.93, -1049.00, 24.54, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1656.86, -1028.19, 24.37, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1661.96, -1018.71, 24.63, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1685.85, -1019.39, 24.51, random(360));
- PED_Connect(zombieskins[random(sizeof(zombieskins))], 1695.96, -1019.97, 24.67, random(360));
- new count;
- for(new i; i < MAX_PEDS; i++)
- {
- if(PED_IsConnected(i))
- {
- PED_SetWalkingStyle(i, random(13));//random walking style
- count += 1;
- }
- }
- //printing total zombies loaded
- printf("%d zombies loaded...", count);
- timer = SetTimer("OnZombiesUpdate", 1000, true);
- SetWeather(9);//foggy
- SetWorldTime(0);//night
- return 1;
- }
- public OnGameModeExit()
- {
- SetGameModeText("Zombie Mode");
- //disconnecting all peds after server shuts
- for(new i; i < MAX_PEDS; i++)
- {
- if(PED_IsConnected(i))
- {
- PED_Disconnect(i);
- }
- }
- //destroy the timer
- KillTimer(timer);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- EnablePlayerCameraTarget(playerid, 1);//enabling targets
- GameTextForPlayer(playerid, "~r~The ~h~Long ~h~Night", 10 * 1000, 1);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetPlayerPos(playerid, 1834.1207,-1073.7755,41.5701);
- SetPlayerFacingAngle(playerid, 89.0617);
- SetPlayerCameraPos(playerid, 1827.1591, -1074.2195, 42.0983);
- SetPlayerCameraLookAt(playerid, 1828.1554, -1074.2256, 41.9383);
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- GameTextForPlayer(playerid, "~r~Kill ~h~the ~h~zombie!", 10 * 1000, 1);
- SetPlayerInterior(playerid, 0);
- SetPlayerPos(playerid, 1841.9462,-1050.7052,25.1974);
- SetPlayerFacingAngle(playerid, 82.9319);
- SetPlayerHealth(playerid, 100.0);
- ResetPlayerWeapons(playerid);
- GivePlayerWeapon(playerid, 24, 100);
- return 1;
- }
- forward OnZombiesUpdate();
- public OnZombiesUpdate()
- {
- new Float:pos[3];
- for(new i; i < MAX_PEDS; i++)
- {
- if(PED_IsConnected(i))
- {
- if(PED_GetFollowingPlayer(i) != INVALID_PLAYER_ID)//if the zombie already following a players
- {
- GetPlayerPos(PED_GetFollowingPlayer(i), pos[0], pos[1], pos[2]);
- if(PED_IsInRangeOfPoint(i, 2.5, pos[0], pos[1], pos[2]))//if the player is so close to zombie, deduct player's health
- {
- PlayerPlaySound(PED_GetFollowingPlayer(i), 5206 , 0.0, 0.0, 0.0);
- new Float:ar;
- GetPlayerArmour(PED_GetFollowingPlayer(i), ar);
- new Float:hp;
- GetPlayerHealth(PED_GetFollowingPlayer(i), hp);
- if(ar > 0.0) SetPlayerArmour(PED_GetFollowingPlayer(i), ar - 10.0);//deduct armour
- else SetPlayerHealth(PED_GetFollowingPlayer(i), hp - 10.0);//deduct health
- PED_Stop(i);
- PED_ApplyAnimation(i, "WAYFARER", "WF_hit", 3.0, 0, 0, 0, 0, 0);
- continue;
- }
- else
- {
- for(new x; x <= GetPlayerPoolSize(); x++)
- {
- if(IsPlayerConnected(x))
- {
- GetPlayerPos(x, pos[0], pos[1], pos[2]);
- if(PED_IsInRangeOfPoint(i, DETECTION_RANGE, pos[0], pos[1], pos[2]))//if the player is in detection range, then let zombie follow the player
- {
- PED_FollowPlayer(i, x);
- break;
- }
- else if(x >= GetPlayerPoolSize())
- {
- PED_Stop(i);//stop the ped from moving!
- }
- }
- }
- }
- }
- else
- {
- for(new x; x <= GetPlayerPoolSize(); x++)
- {
- if(IsPlayerConnected(x))
- {
- GetPlayerPos(x, pos[0], pos[1], pos[2]);
- if(PED_IsInRangeOfPoint(i, DETECTION_RANGE, pos[0], pos[1], pos[2]))//if the player is in detection range, then let zombie follow the player
- {
- PED_FollowPlayer(i, x);
- break;
- }
- }
- }
- if(PED_GetFollowingPlayer(i) == INVALID_PLAYER_ID)//if no one near:
- {
- //random animations, just for the sake of realisticity
- GetPlayerPos(i, pos[0], pos[1], pos[2]);
- switch(random(2))
- {
- case 0: PED_GotoPoint(i, pos[0] + random(7), pos[1], pos[2], true);
- case 1: PED_GotoPoint(i, pos[0] - random(7), pos[1], pos[2], true);
- }
- }
- }
- }
- }
- return 1;
- }
- CMD:kill(playerid) return SetPlayerHealth(playerid, 0.0);
- public PED_OnReachDestination(pedid, Float:x, Float:y, Float:z)
- {
- if(PED_GetFollowingPlayer(pedid) == INVALID_PLAYER_ID)
- {
- new Float:pos[3];
- GetPlayerPos(pedid, pos[0], pos[1], pos[2]);
- switch(random(2))
- {
- case 0: PED_GotoPoint(pedid, pos[0] + 5.0, pos[1], pos[2], true);
- case 1: PED_GotoPoint(pedid, pos[0], pos[1] + 5.0, pos[2], true);
- }
- }
- return 1;
- }
- public PED_OnTakeDamage(pedid, issuerid, weaponid, Float:damage)
- {
- return 1;
- }
- public PED_OnDeath(pedid, killerid, weaponid)
- {
- GivePlayerMoney(killerid, 100);
- GameTextForPlayer(killerid, "~g~+100~h~$", 2000, 1);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment