Re: Скриптинг курилка -
Stepashka - 28.11.2013
Quote:
Originally Posted by Nikid
Подскажите как правильно то сделать.
Вот есть 2 или более авто, в них должно быть по 2 или 4 человека.
При спавне игроки должны сесть на свои места.
Использую:
Code:
Veh = CreateVehicle
for(new i = 0; i < MAX_PLAYERS; i++){
PutPlayerInVehicle(i, Veh , 0);
PutPlayerInVehicle(i, Veh , 1);
PutPlayerInVehicle(i, Veh , 2);
PutPlayerInVehicle(i, Veh , 3);
}
Вопрос, как сделать чтоб чужой игрок не сел в чужой автомобиль? Как распределить авто и место для игроков?
Можно сделать по иду, но он ведь у каждого разный будет.
|
Данный код сажает одного и того же человека на все четыре места.
Re: Скриптинг курилка -
Nikid - 28.11.2013
Quote:
Originally Posted by Stepashka
Данный код сажает одного и того же человека на все четыре места.
|
Я это знаю. Но как распределить всех заспавненых игроков на свое место?
Что для этого надо сделать?
Не пойму.
Несколько авто создается для 1 команды и надо чтоб несколько человек распределило по местам 1 транспорта, другую половину для другого. Но как распределить их по местам?
Re: Скриптинг курилка -
OKStyle - 28.11.2013
Ну раз никто ничего умного предложить не смог, то примерно так:
Code:
new Veh[10], VehSeats[MAX_VEHICLES][4];
Veh[0] = CreateVehicle(...);
...
Veh[9] = CreateVehicle(...);
for(new i = Veh[0]; i <= Veh[9]; i++)
{
if(GetVehicleModel(i) == 0) continue;
for(new j = 0; j < 4; j++) VehSeats[i][j] = INVALID_PLAYER_ID;
}
Code:
for(new i = GetMaxPlayers() - 1; i != -1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
for(new j = Veh[0]; j <= Veh[9]; j++)
{
if(GetVehicleModel(j) == 0) continue;
for(new k = 0; k < 4; k++)
{
if(VehSeats[j][k] != INVALID_PLAYER_ID) continue;
PutPlayerInVehicle(i, j , k);
}
}
}
Re: Скриптинг курилка -
Nikid - 28.11.2013
Спасибо всем!
Re: Скриптинг курилка -
OKStyle - 28.11.2013
Ты там только проверку на команду добавь во второй код. Я просто твоей переменной, отвечающей за это, не знаю.
Re: Скриптинг курилка -
Nikid - 28.11.2013
Все работает, только игрока кидает в спек не понятно почему.
Добавил
Code:
TogglePlayerSpectating(i, false);
SetCameraBehindPlayer(i);
Решил проблему.
Re: Скриптинг курилка -
OKStyle - 29.11.2013
Расскажи, в чем была проблема. Надо было спавнить перед рассадкой?
Re: Скриптинг курилка -
Gameyer - 29.11.2013
Никто не подскажет проверка на существование колонки (столбца) в базе данных SQLite ?
Re: Скриптинг курилка -
Stepashka - 29.11.2013
Quote:
Originally Posted by Gameyer
Никто не подскажет проверка на существование колонки (столбца) в базе данных SQLite ?
|
Изначально глупый вопрос, ты же сам создаешь свои таблицы, как можно не знать какие столбцы ты создал?
А вообще:
Code:
SHOW COLUMNS FROM table
выдаст таблицу со следующими столбцами:
Code:
Field, Type, Null, Key, Default, Extra
тебе нужен будет первый.
Re: Скриптинг курилка -
stabker - 29.11.2013
Есть какой-нибудь плагин, чтобы вызывать нативные функции? Что-то вроде CallRemoteFunction.
Re: Скриптинг курилка -
Jebster - 02.12.2013
Quote:
Originally Posted by Richard_Gere
|
Нулевой вирт.мир.
Re: Скриптинг курилка -
mpzila - 02.12.2013
Quote:
Originally Posted by Urukhay
Как настроить кликабельность текстдрава?
Пробовал разлиные значения TextDrawTextSize, но все равно не выделяется он при наведении мыши.
Опишите подробней какие значения пишутся в TextDrawTextSize. Оси и т.д.
|
TextDrawSetSelectable
Пользуйся.
Re: Скриптинг курилка -
ZiGGi - 03.12.2013
Прошу помощи, у самого с геометрией туго. Нужна функция, которая бы определяла находится ли точка внутри плоскости, которая задана четырьмя точками.
Re: Скриптинг курилка -
White_116 - 03.12.2013
Quote:
Originally Posted by ZiGGi
Прошу помощи, у самого с геометрией туго. Нужна функция, которая бы определяла находится ли точка внутри плоскости, которая задана четырьмя точками.
|
Т.е. четырёх угольник. Можно разбить на ряд треугольников. Метод определения точки в треугольнике сами выбирайте:
http://cyber-code.ru/tochka_v_treugolnike
Re: Скриптинг курилка -
Stepashka - 03.12.2013
Quote:
Originally Posted by ZiGGi
Прошу помощи, у самого с геометрией туго. Нужна функция, которая бы определяла находится ли точка внутри плоскости, которая задана четырьмя точками.
|
Разбиваешь на 4 треугольника, считаешь площадь исходной фигуры и поучившихся треугольников, и сравниваешь, если равны значит внутри.
Вот нашел, когда-то давно написали совместно с
[RD]Chez:
pawn Код:
//определение площали треугольника по координатам, по формуле Герона
stock Float:SqrGeron(Float:ax, Float:ay, Float:bx, Float:by, Float:cx, Float:cy)
{
new Float:pSG,Float:aSG,Float:bSG,Float:cSG;
aSG=floatsqroot(((cx-bx)*(cx-bx)+(cy-by)*(cy-by)));
bSG=floatsqroot(((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy)));
cSG=floatsqroot(((ax-bx)*(ax-bx)+(ay-by)*(ay-by)));
pSG=(aSG+bSG+cSG)/2;
return floatsqroot((pSG*(pSG-aSG)*(pSG-bSG)*(pSG-cSG)));
}
Meat(ID)
{
new Float:x1,Float:y1,Float:z1,Float:amg;
new Float:distance = 9999999.9,Target=INVALID_PLAYER_ID;
new Float:x2,Float:y2,Float:z2;
GetVehiclePos(ID,x1,y1,z1);
GetVehicleZAngle(ID,amg);
//определение 4 точек у фигуры(плевать какая)
new Float:a1 = x1 + 7.0*floatcos(amg-305, degrees);new Float:a2 = y1 + 7.0*floatsin(amg-305, degrees);//1
new Float:b1 = x1 + 8.5*floatcos(amg-305, degrees);new Float:b2 = y1 + 8.5*floatsin(amg-305, degrees);//2
new Float:c1 = x1 + 7.0*floatcos(amg-235, degrees);new Float:c2 = y1 + 7.0*floatsin(amg-235, degrees);//3
new Float:d1 = x1 + 8.5*floatcos(amg-235, degrees);new Float:d2 = y1 + 8.5*floatsin(amg-235, degrees);//4
for(new playerid;playerid < MAX_PLAYERS;playerid++)
{
if(IsPlayerConnected(playerid) && GetPlayerState(playerid) == 1 && !IsPlayerInVehicle(playerid,ID))
{
GetPlayerPos(playerid,x2,y2,z2);
if( distance > floatsqroot(floatpower(floatabs(floatsub(x1,x2)),2)+floatpower(floatabs(floatsub(y1,y2)),2)+floatpower(floatabs(floatsub(z1,z2)),2)) )
{
distance = floatsqroot(floatpower(floatabs(floatsub(x1,x2)),2)+floatpower(floatabs(floatsub(y1,y2)),2)+floatpower(floatabs(floatsub(z1,z2)),2));
//собственно сама проверка, 0.05 погрешность
if( -0.05 < SqrGeron(a1,a2,b1,b2,d1,d2)+SqrGeron(a1,a2,c1,c2,d1,d2) - (SqrGeron(a1,a2,b1,b2,x2,y2)+SqrGeron(a1,a2,c1,c2,x2,y2)+SqrGeron(x2,y2,b1,b2,d1,d2)+SqrGeron(x2,y2,d1,d2,c1,c2)) < 0.05 )
{
Target = playerid;
}
}
}
}
return Target;
}
Данный код перебирает всех игроков, находит тех кто ближе всего к машине и попадает в определенную трапецивидную зону.
Вообще это кусок моего кода где комбайн может убить человека перемолов его в мясо, где-то тут вроде выложен. Зона - его жернова.
Re: Скриптинг курилка -
ZiGGi - 03.12.2013
Quote:
Originally Posted by White_116
|
Quote:
Originally Posted by Stepashka
Разбиваешь на 4 треугольника, считаешь площадь исходной фигуры и поучившихся треугольников, и сравниваешь, если равны значит внутри.
Вот нашел, когда-то давно написали совместно с [RD]Chez:
pawn Код:
//определение площали треугольника по координатам, по формуле Герона stock Float:SqrGeron(Float:ax, Float:ay, Float:bx, Float:by, Float:cx, Float:cy) { new Float:pSG,Float:aSG,Float:bSG,Float:cSG; aSG=floatsqroot(((cx-bx)*(cx-bx)+(cy-by)*(cy-by))); bSG=floatsqroot(((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy))); cSG=floatsqroot(((ax-bx)*(ax-bx)+(ay-by)*(ay-by))); pSG=(aSG+bSG+cSG)/2; return floatsqroot((pSG*(pSG-aSG)*(pSG-bSG)*(pSG-cSG))); }
Meat(ID) { new Float:x1,Float:y1,Float:z1,Float:amg; new Float:distance = 9999999.9,Target=INVALID_PLAYER_ID; new Float:x2,Float:y2,Float:z2; GetVehiclePos(ID,x1,y1,z1); GetVehicleZAngle(ID,amg); //определение 4 точек у фигуры(плевать какая) new Float:a1 = x1 + 7.0*floatcos(amg-305, degrees);new Float:a2 = y1 + 7.0*floatsin(amg-305, degrees);//1 new Float:b1 = x1 + 8.5*floatcos(amg-305, degrees);new Float:b2 = y1 + 8.5*floatsin(amg-305, degrees);//2 new Float:c1 = x1 + 7.0*floatcos(amg-235, degrees);new Float:c2 = y1 + 7.0*floatsin(amg-235, degrees);//3 new Float:d1 = x1 + 8.5*floatcos(amg-235, degrees);new Float:d2 = y1 + 8.5*floatsin(amg-235, degrees);//4 for(new playerid;playerid < MAX_PLAYERS;playerid++) { if(IsPlayerConnected(playerid) && GetPlayerState(playerid) == 1 && !IsPlayerInVehicle(playerid,ID)) { GetPlayerPos(playerid,x2,y2,z2); if( distance > floatsqroot(floatpower(floatabs(floatsub(x1,x2)),2)+floatpower(floatabs(floatsub(y1,y2)),2)+floatpower(floatabs(floatsub(z1,z2)),2)) ) { distance = floatsqroot(floatpower(floatabs(floatsub(x1,x2)),2)+floatpower(floatabs(floatsub(y1,y2)),2)+floatpower(floatabs(floatsub(z1,z2)),2)); //собственно сама проверка, 0.05 погрешность if( -0.05 < SqrGeron(a1,a2,b1,b2,d1,d2)+SqrGeron(a1,a2,c1,c2,d1,d2) - (SqrGeron(a1,a2,b1,b2,x2,y2)+SqrGeron(a1,a2,c1,c2,x2,y2)+SqrGeron(x2,y2,b1,b2,d1,d2)+SqrGeron(x2,y2,d1,d2,c1,c2)) < 0.05 ) { Target = playerid; } } } } return Target; }
Данный код перебирает всех игроков, находит тех кто ближе всего к машине и попадает в определенную трапецивидную зону.
Вообще это кусок моего кода где комбайн может убить человека перемолов его в мясо, где-то тут вроде выложен. Зона - его жернова.
|
Спасибо, воспользовался способом из
http://cyber-code.ru/tochka_v_treugolnike, разделив зону на два треугольника.
Re: Скриптинг курилка -
GreenS - 04.12.2013
Здравствуйте! Столкнулся с одной проблемой в MySQL.
Дело в том, что в таблице стоит
auto_increment. И когда в моде начинается загрузка из данной таблицы, то начинает загрузку с 0 значения. Если например у меня в `id` начинается с 3, а он это запишет, например, в 0 ид, а не в 2 (там идет отсчет с 0). Срочно нужна помощь.
pawn Код:
new rows, fields;
cache_get_data(rows, fields);
if(rows > 0)
{
for(new idx; idx < rows; idx++)
{
CarInfo[idx][cID] = cache_get_row_int(idx, 0);
// ...
}
}
Re: Скриптинг курилка -
Stepashka - 04.12.2013
Quote:
Originally Posted by GreenS
Здравствуйте! Столкнулся с одной проблемой в MySQL.
Дело в том, что в таблице стоит auto_increment. И когда в моде начинается загрузка из данной таблицы, то начинает загрузку с 0 значения. Если например у меня в `id` начинается с 3, а он это запишет, например, в 0 ид, а не в 2 (там идет отсчет с 0). Срочно нужна помощь.
pawn Код:
new rows, fields; cache_get_data(rows, fields); if(rows > 0) { for(new idx; idx < rows; idx++) { CarInfo[idx][cID] = cache_get_row_int(idx, 0); // ... } }
|
храни ИД в отдельной ячейке.
Re: Скриптинг курилка -
GreenS - 04.12.2013
Quote:
Originally Posted by Stepashka
храни ИД в отдельной ячейке.
|
Ячейка, в смысле, в MySQL или в моде?
Re: Скриптинг курилка -
GreenS - 04.12.2013
Quote:
Originally Posted by Stepashka
храни ИД в отдельной ячейке.
|
Можно ли сделать, чтобы
insert into происходил к свободной строке (`id`)?