Archived copy of war3source.com, the War3Source forum (2009–2020), rebuilt from the Internet Archive by wc3mods.net. This page was captured on 2012-10-25 (original capture). Forum · All archived topics · Wiki · Bug tracker · Blog
Chat

War3:Source
October 24, 2012, 07:17:50 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Download: http://war3source.com/index.php?board=9.0
What is War3Source?: http://war3source.com/index.php?topic=200.0
Sample Stats: http://war3source.com/war3stats
Steam Community Group: http://steamcommunity.com/groups/war3source
War3Source SVN Checkout: http://ownageclan.com/svn/war3source/
War3Source servers: http://www.game-monitor.com/search.php?vars=war3_version=
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: [Russian] Расчёт расстояния  (Read 240 times)
Arturius
Moderator
Full Member
*****
Posts: 155



View Profile Email
« on: November 19, 2011, 03:49:26 AM »

Помогите мне решить такую задачку. У расы Light Bender есть ултимат, который телепортирует случайного противника к себе над головой на постоянное расстояние. Проблема в том, что его телепорт не проверяет наличие текстур и зачастую противник в них застревает. Мне пришло в голову использовать для телепортации код из расы Human Alliance:
Code:
if(War3_SkillNotInCooldown(client,thisRaceID,ULT_TELEPORT,true)) //not in the 0.2 second delay when we check stuck via moving
{
new bool:success = War3_Teleport(client,TeleportDistance[ult_level]);
if(success)
{
new Float:cooldown=GetConVarFloat(ultCooldownCvar);
War3_CooldownMGR(client,cooldown,thisRaceID,ULT_TELEPORT,_,_);
}
}
Но для War3_Teleport мне нужно рассчитать расстояние TeleportDistance. Если Человек телепортирует сам себя, то в моём случае телепортируется противник. Значит TeleportDistance для противника должен быть = "Текущее расстояние между двумя игроками" минус "Конечное расстояние между двумя игроками". Конечное расстояние - то расстояние на которое должен быть телепортирован противник перед атакером. Как мне это вычислить?
Logged
Frenzzy
Moderator
Full Member
*****
Posts: 217


337905984 frenzzy@live.ru
View Profile WWW
« Reply #1 on: November 19, 2011, 09:00:05 AM »

Если нужно телепортировать игрока 'target' в место над головой игрока 'client' и что бы при этом никто не застрял, можно сделать следующим простым способом:

Quote
// Дано
new client, target;

// Вычисляем координаты для телепортации
decl Float:dest[3];
GetClientAbsOrigin(client, dest);
dest[2] += 64.0; // Над головой client

// Вычисляем габариты игрока target
decl Float:mins[3], Float:maxs[3];
GetClientMins(target, mins);
GetClientMaxs(target, maxs);

// Трассировка по области (поиск коллизий)
TR_TraceHull(dest, dest, mins, maxs, MASK_SOLID);

// Если споткнулись
if (TR_DidHit())
{
    PrintToChat(client, "Игрок target застрянет в текстурах.");
}
else
{
    TeleportEntity(target, dest, NULL_VECTOR, NULL_VECTOR);
    PrintToChat(client, "Игрок target телепортирован на голову игрока client.");
}
Logged

O_o
Arturius
Moderator
Full Member
*****
Posts: 155



View Profile Email
« Reply #2 on: November 19, 2011, 10:41:25 AM »

Как всегда отличное решение и объяснение! Cheesy Спасибо!!!
Но всё-таки, мне очень хотелось бы знать, есть ли возможность измерить расстояние между двумя игроками и вывести его в float:значение? И кроме того, не всегда удобно телепортировать противника над головой. Мне кажется удобнее в направлении взгляда (прицела).
« Last Edit: November 19, 2011, 10:43:49 AM by Arturius » Logged
Frenzzy
Moderator
Full Member
*****
Posts: 217


337905984 frenzzy@live.ru
View Profile WWW
« Reply #3 on: November 19, 2011, 07:25:26 PM »

GetVectorDistance() ?

Quote
new client, target;

decl Float:pos1[3], Float:pos2[3];
GetClientAbsOrigin(client, pos1);
GetClientAbsOrigin(target, pos2);

new Float:dist = GetVectorDistance(pos1, pos2);

PrintToChatAll("Расстояние между игроками client и target равно %.2f юнитов", dist);
Logged

O_o
Arturius
Moderator
Full Member
*****
Posts: 155



View Profile Email
« Reply #4 on: November 20, 2011, 02:08:29 AM »

Огромное спасибо! Сам бы долго искал по всем файлам, и даже если бы нашёл, то не знал бы наверняка, то ли я нашёл Cheesy.
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!