Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Помогите найти правильный угол
horr0r Дата: Пятница, 10.01.2014, 13:40:57 | Сообщение # 1
Сообщений: 149
Репутация: 40 [ +/- ]
Никак не получается! Пожалуйста помогите.
Короче, все пытаюсь сделать отброс при взрыве гранаты. Не могу найти правильный угол.
Вот кусочек кода где вычисляется угол.
Код
   
angle = ArcTangent2(gpos[0]-plpos[0], gpos[1]-plpos[1]) + DegToRad(180.0);
PrintToChat(i, "atan2(%0.1f-%0.1f, %0.1f-%0.1f) = %f", gpos[0],plpos[0],gpos[1],plpos[1],RadToDeg(angle));
finalvec[0]=GetEntDataFloat(i,VelocityOffset[0]) + Cosine(angle)*250.0;
finalvec[1]=GetEntDataFloat(i,VelocityOffset[1]) + Sine(angle)*250.0;
finalvec[2]=GetEntDataFloat(i,VelocityOffset[2]) + 50.0;
SetEntDataVector(i,BaseVelocityOffset,finalvec,true);

Откидывать-то откидывает. Но не в тот угол.

Вот весь код:
Код
public OnHeExplode(Handle:event, const String:name[], bool:dontBroadcast)  
{  
  new Float:finalvec[3], Float:angle, Float:gpos[3], Float:plpos[3];
  gpos[0] = GetEventFloat(event, "x");
  gpos[1] = GetEventFloat(event, "y");
  gpos[2] = GetEventFloat(event, "z");
  for(new i = 1; i <= MaxClients; i++)
  {
   if(!IsClientInGame(i)) continue;
   if(IsClientInRangeOfPoint(i, 400.0, gpos))
   {
    GetClientAbsOrigin(i, plpos);
    //тут начинается проблема
    angle = ArcTangent2(gpos[0]-plpos[0], gpos[1]-plpos[1]) + DegToRad(180.0);
    PrintToChat(i, "atan2(%0.1f-%0.1f, %0.1f-%0.1f) = %f", gpos[0],plpos[0],gpos[1],plpos[1],RadToDeg(angle));
    finalvec[0]=GetEntDataFloat(i,VelocityOffset[0]) + Cosine(angle)*250.0;
    finalvec[1]=GetEntDataFloat(i,VelocityOffset[1]) + Sine(angle)*250.0;
    finalvec[2]=GetEntDataFloat(i,VelocityOffset[2]) + 50.0;
    SetEntDataVector(i,BaseVelocityOffset,finalvec,true);
    SetEntProp(i, Prop_Data, "m_iHealth", 100);
   }
  }
}


Сообщение отредактировал horr0r - Пятница, 10.01.2014, 13:41:40
 
Sallcom Дата: Пятница, 10.01.2014, 13:56:53 | Сообщение # 2
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата horr0r ()
отброс при взрыве гранаты


Попробуй:
Код
public OnHeExplode(Handle:event, const String:name[], bool:dontBroadcast)      
{      
     new Float:fPos[2][3];
     GetEntPropVector(event, Prop_Send, "m_vecOrigin", fPos[0]);//Позиция взрыва
     for(new i = 1; i <= MaxClients; i++)
     {
      GetClientAbsOrigin(i, fPos[1]);//Позиция игрока     
      for(new d = 0; d < 2; d++)    fPos[1][d] = fPos[1][d] - fPos[0][d];
      if(GetVectorDistance(fPos[0], fPos[1]) < 150.0)
      {
       ScaleVector(fPos[1], 2.0);//Увеличиваем силу отбрасывания
       TeleportEntity(i, NULL_VECTOR, NULL_VECTOR, fPos[1]);//Отбрасываем игрока
      }
     }
}


Сообщение отредактировал Sallmap - Пятница, 10.01.2014, 14:04:22
 
horr0r Дата: Пятница, 10.01.2014, 14:13:42 | Сообщение # 3
Сообщений: 149
Репутация: 40 [ +/- ]
Sallmap, а как узнать угол? Мне именно угол нужно узнать).
Просто пойми, во всех других играх работает через обратный тангенс 2. (http://en.wikipedia.org/wiki/Atan2)
Получается найти, в CSS - нет.


Сообщение отредактировал horr0r - Пятница, 10.01.2014, 14:14:51
 
Sallcom Дата: Пятница, 10.01.2014, 14:21:42 | Сообщение # 4
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата horr0r ()
а как узнать угол?

Мне кажется угол нельзя найти, ибо в ксс не откидывает под углом, его вообще там нет.

И тебе стоит уточнить, угол чего))


Сообщение отредактировал Sallmap - Пятница, 10.01.2014, 14:23:08
 
horr0r Дата: Пятница, 10.01.2014, 14:23:38 | Сообщение # 5
Сообщений: 149
Репутация: 40 [ +/- ]
Цитата Sallmap ()
Мне кажется угол нельзя найти, ибо в ксс не откидывает под углом, его вообще там нет.

Неее, ты что. Как это? Это невозможно откидывать без угла). Находится угол вектора. Между двумя точками. Потом, по осям прибавляется через cos(x) и sin(y).
Так везде ).
 
Sallcom Дата: Пятница, 10.01.2014, 14:26:49 | Сообщение # 6
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата horr0r ()
Это невозможно откидывать без угла)

В CSS и не откидывает, а моим способом вычисляется Вектор 1, а потом откидывает вдоль него)

Вектор 1: от места взрыва до игрока
Вектор 2: от места взрыва до откинутого игрока

Рассчитай тайминг и найди Вектор 2, а потом формулой cosX = (Вектор 1*Вектор 2)/( |Вектор 1|*|Вектор 2| ) вычисли угол.


Сообщение отредактировал Sallmap - Пятница, 10.01.2014, 14:44:17
 
«SeReGa»☆ Дата: Понедельник, 13.01.2014, 22:30:04 | Сообщение # 7
Сообщений: 395
Репутация: 37 [ +/- ]
подумал и надумал ав thc_rpg есть такой скил bouncybullets



Может здесь есть полезная инф

и ещё чтото подобное видел в плагине Ent_control


Сообщение отредактировал «SeReGa»☆ - Понедельник, 13.01.2014, 22:33:48
 
Sallcom Дата: Вторник, 14.01.2014, 15:44:05 | Сообщение # 8
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата «SeReGa»☆ ()
есть такой скил bouncybullets

А причем тут он?
 
  • Страница 1 из 1
  • 1
Поиск: