MeTRoZLoN
Ученик
PHP:
В мод==> scriptfiles ==> Создаём==> Bizn
PHP:
добавим 2 инклуда
#include <streamer>
#include <MXINI>
PHP:
forward LolSave();
forward Payments();
PHP:
#define MAX_BUSINESS_NAME (30) // Максимальная длина названия бизнеса
#define MAX_BUSINESSES (100) // Максимальное кол-во бизнессов
#define MAX_PER_PLAYER_BUSINESSES (3) // Максимальное кол-во бизов на игрока
#define BIZZ_SELL_DEVIDE (2) // Деньги за продажу = цена/это значение
#define BIZZ_EARN_DEVIDE (5) // Прибыль бизнесса = цена/это значение
#define BIZZ_PAYMENT_INTERVAL (60) // Время между выплатами
#define BIZZ_MESSAGE_COLOR (0x409FFFFF) // Цвет сообщений бизнеса
#define BIZZ_DIALOG_ID (1337) // Ид диалога
#define BIZZ_AVAIL_MAPICON (52) // Иконка на карте для покупаемых бизнесов
#define BIZZ_UNAVAIL_MAPICON (52) // для НЕПОКУПАЕМЫХ бизнесов
#define BIZZ_MAPICON_DRAWDISTANCE (100.0) // Дистанция видимости иконок на карте
#define BIZZ_AVAIL_PICKUP_MODEL (1274) // Модель пикапа для покупаемых бизов
#define BIZZ_UNAVAIL_PICKUP_MODEL (1274) // НЕПОКУПАЕМЫХ
#define BIZZ_PICKUP_DRAWDISTANCE (100.0) // дальность пикапа
#define BIZZ_3DTAG_COLOR (0xFF4600FF) // Цвет 3д тэга
#define BIZZ_3DTAG_DRAWDISTANCE (100.0) // Дальность 3д тэга
#define DestroyBizzElements(%0) \
DestroyDynamicMapIcon(bData[%0][mapid]); \
DestroyDynamicPickup(bData[%0][Pickupid]); \
DestroyDynamic3DTextLabel(bData[%0][labelid]);
PHP:
enum E_BUSINESS_DATA
{
Name[255], Price,
Float:x, Float:y, Float:z, interior, world,
Owner[24], mapid, Pickupid, Text3D:labelid
}
enum E_PLAYER_DATA
{
Businesses, Earnings, idx
}
new bData[MAX_BUSINESSES][E_BUSINESS_DATA], pData[MAX_PLAYERS][E_PLAYER_DATA];
new str[128], Count = 0, Timer;
PHP:
в паблик
PHP:
public OnPlayerCommandText(playerid,cmdtext[])
{
new cmd[64],idxa;
cmd = strtok(cmdtext,idxa);
if(!strcmp(cmd,"/addbiz",true))
{
new Float:xa,Float:ya,Float:za;
GetPlayerPos(playerid,xa,ya,za);
new prices; prices = strval(strtok(cmdtext,idxa));
new length = strlen(cmdtext);
while ((idxa < length) && (cmdtext[idxa] <= ' '))
{
idxa++;
}
new offset = idxa;
new result[64];
while ((idxa < length) && ((idxa - offset) < (sizeof(result) - 1)))
{
result[idxa - offset] = cmdtext[idxa];
idxa++;
}
result[idxa - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, -1, " Используйте: /addbiz [price] [Название]");
return 1;
}
format(bData[Count][Name],255,"%s",result);
bData[Count][Price] = prices;
bData[Count][x] = xa;
bData[Count][y] = ya;
bData[Count][z] = za;
format(bData[Count][Owner],24,"No-One");
CreateAvailableBizzElements(Count);
Count++;
}
return 1;
}
PHP:
public OnGameModeInit()
{
new col[25],za,file=iniOpen("Bizn.ini");
for(new i=0;i<sizeof(bData);i++)
{
format(col,25,"n%d",i);
iniGet(file,col,bData[i][Name],255);
format(col,25,"p%d",i);
iniGetInt(file,col,bData[i][Price]);
format(col,25,"x%d",i);
iniGetFloat(file,col,bData[i][x]);
format(col,25,"y%d",i);
iniGetFloat(file,col,bData[i][y]);
format(col,25,"z%d",i);
iniGetFloat(file,col,bData[i][z]);
format(col,25,"o%d",i);
za = iniGet(file,col,bData[i][Owner],24);
if(za>= 0)
{
Count++;
if(!strcmp(bData[i][Owner],"No-One",true))
{
CreateAvailableBizzElements(i);
}
else
{
CreateUnvailableBizzElements(i);
}
}
}
printf(" ** loaded %d businesses ! **", Count);
iniClose(file);
Timer = SetTimer("Payments", BIZZ_PAYMENT_INTERVAL*60000, true);
SetTimer("LolSave",5000,1);
return ;
}
PHP:
public OnGameModeExit()
{
for(new a = 0; a < Count; a++)
{
DestroyBizzElements(a)
}
KillTimer(Timer);
return 1;
}
PHP:
public OnPlayerConnect(playerid)
{
pData[playerid][Businesses] = 0;
pData[playerid][Earnings] = 0;
return 1;
}
PHP:
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
for(new a = 0; a < Count; a++)
{
if(pickupid == bData[a][Pickupid])
{
if(!strcmp(bData[a][Owner],"",true))
{
format(str, sizeof(str), "{00BC00}Бизнес: {6AFFFF}%s\n{00BC00}Стоимость: {6AFFFF}$%d\n{00BC00}Стоимость продажи: {6AFFFF}$%d {00BC00}Доход: {6AFFFF}$%d", bData[a][Name], bData[a][Price], bData[a][Price] / BIZZ_SELL_DEVIDE, bData[a][Price] / BIZZ_EARN_DEVIDE);
}
else
format(str, sizeof(str), "{00B366}Бизнес {ffffff}%s \n{00B366}Владелец: {ffffff}%s", bData[a][Name], bData[a][Owner]);
pData[playerid][idx] = a;
ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "{00BC00}Система Бизнесов", str, "Купить", "Продать");
return 1;
}
}
return 1;
}
PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1337)
{
new Idx = pData[playerid][idx];
if(response)
{
if(!strcmp(bData[Idx][Owner],"No-One",true))
{
if(GetPlayerMoney(playerid) >= bData[Idx][Price])
{
if(pData[playerid][Businesses] < MAX_PER_PLAYER_BUSINESSES)
{
format(bData[Idx][Owner],24,"%s",pName(playerid));
pData[playerid][Businesses]++;
pData[playerid][Earnings] += bData[Idx][Price] / BIZZ_EARN_DEVIDE;
GivePlayerMoney(playerid, -bData[Idx][Price]);
CreateUnvailableBizzElements(Idx);
format(str, sizeof(str), "{00F5FF}[Бизнес]: {3AFD65}Ты купил Бизнес %s за $%d.Он приносит доход $%d каждые %d минут.", bData[Idx][Name], bData[Idx][Price], pData[playerid][Earnings], BIZZ_PAYMENT_INTERVAL);
return SendClientMessage(playerid, BIZZ_MESSAGE_COLOR, str);
}
format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}У тебя может быть только %d Бизнеса!", MAX_PER_PLAYER_BUSINESSES);
return SendClientMessage(playerid, 0xFF5A00FF, str);
}
format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}Этот бизнес стоит $%d, а у тебя в наличии только $%d !", bData[Idx][Price], GetPlayerMoney(playerid));
return SendClientMessage(playerid, 0xFF5A00FF, str);
}
format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}У этого бизнеса уже есть владелец: %s!",bData[Idx][Owner]);
return SendClientMessage(playerid, 0xFF5A00FF, str);
}
if(!strcmp(bData[Idx][Owner],pName(playerid),true))
{
format(bData[Idx][Owner],24,"No-One");
GivePlayerMoney(playerid, bData[Idx][Price] / BIZZ_SELL_DEVIDE);
CreateAvailableBizzElements(Idx);
format(str, sizeof(str), "{00F5FF}[Бизнес]: {FFFF00}Ты продал Бизнес %s за $%d.", bData[Idx][Name], bData[Idx][Price] / BIZZ_SELL_DEVIDE);
return SendClientMessage(playerid, BIZZ_MESSAGE_COLOR, str);
}
return 1;
}
return 1;
}
PHP:
public LolSave()
{
new col[4],file=iniOpen("Bizn.ini");
for(new i=0;i<Count;i++)
{
format(col,4,"o%d",i);
iniSet(file,col,bData[i][Owner]);
}
iniClose(file);
return 1;
}
PHP:
public Payments()
{
for(new a = 0, b = GetMaxPlayers(); a < b; a++)
{
pData[a][Businesses]=0;
pData[a][Earnings] =0;
for(new xa=0;xa<Count;xa++)
{
if(!strcmp(bData[xa][Owner],pName(a),true))
{
pData[a][Businesses]++;
pData[a][Earnings] += bData[Count][Price] / BIZZ_EARN_DEVIDE;
}
}
GivePlayerMoney(a,pData[a][Earnings]);
format(str, sizeof(str), "{00F5FF}[Бизнес]: {FFFF00}Ты получил $%d от своего(их) %d бизнеса(ов)!", pData[a][Earnings], pData[a][Businesses]);
SendClientMessage(a, BIZZ_MESSAGE_COLOR, str);
}
return 1;
}
PHP:
Добавляем stock
PHP:
stock CreateAvailableBizzElements(BizzID)
{
DestroyBizzElements(BizzID)
bData[BizzID][mapid] = CreateDynamicMapIcon(bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_AVAIL_MAPICON, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_MAPICON_DRAWDISTANCE);
bData[BizzID][Pickupid] = CreateDynamicPickup(BIZZ_AVAIL_PICKUP_MODEL, 23, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_PICKUP_DRAWDISTANCE);
format(str, sizeof(str), "{009999}Бизнес: {ffffff}%s\n {009999}Стоимость: {ffffff}%d$", bData[BizzID][Name], bData[BizzID][Price]);
bData[BizzID][labelid] = CreateDynamic3DTextLabel(str, 0x00FF00FF, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_3DTAG_DRAWDISTANCE, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_3DTAG_DRAWDISTANCE);
}
PHP:
stock CreateUnvailableBizzElements(BizzID)
{
DestroyBizzElements(BizzID)
bData[BizzID][mapid] = CreateDynamicMapIcon(bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_UNAVAIL_MAPICON, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_MAPICON_DRAWDISTANCE);
bData[BizzID][Pickupid] = CreateDynamicPickup(BIZZ_UNAVAIL_PICKUP_MODEL, 23, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_PICKUP_DRAWDISTANCE);
format(str, sizeof(str), "{00B366}Бизнес {ffffff}%s \n{00B366}Владелец: {ffffff}%s", bData[BizzID][Name],bData[BizzID][Owner]);
bData[BizzID][labelid] = CreateDynamic3DTextLabel(str, BIZZ_3DTAG_COLOR, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_3DTAG_DRAWDISTANCE, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_3DTAG_DRAWDISTANCE);
}
PHP:
stock pName(playerid)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
return PlayerName;
}
PHP:
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Последнее редактирование:
