MrFoxy3010 1 Опубликовано 8 марта, 2020 SetVehicleSpeed(vehicleid, Float:speed) { new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a; GetVehicleVelocity(vehicleid, x1, y1, z1); GetVehiclePos(vehicleid, x2, y2, z2); GetVehicleZAngle(vehicleid, a); a = 360 - a; x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2; y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2; SetVehicleVelocity(vehicleid, x1, y1, z1); } создал массив static const max_veh_speed[] = { 280,210,300,120,310,265,110,170,110,210,260,260,280,160,140,350,255,200,150,260,280,240, 165,145,240,240,220,240,280,200,180,130,180,280,200,240,180,280,300,160,260,280,150,240,200, 165,280,200,190,150,280,240,190,190,190,140,160,240,165,160,220,190,190,190,75,280,180,160, 190,220,170,160,190,180,240,160,220,200,280,280,200,220,150,120,190,160,150,200,200,220,180, 180,160,410,240,180,200,200,160,240,240,240,280,240,240,260,220,180,140,120,140,200,200,200,240, 240,220,220,200,330,330,310,200,220,220,220,260,220,180,160,60,70,220,220,220,200,160,110,220,360, 180,280,160,180,240,160,160,160,180,220,240,165,200,200,170,180,200,200,180,200,200,200,180,240,220, 200,160,160,170,110,200,90,160,180,60,180,220,200,180,180,165,190,200,170,220,165,200,220,140,200,110, 120,200,200,60,190,260,200,240,220,185,110,220,240,240,285,160,160,160,140,160,160}; Вопрос: Как изменить скорость? Хотя бы идею подскажите Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 16Shadows 101 Опубликовано 9 марта, 2020 Вызывать SetVehicleSpeed раз в некоторый промежуток времени, если скорость ниже желаемой максимальной, но больше или примерно равна максимальной стандартной, и игрок жмёт кнопку вперёд. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 PhNst27 1 Опубликовано 9 марта, 2020 Я лично сделал так: 1) Создал таймер вот-такой таймер для каждого т/с на сервере new CarSpeedTimer[MAX_VEHICLES]; Создал функцию: forward CarSpeed(playerid); public CarSpeed(playerid) { new State = GetPlayerState(playerid); //узнаем место игрока if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость maxspeed = CarInfo[vid][cSpeed]; vid = GetPlayerVehicleID(playerid); GetVehicleVelocity(vid, D[0], D[1], D[2]); nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3; //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч) if(dis <= 0.2) { if(nowspeed <=10) { dis = 0; }else if(nowspeed >= maxspeed){ dis = 0; }else{ dis = dis+(1/CarInfo[vid][cSecToHu]); } } GetVehicleZAngle(vid, D[3]); SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]); return 1; } и в OnPlayerKeyStateChange добавляем проверку на зажатую клавишу W if (PRESSED(KEY_SPRINT)) { CarSpeedTimer[GetPlayerVehicleID(playerid)]=SetTimer("CarSpeed", 1000, 1); } else if (RELEASED(KEY_SPRINT)) { KillTimer(CarSpeedTimer[GetPlayerVehicleID(playerid)]); dis = 0.0; //SendClientMessage(playerid, COLOR_RED, "Вы ее отпустили"); } return true; 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 16Shadows 101 Опубликовано 10 марта, 2020 Если у Вас таймер выполняется для каждого игрока, то Вам нет смысла создавать массив размером MAX_VEHICLES. Стандартный лимит машин больше лимита игроков. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 павел200608 0 Опубликовано 21 мая, 2020 В 3/9/2020 в 7:02 PM, PhNst27 сказал: Я лично сделал так: 1) Создал таймер вот-такой таймер для каждого т/с на сервере new CarSpeedTimer[MAX_VEHICLES]; Создал функцию: forward CarSpeed(playerid); public CarSpeed(playerid) { new State = GetPlayerState(playerid); //узнаем место игрока if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость maxspeed = CarInfo[vid][cSpeed]; vid = GetPlayerVehicleID(playerid); GetVehicleVelocity(vid, D[0], D[1], D[2]); nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3; //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч) if(dis <= 0.2) { if(nowspeed <=10) { dis = 0; }else if(nowspeed >= maxspeed){ dis = 0; }else{ dis = dis+(1/CarInfo[vid][cSecToHu]); } } GetVehicleZAngle(vid, D[3]); SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]); return 1; } и в OnPlayerKeyStateChange добавляем проверку на зажатую клавишу W if (PRESSED(KEY_SPRINT)) { CarSpeedTimer[GetPlayerVehicleID(playerid)]=SetTimer("CarSpeed", 1000, 1); } else if (RELEASED(KEY_SPRINT)) { KillTimer(CarSpeedTimer[GetPlayerVehicleID(playerid)]); dis = 0.0; //SendClientMessage(playerid, COLOR_RED, "Вы ее отпустили"); } return true; помоги . ошибки при компиляции (3602) : error 017: undefined symbol "CarInfo" C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : warning 215: expression has no effect C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 001: expected token: ";", but found "]" C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 029: invalid expression, assumed zero C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : fatal error 107: too many error messages on one line вот строки: forward CarSpeed(playerid); public CarSpeed(playerid) { new State = GetPlayerState(playerid); //узнаем место игрока if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость maxspeed = CarInfo[vid][cSpeed];<<<< ТУТ ОШИБКА<<<<< vid = GetPlayerVehicleID(playerid); GetVehicleVelocity(vid, D[0], D[1], D[2]); nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3; //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч) if(dis <= 0.2) { if(nowspeed <=10) { dis = 0; }else if(nowspeed >= maxspeed){ dis = 0; }else{ dis = dis+(1/CarInfo[vid][cSecToHu]); } } GetVehicleZAngle(vid, D[3]); SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]); return 1; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 PhNst27 1 Опубликовано 22 мая, 2020 В 5/21/2020 в 3:04 PM, павел200608 сказал: помоги . ошибки при компиляции (3602) : error 017: undefined symbol "CarInfo" C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : warning 215: expression has no effect C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 001: expected token: ";", but found "]" C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 029: invalid expression, assumed zero C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : fatal error 107: too many error messages on one line вот строки: forward CarSpeed(playerid); public CarSpeed(playerid) { new State = GetPlayerState(playerid); //узнаем место игрока if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость maxspeed = CarInfo[vid][cSpeed];<<<< ТУТ ОШИБКА<<<<< vid = GetPlayerVehicleID(playerid); GetVehicleVelocity(vid, D[0], D[1], D[2]); nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3; //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч) if(dis <= 0.2) { if(nowspeed <=10) { dis = 0; }else if(nowspeed >= maxspeed){ dis = 0; }else{ dis = dis+(1/CarInfo[vid][cSecToHu]); } } GetVehicleZAngle(vid, D[3]); SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]); return 1; } enum cInfo { cId, cModel, cPlayer[MAX_PLAYER_NAME], cFuelType[48], Float:cSpeed, Float:cFuel, } new CarInfo[MAX_VEHICLES][cInfo]; CarInfo - это мой массив в котором я храню характеристики авто, в данном случае cSpeed - это максимальная скорость авто. Если остались вопросы, то спрашивай, помогу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 павел200608 0 Опубликовано 23 мая, 2020 (изменено) 19 часов назад, PhNst27 сказал: enum cInfo { cId, cModel, cPlayer[MAX_PLAYER_NAME], cFuelType[48], Float:cSpeed, Float:cFuel, } new CarInfo[MAX_VEHICLES][cInfo]; CarInfo - это мой массив в котором я храню характеристики авто, в данном случае cSpeed - это максимальная скорость авто. Если остались вопросы, то спрашивай, помогу. куда это вставлять? просто я новичок в павно Изменено 23 мая, 2020 пользователем павел200608 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SetVehicleSpeed(vehicleid, Float:speed) { new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a; GetVehicleVelocity(vehicleid, x1, y1, z1); GetVehiclePos(vehicleid, x2, y2, z2); GetVehicleZAngle(vehicleid, a); a = 360 - a; x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2; y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2; SetVehicleVelocity(vehicleid, x1, y1, z1); }
создал массив
static const max_veh_speed[] = { 280,210,300,120,310,265,110,170,110,210,260,260,280,160,140,350,255,200,150,260,280,240, 165,145,240,240,220,240,280,200,180,130,180,280,200,240,180,280,300,160,260,280,150,240,200, 165,280,200,190,150,280,240,190,190,190,140,160,240,165,160,220,190,190,190,75,280,180,160, 190,220,170,160,190,180,240,160,220,200,280,280,200,220,150,120,190,160,150,200,200,220,180, 180,160,410,240,180,200,200,160,240,240,240,280,240,240,260,220,180,140,120,140,200,200,200,240, 240,220,220,200,330,330,310,200,220,220,220,260,220,180,160,60,70,220,220,220,200,160,110,220,360, 180,280,160,180,240,160,160,160,180,220,240,165,200,200,170,180,200,200,180,200,200,200,180,240,220, 200,160,160,170,110,200,90,160,180,60,180,220,200,180,180,165,190,200,170,220,165,200,220,140,200,110, 120,200,200,60,190,260,200,240,220,185,110,220,240,240,285,160,160,160,140,160,160};
Вопрос: Как изменить скорость? Хотя бы идею подскажите
Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты