shape1
shape2
shape3
shape4
shape7
shape8

Помощь по системе гаражей.


Статус
Закрыто для дальнейших ответов.

MarkVatson

Новичок
Пользователь
15.04.2014
11
0
0
Я нашёл систему гаражей , но есть некоторые недоработки .

Вообщем у меня такие проблемы:

1. Игроки могут покупать бесконечное кол-во гаражей.

2. Машины , если они припаркованы в гараже , то после рестарта исчезают из него и все появляются в одном месте и в одном интерьере .

При спавне авто должно появляться в гараже, а имено в виртуальном мире гаража которым владеете. Но у меня почему то не так.
Вот система гаражей

#define GARAGE_X 207.51214600
#define GARAGE_Y -101.60099030
#define GARAGE_Z 1005.21362305
#define GARAGE_A 0.00000000
#define GARAGE_INT 15
enum gInfo
{
gOwner[32],
gPrice,
gLock,
Float:gX,
Float:gY,
Float:gZ,
Float:gA
};
new Garage[200][gInfo];
new TOTALGARAGE;
new Text3D:Text3DCar[200];

Код:
public OnGameModeInit()
LoadGarage();
Код:
if(strcmp(cmd,"/newga",true)==0)
{
TOTALGARAGE=TOTALGARAGE+1;
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X,Y,Z);
format(Garage[TOTALGARAGE][gOwner],24,"None");
Garage[TOTALGARAGE][gPrice] = 2000;
Garage[TOTALGARAGE][gLock] = 1;
Garage[TOTALGARAGE][gX] = X;
Garage[TOTALGARAGE][gY] = Y;
Garage[TOTALGARAGE][gZ] = Z;
Garage[TOTALGARAGE][gA] = 90;
if(!strcmp("None", Garage[TOTALGARAGE][gOwner], true))
{
format(string,sizeof(string),"Гараж номер%d\nПродаеться цена%d$]",TOTALGARAGE,Garage[TOTALGARAGE][gPrice]);
CreatePickup(1274, 1, Garage[TOTALGARAGE][gX], Garage[TOTALGARAGE][gY], Garage[TOTALGARAGE][gZ]);
}
Text3DCar[TOTALGARAGE] = CreateDynamic3DTextLabel(string, 0xCE9A00FF, Garage[TOTALGARAGE][gX], Garage[TOTALGARAGE][gY], Garage[TOTALGARAGE][gZ],10.0);
SaveGarage(TOTALGARAGE);
return 1;
}
if(strcmp(cmd,"/ga",true)==0)
{
new temp[256];
temp = strtok(cmdtext, idx);
if(!strlen(temp)) return SendClientMessage(playerid,COLOR_WHITE," Используйте: /ga [buy(купить) sell(продать) lock(закрыть) enter(войти) exit(выйти)");
if(strcmp(temp,"buy",true)==0)
{
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]))
{
if(!strcmp("None", Garage[gar][gOwner], true))
{
if(GetPlayerMoney(playerid) > Garage[gar][gPrice])
{
strmid(Garage[gar][gOwner], Name(playerid), 0, strlen(Name(playerid)), 255);
GiveMoney(playerid,-Garage[gar][gPrice]);
format(temp,sizeof(temp),"Гараж номер:[%d]\nВладелец:[%s]",gar,Garage[gar][gOwner]);
UpdateDynamic3DTextLabelText(Text3DCar[gar], 0xCE9A00FF, temp);
SaveGarage(gar);
return SendClientMessage(playerid,COLOR_WHITE," Вы успешно купили гараж");
}
else return SendClientMessage(playerid,COLOR_WHITE," У вас нету денег на покупку");
}
else return SendClientMessage(playerid,COLOR_WHITE," Гараж уже кем то куплен");
}
}
}
else if(strcmp(temp,"sell",true)==0)
{
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]))
{
if(!strcmp(Name(playerid), Garage[gar][gOwner], true))
{
strmid(Garage[gar][gOwner], "None", 0, strlen("None"), 255);
GiveMoney(playerid,Garage[gar][gPrice]/2);
Garage[gar][gLock] = 1;
SaveGarage(gar);
format(temp,sizeof(temp),"Гараж номер:[%d]\nПродаеться Цена:[%d$]",gar,Garage[gar][gPrice]);
UpdateDynamic3DTextLabelText(Text3DCar[gar], 0xCE9A00FF, temp);
return SendClientMessage(playerid,COLOR_WHITE," Вы успешно продали свой гараж");
}
else return SendClientMessage(playerid,COLOR_WHITE," Гараж не принадледит вам");
}
}
}
else if(strcmp(temp,"lock",true)==0)
{
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]) || (IsPlayerInRangeOfPoint(playerid, 20.0,GARAGE_X,GARAGE_Y,GARAGE_Z) && gar == GetPlayerVirtualWorld(playerid)))
{
if(!strcmp(Name(playerid), Garage[gar][gOwner], true))
{
if(Garage[gar][gLock] == 1)
{
Garage[gar][gLock] = 0;
SaveGarage(gar);
return SendClientMessage(playerid,COLOR_WHITE," Гараж открыт");
}
else
{
Garage[gar][gLock] = 1;
SaveGarage(gar);
return SendClientMessage(playerid,COLOR_WHITE," Гараж закрыт");
}
}
else return SendClientMessage(playerid,COLOR_WHITE," Гараж не принадлежит вам");
}
}
}
else if(strcmp(temp,"enter",true)==0)
{
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]))
{
if(Garage[gar][gLock] == 1) return SendClientMessage(playerid,COLOR_WHITE," Гараж закрыт");
if(IsPlayerInAnyVehicle(playerid))
{
// SetPlayerPos(playerid,GARAGE_X,GARAGE_Y,GARAGE_Z);
new carid = GetPlayerVehicleID(playerid);
SetVehiclePos(carid, GARAGE_X,GARAGE_Y,GARAGE_Z+1.0);
SetPlayerPos(playerid,GARAGE_X,GARAGE_Y,GARAGE_Z+1.0);
LinkVehicleToInterior(carid, GARAGE_INT);
SetVehicleVirtualWorld(carid, gar);
SetVehicleZAngle(carid, GARAGE_A);
SetPlayerInterior(playerid,GARAGE_INT);
SetPlayerVirtualWorld(playerid,gar);
PutPlayerInVehicle(playerid,carid,0);
}
else
{
SetPlayerPos(playerid,GARAGE_X,GARAGE_Y,GARAGE_Z+1.0);
SetPlayerInterior(playerid,GARAGE_INT);
SetPlayerVirtualWorld(playerid,gar);
}
break;
}
}
}
else if(strcmp(temp,"exit",true)==0)
{
if(GetPlayerVirtualWorld(playerid) == 0) return SendClientMessage(playerid,COLOR_WHITE," Вы не находитесь в гараже ");
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
if(IsPlayerInRangeOfPoint(playerid, 20.0,GARAGE_X,GARAGE_Y,GARAGE_Z) && gar == GetPlayerVirtualWorld(playerid))
{
if(IsPlayerInAnyVehicle(playerid))
{
new carid = GetPlayerVehicleID(playerid);
LinkVehicleToInterior(carid, 0);
SetVehicleVirtualWorld(carid, 0);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetVehiclePos(carid, Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+1.0);
SetVehicleZAngle(carid, Garage[gar][gA]);
SetPlayerPos(playerid,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+1.0);
PutPlayerInVehicle(playerid,carid,0);
}
else
{
SetPlayerPos(playerid,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+1.0);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
}
break;
}
}
}
return true;
}
Код:
stock LoadGarage()
{
new Open = ini_openFile("garage.cfg");
new str[20],string[255];

ini_getInteger(Open, "TOTALGARAGE", TOTALGARAGE);
new GarageInfo[7][32];
for(new gar = 1; gar <= TOTALGARAGE;gar++)
{
format(str,sizeof(str),"%d",gar);
ini_getString(Open, str, string);
split(string, GarageInfo, '|');
strmid(Garage[gar][gOwner], GarageInfo[0], 0, strlen(GarageInfo[0]), 32);
Garage[gar][gPrice] = strval(GarageInfo[1]);
Garage[gar][gLock] = strval(GarageInfo[2]);
Garage[gar][gX] = floatstr(GarageInfo[3]);
Garage[gar][gY] = floatstr(GarageInfo[4]);
Garage[gar][gZ] = floatstr(GarageInfo[5]);
Garage[gar][gA] = floatstr(GarageInfo[6]);
if(!strcmp("None", Garage[gar][gOwner], true))
{
format(string,sizeof(string),"Гараж номер%d]\nПродаеться цена%d$]",gar,Garage[gar][gPrice]);
CreatePickup(1274, 1, Garage[gar][gX], Garage[gar][gY], Garage[gar][gZ]);
}
else
{
format(string,sizeof(string),"Гараж номер%d]\nВладелец%s]",gar,Garage[gar][gOwner]);
CreatePickup(1239, 1, Garage[gar][gX], Garage[gar][gY], Garage[gar][gZ]);
}
Text3DCar[gar] = CreateDynamic3DTextLabel(string, 0xCE9A00FF, Garage[gar][gX], Garage[gar][gY], Garage[gar][gZ],10.0);
}
return ini_closeFile(Open);
}
//==============================================================================
stock SaveGarage(gar)
{
new Open = ini_openFile("garage.cfg");
new str[20],string[255];
ini_setInteger(Open, "TOTALGARAGE", TOTALGARAGE);
format(str,sizeof(str),"%d",gar);
format(string,sizeof(string),"%s|%d|%d|%f|%f|%f|%f",
Garage[gar][gOwner],
Garage[gar][gPrice],
Garage[gar][gLock],
Garage[gar][gX],
Garage[gar][gY],
Garage[gar][gZ],
Garage[gar][gA]);
ini_setString(Open, str, string);
return ini_closeFile(Open);
}
Мне подсказали , что надо сделать вот такое:

