От
Chopick
Всем здравствуйте! Делаю систему домов/бизнесов по туториалу knox know с плагином GoodArea. Есть проблема, если заходишь в интерьер бизнеса, то когда выходишь спавнит почему-то на пикап дома.
Вот енумы:
#define MAX_HOUSES 1000
#define MAX_BIZS 1000
enum house
{
hID,
STREAMER_TAG_PICKUP:hPICKUP,
STREAMER_TAG_AREA:hAREA,
hOWNER[MAX_PLAYER_NAME],
STREAMER_TAG_3D_TEXT_LABEL:hTEXT[256],
STREAMER_TAG_MAP_ICON:hICON,
hPRICE,
hCLASS,
hINTERIOR,
Float:hX,
Float:hY,
Float:hZ,
Float:hA,
hCONDITION // Закрыт/Открыт
}
new House[MAX_HOUSES][house];
new Houses;
new HouseGroup;
enum biz
{
bID,
STREAMER_TAG_PICKUP:bPICKUP,
STREAMER_TAG_AREA:bAREA,
bOWNER[MAX_PLAYER_NAME],
STREAMER_TAG_3D_TEXT_LABEL:bTEXT[256],
STREAMER_TAG_MAP_ICON:bICON,
bNAME[25],
bPRICE,
bTYPE,
bINTERIOR,
Float:bX,
Float:bY,
Float:bZ,
Float:bA
}
new Biz[MAX_BIZS][biz];
new Bizs;
new BizGroup;
enum interior_info
{
intID,
intNAME[41],
intINTERIOR,
Float:intX,
Float:intY,
Float:intZ,
Float:intA,
STREAMER_TAG_AREA:intAREA
}
new Interior[MAX_INTERIORS][interior_info];
new Interiors;
new InteriorGroup;
Вот что у меня в OnGameModeInit:
HouseGroup = CreateGroupGoodAreas(GoodArea:HouseEnter);
InteriorGroup = CreateGroupGoodAreas(GoodArea:InteriorExit);
BizGroup = CreateGroupGoodAreas(GoodArea:BizArea);
Вот стоки:
GAResponse:HouseEnter(playerid, response, key, index)
{
switch(response)
{
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
if(House[index][hCONDITION] > 0 && House[index][hOWNER] == player_info[playerid][NAME] || House[index][hCONDITION] == 0)
{
GoToInterior(playerid, House[index][hINTERIOR]);
SetPlayerVirtualWorld(playerid, index);
}
else if(House[index][hCONDITION] > 0 && House[index][hOWNER] != player_info[playerid][NAME]) return SCM(playerid, COLOR_RED, "[Ошибка]{ffffff}Этот дом закрыт на ключ!");
}
}
case GA_RESPONSE_ENTER:
{
if(House[index][hOWNER] == 0)
{
CreateNoOwnerHouseTD(playerid);
for(new i = 0; i < sizeof NoOwnerTextDraw_PTD[]; i++)
{
PlayerTextDrawShow(playerid, NoOwnerTextDraw_PTD[playerid][i]);
}
new price[8];
format(price, sizeof(price), "%d$", House[index][hPRICE]);
PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][2], price);
new id[9];
format(id, sizeof(id), "%d", House[index][hID]);
PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][0], id);
switch(House[index][hCLASS])
{
case 1: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "A");
case 2: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "B");
case 3: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "C");
}
for(new i = 0; i < sizeof NoOwnerTextDraw_TD; i++)
{
TextDrawShowForPlayer(playerid, NoOwnerTextDraw_TD[i]);
}
}
}
case GA_RESPONSE_LEAVE:
{
for(new i = 0; i < sizeof NoOwnerTextDraw_PTD[]; i++)
{
PlayerTextDrawHide(playerid, NoOwnerTextDraw_PTD[playerid][i]);
}
for(new i = 0; i < sizeof NoOwnerTextDraw_TD; i++)
{
TextDrawHideForPlayer(playerid, NoOwnerTextDraw_TD[i]);
}
}
}
return 1;
}
GAResponse:BizArea(playerid, response, key, index)
{
switch(response)
{
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
GoToInteriorBiz(playerid, Biz[index][bINTERIOR]);
SetPlayerVirtualWorld(playerid, index);
}
}
}
return 1;
}
GAResponse:InteriorExit(playerid, response, key, index)
{
switch(response)
{
case GA_RESPONSE_PRESS_KEY:
{
new world = GetPlayerVirtualWorld(playerid);
if(key & KEY_WALK)
{
if(world < MAX_HOUSES)
{
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid, House[world][hX], House[world][hY], House[world][hZ]);
SetPlayerFacingAngle(playerid, House[world][hA]);
}
else if(world < MAX_HOUSES + MAX_BIZS)
{
world -= MAX_HOUSES;
printf("%d index world", world);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid, Biz[world][bX], Biz[world][bY], Biz[world][bZ]);
SetPlayerFacingAngle(playerid, Biz[world][bA]);
}
}
if(key & KEY_CTRL_BACK)
{
if(player_info[playerid][HOUSE] != House[world][hID]) return SCM(playerid, COLOR_RED, "[Ошибка]{ffffff}Вы не владелец данного дома!");
new dialog[256];
format(dialog, sizeof(dialog),
"{ffd900}[1]{ffffff}Информация о доме\n\
{ffd900}[2]{ffffff}%s дом",
(House[world][hCONDITION] == 1) ? ("{00ff00}Открыть") : ("{ff0000}Закрыть"));
SPD(playerid, DLG_HMENU, DIALOG_STYLE_LIST, "{ffd900}Меню дома", dialog, "Выбрать", "Закрыть");
return 1;
}
}
}
return 1;
}
stock GoToInterior(playerid, interior)
{
for(new i = 0; i < Interiors; i++)
{
if(Interior[i][intID] != interior) continue;
SetPlayerInterior(playerid, Interior[i][intINTERIOR]);
SetPlayerPos(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ]);
SetPlayerFacingAngle(playerid, Interior[i][intA]);
SetPlayerCheckpoint(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 1.0);
new str[128];
format(str, sizeof(str),
"Нажмите \"ALT\" для выхода\n\
Нажмите \"H\", чтобы открыть меню дома");
Create3DTextLabel(str, -1, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 15.0, 0, 1);
return 1;
}
return 0;
}
stock GoToInteriorBiz(playerid, interior)
{
for(new i = 0; i < Interiors; i++)
{
if(Interior[i][intID] != interior) continue;
SetPlayerInterior(playerid, Interior[i][intINTERIOR]);
SetPlayerPos(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ]);
SetPlayerFacingAngle(playerid, Interior[i][intA]);
SetPlayerCheckpoint(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 1.0);
new str[128];
format(str, sizeof(str),
"Нажмите \"ALT\" для выхода");
Create3DTextLabel(str, -1, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 15.0, 0, 1);
return 1;
}
return 0;
}
Что мне делать, подскажите пожалуйста?