• 0
Homer4ik

Кто-нибудь знает как именно на определенную машину установить скорость с этим скриптом?

Вопросы

Кто-нибудь знает как именно на определенную машину установить скорость с этим скриптом?

 

Спойлер

stock SetVehicleSpeed(vehicleid,mph)
{
new Float:Vx, Float:Vy, Float:Vz ,Float:speeds, Float:multiple;
GetVehicleVelocity(vehicleid,Vx,Vy,Vz);
speeds = floatsqroot(Vx*Vx + Vy*Vy + Vz*Vz);
if(speeds > 0)
{
multiple = (mph / (speeds * 250));
return SetVehicleVelocity(vehicleid, Vx*multiple, Vy*multiple, Vz*multiple);
}
return 0;
}

 

Поделиться сообщением


Ссылка на сообщение

38 ответов на этот вопрос

  • 0

@Homer4ik Этот скрипт не устанавливает новую скорость, он лишь дает машине разгона. 

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik Этот скрипт не устанавливает новую скорость, он лишь дает машине разгона. 

Ну как поставить на определенную машину разгон такой-то

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik Точнее придаст резкое ускорение определенной машине на указанное кол-во "миль в час". 

А сделать очень просто, нужно добавить туда, где хотите добавить ускорение следующий код: 
 

SetVehicleSpeed(GetPlayerVehicleID(playerid),20); // добавит ускорение машине, в которой сидит игрок, на 20 миль в час

 

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik Точнее придаст резкое ускорение определенной машине на указанное кол-во "миль в час". 

А сделать очень просто, нужно добавить туда, где хотите добавить ускорение следующий код: 
 


SetVehicleSpeed(GetPlayerVehicleID(playerid),20); // добавит ускорение машине, в которой сидит игрок, на 20 миль в час

 

это куда вставлять?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik например, можете сделать так :

Ко всем new: 

new timer[MAX_PLAYERS]; 

В OnPlayerStateChange после { вставьте: 

if(newstate == PLAYER_STATE_DRIVER)
  timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid); 
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

В конец мода (можно после стока SetVehicleSpeed)
 

forward SpeedVehicle(playerid); 
public SpeedVehicle(playerid) return SetVehicleSpeed(GetPlayerVehicleID(playerid), 5); 

В результате каждые 10 секунд машине будет прибавляться по 5 миль / ч к скорости. 

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik например, можете сделать так :

Ко всем new: 


new timer[MAX_PLAYERS]; 

В OnPlayerStateChange после { вставьте: 


if(newstate == PLAYER_STATE_DRIVER)
  timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid); 
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

В конец мода (можно после стока SetVehicleSpeed)
 


forward SpeedVehicle(playerid); 
public SpeedVehicle(playerid) return SetVehicleSpeed(GetPlayerVehicleID(playerid), 5); 

В результате каждые 10 секунд машине будет прибавляться по 5 миль / ч к скорости. 

Это той машине в которой сидит игрок? А для каждой машины разное ускорение нельзя, как на ра*мире

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik Тогда сделайте так (замените предыдущий код): 

if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 
}
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

И соответственно паблик этим: 

forward SpeedVehicle(playerid, modelid); 
public SpeedVehicle(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

Вместо X ид первой машины, вместо XXmph ускорение для первой машины в миль/час.. 

Вместо Y ид второй машины, вместо YYmph ускорение для второй машины в миль/час. 

Дальше добавлять по аналогии. 
 

Поделиться сообщением


Ссылка на сообщение
  • 0
8 минут назад, DEST сказал:

@Homer4ik Тогда сделайте так (замените предыдущий код): 


if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 
}
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

И соответственно паблик этим: 


forward SpeedVehicle(playerid, modelid); 
public SpeedVehicle(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

Вместо X ид первой машины, вместо XXmph ускорение для первой машины в миль/час.. 

Вместо Y ид второй машины, вместо YYmph ускорение для второй машины в миль/час. 

Дальше добавлять по аналогии. 
 

Ошибку выдало на new timer[MAX_PLAYERS];

C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(516) : error 021: symbol already defined: "timer"
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase

1 Error.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik значит эту строку: 

new timer[MAX_PLAYERS]; 

Замените на эту: 

new speedvehicle[MAX_PLAYERS]; 

Эту строку: 
 

else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

На эту: 
 

else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(speedvehicle[playerid]); 

Ну и эту строку: 

timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 

На эту: 

speedvehicle[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 

Поделиться сообщением


Ссылка на сообщение
  • 0
7 минут назад, DEST сказал:

@Homer4ik значит эту строку: 


new timer[MAX_PLAYERS]; 

Замените на эту: 


new speedvehicle[MAX_PLAYERS]; 

Эту строку: 
 


else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(timer[playerid]); 

На эту: 
 


else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(speedvehicle[playerid]); 

Ну и эту строку: 


timer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 

На эту: 


speedvehicle[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "dd", playerid, modelid); 

Это в конец мода?

forward SpeedVehicle(playerid, modelid); public SpeedVehicle(playerid, modelid) { new newmph; switch(modelid) { case X: newmph = XXmph; case Y: newmph = YYmph; } return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph); }

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik да

Поделиться сообщением


Ссылка на сообщение
  • 0
2 минуты назад, DEST сказал:

@Homer4ik да

C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80106) : error 025: function heading differs from prototype
C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80107) : error 025: function heading differs from prototype
C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80108) : error 021: symbol already defined: "SpeedVehicle"
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase

3 Errors.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik не надо вставлять два раза то, что я скинул. 

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik не надо вставлять два раза то, что я скинул. 

крч, если тебе не трудно, можешь сразу кинуть что вставлять?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik То, что вставляли до этого удалить, начните вставлять все с чистого листа, чтобы без ошибок. 

Ко всем new: 

new speedtimer[MAX_PLAYERS];

В OnPlayerStateChange: 
 

if(newstate == PLAYER_STATE_DRIVER)
  speedtimer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid); 
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(speedtimer[playerid]); 

В конец мода: 
 

forward SpeedVehicle(playerid, modelid); 
public SpeedVehicle(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
6 минут назад, DEST сказал:

@Homer4ik То, что вставляли до этого удалить, начните вставлять все с чистого листа, чтобы без ошибок. 

Ко всем new: 


new speedtimer[MAX_PLAYERS];

В OnPlayerStateChange: 
 


if(newstate == PLAYER_STATE_DRIVER)
  speedtimer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid); 
else if(oldstate == PLAYER_STATE_DRIVER)
  KillTimer(speedtimer[playerid]); 

В конец мода: 
 


forward SpeedVehicle(playerid, modelid); 
public SpeedVehicle(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80105) : error 025: function heading differs from prototype
C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80106) : error 025: function heading differs from prototype
C:\Users\Ivan\Desktop\ArzamasRP\gamemodes\ArzamasRP.pwn(80107) : error 021: symbol already defined: "SpeedVehicle"
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase

3 Errors.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik строки сразу скидывайте

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik строки сразу скидывайте

вот это в конце мода       }
    }
}
 forward SpeedVehicle(playerid, modelid);
 public SpeedVehicle(playerid, modelid)
 {
   new newmph;
   switch(modelid)
   {
     case 541: newmph = 100;
     case 503: newmph = 120;
   }
   return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
 }

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik а еще у вас где-нибудь forward SpeedVehicle в моде есть? 

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Homer4ik а еще у вас где-нибудь forward SpeedVehicle в моде есть? 

нету, но есть

 if(newstate == PLAYER_STATE_DRIVER)
   speedtimer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid);
 else if(oldstate == PLAYER_STATE_DRIVER)
   KillTimer(speedtimer[playerid]);

 и

}
stock SpeedVehicle(playerid)
{

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik заменяйте так: 
 

if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  timer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); 
}

и форвард с пабликом на этот замените: 
 

forward SpeedVehicle222(playerid, modelid); 
public SpeedVehicle222(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
2 минуты назад, DEST сказал:

@Homer4ik заменяйте так: 
 


if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  timer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); 
}

и форвард с пабликом на этот замените: 
 

 

это


 if(newstate == PLAYER_STATE_DRIVER)
   speedtimer[playerid] = SetTimerEx("SpeedVehicle", 10000, true, "d", playerid);
 else if(oldstate == PLAYER_STATE_DRIVER)
   KillTimer(speedtimer[playerid]);

на это?

if(newstate == PLAYER_STATE_DRIVER) { new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); timer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); }

 

 

9 минут назад, DEST сказал:

@Homer4ik заменяйте так: 
 


if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  timer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); 
}

и форвард с пабликом на этот замените: 
 


forward SpeedVehicle222(playerid, modelid); 
public SpeedVehicle222(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

Скинь еще раз, как сможешь короче, что куда вставлять

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik Скидываю последний раз, если не поймете, ваши проблемы. 

Ко всем new: 

new speedtimer[MAX_PLAYERS];

В OnPlayerStateChange: 

if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  speedtimer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); 
}
if(oldstate == PLAYER_STATE_DRIVER)
	KillTimer(speedtimer[playerid]); 

В конец мода: 

forward SpeedVehicle222(playerid, modelid); 
public SpeedVehicle222(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
17 минут назад, DEST сказал:

@Homer4ik Скидываю последний раз, если не поймете, ваши проблемы. 

Ко всем new: 


new speedtimer[MAX_PLAYERS];

В OnPlayerStateChange: 


if(newstate == PLAYER_STATE_DRIVER)
{
  new modelid = GetVehicleModel(GetPlayerVehicleID(playerid)); 
  speedtimer[playerid] = SetTimerEx("SpeedVehicle222", 10000, true, "dd", playerid, modelid); 
}
if(oldstate == PLAYER_STATE_DRIVER)
	KillTimer(speedtimer[playerid]); 

В конец мода: 


forward SpeedVehicle222(playerid, modelid); 
public SpeedVehicle222(playerid, modelid) 
{
  new newmph; 
  switch(modelid)
  {
    case X: newmph = XXmph; 
    case Y: newmph = YYmph;
  }
  return SetVehicleSpeed(GetPlayerVehicleID(playerid), newmph);
}

 

последний вопрос, вот эта строчка case X: newmph = XXmph; case Y: newmph = YYmph;

XXmph полностью менять или только XX

Заметка от Гость , создано

Код берите под "Код" или спойлер

Поделиться сообщением


Ссылка на сообщение
  • 0

@Homer4ik конечно же все заменяйте на свои данные. Это приведено в качестве примера. Вместо X и Y ид машин, а вмечто XXmph и YYmph ускорение в миль / час. 

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • nazpol9
      От nazpol9
      Привет всем.

      У меня имеется мод для самп сервера и VPS с Ubuntu, на котором я пытаюсь его запустить.

      В чем суть проблемы: при запуске samp03svr, сервер запускается, но на версии 0.3.DL R-1. Когда я пытаюсь запустить этот же мод локально на Windows, сервер работает на версии 0.3.7 и я могу зайти на него без клиента 0.3.DL.

      Для решения этой проблемы я уже пробовал заменять инклуды и исполнительные файлы теми, что есть в архивах на официальном сайте сампа, перекомпилировал мод, и ничего не изменилось.
       
      #include <a_samp> #include <a_mysql> #include <foreach> #include <Pawn.RakNet> #include <streamer> #include <sscanf2> #include <float2> #include <crashdetect> #include <fmt> #include <a_http> #include <Pawn.CMD> #include <Pawn.Regex> #include <requests> #include <callbacks> #include <MD5> #include <mxdate> #include <TOTP> #include <gvar> #include <md-sort> #include <nex-ac> #include <weapon-config> #include <discord-connector> #include <3DTryg> #include <textdraw-streamer>  
      plugins crashdetect.so streamer.so textdraw-streamer.so sscanf.so pawnraknet.so pawncmd.so mysql.so requests.so profiler.so pawnregex.so TOTP.so gvar.so discord-connector.so

      Если у кого-то будут какие-либо догадки, прошу ими поделиться, если понадобится больше информации - я постараюсь её предоставить.