В команду парковки сделать вот такие строки :
new world = GetPlayerVirtualWorld(playerid);
new int = GetPlayerInterior(playerid);
CarInfo[GetRealID(cars)][cWorld] = world;
CarInfo[GetRealID(cars)][cInt] = int;
SaveCar(GetRealID(cars));
public OnVehicleSpawn(vehicleid)



public OnVehicleSpawn(vehicleid) добавить такие строки

SetVehicleVirtualWorld(vehicleid, CarInfo[GetRealID(vehicleid)][cWorld]);
LinkVehicleToInterior(vehicleid, CarInfo[GetRealID(vehicleid)][cInt]);
Вот мой public OnVehicleSpawn(vehicleid) не знаю , может я не так вставил выше написанные строчки.

Клик[/COLOR]]

{
{
if(!strcmp(CarInfo[GetRealID(vehicleid)][cOwner],"Nones",false))
{
SetVehiclePos(vehicleid,CarInfo[GetRealID(vehicleid)][cAx],CarInfo[GetRealID(vehicleid)][cAy],CarInfo[GetRealID(vehicleid)][cAz]);
SetVehicleZAngle(vehicleid,CarInfo[GetRealID(vehicleid)][cAa]);
SetVehicleVirtualWorld(vehicleid, CarInfo[GetRealID(vehicleid)][cWorld]);
LinkVehicleToInterior(vehicleid, CarInfo[GetRealID(vehicleid)][cInt]);
}
else
{
SetVehiclePos(vehicleid,CarInfo[GetRealID(vehicleid)][cPx],CarInfo[GetRealID(vehicleid)][cPy],CarInfo[GetRealID(vehicleid)][cPz]);
SetVehicleZAngle(vehicleid,CarInfo[GetRealID(vehicleid)][cPa]);
SetVehicleVirtualWorld(vehicleid, CarInfo[GetRealID(vehicleid)][cWorld]);
LinkVehicleToInterior(vehicleid, CarInfo[GetRealID(vehicleid)][cInt]);
}
ChangeVehicleColor(vehicleid,CarInfo[GetRealID(vehicleid)][cCol1],CarInfo[GetRealID(vehicleid)][cCol2]);
SetTuneCar(vehicleid);
ChangeVehiclePaintjob(vehicleid,CarInfo[GetRealID(vehicleid)][cPaintJob]);
SetTuneCar(vehicleid);
}
return 1;
}



И вот команда /park

Клик[/COLOR]]

Код:
	if(strcmp(cmd, "/park", true) == 0)
	{
		if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREEN, "..:: Drift::.. {FFFFFF}Вы должны быть в автомобиле");
		new cars = GetPlayerVehicleID(playerid);
		new world = GetPlayerVirtualWorld(playerid);
		new int = GetPlayerInterior(playerid);
		if(GetRealID(cars) == -1) return SendClientMessage(playerid, COLOR_GREEN, "..:: Drift::.. {FFFFFF}Вы должны быть в своём автомобиле");
		if(!strcmp(CarInfo[GetRealID(cars)][cOwner],Name(playerid),true))
		{
			GetVehiclePos(cars, CarInfo[GetRealID(cars)][cPx],CarInfo[GetRealID(cars)][cPy],CarInfo[GetRealID(cars)][cPz]);
			GetVehicleZAngle(cars, CarInfo[GetRealID(cars)][cPa]);
			CarInfo[GetRealID(cars)][cWorld] = world;
			CarInfo[GetRealID(cars)][cInt] = int;
			SaveCar(GetRealID(cars));
			SendClientMessage(playerid, COLOR_GREEN, "..:: Drift::.. {FFFFFF}Теперь ваш автомобиль будет припаркован в этом месте");
			return 1;
		}
		else return SendClientMessage(playerid, COLOR_GREEN, "..:: Drift::.. {FFFFFF}Этот транспорт не Ваш");
	}
 
A

Amfy

Гость
Гость
Колбэк OnVehicleSpawn срабатывает когда авто спавнится, а при загрузке мода нужно использовать колбэк OnGameModeInit. А, на счет кол-во гаражей, создайте переменную которая записывается в аккаунт игрока и при удачной покупке гаража, присваивайте этой переменной нужное значение и потом делайте условие типо:

Код:
if(PlayerInfo[playerid][pCountGarage] == 1) return SendClientMessage(playerid,-1,"У вас уже есть 1 гараж!");
 

MarkVatson

Новичок
Пользователь
15.04.2014
11
0
0
А что именно надо добавить в public OnGameModeInit ?

Я новичок в pawno , можешь ещё помочь с переменной ? 

 

MarkVatson

Новичок
Пользователь
15.04.2014
11
0
0
Нужна помощь с переменной!
 

Код:
if(PlayerInfo[playerid][pCountGarage] == 1) return SendClientMessage(playerid,-1,"У вас уже есть 1 гараж!");
 
A

Amfy

Гость
Гость
Пиши в skype: amfy123 за не большую сумму, думаю, можно исправить.

 
Статус
Закрыто для дальнейших ответов.