Скриптинг курилка

Quote:
Originally Posted by Nikid
View Post
Подскажите как правильно то сделать.
Вот есть 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);
}
Вопрос, как сделать чтоб чужой игрок не сел в чужой автомобиль? Как распределить авто и место для игроков?
Можно сделать по иду, но он ведь у каждого разный будет.
Данный код сажает одного и того же человека на все четыре места.
Reply

Quote:
Originally Posted by Stepashka
View Post
Данный код сажает одного и того же человека на все четыре места.
Я это знаю. Но как распределить всех заспавненых игроков на свое место?
Что для этого надо сделать?
Не пойму.
Несколько авто создается для 1 команды и надо чтоб несколько человек распределило по местам 1 транспорта, другую половину для другого. Но как распределить их по местам?
Reply

Ну раз никто ничего умного предложить не смог, то примерно так:

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);
		}
	}
}
Reply

Спасибо всем!
Reply

Ты там только проверку на команду добавь во второй код. Я просто твоей переменной, отвечающей за это, не знаю.
Reply

Все работает, только игрока кидает в спек не понятно почему.
Добавил
Code:
            TogglePlayerSpectating(i, false);
     		SetCameraBehindPlayer(i);
Решил проблему.
Reply

Расскажи, в чем была проблема. Надо было спавнить перед рассадкой?
Reply

Никто не подскажет проверка на существование колонки (столбца) в базе данных SQLite ?
Reply

Quote:
Originally Posted by Gameyer
View Post
Никто не подскажет проверка на существование колонки (столбца) в базе данных SQLite ?
Изначально глупый вопрос, ты же сам создаешь свои таблицы, как можно не знать какие столбцы ты создал?
А вообще:
Code:
SHOW COLUMNS FROM table
выдаст таблицу со следующими столбцами:
Code:
Field, Type, Null, Key, Default, Extra
тебе нужен будет первый.
Reply

Есть какой-нибудь плагин, чтобы вызывать нативные функции? Что-то вроде CallRemoteFunction.
Reply

Quote:
Originally Posted by Richard_Gere
Посмотреть сообщение
А SetVehicleVirtualWorld юзаешь?
Нулевой вирт.мир.
Reply

Quote:
Originally Posted by Urukhay
Посмотреть сообщение
Как настроить кликабельность текстдрава?
Пробовал разлиные значения TextDrawTextSize, но все равно не выделяется он при наведении мыши.
Опишите подробней какие значения пишутся в TextDrawTextSize. Оси и т.д.
TextDrawSetSelectable
Пользуйся.
Reply

Прошу помощи, у самого с геометрией туго. Нужна функция, которая бы определяла находится ли точка внутри плоскости, которая задана четырьмя точками.
Reply

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Прошу помощи, у самого с геометрией туго. Нужна функция, которая бы определяла находится ли точка внутри плоскости, которая задана четырьмя точками.
Т.е. четырёх угольник. Можно разбить на ряд треугольников. Метод определения точки в треугольнике сами выбирайте:
http://cyber-code.ru/tochka_v_treugolnike
Reply

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;
}
Данный код перебирает всех игроков, находит тех кто ближе всего к машине и попадает в определенную трапецивидную зону.

Вообще это кусок моего кода где комбайн может убить человека перемолов его в мясо, где-то тут вроде выложен. Зона - его жернова.
Reply

Quote:
Originally Posted by White_116
Посмотреть сообщение
Т.е. четырёх угольник. Можно разбить на ряд треугольников. Метод определения точки в треугольнике сами выбирайте:
http://cyber-code.ru/tochka_v_treugolnike
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, разделив зону на два треугольника.
Reply

Здравствуйте! Столкнулся с одной проблемой в 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);
        // ...
    }
}
Reply

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);
        // ...
    }
}
храни ИД в отдельной ячейке.
Reply

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
храни ИД в отдельной ячейке.
Ячейка, в смысле, в MySQL или в моде?
Reply

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
храни ИД в отдельной ячейке.
Можно ли сделать, чтобы insert into происходил к свободной строке (`id`)?
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)