31.08.2012, 20:43
Код:
#include <a_samp> #include <float> #define BUSINESS_TYPES "1: Restaurant - 2: Phone - 3: 24-7 - 4: Ammunation - 5: Advertising - 6: Clothes Store - 7. Bar/Club" #define BUSINESS_TYPES2 " " #define PICKUP_RANGE 50 #define MAX_S_PICKUPS 400 #define COLOR_WHITE 0xFFFFFFAA #define COLOR_ADMINCMD 0x007E96F6 #define COLOR_GREY 0xAFAFAFAA forward SaveBusinesses(); forward LoadBusinesses(); forward split(const strsrc[], strdest[][], delimiter); forward CreateStreamPickup(model,type,Float:x,Float:y,Float:z,range); forward StreamPickups(); forward Pickup_AnyPlayerToPoint(Float:radi, Float:x, Float:y, Float:z); forward DestroyStreamPickup(ID); forward CountStreamPickups(); forward ChangeStreamPickupModel(ID,newmodel); forward ChangeStreamPickupType(ID,newtype); forward MoveStreamPickup(ID,Float:x,Float:y,Float:z); enum pickupINFO { pickupCreated, pickupVisible, pickupID, pickupRange, Float:pickupX, Float:pickupY, Float:pickupZ, pickupType, pickupModel } new Pickup[MAX_S_PICKUPS+1][pickupINFO]; enum BusinessSystem { BusinessName[128], Owner[MAX_PLAYER_NAME], Float:EnterX, Float:EnterY, Float:EnterZ, EnterWorld, EnterInterior, Float:EnterAngle, Float:ExitX, Float:ExitY, Float:ExitZ, ExitInterior, Float:ExitAngle, Owned, Enterable, BizPrice, EntranceCost, Till, Locked, BizType, Products, PickupID, } new Businesses[100][BusinessSystem]; main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } public OnGameModeInit() { LoadBusinesses(); AddPlayerClass(0, 810.805297,-1616.235229,13.546875, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } public OnGameModeExit() { return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerConnect(playerid) { return 1; } public OnPlayerDisconnect(playerid, reason) { return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { return 1; } public OnVehicleSpawn(vehicleid) { return 1; } public OnVehicleDeath(vehicleid, killerid) { return 1; } public OnPlayerText(playerid, text[]) { return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new tmp[256]; new cmd[256]; new idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/abusinessentrance", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, "[Usage:] /abusinessentrance [bizid]"); return 1; } new id = strval(tmp); if(IsPlayerAdmin(playerid)) { new pmodel; new Float:x,Float:y,Float:z; GetPlayerPos(playerid, x, y, z); Businesses[id][EnterX] = x; Businesses[id][EnterY] = y; Businesses[id][EnterZ] = z; Businesses[id][EnterWorld] = GetPlayerVirtualWorld(playerid); Businesses[id][EnterInterior] = GetPlayerInterior(playerid); new Float:angle; GetPlayerFacingAngle(playerid, angle); Businesses[id][EnterAngle] = angle; switch(Businesses[id][Owned]) { case 0: pmodel = 1272; case 1: pmodel = 1239; } ChangeStreamPickupModel(Businesses[id][PickupID],pmodel); MoveStreamPickup(Businesses[id][PickupID],Businesses[id][EnterX],Businesses[id][EnterY],Businesses[id][EnterZ]); SaveBusinesses(); new form[128]; format(form, sizeof(form), "[Info:] You have set business ID: %d's location", id); SendClientMessage(playerid, COLOR_ADMINCMD, form); } else { SendClientMessage(playerid, COLOR_GREY, "[Error:] You are not authorized to use that command"); } } return 1; } if(strcmp(cmd, "/abusinessexit", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, "[Usage:] /abusinessexit [bizid]"); return 1; } new id = strval(tmp); if(IsPlayerAdmin(playerid)) { new Float:x,Float:y,Float:z; GetPlayerPos(playerid, x, y, z); Businesses[id][ExitX] = x; Businesses[id][ExitY] = y; Businesses[id][ExitZ] = z; Businesses[id][ExitInterior] = GetPlayerInterior(playerid); new Float:angle; GetPlayerFacingAngle(playerid, angle); Businesses[id][ExitAngle] = angle; SaveBusinesses(); new form[128]; format(form, sizeof(form), "[Info:] You have set business ID: %d's exit location", id); SendClientMessage(playerid, COLOR_ADMINCMD, form); } else { SendClientMessage(playerid, COLOR_GREY, "[Error:] You are not authorized to use that command"); } } return 1; } return 0; } public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { return 1; } public OnPlayerEnterCheckpoint(playerid) { return 1; } public OnPlayerLeaveCheckpoint(playerid) { return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { return 1; } public OnPlayerLeaveRaceCheckpoint(playerid) { return 1; } public OnRconCommand(cmd[]) { return 1; } public OnPlayerRequestSpawn(playerid) { return 1; } public OnObjectMoved(objectid) { return 1; } public OnPlayerObjectMoved(playerid, objectid) { return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { return 1; } public OnVehicleMod(playerid, vehicleid, componentid) { return 1; } public OnVehiclePaintjob(playerid, vehicleid, paintjobid) { return 1; } public OnVehicleRespray(playerid, vehicleid, color1, color2) { return 1; } public OnPlayerSelectedMenuRow(playerid, row) { return 1; } public OnPlayerExitedMenu(playerid) { return 1; } public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) { return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { return 1; } public OnRconLoginAttempt(ip[], password[], success) { return 1; } public OnPlayerUpdate(playerid) { return 1; } public OnPlayerStreamIn(playerid, forplayerid) { return 1; } public OnPlayerStreamOut(playerid, forplayerid) { return 1; } public OnVehicleStreamIn(vehicleid, forplayerid) { return 1; } public OnVehicleStreamOut(vehicleid, forplayerid) { return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { return 1; } public OnPlayerClickPlayer(playerid, clickedplayerid, source) { return 1; } public SaveBusinesses() { new idx; new File: file2; while (idx < sizeof(Businesses)) { new coordsstring[256]; format(coordsstring, sizeof(coordsstring), "%s|%s|%f|%f|%f|%d|%d|%f|%f|%f|%f|%d|%f|%d|%d|%d|%d|%d|%d|%d|%d|%d\n", Businesses[idx][BusinessName], Businesses[idx][Owner], Businesses[idx][EnterX], Businesses[idx][EnterY], Businesses[idx][EnterZ], Businesses[idx][EnterWorld], Businesses[idx][EnterInterior], Businesses[idx][EnterAngle], Businesses[idx][ExitX], Businesses[idx][ExitY], Businesses[idx][ExitZ], Businesses[idx][ExitInterior], Businesses[idx][ExitAngle], Businesses[idx][Owned], Businesses[idx][Enterable], Businesses[idx][BizPrice], Businesses[idx][EntranceCost], Businesses[idx][Till], Businesses[idx][Locked], Businesses[idx][BizType], Businesses[idx][Products], Businesses[idx][PickupID]); if(idx == 0) { file2 = fopen("MTRP/Businesses/businesses.cfg", io_write); } else { file2 = fopen("MTRP/Businesses/businesses.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); } return 1; } public LoadBusinesses() { new arrCoords[22][64]; new strFromFile2[256]; new File: file = fopen("MTRP/Businesses/businesses.cfg", io_read); if (file) { new idx; while (idx < sizeof(Businesses)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, '|'); strmid(Businesses[idx][BusinessName], arrCoords[0], 0, strlen(arrCoords[0]), 255); strmid(Businesses[idx][Owner], arrCoords[1], 0, strlen(arrCoords[1]), 255); Businesses[idx][EnterX] = floatstr(arrCoords[2]); Businesses[idx][EnterY] = floatstr(arrCoords[3]); Businesses[idx][EnterZ] = floatstr(arrCoords[4]); Businesses[idx][EnterWorld] = strval(arrCoords[5]); Businesses[idx][EnterInterior] = strval(arrCoords[6]); Businesses[idx][EnterAngle] = floatstr(arrCoords[7]); Businesses[idx][ExitX] = floatstr(arrCoords[8]); Businesses[idx][ExitY] = floatstr(arrCoords[9]); Businesses[idx][ExitZ] = floatstr(arrCoords[10]); Businesses[idx][ExitInterior] = strval(arrCoords[11]); Businesses[idx][ExitAngle] = floatstr(arrCoords[12]); Businesses[idx][Owned] = strval(arrCoords[13]); Businesses[idx][Enterable] = strval(arrCoords[14]); Businesses[idx][BizPrice] = strval(arrCoords[15]); Businesses[idx][EntranceCost] = strval(arrCoords[16]); Businesses[idx][Till] = strval(arrCoords[17]); Businesses[idx][Locked] = strval(arrCoords[18]); Businesses[idx][BizType] = strval(arrCoords[19]); Businesses[idx][Products] = strval(arrCoords[20]); Businesses[idx][PickupID] = strval(arrCoords[21]); if(Businesses[idx][BizPrice] != 0) { if(Businesses[idx][Owned] == 0) { Businesses[idx][PickupID]=CreateStreamPickup(1272, 1, Businesses[idx][EnterX], Businesses[idx][EnterY], Businesses[idx][EnterZ],PICKUP_RANGE); } else if(Businesses[idx][Owned] == 1) { Businesses[idx][PickupID]=CreateStreamPickup(1239, 1, Businesses[idx][EnterX], Businesses[idx][EnterY], Businesses[idx][EnterZ],PICKUP_RANGE); } } idx++; } fclose(file); } return 1; } public split(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)){ if(strsrc[i]==delimiter || i==strlen(strsrc)){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; } public CreateStreamPickup(model,type,Float:x,Float:y,Float:z,range) { new FoundID = 0; new ID; for ( new i = 0; FoundID <= 0 ; i++) { if( Pickup[i][pickupCreated] == 0 ) { if( FoundID == 0 ) { ID = i; FoundID = 1; } } if( i > MAX_S_PICKUPS ) { FoundID = 2; } } if( FoundID == 2 ) { print("[Error:] Pickup limit reached. Pickup not created"); return -1; } Pickup[ID][pickupCreated] = 1; Pickup[ID][pickupVisible] = 0; Pickup[ID][pickupModel] = model; Pickup[ID][pickupType] = type; Pickup[ID][pickupX] = x; Pickup[ID][pickupY] = y; Pickup[ID][pickupZ] = z; Pickup[ID][pickupRange] = range; return ID; } public DestroyStreamPickup(ID) { if(Pickup[ID][pickupCreated]) { DestroyPickup(Pickup[ID][pickupID]); Pickup[ID][pickupCreated] = 0; return 1; } return 0; } public CountStreamPickups() { new count = 0; for(new i = 0; i < MAX_S_PICKUPS; i++) { if(Pickup[i][pickupCreated] == 1) { count++; } } return count; } public StreamPickups() { for(new i = 0; i < MAX_S_PICKUPS; i++) { if(Pickup[i][pickupCreated] == 1) { if(Pickup_AnyPlayerToPoint(Pickup[i][pickupRange],Pickup[i][pickupX],Pickup[i][pickupY],Pickup[i][pickupZ])) { if(Pickup[i][pickupVisible] == 0) { Pickup[i][pickupID] = CreatePickup(Pickup[i][pickupModel],Pickup[i][pickupType],Pickup[i][pickupX],Pickup[i][pickupY],Pickup[i][pickupZ]); Pickup[i][pickupVisible] = 1; } } else { if(Pickup[i][pickupVisible] == 1) { DestroyPickup(Pickup[i][pickupID]); Pickup[i][pickupVisible] = 0; } } } } } public MoveStreamPickup(ID,Float:x,Float:y,Float:z) { if(Pickup[ID][pickupCreated]) { DestroyPickup(Pickup[ID][pickupID]); Pickup[ID][pickupVisible] = 0; Pickup[ID][pickupX] = x; Pickup[ID][pickupY] = y; Pickup[ID][pickupZ] = z; return 1; } return 0; } public ChangeStreamPickupModel(ID,newmodel) { if(Pickup[ID][pickupCreated]) { DestroyPickup(Pickup[ID][pickupID]); Pickup[ID][pickupVisible] = 0; Pickup[ID][pickupModel] = newmodel; return 1; } return 0; } public ChangeStreamPickupType(ID,newtype) { if(Pickup[ID][pickupCreated]) { DestroyPickup(Pickup[ID][pickupID]); Pickup[ID][pickupVisible] = 0; Pickup[ID][pickupType] = newtype; return 1; } return 0; } public Pickup_AnyPlayerToPoint(Float:radi, Float:x, Float:y, Float:z) { for (new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(i, oldposx, oldposy, oldposz); tempposx = (oldposx -x); tempposy = (oldposy -y); tempposz = (oldposz -z); if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) { return 1; } } } return 0; } //============================================================================== strtok(string[],&idx,seperator = ' ') { new ret[128], i = 0, len = strlen(string); while(string[idx] == seperator && idx < len) idx++; while(string[idx] != seperator && idx < len) { ret[i] = string[idx]; i++; idx++; } while(string[idx] == seperator && idx < len) idx++; return ret; }