farmer_job.inc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. Farmer job by Desmond
  3. #define VEHICLE_TRACTOR (531)
  4. new bool:isPlayerFarming[MAX_PLAYERS];
  5. new PlayerBar:farmingProgressID[MAX_PLAYERS];
  6. new farmerVehicle[MAX_PLAYERS], bool:finishingFarming[MAX_PLAYERS]; // vehicle id of the tractor, second var is to determine if a player is delivering the harvest
  7. new farmingtimer[MAX_PLAYERS];
  8. forward cancelfarming(playerid);
  9. public cancelfarming(playerid)
  10. {
  11. DisablePlayerCheckpointEx(playerid);
  12. CP[playerid] = CHECKPOINT_NONE;
  13. isPlayerFarming[playerid] = false;
  14. finishingFarming[playerid] = false;
  15. SetPlayerProgressBarValue(playerid, farmingProgressID[playerid], 0);
  16. HidePlayerProgressBar(playerid, farmingProgressID[playerid]);
  17. KillTimer(farmingtimer[playerid]);
  18. if(IsValidVehicle(farmerVehicle[playerid])) DestroyVehicle(farmerVehicle[playerid]);
  19. return 1;
  20. }
  21. forward GetPlayerFarmingPayment(playerid);
  22. public GetPlayerFarmingPayment(playerid)
  23. {
  24. new level = GetPlayerJobLevel(playerid, PlayerInfo[playerid][pJob]);
  25. new pay = 0;
  26. switch(level)
  27. {
  28. case 1: pay = 1000;
  29. case 2: pay = 1500;
  30. case 3: pay = 2250;
  31. case 4: pay = 3250;
  32. case 5: pay = 3800;
  33. default: pay = 1000; // just in case
  34. }
  35. return pay;
  36. }
  37. Hook:farmer_OnGameModeInit()
  38. {
  39. iFarmer = CreateDynamicPickup(1239, 23, -40.0612, 26.5413, 3.1094);
  40. new Text3D:textFarmer = CreateDynamic3DTextLabel("Farmer Job\n{FFFFFF}/getjob", 0xFFFF91FF, -40.0612, 26.5413, 3.1094 +0.88, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100);
  41. #pragma unused textFarmer
  42. return 1;
  43. }
  44. Hook:farmer_OnPlayerConnect(playerid)
  45. {
  46. farmingProgressID[playerid] = CreatePlayerProgressBar(playerid, 290.0, 340.00, 65.0, 5.0, 0xFFFF00AA, 100.0, BAR_DIRECTION_RIGHT);
  47. isPlayerFarming[playerid] = false;
  48. finishingFarming[playerid] = false;
  49. return 1;
  50. }
  51. Hook:farmer_OnPlayerDisconnect(playerid, reason)
  52. {
  53. cancelfarming(playerid);
  54. DestroyPlayerProgressBar(playerid, farmingProgressID[playerid]);
  55. return 1;
  56. }
  57. Hook:f_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  58. {
  59. if((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
  60. {
  61. if(isPlayerFarming[playerid] != false)
  62. {
  63. if(GetPlayerProgressBarValue(playerid, farmingProgressID[playerid]) < 100)
  64. {
  65. SetPlayerProgressBarValue(playerid, farmingProgressID[playerid], GetPlayerProgressBarValue(playerid, farmingProgressID[playerid])+0.75);
  66. if(GetPlayerProgressBarValue(playerid, farmingProgressID[playerid]) >= 100)
  67. {
  68. SendClientMessage(playerid, -1, "You have harvested as much as you could.");
  69. SendClientMessage(playerid, COLOR_LIGHTBLUE, "Drive the tractor to the checkpoint in 60 seconds!");
  70. SendClientMessage(playerid, -1, "TIP - leaving the tractor will stop you from finishing to deliver.");
  71. HidePlayerProgressBar(playerid, farmingProgressID[playerid]);
  72. new Float:pos[3];
  73. GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  74. farmerVehicle[playerid] = CreateVehicle(VEHICLE_TRACTOR, pos[0], pos[1], pos[2], 0, 0, 0, -1);
  75. PutPlayerInVehicle(playerid, farmerVehicle[playerid], 0);
  76. finishingFarming[playerid] = true;
  77. CP[playerid] = CHECKPOINT_FARMING;
  78. SetPlayerCheckpointEx(playerid, 157.4377, -22.3081, 1.5781, 3);
  79. farmingtimer[playerid] = SetTimerEx("FarmingTimer", 60000, false, "i", playerid);
  80. }
  81. }
  82. }
  83. }
  84. return 1;
  85. }
  86. forward FarmingTimer(playerid);
  87. public FarmingTimer(playerid)
  88. {
  89. SendClientMessage(playerid, COLOR_GREY, "You have failed to deliver the harvest.");
  90. cancelfarming(playerid);
  91. return 1;
  92. }
  93. Hook:far_OnPlayerEnterCheckpoint(playerid)
  94. {
  95. if(CP[playerid] == CHECKPOINT_FARMING && finishingFarming[playerid])
  96. {
  97. new pay = GetPlayerFarmingPayment(playerid);
  98. new msg[100];
  99. GiveMoney(playerid, pay);
  100. format(msg, sizeof(msg), "You have received $%d for delivering the harvest!", pay);
  101. SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
  102. cancelfarming(playerid);
  103. }
  104. return 1;
  105. }
  106. Hook:farmer_OnPlayerExitVehicle(playerid, vehicleid)
  107. {
  108. if(isPlayerFarming[playerid] && finishingFarming[playerid])
  109. {
  110. cancelfarming(playerid);
  111. SendClientMessage(playerid, COLOR_GREY, "You have left the tractor and therefore failed the delivery.");
  112. }
  113. return 1;
  114. }
  115. CMD:startfarming(playerid, params[])
  116. {
  117. if(PlayerInfo[playerid][pJob] != JOB_FARMER) return SendClientMessage(playerid, COLOR_GREY, "You are not a farmer!");
  118. if(!IsPlayerInRangeOfPoint(playerid, 60, 2.3479, -62.3304, 3.1172)) return SendClientMessage(playerid, COLOR_GREY, "You must be around the farm area at the Blueberry Farm!");
  119. if(isPlayerFarming[playerid]) return SendClientMessage(playerid, COLOR_GREY, "You are already farming!");
  120. isPlayerFarming[playerid] = true;
  121. SetPlayerProgressBarValue(playerid, farmingProgressID[playerid], 0);
  122. ShowPlayerProgressBar(playerid, farmingProgressID[playerid]);
  123. SendClientMessage(playerid, -1, "You are now farming! Press {FF0000}SPACE {FFFFFF}repeatedly to keep harvesting.");
  124. return 1;
  125. }*/