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;
}

