PDA

Просмотр полной версии : [Вопрос] Проверка



Bady
08.09.2015, 17:23
Вообщем делаю цент купли-продажи, делаю покупку домов. Смысл заключается в том что когда нажимаешь дом,
Тебя отправляет камера на первый свободный дом.
Если свободных домов на сервере нету, нужно что бы сообщение выводило.
Помогите сделать проверку, я чет пытался, но не понял как правильнее будет сделать.

P.S. Додумался.


case dStateHouse:
{
new test = 0;
for(new houseid = 1; houseid <= TotalHouse; houseid++) if(HouseInfo[houseid][hOwned] == 0) test++;
if(test == 0) return SendClientMessage(playerid,COLOR_WHITE,"В данный момент на сервере нету свободных домов!");
if(test > 0)
{
for(new i = 1; i <= TotalHouse; i++)
{
if(HouseInfo[i][hOwned] == 0)
{
SetPlayerCameraPos(playerid, HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]+5);
SetPlayerCameraLookAt(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
SetPlayerPos(playerid,HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]);
}
}
return true;
}
}

Мужики, как сделать что бы камера всегда ровно была направлена на иконку дома ? Что бы не зависело где стоит дом.
Так же, у кого нибудь есть идеи по оптимизации моего кода выше?)

#Vito
08.09.2015, 20:14
for(new houseid = 1; houseid <= TotalHouse; houseid++) if(HouseInfo[houseid][hOwned] == 0) test++;
if(test == 0) return SendClientMessage(playerid,COLOR_WHITE,"В данный момент на сервере нету свободных домов!");
if(test > 0)
{
for(new i = 1; i <= TotalHouse; i++)
{

Ты серьезно?
Зачем 2 цикла?

new test;
for(new i = 1; i <= TotalHouse; i++)
{
if(HouseInfo[i][hOwned]) continue;
SetPlayerCameraPos(playerid, HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]+5);
SetPlayerCameraLookAt(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
SetPlayerPos(playerid,HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]);
test++;
break;
}
if(test == 0) return SendClientMessage(playerid,COLOR_WHITE,"В данный момент на сервере нету свободных домов!");


Мужики, как сделать что бы камера всегда ровно была направлена на иконку дома ? Что бы не зависело где стоит дом.
Так же, у кого нибудь есть идеи по оптимизации моего кода выше?)
А здесь на каждый дом нужно сохранять координаты.


enum HouseCord =
{
Float:Pos[6],
}
static const Float:HouseCoordination[MAX_HOUSE][HouseCord] =
{
{{x,y,z, x2,y2,z2}}
}

SetPlayerCameraPos(playerid, HouseCoordination[i][Pos][0], HouseCoordination[i][Pos][1], HouseCoordination[i][Pos][2]);
SetPlayerCameraLookAt(playerid,HouseCoordination[i][Pos][3], HouseCoordination[i][Pos][4], HouseCoordination[i][Pos][5]);
SetPlayerPos(playerid,HouseCoordination[i][Pos][0], HouseCoordination[i][Pos][1], HouseCoordination[i][Pos][2]);

Bady
08.09.2015, 22:34
Ты серьезно?
Зачем 2 цикла?

new test;
for(new i = 1; i <= TotalHouse; i++)
{
if(HouseInfo[i][hOwned]) continue;
SetPlayerCameraPos(playerid, HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]+5);
SetPlayerCameraLookAt(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
SetPlayerPos(playerid,HouseInfo[i][hEntrancex] -10.0, HouseInfo[i][hEntrancey] -15.0, HouseInfo[i][hEntrancez]);
test++;
break;
}
if(test == 0) return SendClientMessage(playerid,COLOR_WHITE,"В данный момент на сервере нету свободных домов!");


А здесь на каждый дом нужно сохранять координаты.


enum HouseCord =
{
Float:Pos[6],
}
static const Float:HouseCoordination[MAX_HOUSE][HouseCord] =
{
{{x,y,z, x2,y2,z2}}
}

SetPlayerCameraPos(playerid, HouseCoordination[i][Pos][0], HouseCoordination[i][Pos][1], HouseCoordination[i][Pos][2]);
SetPlayerCameraLookAt(playerid,HouseCoordination[i][Pos][3], HouseCoordination[i][Pos][4], HouseCoordination[i][Pos][5]);
SetPlayerPos(playerid,HouseCoordination[i][Pos][0], HouseCoordination[i][Pos][1], HouseCoordination[i][Pos][2]);

Я так понимаю что по позиции пикапа дома нельзя сделать камеру? (Что бы ровно шла) ?

#Vito
08.09.2015, 23:04
Я так понимаю что по позиции пикапа дома нельзя сделать камеру? (Что бы ровно шла) ?
Не-а, по объектам можно было бы, а по пикапам/чекпоинтам нельзя, разве что дом сверху показывать, либо показывать интерьер дома.

Bady
08.09.2015, 23:41
Не-а, по объектам можно было бы, а по пикапам/чекпоинтам нельзя, разве что дом сверху показывать, либо показывать интерьер дома.
Если пикап заменить на объект, тогда возможно было бы?

#Vito
08.09.2015, 23:51
Если пикап заменить на объект, тогда возможно было бы?
Если создавать через CreateDynamicObject, то вполне, но нужно устанавливать все объекты спиной к двери.
Используя координату rY можно узнавать угол поворота объекта, туда и направлять камеру

Bady
09.09.2015, 00:16
Если создавать через CreateDynamicObject, то вполне, но нужно устанавливать все объекты спиной к двери.
Используя координату rY можно узнавать угол поворота объекта, туда и направлять камеру
Кхм, спасибо. Пример создание камеры с верным углом поворота rY можно?
Допустим координаты: rx: 969.434, ry:-1309.21, rz: 13.555

#Vito
09.09.2015, 00:29
но нужно устанавливать все объекты спиной к двери.
Забудь.. Устанавливай лицом к двери.
Тогда получится примерно вот так:

SetPlayerCameraPos(playerid, x+15.0, y, z);
SetPlayerCameraLookAt(playerid, 969.434, -1309.21, 13.555);
На практике не проверял, но попробуй..