Guest User

Dynamic creating jobs by Shomy

a guest
Feb 15th, 2018
1,714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.66 KB | None | 0 0
  1. /*
  2.  
  3. • Dynamic creating jobs by Shomy v0.2
  4. • Commands /createjob /createvehicle /deletejob and /deletecar
  5. • Required files in scriptfiles - "Jobs" and "VehicleForJobs"
  6.  
  7. • Report all bugs to the author.
  8.  
  9. */
  10.  
  11. #include < a_samp >
  12. #include < YSI\y_ini >
  13. #include < YSI\y_commands >
  14. #include < sscanf2 >
  15.  
  16. #define JOBS_FILE "/Jobs/%d.ini"
  17. #define JOBVEH_FILE "/VehiclesForJobs/%d.ini"
  18. #define MAX_JOBS 50
  19. #define MAX_JOBVEH 300
  20. #undef MAX_PLAYERS
  21. #define MAX_PLAYERS 50
  22.  
  23. #define COL_Job "{FF1414}"
  24. #define COL_BELA "{FFFFFF}"
  25.  
  26. #define SCM SendClientMessage
  27. #define SPD ShowPlayerDialog
  28.  
  29. #define DIALOG_JOB 1
  30.  
  31. enum jInfo {
  32.  
  33. Float:PosX,
  34. Float:PosY,
  35. Float:PosZ,
  36. Float:uPosX,
  37. Float:uPosY,
  38. Float:uPosZ,
  39. jName[ 40 ],
  40. Pay,
  41. uSkin,
  42. jID
  43. }
  44. enum vInfo {
  45.  
  46. Float:vPosX,
  47. Float:vPosY,
  48. Float:vPosZ,
  49. Float:vRotA,
  50. Color1,
  51. Color2,
  52. vModel,
  53. forJob
  54. }
  55.  
  56. new JobInfo[ MAX_JOBS ][ jInfo ], JobPickup[ sizeof(JobInfo) ], Text3D:JobLabel[ sizeof(JobInfo) ],
  57. JobVehInfo[ MAX_JOBVEH ][ vInfo ], VehC[ sizeof(JobVehInfo) ], Text3D:VehLabel[ sizeof(JobVehInfo) ], UniformaPickup[ sizeof(JobInfo) ], Text3D:UniformaLabel[ sizeof(JobInfo) ];
  58. new Job[ MAX_PLAYERS ], TookUniform[ MAX_PLAYERS ], CreatingJob[ MAX_PLAYERS ];
  59.  
  60. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  61.  
  62. if(dialogid == DIALOG_JOB) {
  63. if(response) {
  64. for(new i; i < MAX_JOBS; i++) {
  65. if(IsPlayerInRangeOfPoint(playerid, 6.0, JobInfo[ i ][ PosX ], JobInfo[ i ][ PosY ], JobInfo[ i ][ PosZ ])) {
  66. if(Job[ playerid ] != 0) return SCM(playerid, -1, "You aleardy have a job !");
  67. new str[ 70 ];
  68. format(str, sizeof(str), "Congratulations ! You've earned a job as a "COL_Job"%s.", JobInfo[ i ][ jName ]);
  69. SCM(playerid, -1, str);
  70. Job[ playerid ] = JobInfo[ i ][ jID ];
  71. }
  72. }
  73. }
  74. }
  75. return 1;
  76. }
  77.  
  78. public OnPlayerPickUpPickup(playerid, pickupid) {
  79.  
  80. for(new i; i < MAX_JOBS; i++) {
  81. if(pickupid == JobPickup[ i ]) {
  82. if(IsPlayerInRangeOfPoint(playerid, 6.0, JobInfo[ i ][ PosX ], JobInfo[ i ][ PosY ], JobInfo[ i ][ PosZ ])) {
  83. if(CreatingJob[ playerid ] == 0) {
  84. new str[ 65 ];
  85. format(str, sizeof(str), ""COL_Job"%s "COL_BELA"\nContract - 3h\nPay - %d$", JobInfo[ i ][ jName ], JobInfo[ i ][ Pay ]);
  86. SPD(playerid, DIALOG_JOB, DIALOG_STYLE_MSGBOX, ""COL_BELA"Job", str, "Accept","Exit");
  87. }
  88. }
  89. }
  90. }
  91. return 1;
  92. }
  93. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  94.  
  95. if(newkeys == KEY_YES) {
  96. if(CreatingJob[ playerid ] != 0) {
  97. new Float:X,Float:Y,Float:Z, i = CreatingJob[ playerid ];
  98. GetPlayerPos(playerid, X,Y,Z);
  99. UniformaPickup[ i ] = CreatePickup(1275, 1, X,Y,Z, -1);
  100. UniformaLabel[ i ] = Create3DTextLabel("/uniform", 0x007799FF, X,Y,Z, 15.0, 0, 0);
  101. JobInfo[ i ][ uPosX ] = X;
  102. JobInfo[ i ][ uPosY ] = Y;
  103. JobInfo[ i ][ uPosZ ] = Z;
  104. SaveJob(i);
  105. CreatingJob[ playerid ] = 0;
  106. SCM(playerid, -1, "You have successfully created a job. To create a vehicle - /createvehicle");
  107. }
  108. }
  109. return 1;
  110. }
  111. forward LoadJob(id, name[], value[]);
  112. public LoadJob(id, name[], value[]) {
  113.  
  114. INI_Float("X", JobInfo[ id ][ PosX ]);
  115. INI_Float("Y", JobInfo[ id ][ PosY ]);
  116. INI_Float("Z", JobInfo[ id ][ PosZ ]);
  117. INI_Float("uX", JobInfo[ id ][ uPosX ]);
  118. INI_Float("uY", JobInfo[ id ][ uPosY ]);
  119. INI_Float("uZ", JobInfo[ id ][ uPosZ ]);
  120. INI_String("Job_Name", JobInfo[ id ][ jName ], 40);
  121. INI_Int("Pay", JobInfo[ id ][ Pay ]);
  122. INI_Int("Skin", JobInfo[ id ][ uSkin ]);
  123. INI_Int("ID", JobInfo[ id ][ jID ]);
  124. return 1;
  125. }
  126. forward LoadVehJob(id, name[], value[]);
  127. public LoadVehJob(id, name[], value[]) {
  128.  
  129. INI_Float("X", JobVehInfo[ id ][ vPosX ]);
  130. INI_Float("Y", JobVehInfo[ id ][ vPosY ]);
  131. INI_Float("Z", JobVehInfo[ id ][ vPosZ ]);
  132. INI_Float("A", JobVehInfo[ id ][ vRotA ]);
  133. INI_Int("For_Job", JobVehInfo[ id ][ forJob ]);
  134. INI_Int("Model", JobVehInfo[ id ][ vModel ]);
  135. INI_Int("Color_1", JobVehInfo[ id ][ Color1 ]);
  136. INI_Int("Color_2", JobVehInfo[ id ][ Color2 ]);
  137. return 1;
  138. }
  139. public OnFilterScriptInit() {
  140.  
  141. print("= Dynamic Creating Jobs =\n\n = = = by Shomy = = =\n\n= Dynamic Creating Jobs =\n");
  142. for(new i; i < MAX_JOBS; i++) {
  143. new jFile[ 50 ], str[ 80 ];
  144. format(jFile, sizeof(jFile), JOBS_FILE, i);
  145. if(fexist(jFile)) {
  146. INI_ParseFile(jFile, "LoadJob", .bExtra = true, .extra = i);
  147. JobPickup[ i ] = CreatePickup(1210, 1, JobInfo[ i ][ PosX ],JobInfo[ i ][ PosY ],JobInfo[ i ][ PosZ ], -1);
  148. format(str,sizeof(str), ""COL_Job"[ "COL_BELA"%s "COL_Job"]\n"COL_BELA"Contract - "COL_Job"3h", JobInfo[ i ][ jName ]);
  149. JobLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, JobInfo[ i ][ PosX ],JobInfo[ i ][ PosY ],JobInfo[ i ][ PosZ ], 15.0, 0, 0);
  150. UniformaPickup[ i ] = CreatePickup(1275, 1, JobInfo[ i ][ uPosX ],JobInfo[ i ][ uPosY ],JobInfo[ i ][ uPosZ ], -1);
  151. UniformaLabel[ i ] = Create3DTextLabel("/uniform", 0x007799FF, JobInfo[ i ][ uPosX ],JobInfo[ i ][ uPosY ],JobInfo[ i ][ uPosZ ], 15.0, 0, 0);
  152. }
  153. }
  154. for(new i; i < MAX_JOBVEH; i++) {
  155. new jFile[ 50 ], str[ 55 ];
  156. format(jFile, sizeof(jFile), JOBVEH_FILE, i);
  157. if(fexist(jFile)) {
  158. INI_ParseFile(jFile, "LoadVehJob", .bExtra = true, .extra = i);
  159. VehC[ i ] = CreateVehicle(JobVehInfo[ i ][ vModel ], JobVehInfo[ i ][ vPosX ],JobVehInfo[ i ][ vPosY ],JobVehInfo[ i ][ vPosZ ],JobVehInfo[ i ][ vRotA ], JobVehInfo[ i ][ Color1 ], JobVehInfo[ i ][ Color2 ], -1);
  160. format(str, sizeof(str), ""COL_Job"[ "COL_BELA"%s "COL_Job"]", JobInfo[ i ][ jName ]);
  161. VehLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, JobVehInfo[ i ][ vPosX ],JobVehInfo[ i ][ vPosY ],JobVehInfo[ i ][ vPosZ ], 15.0, 0, 0);
  162. Attach3DTextLabelToVehicle( VehLabel[ i ], VehC[ i ], 0.0, 0.0, 0.0);
  163. }
  164. }
  165. return 1;
  166. }
  167. public OnPlayerStateChange(playerid, newstate, oldstate) {
  168. if(newstate == PLAYER_STATE_DRIVER) { if(Job[ playerid ] != JobVehInfo[ GetPlayerVehicleID(playerid) ][ forJob ]) { SCM(playerid, -1, "You can't drive this vehicle."); RemovePlayerFromVehicle(playerid); } }
  169. return 1;
  170. }
  171. public OnPlayerConnect(playerid) {
  172.  
  173. CreatingJob[ playerid ] = 0;
  174. TookUniform[ playerid ] = -1;
  175. return 1;
  176. }
  177.  
  178. YCMD:uniform(playerid, params[], help) {
  179.  
  180. for(new id; id < MAX_JOBS; id++) {
  181. if(IsPlayerInRangeOfPoint(playerid, 6.0, JobInfo[ id ][ uPosX ], JobInfo[ id ][ uPosY ], JobInfo[ id ][ uPosZ ])) {
  182. if(Job[ playerid ] == JobInfo[ id ][ jID ])
  183. {
  184. if(TookUniform[ playerid ] == -1) {
  185. TookUniform[ playerid ] = GetPlayerSkin(playerid);
  186. SetPlayerSkin(playerid, JobInfo[ id ][ uSkin ]);
  187. SCM(playerid, -1, "You took a uniform.");
  188. }
  189. else {
  190. SetPlayerSkin(playerid, TookUniform[ playerid ]);
  191. TookUniform[ playerid ] = -1;
  192. SCM(playerid, -1, "You took off your uniform.");
  193. }
  194. }
  195. else { new str[ 55 ]; format(str, sizeof(str), "You are not employed as %s.", JobInfo[ id ][ jName ]); SCM(playerid, -1, str); }
  196. }
  197. }
  198. return 1;
  199. }
  200. YCMD:createvehicle(playerid, params[], help) {
  201.  
  202. #pragma unused help
  203. if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "You aren't RCON admin.");
  204. new jid = NextJobVehID(MAX_JOBVEH), model, b1, b2, Float:X,Float:Y,Float:Z,Float:A, str[ 55 ], jFile[ 50 ], id;
  205. GetPlayerPos(playerid, X,Y,Z);
  206. GetPlayerFacingAngle(playerid, A);
  207. if(sscanf(params, "dddd", id, model, b1, b2)) return SCM(playerid, -1, "/createvehicle [ Job ID ] [ ID Vehicle ] [ Color 1 ] [ Color 2 ]");
  208. format(jFile, sizeof(jFile), JOBS_FILE, id);
  209. if(!fexist(jFile)) return SCM(playerid, -1, "ID of that job does not exists.");
  210. VehC[ jid ] = CreateVehicle(model, X, Y, Z, A, b1, b2, -1);
  211. format(str, sizeof(str), ""COL_Job"[ "COL_BELA"%s "COL_Job"]", JobInfo[ jid ][ jName ]);
  212. VehLabel[ jid ] = Create3DTextLabel(str, 0xFFFFFFFF, X,Y,Z, 15.0, 0, 0);
  213. Attach3DTextLabelToVehicle( VehLabel[ jid ], VehC[ jid ], 0.0, 0.0, 0.0);
  214. PutPlayerInVehicle(playerid, VehC[ jid ], 0);
  215. JobVehInfo[ jid ][ vPosX ] = X;
  216. JobVehInfo[ jid ][ vPosY ] = Y;
  217. JobVehInfo[ jid ][ vPosZ ] = Z;
  218. JobVehInfo[ jid ][ vRotA ] = A;
  219. JobVehInfo[ jid ][ forJob ] = id;
  220. JobVehInfo[ jid ][ vModel ] = model;
  221. JobVehInfo[ jid ][ Color1 ] = b1;
  222. JobVehInfo[ jid ][ Color2 ] = b2;
  223. SaveJobVeh(jid);
  224. SCM(playerid, -1, "You've created successfully a vehicle for job.");
  225. return 1;
  226. }
  227. YCMD:deletevehicle(playerid, params[], help) {
  228.  
  229. #pragma unused help
  230. #pragma unused params
  231. if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "You are not RCON admin.");
  232. if(!IsPlayerInAnyVehicle(playerid)) return SCM(playerid, -1, "You must be in the vehicle.");
  233. new vid = GetPlayerVehicleID(playerid), jFile[ 50 ];
  234. format(jFile, sizeof(jFile), JOBVEH_FILE, vid);
  235. if(!fexist(jFile)) return SCM(playerid, -1, "That car isn't for jobs.");
  236. fremove(jFile);
  237. DestroyVehicle(vid);
  238. Delete3DTextLabel(VehLabel[ vid ]);
  239. SCM(playerid, -1, "You've successfully deleted a vehicle.");
  240. return 1;
  241. }
  242. YCMD:deletejob(playerid, params[], help) {
  243.  
  244. new jid, jFile[ 50 ];
  245. if(sscanf(params, "d", jid)) return SCM(playerid, -1, "/deletejob [ ID ]");
  246. format(jFile, sizeof(jFile), JOBS_FILE, jid);
  247. if(!fexist(jFile)) return SCM(playerid, -1, "ID of that job doesn't exists.");
  248. fremove(jFile);
  249. DestroyPickup(JobPickup[ jid ]);
  250. Delete3DTextLabel(JobLabel[ jid ]);
  251. DestroyPickup(UniformaPickup[ jid ]);
  252. Delete3DTextLabel(UniformaLabel[ jid ]);
  253. SCM(playerid, -1, "You've successfully deleted a job.");
  254. return 1;
  255. }
  256. YCMD:createjob(playerid, params[], help) {
  257.  
  258. #pragma unused help
  259. if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "You are not RCON admin.");
  260. if(CreatingJob[ playerid ] != 0) return SCM(playerid, -1, "You're already creating a job. Go to the position of the uniform and press Y.");
  261. new ime[ 40 ], Float:X, Float:Y, Float:Z, i = NextJobID(MAX_JOBS), str[ 80 ], pay, uskin;
  262. if(sscanf(params, "dds[40]", pay, uskin, ime)) return SCM(playerid, -1, "/createjob [ Pay ] [ Uniform Skin ] [ Name ]");
  263. if(uskin < 1 || uskin > 399) return SCM(playerid, -1, "Skin ID can not be less than 1 or greater than 399.");
  264. GetPlayerPos(playerid, X,Y,Z);
  265. JobPickup[ i ] = CreatePickup(1210, 1, X,Y,Z, -1);
  266. format(str,sizeof(str), ""COL_Job"[ "COL_BELA"%s "COL_Job"]\n"COL_BELA"Contract - "COL_Job"3h", ime);
  267. JobLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, X,Y,Z, 15.0, 0, 0);
  268. JobInfo[ i ][ PosX ] = X;
  269. JobInfo[ i ][ PosY ] = Y;
  270. JobInfo[ i ][ PosZ ] = Z;
  271. JobInfo[ i ][ jName ] = ime;
  272. JobInfo[ i ][ Pay ] = pay;
  273. JobInfo[ i ][ uSkin ] = uskin;
  274. JobInfo[ i ][ jID ] = i;
  275. CreatingJob[ playerid ] = i;
  276. SCM(playerid, -1, "Now go to the position of the uniform and press the Y button.");
  277. SaveJob(i);
  278. return 1;
  279. }
  280.  
  281. stock SaveJob(id) {
  282.  
  283. new jFile[ 60 ];
  284. format(jFile, sizeof(jFile), JOBS_FILE, id);
  285. new INI:File = INI_Open(jFile);
  286. INI_WriteFloat(File, "X", JobInfo[ id ][ PosX ]);
  287. INI_WriteFloat(File, "Y", JobInfo[ id ][ PosY ]);
  288. INI_WriteFloat(File, "Z", JobInfo[ id ][ PosZ ]);
  289. INI_WriteFloat(File, "uX", JobInfo[ id ][ uPosX ]);
  290. INI_WriteFloat(File, "uY", JobInfo[ id ][ uPosY ]);
  291. INI_WriteFloat(File, "uZ", JobInfo[ id ][ uPosZ ]);
  292. INI_WriteString(File, "Job_Name", JobInfo[ id ][ jName ]);
  293. INI_WriteInt(File, "Pay", JobInfo[ id ][ Pay ]);
  294. INI_WriteInt(File, "Skin", JobInfo[ id ][ uSkin ]);
  295. INI_WriteInt(File, "ID", JobInfo[ id ][ jID ]);
  296. INI_Close(File);
  297. }
  298. stock SaveJobVeh(id) {
  299.  
  300. new vFile[ 60 ];
  301. format(vFile, sizeof(vFile), JOBVEH_FILE, id);
  302. new INI:File = INI_Open(vFile);
  303. INI_WriteFloat(File, "X", JobVehInfo[ id ][ vPosX ]);
  304. INI_WriteFloat(File, "Y", JobVehInfo[ id ][ vPosY ]);
  305. INI_WriteFloat(File, "Z", JobVehInfo[ id ][ vPosZ ]);
  306. INI_WriteFloat(File, "A", JobVehInfo[ id ][ vRotA ]);
  307. INI_WriteInt(File, "For_Job", JobVehInfo[ id ][ forJob ]);
  308. INI_WriteInt(File, "Model", JobVehInfo[ id ][ vModel ]);
  309. INI_WriteInt(File, "Color_1", JobVehInfo[ id ][ Color1 ]);
  310. INI_WriteInt(File, "Color_2", JobVehInfo[ id ][ Color2 ]);
  311. INI_Close(File);
  312. }
  313. // Not my stocks
  314. stock NextJobID(const len) {
  315. new id = (-1);
  316. for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  317. provjera = ( loop+1 );
  318. format( Data_, ( sizeof Data_ ), JOBS_FILE, provjera );
  319. if(!fexist(Data_)) {
  320. id = ( provjera );
  321. break; } }
  322. return ( id );
  323. }
  324. stock NextJobVehID(const len) {
  325. new id = (-1);
  326. for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  327. provjera = ( loop+1 );
  328. format( Data_, ( sizeof Data_ ), JOBVEH_FILE, provjera );
  329. if(!fexist(Data_)) {
  330. id = ( provjera );
  331. break; } }
  332. return ( id );
  333. }
Advertisement
Add Comment
Please, Sign In to add comment