Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <ZCMD>
- #include <sscanf2>
- #define FILTERSCRIPT
- #define COLOR_GREEN 0x33AA33AA
- #define COLOR_RED 0xAA3333AA
- #define DIALOG_MECHANIC 9982
- #define DIALOG_INSTALL_MOD 9983
- #define DIALOG_RIMS_SHOW 9984
- forward Float:frandomEx(Float:min, Float:max);
- forward UpdatePartPrice();
- forward Float:GetCurrentPartsPrice_float();
- enum e_Mech {
- CreatingPart, //save, its what is player currently creating
- PlayerParts, //save, its amount of parts player has on him
- StartedCreating, //save, it saves the time when u started creating something
- CarComponent, //Save, it tells what part player has on him
- ComponentsInstalled //Save, it tells how many parts player has installed in total
- };
- new sys_Mech[MAX_PLAYERS][e_Mech];
- new
- NITRO_COST = 200,
- HYDRAULICS_COST = 400,
- Float:PARTS_PRICE = 2.0;
- new Text3D:PartsText;
- #if defined FILTERSCRIPT
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Mechanic job by Twinki");
- print("--------------------------------------\n");
- SetTimer("UpdatePartPrice",600000,true);
- new Float:rr = frandomEx(1.0,5.0);
- new string[64];
- format(string,sizeof(string),"{FFFFFF}Parts price: {00FFFF}%.2f$",rr);
- PartsText = Create3DTextLabel(string, 0, 1566.1454,23.2613,24.1641, 20.0, 0, 0);
- PARTS_PRICE = rr;
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- #else
- main()
- {
- print("\n----------------------------------");
- print(" Blank Gamemode by your name here");
- print("----------------------------------\n");
- }
- #endif
- /* Commands */
- CMD:parthelp(playerid,params[]) {
- SendClientMessage(playerid,COLOR_RED,"Commands: /buyparts, /getmod, /createmod, /installmod, /modtimeleft");
- return true;
- }
- CMD:createmod(playerid,params[]) {
- if(!IsPlayerInRangeOfPoint(playerid,5.0,1566.1454,23.2613,24.1641)) return SendClientMessage(playerid,COLOR_RED,"You are not near the mechanic shop outside Los Santos");
- if(GetPlayerComponent(playerid) >= 1) return SendClientMessage(playerid,COLOR_RED,"You already have a part on you. Please use it first");
- if(sys_Mech[playerid][StartedCreating] != 0) return SendClientMessage(playerid,COLOR_RED,"You are already assembling car part");
- new string[256];
- format(string,sizeof(string),"{FFFFFF}Item Name\t Parts Price\n Rims\t Unknown\n Nitro\t {FFFF00}%i\n{FFFFFF} Hydraulics\t {FFFF00}%i",NITRO_COST,HYDRAULICS_COST);
- ShowPlayerDialog(playerid,DIALOG_MECHANIC,DIALOG_STYLE_TABLIST_HEADERS,"Parts for Creation",string,"Next","Close");
- return true;
- }
- CMD:modtimeleft(playerid,params[]) {
- if(sys_Mech[playerid][StartedCreating] == 0) return SendClientMessage(playerid,COLOR_RED,"You are not assembling any parts or your part has finished assembling");
- new string[64], calc = sys_Mech[playerid][StartedCreating]-gettime();
- format(string,sizeof(string),"Your part will be ready in %i seconds",calc);
- SendClientMessage(playerid,COLOR_RED,string);
- return true;
- }
- CMD:getmod(playerid,params[]) {
- if(!IsPlayerInRangeOfPoint(playerid,5.0,1566.1454,23.2613,24.1641)) return SendClientMessage(playerid,COLOR_RED,"You are not near the mechanic shop outside Los Santos");
- if(sys_Mech[playerid][StartedCreating] == 0) return SendClientMessage(playerid,COLOR_RED,"You are not assembling any parts");
- new string[64], calc = sys_Mech[playerid][StartedCreating]-gettime();
- format(string,sizeof(string),"Your part is not ready yet, it will be ready in %i seconds",calc);
- if(gettime() < sys_Mech[playerid][StartedCreating]) return SendClientMessage(playerid,COLOR_RED,string);
- sys_Mech[playerid][StartedCreating] = 0;
- format(string,sizeof(string),"You have created %s",GetPartName(playerid));
- SendClientMessage(playerid,COLOR_RED,string);
- GivePlayerComponent(playerid,GetPlayerCreatingPart(playerid));
- SetPlayerCreatingPart(playerid,0);
- return true;
- }
- CMD:buyparts(playerid,params[]) {
- if(!IsPlayerInRangeOfPoint(playerid,5.0,1566.1454,23.2613,24.1641)) return SendClientMessage(playerid,COLOR_RED,"You are not near the mechanic shop outside Los Santos");
- new amount;
- if(sscanf(params,"i",amount)) return SendClientMessage(playerid,COLOR_RED,"Usage: /buyparts [amount]");
- if(amount <= 0) return SendClientMessage(playerid,COLOR_RED,"You cannot buy less than 0 or 0 parts");
- if(GetPlayerParts(playerid) >= 501) return SendClientMessage(playerid,COLOR_RED,"You already have 500 parts on you. You cannot have more than 500!");
- new Calc3 = GetPlayerParts(playerid) + amount;
- if(Calc3 >= 501) return SendClientMessage(playerid,COLOR_RED,"You cannot carry more than 500 parts!");
- new Float:calc5 = GetCurrentPartsPrice_float()*amount;
- new Float:calc6 = (calc5/100)*UpPriceByAmount(playerid);
- new Float:calc2 = calc5+calc6;
- new calc = floatround(calc2,floatround_round);
- if(GetPlayerMoney(playerid) < calc) return SendClientMessage(playerid,COLOR_RED,"You dont have enough money to do this");
- GivePlayerParts(playerid, amount);
- new string[128];
- format(string,sizeof(string),"You have purchased %i mechanical parts for %i$ at a price of %.2f$ per part! Tax: %i percent",amount,calc,GetCurrentPartsPrice_float(),UpPriceByAmount(playerid));
- SendClientMessage(playerid,COLOR_GREEN,string);
- return true;
- }
- CMD:installmod(playerid,params[] ) {
- if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"You are not inside any vehicles");
- if(GetPlayerComponent(playerid) == 0) return SendClientMessage(playerid,COLOR_RED,"You dont have any mods on you");
- ShowPlayerDialog(playerid,DIALOG_INSTALL_MOD,DIALOG_STYLE_LIST,"Mod installation","Rims\nNitro\nHydraulics","Install","Close");
- return true;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
- new vid = GetPlayerVehicleID(playerid);
- switch(dialogid) {
- case DIALOG_INSTALL_MOD: {
- if(!response) return true;
- switch(listitem) {
- case 0: {
- if(!PlayerHasRims(playerid)) return SendClientMessage(playerid,COLOR_RED,"You dont have any rims on you");
- InstallVehicleComponent(playerid,vid,GetPlayerComponent(playerid));
- }
- case 1: {
- if(GetPlayerComponent(playerid) != 1010) return SendClientMessage(playerid,COLOR_RED,"You dont have nitro on you");
- InstallVehicleComponent(playerid,vid,GetPlayerComponent(playerid));
- }
- case 2: {
- if(GetPlayerComponent(playerid) != 1087) return SendClientMessage(playerid,COLOR_RED,"You dont have any hydraulics on you");
- InstallVehicleComponent(playerid,vid,GetPlayerComponent(playerid));
- }
- }
- }
- case DIALOG_RIMS_SHOW: {
- if(!response) return true;
- switch(listitem) {
- case 0: {
- if(GetPlayerParts(playerid) < 300) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 300");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1025);
- }
- case 1: {
- if(GetPlayerParts(playerid) < 450) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 450");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1073);
- }
- case 2: {
- if(GetPlayerParts(playerid) < 400) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 400");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1074);
- }
- case 3: {
- if(GetPlayerParts(playerid) < 500) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 500");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1075);
- }
- case 4: {
- if(GetPlayerParts(playerid) < 450) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 450");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1076);
- }
- case 5: {
- if(GetPlayerParts(playerid) < 400) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 400");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1077);
- }
- case 6: {
- if(GetPlayerParts(playerid) < 420) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 420");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1078);
- }
- case 7: {
- if(GetPlayerParts(playerid) < 430) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 430");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1079);
- }
- case 8: {
- if(GetPlayerParts(playerid) < 440) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 440");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1080);
- }
- case 9: {
- if(GetPlayerParts(playerid) < 390) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 390");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1081);
- }
- case 10: {
- if(GetPlayerParts(playerid) < 395) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 395");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1082);
- }
- case 11: {
- if(GetPlayerParts(playerid) < 500) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 500");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1083);
- }
- case 12: {
- if(GetPlayerParts(playerid) < 475) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 475");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1084);
- }
- case 13: {
- if(GetPlayerParts(playerid) < 460) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 460");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1085);
- }
- case 14: {
- if(GetPlayerParts(playerid) < 380) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 380");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1096);
- }
- case 15: {
- if(GetPlayerParts(playerid) < 410) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 410");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1097);
- }
- case 16: {
- if(GetPlayerParts(playerid) < 415) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts, you need 415");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1098);
- }
- }
- }
- case DIALOG_MECHANIC: {
- if(!response) return true;
- switch(listitem) {
- case 0: {
- new string[256];
- format(string,sizeof(string),"Rims name\t Parts price\n\
- Offroad\t 300\n\
- Shadow\t 450\n\
- Mega\t 400\n\
- Rimshine\t 500\n\
- Wires\t 450\n\
- Classic\t 400\n\
- Twist\t 420\n\
- Cutter\t 430\n\
- Switch\t 440\n\
- Grove\t 390\n\
- Import\t 395\n\
- Dollar\t 500\n\
- Trance\t 475\n\
- Atomic\t 460\n\
- Ahab\t 380\n\
- Virtual\t 410\n\
- Access\t 415\n");
- ShowPlayerDialog(playerid,DIALOG_RIMS_SHOW,DIALOG_STYLE_TABLIST_HEADERS,"Rims avaliable",string,"Create","Close");
- }
- case 1: {
- new string[128];
- format(string,sizeof(string),"You dont have enough parts. You need %i parts",NITRO_COST);
- if(GetPlayerParts(playerid) < NITRO_COST) return SendClientMessage(playerid,COLOR_RED,string);
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1010);
- }
- case 2: {
- new string[128];
- format(string,sizeof(string),"You dont have enough parts. You need %i pars",HYDRAULICS_COST);
- if(GetPlayerParts(playerid) < HYDRAULICS_COST) return SendClientMessage(playerid,COLOR_RED,"You dont have enough parts");
- if(sys_Mech[playerid][StartedCreating] >= 1) return SendClientMessage(playerid,COLOR_RED,"You are already assembling something");
- SetModToCreate(playerid,1087);
- }
- }
- }
- }
- return true;
- }
- /* Custom Functions */
- stock ReducePlayerPartsByCost(playerid,amount) { sys_Mech[playerid][PlayerParts] -= amount; }
- stock GetPlayerParts(playerid) return sys_Mech[playerid][PlayerParts];
- stock randomEx(minnum = cellmin, maxnum = cellmax) return random(maxnum - minnum + 1) + minnum; //Y_Less
- stock Float:frandomEx(Float:min, Float:max) return min + (max - min) * random(32768) / 32768.0; // Y_Less
- stock Float:GetCurrentPartsPrice_float() return PARTS_PRICE;
- stock GetCurrentPartsPrice() return floatround(PARTS_PRICE,floatround_round);
- stock GivePlayerParts(playerid, amount) return sys_Mech[playerid][PlayerParts] += amount;
- stock SetPlayerCreatingPart(playerid,id) return sys_Mech[playerid][CreatingPart] = id;
- stock GetPlayerCreatingPart(playerid) return sys_Mech[playerid][CreatingPart];
- stock GivePlayerComponent(playerid,id) return sys_Mech[playerid][CarComponent] = id;
- stock GetPlayerComponent(playerid) return sys_Mech[playerid][CarComponent];
- stock GetPlayerSkill(playerid) return sys_Mech[playerid][ComponentsInstalled];
- stock AddPlayerSkill(playerid,amount) return sys_Mech[playerid][ComponentsInstalled] += amount;
- stock SetPlayerSkill(playerid, amount) return sys_Mech[playerid][ComponentsInstalled] = amount;
- stock UpPriceByAmount(playerid) {
- new current;
- switch(GetPlayerSkill(playerid)) {
- case 0 .. 20: current = 10;
- case 21 .. 50: current = 8;
- case 51 .. 100: current = 6;
- case 101 .. 250: current = 4;
- case 251 .. 500: current = 2;
- case 501 .. 9999: current = 0;
- }
- return current;
- }
- stock PlayerHasRims(playerid) {
- switch(GetPlayerComponent(playerid)) {
- case 1025,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1096,1097,1098: return true;
- default: return false;
- }
- return false;
- }
- stock GetPartName(playerid) {
- new sts_Name[24];
- switch(sys_Mech[playerid][CreatingPart]) {
- case 1010: sts_Name = "Nitro x10";
- case 1087: sts_Name = "Hydraulics";
- case 1025: sts_Name = "Offroad Rims";
- case 1073: sts_Name = "Shadow Rims";
- case 1074: sts_Name = "Mega Rims";
- case 1075: sts_Name = "Rimshine Rims";
- case 1076: sts_Name = "Wires Rims";
- case 1077: sts_Name = "Classic Rims";
- case 1078: sts_Name = "Twist Rims";
- case 1079: sts_Name = "Cutter Rims";
- case 1080: sts_Name = "Switch Rims";
- case 1081: sts_Name = "Grove Rims";
- case 1082: sts_Name = "Import Rims";
- case 1083: sts_Name = "Dollar Rims";
- case 1084: sts_Name = "Trance Rims";
- case 1085: sts_Name = "Atomic Rims";
- case 1096: sts_Name = "Ahab Rims";
- case 1097: sts_Name = "Virtual Rims";
- case 1098: sts_Name = "Access Rims";
- default: sts_Name = "Unknown/Broken";
- }
- return sts_Name;
- }
- stock GetPlayerPartName(playerid) {
- new sts_Name[24];
- switch(GetPlayerComponent(playerid)) {
- case 1010: sts_Name = "Nitro x10";
- case 1087: sts_Name = "Hydraulics";
- case 1025: sts_Name = "Offroad Rims";
- case 1073: sts_Name = "Shadow Rims";
- case 1074: sts_Name = "Mega Rims";
- case 1075: sts_Name = "Rimshine Rims";
- case 1076: sts_Name = "Wires Rims";
- case 1077: sts_Name = "Classic Rims";
- case 1078: sts_Name = "Twist Rims";
- case 1079: sts_Name = "Cutter Rims";
- case 1080: sts_Name = "Switch Rims";
- case 1081: sts_Name = "Grove Rims";
- case 1082: sts_Name = "Import Rims";
- case 1083: sts_Name = "Dollar Rims";
- case 1084: sts_Name = "Trance Rims";
- case 1085: sts_Name = "Atomic Rims";
- case 1096: sts_Name = "Ahab Rims";
- case 1097: sts_Name = "Virtual Rims";
- case 1098: sts_Name = "Access Rims";
- default: sts_Name = "Unknown/Broken";
- }
- return sts_Name;
- }
- stock InstallVehicleComponent(playerid,vid,ID) {
- new string[128];
- format(string,sizeof(string),"You have installed %s on car ID: %i",GetPlayerPartName(playerid),vid);
- SendClientMessage(playerid,COLOR_GREEN,string);
- GivePlayerComponent(playerid,0);
- AddVehicleComponent(vid, ID);
- AddPlayerSkill(playerid,1);
- }
- stock SetModToCreate(playerid,ID) {
- new rr = randomEx(120,900),string[128];
- switch(ID) {
- case 1010: ReducePlayerPartsByCost(playerid,NITRO_COST);
- case 1087: ReducePlayerPartsByCost(playerid,HYDRAULICS_COST);
- case 1025: ReducePlayerPartsByCost(playerid,300);
- case 1073: ReducePlayerPartsByCost(playerid,450);
- case 1074: ReducePlayerPartsByCost(playerid,400);
- case 1075: ReducePlayerPartsByCost(playerid,500);
- case 1076: ReducePlayerPartsByCost(playerid,450);
- case 1077: ReducePlayerPartsByCost(playerid,400);
- case 1078: ReducePlayerPartsByCost(playerid,420);
- case 1079: ReducePlayerPartsByCost(playerid,430);
- case 1080: ReducePlayerPartsByCost(playerid,440);
- case 1081: ReducePlayerPartsByCost(playerid,390);
- case 1082: ReducePlayerPartsByCost(playerid,395);
- case 1083: ReducePlayerPartsByCost(playerid,500);
- case 1084: ReducePlayerPartsByCost(playerid,475);
- case 1085: ReducePlayerPartsByCost(playerid,460);
- case 1096: ReducePlayerPartsByCost(playerid,380);
- case 1097: ReducePlayerPartsByCost(playerid,410);
- case 1098: ReducePlayerPartsByCost(playerid,415);
- }
- SetPlayerCreatingPart(playerid,ID);
- sys_Mech[playerid][StartedCreating] = gettime()+rr;
- format(string,sizeof(string),"You have started assembling %s. It will be done in %i seconds",GetPartName(playerid),rr);
- SendClientMessage(playerid,COLOR_RED,string);
- }
- /* Timers */
- public UpdatePartPrice() {
- new Float:rr = frandomEx(1.0,5.0);
- PARTS_PRICE = rr;
- new string[64];
- format(string,sizeof(string),"{FFFFFF}Parts price: {00FFFF}%.2f$",GetCurrentPartsPrice_float());
- Update3DTextLabelText(PartsText,0,string);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement