Bulletje

Untitled

Feb 20th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.12 KB | None | 0 0
  1. /*
  2. Script by: Bullet
  3. Map by: MiD
  4. Mission Base: Last team standing
  5. Mission Type: Last team standing
  6. Mission Type ID: 5
  7. */
  8. //==============================================================================
  9. // Includes
  10. //==============================================================================
  11. #include <a_samp>
  12. #include <crashdetect>
  13. #include <float>
  14.  
  15. #include "..\filterscripts\MM\stuff\defines"
  16. #include "..\filterscripts\MM\stuff\serverkeymsg"
  17.  
  18. //==============================================================================
  19. // Defines
  20. //==============================================================================
  21.  
  22. #define MISSION_NAME "Chinatown"
  23. #define Health 99.0
  24. #define TEAM_DEFEND_NAME "Triads"
  25. #define TEAM_ATTACK_NAME "Rifas"
  26. #define MAX_MAP_OBJECTS 5
  27. #define VEHICLE_HEALTH 0
  28. #define CLASS_POSTION -2173.9895,678.0922,55.1655
  29. #define CLASS_CAMERA -2176.7952,671.7151,52.2522
  30. #define CLASS_FACING_AGNLE 177.9051
  31. #define START_TIME 20
  32.  
  33. //==============================================================================
  34. // Per mission functions
  35. //============================================================================== 20
  36.  
  37. enum ped_enum
  38. {
  39. TeamID,
  40. Skin,
  41. Float:SpawnX,
  42. Float:SpawnY,
  43. Float:SpawnZ,
  44. Float:SpawnAngle,
  45. SpawnInterior,
  46. VirtualWorld,
  47. Weapon1,
  48. Ammo1,
  49. Weapon2,
  50. Ammo2,
  51. Weapon3,
  52. Ammo3,
  53. };
  54.  
  55. new const PedInfo[][ped_enum] = {
  56. {TEAM_DEFEND,120,-2186.3608, 708.2258, 53.8906, 220.2056,0,0,WEAPON_SILENCED,150,WEAPON_SNIPER,300,0,0},
  57. {TEAM_ATTACK,175,-2180.5481, 605.8501, 35.1691, 45.7007,0,0,WEAPON_SILENCED,150,WEAPON_SNIPER,300,0,0}
  58. };
  59.  
  60. #if MAX_MAP_OBJECTS != 0
  61. new Object[MAX_MAP_OBJECTS];
  62.  
  63. CreateMap()
  64. {
  65. Object[0] = CreateObject(971,-2211.0471190,578.6273800,37.7339170,0.0000000,0.0000000,0.0000000); //
  66. Object[1] = CreateObject(971,-2243.0288090,605.9912110,43.3302610,0.0000000,0.0000000,-89.9999813); //
  67. Object[2] = CreateObject(971,-2242.8359380,644.8574830,52.0174330,0.0000000,0.0000000,-89.9999813); //
  68. Object[3] = CreateObject(1503,-2206.7944340,639.9891360,48.8316190,0.0000000,0.0000000,0.0000000); //
  69. Object[4] = CreateObject(1653,-2221.9274902,624.6632690,54.3969498,0.0000000,0.0000000,0.0000000); //
  70. }
  71. #endif
  72.  
  73. //==============================================================================
  74. // Basic vars
  75. //==============================================================================
  76.  
  77. new bool:MissionStarted;
  78. new bool:ObjectiveStarted;
  79. new bool:MissionCancelled;
  80.  
  81. native IsValidVehicle(vehicleid);
  82.  
  83. enum teamdata
  84. {
  85. Kills,
  86. Name[32],
  87. Members
  88. };
  89.  
  90. enum playerdata
  91. {
  92. UserName[MAX_PLAYER_NAME],
  93. bool:TeamChosen,
  94. TeamSelection,
  95. PlayerClassID,
  96. Counted,
  97. AllowedToSpawn
  98. };
  99.  
  100. new Team[2][teamdata];
  101. new PlayerMissionInfo[MAX_PLAYERS][playerdata];
  102.  
  103. //==============================================================================
  104. // Basic script
  105. //==============================================================================
  106.  
  107. main()
  108. {
  109. print("----------------------------------");
  110. print(" Mission: "MISSION_NAME" started.");
  111. print("----------------------------------\n");
  112. }
  113.  
  114. public OnGameModeInit()
  115. {
  116. MissionStarted= true;
  117.  
  118. format(Team[TEAM_DEFEND][Name],32,"%s",TEAM_DEFEND_NAME);
  119. format(Team[TEAM_ATTACK][Name],32,"%s",TEAM_ATTACK_NAME);
  120.  
  121. if(CallRemoteFunction("GetCurrentMissionCJWalk","")) UsePlayerPedAnims();
  122.  
  123. #if MAX_MAP_OBJECTS != 0
  124. CreateMap();
  125. #endif
  126.  
  127. for(new i=0; i<sizeof(PedInfo); i++)AddPlayerClassEx(PedInfo[i][TeamID],PedInfo[i][Skin],PedInfo[i][SpawnX],PedInfo[i][SpawnY],PedInfo[i][SpawnZ],PedInfo[i][SpawnAngle],0,0,0,0,0,0);
  128.  
  129. for(new i=0; i<MAX_VEHICLES; i++) if(IsValidVehicle(i)) SetVehicleHealth(i,VEHICLE_HEALTH);
  130. for(new i=0; i<MAX_PLAYERS; i++) PlayerMissionInfo[i][TeamSelection]= NO_TEAM;
  131.  
  132. SetTimer("StartMissionFunc",3000,false);
  133. return 1;
  134. }
  135.  
  136. FUNCTION StartMissionFunc()
  137. {
  138. CallRemoteFunction("StartMission","");
  139. SetTimer("CloseSpawns",1000*(START_TIME-3),false);
  140. ObjectiveStarted= true;
  141. return 1;
  142. }
  143.  
  144. FUNCTION CloseSpawns()
  145. {
  146. PlaySoundForAll(1057);
  147. if(Team[TEAM_DEFEND][Members] >= 1 && Team[TEAM_ATTACK][Members] >= 1)
  148. {
  149. GameTextForAll("~r~START THE BLOOD WAR!",1000,3);
  150. ObjectiveStarted= true;
  151. ToggleControllable(true);
  152. SendClientMessageToAll(COLOR_SERVER,""SERVER_KEY_MSG" The last team standing deathmatch has started. KILL THE OTHER TEAM!");
  153. CallRemoteFunction("ShowInfoBox", "iisi", -1, -1,"The last team standing deathmatch has started. KILL THE OTHER TEAM!",0);
  154. }
  155. else CallRemoteFunction("EndMission","");
  156. }
  157.  
  158. public OnGameModeExit()
  159. {
  160. #if MAX_MAP_OBJECTS != 0
  161. for(new i=0;i<MAX_MAP_OBJECTS;i++) DestroyObject(Object[i]);
  162. #endif
  163. return 1;
  164. }
  165.  
  166. public OnPlayerDisconnect(playerid)
  167. {
  168. if(PlayerMissionInfo[playerid][TeamSelection] != NO_TEAM && PlayerMissionInfo[playerid][Counted])
  169. {
  170. Team[PlayerMissionInfo[playerid][TeamSelection]][Members] --;
  171. CallRemoteFunction("TdmUpdate","sssdd","Players Alive",Team[TEAM_DEFEND][Name],Team[TEAM_ATTACK][Name],Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  172. if(Team[PlayerMissionInfo[playerid][TeamSelection]][Members] == 0 && ObjectiveStarted) CallRemoteFunction("EndMission","");
  173. }
  174. return 1;
  175. }
  176.  
  177. public OnPlayerRequestClass(playerid,classid)
  178. {
  179. SetPlayerPos(playerid,CLASS_POSTION);
  180. SetPlayerCameraPos(playerid,CLASS_CAMERA);
  181. SetPlayerCameraLookAt(playerid,CLASS_POSTION);
  182. SetPlayerFacingAngle(playerid,CLASS_FACING_AGNLE);
  183.  
  184. CallRemoteFunction("TdmHide","i",playerid);
  185. CallRemoteFunction("ShowClassSelection","iisiii",playerid, PedInfo[classid][TeamID],Team[PedInfo[classid][TeamID]][Name], PedInfo[classid][Weapon1], PedInfo[classid][Weapon2], PedInfo[classid][Weapon3]);
  186.  
  187. if(PlayerMissionInfo[playerid][Counted] && PlayerMissionInfo[playerid][TeamSelection] != NO_TEAM)
  188. {
  189. Team[PlayerMissionInfo[playerid][TeamSelection]][Members]--;
  190. PlayerMissionInfo[playerid][Counted] = false;
  191. CallRemoteFunction("TdmUpdate","sssdd","Players Alive",Team[TEAM_DEFEND][Name],Team[TEAM_ATTACK][Name],Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  192. }
  193.  
  194. PlayerMissionInfo[playerid][TeamSelection] = PedInfo[classid][TeamID];
  195. PlayerMissionInfo[playerid][PlayerClassID]=classid;
  196.  
  197. return 1;
  198. }
  199.  
  200. public OnPlayerRequestSpawn(playerid)
  201. {
  202. new opp_team = (PlayerMissionInfo[playerid][TeamSelection] == 1)? 0:1;
  203. if(Team[PlayerMissionInfo[playerid][TeamSelection]][Members] > Team[opp_team][Members])
  204. {
  205. CallRemoteFunction("ShowInfoBox", "iisi", playerid, -1,"This Team is full, choose another!",0);
  206. return 0;
  207. }
  208. return 1;
  209. }
  210.  
  211. public OnPlayerSpawn(playerid)
  212. {
  213. CallRemoteFunction("TdmShow","i",playerid);
  214. CallRemoteFunction("TdmUpdate","sssdd","Players Alive",Team[TEAM_DEFEND][Name],Team[TEAM_ATTACK][Name],Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  215. new string[124];
  216. if(CallRemoteFunction("GetSpectateStatus","d",playerid)) return CallRemoteFunction("SpecOffAdmin","d",playerid);
  217. if(!CallRemoteFunction("GetJailedStatus","d",playerid))
  218. {
  219. SetPlayerPos(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnX],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnY],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnZ]);
  220. SetPlayerFacingAngle(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnAngle]);
  221. SetPlayerInterior(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnInterior]);
  222. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon1],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo1]);
  223. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon2],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo2]);
  224. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon3],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo3]);
  225.  
  226. if(ObjectiveStarted && !PlayerMissionInfo[playerid][AllowedToSpawn])
  227. {
  228. SetPlayerVirtualWorld(playerid,2);
  229. SetPlayerInterior(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnInterior]);
  230. SetPlayerColor(playerid,COLOR_GREY);
  231. CallRemoteFunction("OnPlayerMissionComplete","d",playerid);
  232. }
  233. else
  234. {
  235. if(!ObjectiveStarted) TogglePlayerControllable(playerid,false);
  236. SetPlayerVirtualWorld(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][VirtualWorld]);
  237. if(!PlayerMissionInfo[playerid][Counted])
  238. {
  239. Team[PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][TeamID]][Members]++;
  240. PlayerMissionInfo[playerid][Counted]= true;
  241. }
  242.  
  243. CallRemoteFunction("updateLTS","dd",Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  244. PlayerMissionInfo[playerid][TeamChosen] = true;
  245. new opp_team = (PlayerMissionInfo[playerid][TeamSelection] == 1)? 0:1;
  246. format(string,sizeof(string),"You have chosen team %s, your mission is to kill %s.",Team[PlayerMissionInfo[playerid][TeamSelection]][Name],Team[opp_team][Name]);
  247. CallRemoteFunction("ShowInfoBox", "iisi", playerid, -1,string,0);
  248. format(string,sizeof(string),"~r~~h~Eliminate ~w~%s.",Team[opp_team][Name]);
  249. CallRemoteFunction("ShowInfoText", "iisi", playerid, -1,string,0);
  250. PlayerMissionInfo[playerid][AllowedToSpawn]= false;
  251. SetPlayerTeam(playerid,PlayerMissionInfo[playerid][TeamSelection]);
  252. if(PlayerMissionInfo[playerid][TeamSelection] == TEAM_ATTACK) SetPlayerColor(playerid,COLOR_TEAM_ATTACK);
  253. else SetPlayerColor(playerid,COLOR_TEAM_DEFEND);
  254. CallRemoteFunction("UpdateAliveState","ii",playerid,1);
  255. }
  256. }
  257.  
  258.  
  259. SetPlayerHealth(playerid,Health);
  260. CallRemoteFunction("TdmUpdate","sssdd","Players Alive",Team[TEAM_DEFEND][Name],Team[TEAM_ATTACK][Name],Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  261. return 1;
  262. }
  263.  
  264. public OnPlayerDeath(playerid, killerid, reason)
  265. {
  266. if(!MissionStarted)
  267. {
  268. PlayerMissionInfo[playerid][AllowedToSpawn]= true;
  269. return 1;
  270. }
  271. if(killerid != INVALID_PLAYER_ID && PlayerMissionInfo[killerid][TeamSelection] != NO_TEAM)
  272. {
  273. Team[PlayerMissionInfo[killerid][TeamSelection]][Kills]++;
  274. SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
  275. }
  276. if(PlayerMissionInfo[playerid][Counted] && PlayerMissionInfo[playerid][TeamSelection] != NO_TEAM)
  277. {
  278. Team[PlayerMissionInfo[playerid][TeamSelection]][Members]--;
  279. PlayerMissionInfo[playerid][Counted]= false;
  280. if(Team[PlayerMissionInfo[playerid][TeamSelection]][Members] == 0) CallRemoteFunction("EndMission","");
  281. }
  282. CallRemoteFunction("UpdateAliveState","ii",playerid,0);
  283. CallRemoteFunction("TdmUpdate","sssdd","Players Alive",Team[TEAM_DEFEND][Name],Team[TEAM_ATTACK][Name],Team[TEAM_DEFEND][Members],Team[TEAM_ATTACK][Members]);
  284. return 1;
  285. }
  286.  
  287. FUNCTION EndTheMission()
  288. {
  289. if(!MissionStarted) return 1;
  290. MissionStarted= false;
  291. if(!MissionCancelled && !ObjectiveStarted)
  292. {
  293. new string[128];
  294. new amount= 10000;
  295. new winning_team;
  296. if(Team[TEAM_DEFEND][Members] == Team[TEAM_ATTACK][Members]) { winning_team = 2; }
  297. else if(Team[TEAM_DEFEND][Members] > Team[TEAM_ATTACK][Members]) { winning_team = 0; }
  298. else { winning_team = 1; }
  299.  
  300. if(winning_team != 2 && ObjectiveStarted)
  301. {
  302. amount +=Team[winning_team][Kills]*100;
  303. format(string,sizeof(string),""SERVER_KEY_MSG" %s has won the last team standing deathmatch! Reward: $%d",Team[winning_team][Name],amount);
  304. CallRemoteFunction("IRC_SendMessage","ss",string,IRC_SERVER_COLOR);
  305. SendClientMessageToAll(COLOR_SERVER,string);
  306. for(new i=0,j=GetPlayerPoolSize(); i <= j; i++)
  307. {
  308. if(PlayerMissionInfo[i][TeamSelection] == winning_team && PlayerMissionInfo[i][TeamChosen])
  309. {
  310. PlayerPlaySound(i,3200,0,0,0);
  311. CallRemoteFunction("GivePlayerCash","ii",i,amount);
  312. CallRemoteFunction("PlayerMissionStats","dd",i,0);
  313. }
  314. if(PlayerMissionInfo[i][TeamSelection] != winning_team && PlayerMissionInfo[i][TeamChosen])
  315. {
  316. PlayerPlaySound(i,17004,0,0,0);
  317. GameTextForPlayer(i,"~R~MISSION FAILED~w~!",3000,3);
  318. CallRemoteFunction("PlayerMissionStats","dd",i,1);
  319. }
  320. }
  321. }
  322. else
  323. {
  324. PlaySoundForAll(1058);
  325. format(string,sizeof(string),""SERVER_KEY_MSG" IT'S A DRAW! No team has won the last team standing deathmatch.");
  326. SendClientMessageToAll(COLOR_SERVER,string);
  327. CallRemoteFunction("IRC_SendMessage","ss",string,IRC_SERVER_COLOR);
  328. for(new i=0,j=GetPlayerPoolSize(); i <= j; i++)
  329. {
  330. if(PlayerMissionInfo[i][TeamChosen])
  331. {
  332. CallRemoteFunction("PlayerMissionStats","dd",i,2);
  333. }
  334. }
  335. }
  336. }
  337. else
  338. {
  339. PlaySoundForAll(1058);
  340. SendClientMessageToAll(COLOR_SERVER,""SERVER_KEY_MSG" The mission has been cancelled.");
  341. CallRemoteFunction("IRC_SendMessage","ss",""SERVER_KEY_MSG" The mission has been cancelled.",IRC_SERVER_COLOR);
  342. CallRemoteFunction("ShowInfoBox", "iisi", -1, -1,"The mission has been cancelled.",0);
  343. GameTextForAll("~R~MISSION CANCELLED~w~!",3000,3);
  344. }
  345.  
  346. return 1;
  347. }
  348.  
  349. //==============================================================================
  350. // Mission functions
  351. //==============================================================================
  352.  
  353. PlaySoundForAll(sound)
  354. {
  355. for (new i=0,j=GetPlayerPoolSize(); i <=j ; i++)
  356. {
  357. if(IsPlayerConnected(i)) PlayerPlaySound(i,sound,0,0,0);
  358. }
  359. }
  360.  
  361.  
  362. ToggleControllable(control)
  363. {
  364. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  365. {
  366. if(IsPlayerConnected(i))
  367. {
  368. if(CallRemoteFunction("GetAliveState","i",i)) TogglePlayerControllable(i,control);
  369. }
  370. }
  371. return 1;
  372. }
  373.  
  374. //==============================================================================
  375. // Important functions required
  376. //==============================================================================
  377.  
  378. FUNCTION CancelTheMission()
  379. {
  380. MissionCancelled= true;
  381. return 1;
  382. }
  383.  
  384. FUNCTION OnPlayerNameRecieve(playerid,name[])
  385. {
  386. format(PlayerMissionInfo[playerid][UserName],MAX_PLAYER_NAME,"%s",name);
  387. return 1;
  388. }
  389.  
  390. FUNCTION MissionObjectiveStarted() return ObjectiveStarted;
  391.  
  392. FUNCTION OnPlayerRespawned(playerid)
  393. {
  394. if(PlayerMissionInfo[playerid][Counted])
  395. {
  396. Team[PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][TeamID]][Members]--;
  397. PlayerMissionInfo[playerid][Counted]= false;
  398. }
  399. PlayerMissionInfo[playerid][AllowedToSpawn]= true;
  400. return 1;
  401. }
Add Comment
Please, Sign In to add comment