Advertisement
Guest User

Hot Property

a guest
Aug 9th, 2016
687
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.54 KB | None | 0 0
  1. #define FILTERSCRIPT
  2. #include <a_samp>
  3. #include <sort-inline> // by Slice - http://forum.sa-mp.com/showthread.php?t=602584
  4. #include <streamer> // by Incognito - http://forum.sa-mp.com/showthread.php?t=102865
  5.  
  6. #define EVENT_MIN_PLAYERS (5) // how many players are needed for the event to begin (Default: 5)
  7. #define EVENT_INTERVAL (30) // time required to start the event again, in minutes (Default: 30)
  8. #define EVENT_TIME (10) // event time, in minutes (Default: 10)
  9. #define EVENT_REWARD (10000) // reward for the winners, will increase by tier(gold, silver, bronze) (Default: 10000)
  10. #define UPDATE_DELAY (150) // briefcase carrier icon update delay, in milliseconds (Default: 150)
  11. #define CASE_MODEL (1210) // briefcase pickup model, you can also use 19624 (Default: 1210)
  12.  
  13. enum E_BRIEFCASE
  14. {
  15. bcPickup,
  16. bcIcon,
  17. bcTimer,
  18. bcTimeLeft,
  19. bcCarrier
  20. }
  21.  
  22. enum E_BCLOCATION
  23. {
  24. locationName[32],
  25. Float: locationX,
  26. Float: locationY,
  27. Float: locationZ
  28. }
  29.  
  30. new
  31. OnlinePlayers,
  32. BriefcaseData[E_BRIEFCASE];
  33.  
  34. new
  35. Text: EventTitle,
  36. Text: EventPlaces[3],
  37. Text: EventTime;
  38.  
  39. new
  40. bool: CarryingBriefcase[MAX_PLAYERS],
  41. BriefcaseTime[MAX_PLAYERS],
  42. PlayerText: EventTimePlayer[MAX_PLAYERS];
  43.  
  44. new
  45. Float: RewardMultipliers[] = {1.5, 1.25, 1.0};
  46. // gold(50%), silver(25%), bronze(0%) increase
  47.  
  48. new
  49. BriefcaseLocations[][E_BCLOCATION] = {
  50. {"Farm", 22.3, 17.4, 5.0},
  51. {"Area 51", 302.2160, 1955.8740, 17.6406},
  52. {"Flying School", 415.5471, 2503.8643, 16.9425},
  53. {"NSA HQ", -317.4946, 1523.1005, 75.3594}
  54. };
  55.  
  56. ConvertToMinutes(time)
  57. {
  58. // http://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
  59. new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
  60. format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
  61. return string;
  62. }
  63.  
  64. Briefcase_InitPlayer(playerid)
  65. {
  66. CarryingBriefcase[playerid] = false;
  67. BriefcaseTime[playerid] = 0;
  68.  
  69. EventTimePlayer[playerid] = CreatePlayerTextDraw(playerid, 146.000000, 398.000000, "Your Time: 00:00");
  70. PlayerTextDrawBackgroundColor(playerid, EventTimePlayer[playerid], 255);
  71. PlayerTextDrawFont(playerid, EventTimePlayer[playerid], 1);
  72. PlayerTextDrawLetterSize(playerid, EventTimePlayer[playerid], 0.200000, 1.000000);
  73. PlayerTextDrawColor(playerid, EventTimePlayer[playerid], -1);
  74. PlayerTextDrawSetOutline(playerid, EventTimePlayer[playerid], 1);
  75. PlayerTextDrawSetProportional(playerid, EventTimePlayer[playerid], 1);
  76. PlayerTextDrawSetSelectable(playerid, EventTimePlayer[playerid], 0);
  77.  
  78. if(BriefcaseData[bcTimeLeft] > 0)
  79. {
  80. TextDrawShowForPlayer(playerid, EventTitle);
  81. for(new i; i < 3; i++) TextDrawShowForPlayer(playerid, EventPlaces[i]);
  82. TextDrawShowForPlayer(playerid, EventTime);
  83. }
  84.  
  85. return 1;
  86. }
  87.  
  88. Briefcase_Drop(playerid, reset_time = 0)
  89. {
  90. if(CarryingBriefcase[playerid])
  91. {
  92. CarryingBriefcase[playerid] = false;
  93. BriefcaseData[bcCarrier] = -1;
  94.  
  95. new string[128], name[MAX_PLAYER_NAME];
  96. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  97. format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}%s(%d) dropped the briefcase.", name, playerid);
  98. SendClientMessageToAll(0x3498DBFF, string);
  99.  
  100. new Float: x, Float: y, Float: z;
  101. GetPlayerPos(playerid, x, y, z);
  102.  
  103. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_X, x);
  104. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Y, y);
  105. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Z, z + 2.0);
  106.  
  107. BriefcaseData[bcPickup] = CreateDynamicPickup(CASE_MODEL, 1, x, y, z);
  108. }
  109.  
  110. if(reset_time) BriefcaseTime[playerid] = 0;
  111. return 1;
  112. }
  113.  
  114. forward StartBriefcaseEvent();
  115. public StartBriefcaseEvent()
  116. {
  117. if(OnlinePlayers < EVENT_MIN_PLAYERS) {
  118. SendClientMessageToAll(0x3498DBFF, "[HOT PROPERTY] {FFFFFF}Not enough players on the server for the event to start.");
  119. }else{
  120. KillTimer(BriefcaseData[bcTimer]);
  121.  
  122. new id = random(sizeof(BriefcaseLocations));
  123. BriefcaseData[bcPickup] = CreateDynamicPickup(CASE_MODEL, 1, BriefcaseLocations[id][locationX], BriefcaseLocations[id][locationY], BriefcaseLocations[id][locationZ]);
  124. BriefcaseData[bcIcon] = CreateDynamicMapIcon(BriefcaseLocations[id][locationX], BriefcaseLocations[id][locationY], BriefcaseLocations[id][locationZ], 52, 0, .streamdistance = 5000.0, .style = MAPICON_GLOBAL);
  125. BriefcaseData[bcTimeLeft] = EVENT_TIME * 60;
  126. BriefcaseData[bcTimer] = SetTimer("EndBriefcaseEvent", 1000, true);
  127.  
  128. new string[128];
  129. format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}The briefcase spawned at {F1C40F}%s{FFFFFF}, go get it!", BriefcaseLocations[id][locationName]);
  130. SendClientMessageToAll(0x3498DBFF, string);
  131.  
  132. TextDrawShowForAll(EventTitle);
  133.  
  134. for(new x; x < 3; x++)
  135. {
  136. TextDrawSetString(EventPlaces[x], "_");
  137. TextDrawShowForAll(EventPlaces[x]);
  138. }
  139.  
  140. for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  141. {
  142. if(!IsPlayerConnected(i)) continue;
  143. PlayerTextDrawSetString(i, EventTimePlayer[i], "Your Time: 00:00");
  144. PlayerTextDrawShow(i, EventTimePlayer[i]);
  145. }
  146.  
  147. TextDrawShowForAll(EventTime);
  148. }
  149.  
  150. return 1;
  151. }
  152.  
  153. forward EndBriefcaseEvent();
  154. public EndBriefcaseEvent()
  155. {
  156. new string[100], name[MAX_PLAYER_NAME], ranks[3][4] = {"1st", "2nd", "3rd"}, idx;
  157.  
  158. if(BriefcaseData[bcTimeLeft] > 1) {
  159. BriefcaseData[bcTimeLeft]--;
  160.  
  161. format(string, sizeof(string), "Event Time: %s%s", (BriefcaseData[bcTimeLeft] <= 10) ? ("~r~") : ("~w~"), ConvertToMinutes(BriefcaseData[bcTimeLeft]));
  162. TextDrawSetString(EventTime, string);
  163.  
  164. if(IsPlayerConnected(BriefcaseData[bcCarrier]))
  165. {
  166. BriefcaseTime[ BriefcaseData[bcCarrier] ]++;
  167.  
  168. format(string, sizeof(string), "Your Time: %s", ConvertToMinutes(BriefcaseTime[ BriefcaseData[bcCarrier] ]));
  169. PlayerTextDrawSetString(BriefcaseData[bcCarrier], EventTimePlayer[ BriefcaseData[bcCarrier] ], string);
  170. }
  171.  
  172. for(new i; i < 3; i++) TextDrawSetString(EventPlaces[i], "_");
  173.  
  174. new PlayerArray<compare_times>;
  175. sortPlayersInline compare_times => (R = l > r)
  176. {
  177. R = BriefcaseTime[l] > BriefcaseTime[r];
  178. }
  179.  
  180. forPlayerArray (compare_times => playerid)
  181. {
  182. if(idx == 3) break;
  183. if(BriefcaseTime[playerid] == 0) break;
  184. GetPlayerName(playerid, name, 24);
  185. format(string, sizeof(string), "%s: %s (%s)", ranks[idx], name, ConvertToMinutes(BriefcaseTime[playerid]));
  186. TextDrawSetString(EventPlaces[idx], string);
  187. idx++;
  188. }
  189. }else if(BriefcaseData[bcTimeLeft] == 1) {
  190. if(OnlinePlayers >= EVENT_MIN_PLAYERS)
  191. {
  192. new PlayerArray<top_times>;
  193. sortPlayersInline top_times => (R = l > r)
  194. {
  195. R = BriefcaseTime[l] > BriefcaseTime[r];
  196. }
  197.  
  198. new reward;
  199. forPlayerArray (top_times => playerid)
  200. {
  201. if(idx == 3) break;
  202. if(BriefcaseTime[playerid] == 0) break;
  203. reward = floatround(EVENT_REWARD * RewardMultipliers[idx], floatround_floor);
  204. format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}You completed the event in %s position, {2ECC71}$%d {FFFFFF}rewarded.", ranks[idx], reward);
  205. SendClientMessage(playerid, 0x3498DBFF, string);
  206. GivePlayerMoney(playerid, reward);
  207. idx++;
  208. }
  209. }
  210.  
  211. for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  212. {
  213. if(!IsPlayerConnected(i)) continue;
  214. CarryingBriefcase[i] = false;
  215. BriefcaseTime[i] = 0;
  216.  
  217. PlayerTextDrawSetString(i, EventTimePlayer[i], "Your Time: 00:00");
  218. PlayerTextDrawHide(i, EventTimePlayer[i]);
  219. }
  220.  
  221. TextDrawHideForAll(EventTitle);
  222.  
  223. for(new x; x < 3; x++)
  224. {
  225. TextDrawSetString(EventPlaces[x], "_");
  226. TextDrawHideForAll(EventPlaces[x]);
  227. }
  228.  
  229. TextDrawHideForAll(EventTime);
  230.  
  231. DestroyDynamicPickup(BriefcaseData[bcPickup]);
  232. DestroyDynamicMapIcon(BriefcaseData[bcIcon]);
  233.  
  234. BriefcaseData[bcPickup] = BriefcaseData[bcIcon] = BriefcaseData[bcCarrier] = -1;
  235. BriefcaseData[bcTimeLeft] = 0;
  236. BriefcaseData[bcTimer] = SetTimer("StartBriefcaseEvent", EVENT_INTERVAL * 60000, true);
  237.  
  238. format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}Event over, next event will start in {F1C40F}%d {FFFFFF}minutes.", EVENT_INTERVAL);
  239. SendClientMessageToAll(0x3498DBFF, string);
  240. }
  241.  
  242. return 1;
  243. }
  244.  
  245. public OnFilterScriptInit()
  246. {
  247. EventTitle = TextDrawCreate(146.000000, 340.000000, "HOT PROPERTY");
  248. TextDrawBackgroundColor(EventTitle, 255);
  249. TextDrawFont(EventTitle, 2);
  250. TextDrawLetterSize(EventTitle, 0.260000, 1.400000);
  251. TextDrawColor(EventTitle, -1);
  252. TextDrawSetOutline(EventTitle, 1);
  253. TextDrawSetProportional(EventTitle, 1);
  254. TextDrawSetSelectable(EventTitle, 0);
  255.  
  256. EventPlaces[0] = TextDrawCreate(146.000000, 362.000000, "_");
  257. TextDrawBackgroundColor(EventPlaces[0], 255);
  258. TextDrawFont(EventPlaces[0], 1);
  259. TextDrawLetterSize(EventPlaces[0], 0.200000, 1.000000);
  260. TextDrawColor(EventPlaces[0], -238809089);
  261. TextDrawSetOutline(EventPlaces[0], 1);
  262. TextDrawSetProportional(EventPlaces[0], 1);
  263. TextDrawSetSelectable(EventPlaces[0], 0);
  264.  
  265. EventPlaces[1] = TextDrawCreate(146.000000, 374.000000, "_");
  266. TextDrawBackgroundColor(EventPlaces[1], 255);
  267. TextDrawFont(EventPlaces[1], 1);
  268. TextDrawLetterSize(EventPlaces[1], 0.200000, 1.000000);
  269. TextDrawColor(EventPlaces[1], -1465341697);
  270. TextDrawSetOutline(EventPlaces[1], 1);
  271. TextDrawSetProportional(EventPlaces[1], 1);
  272. TextDrawSetSelectable(EventPlaces[1], 0);
  273.  
  274. EventPlaces[2] = TextDrawCreate(146.000000, 386.000000, "_");
  275. TextDrawBackgroundColor(EventPlaces[2], 255);
  276. TextDrawFont(EventPlaces[2], 1);
  277. TextDrawLetterSize(EventPlaces[2], 0.200000, 1.000000);
  278. TextDrawColor(EventPlaces[2], -1772472065);
  279. TextDrawSetOutline(EventPlaces[2], 1);
  280. TextDrawSetProportional(EventPlaces[2], 1);
  281. TextDrawSetSelectable(EventPlaces[2], 0);
  282.  
  283. EventTime = TextDrawCreate(146.000000, 410.000000, "Event Time: 00:00");
  284. TextDrawBackgroundColor(EventTime, 255);
  285. TextDrawFont(EventTime, 1);
  286. TextDrawLetterSize(EventTime, 0.200000, 1.000000);
  287. TextDrawColor(EventTime, -1);
  288. TextDrawSetOutline(EventTime, 1);
  289. TextDrawSetProportional(EventTime, 1);
  290. TextDrawSetSelectable(EventTime, 0);
  291.  
  292. for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  293. {
  294. if(!IsPlayerConnected(i)) continue;
  295. Briefcase_InitPlayer(i);
  296. OnlinePlayers++;
  297. }
  298.  
  299. BriefcaseData[bcPickup] = BriefcaseData[bcIcon] = BriefcaseData[bcCarrier] = -1;
  300. BriefcaseData[bcTimer] = SetTimer("StartBriefcaseEvent", EVENT_INTERVAL * 60000, true);
  301. return 1;
  302. }
  303.  
  304. public OnFilterScriptExit()
  305. {
  306. TextDrawDestroy(EventTitle);
  307. for(new i; i < 3; i++) TextDrawDestroy(EventPlaces[i]);
  308. TextDrawDestroy(EventTime);
  309.  
  310. for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  311. {
  312. if(!IsPlayerConnected(i)) continue;
  313. PlayerTextDrawDestroy(i, EventTimePlayer[i]);
  314. }
  315.  
  316. return 1;
  317. }
  318.  
  319. public OnPlayerConnect(playerid)
  320. {
  321. Briefcase_InitPlayer(playerid);
  322. OnlinePlayers++;
  323. return 1;
  324. }
  325.  
  326. public OnPlayerDisconnect(playerid, reason)
  327. {
  328. Briefcase_Drop(playerid, 1);
  329. OnlinePlayers--;
  330.  
  331. PlayerTextDrawDestroy(playerid, EventTimePlayer[playerid]);
  332. return 1;
  333. }
  334.  
  335. public OnPlayerDeath(playerid, killerid, reason)
  336. {
  337. Briefcase_Drop(playerid);
  338. return 1;
  339. }
  340.  
  341. public OnPlayerUpdate(playerid)
  342. {
  343. // oh look it's that spooky callback
  344. if(BriefcaseData[bcCarrier] == playerid && CarryingBriefcase[playerid] && GetPVarInt(playerid, "briefcase_Update") < GetTickCount())
  345. {
  346. new Float: x, Float: y, Float: z;
  347. GetPlayerPos(playerid, x, y, z);
  348.  
  349. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_X, x);
  350. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Y, y);
  351. Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Z, z + 2.0);
  352.  
  353. SetPVarInt(playerid, "briefcase_Update", GetTickCount() + UPDATE_DELAY);
  354. }
  355.  
  356. return 1;
  357. }
  358.  
  359. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  360. {
  361. if(pickupid == BriefcaseData[bcPickup] && !CarryingBriefcase[playerid])
  362. {
  363. CarryingBriefcase[playerid] = true;
  364. BriefcaseData[bcCarrier] = playerid;
  365.  
  366. new string[128], name[MAX_PLAYER_NAME];
  367. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  368. format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}%s(%d) obtained the briefcase.", name, playerid);
  369. SendClientMessageToAll(0x3498DBFF, string);
  370.  
  371. DestroyDynamicPickup(BriefcaseData[bcPickup]);
  372. BriefcaseData[bcPickup] = -1;
  373. }
  374.  
  375. return 1;
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement