Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Отмотка времени назад
Отмотка времени назад
BarD Дата: Воскресенье, 01.06.2014, 05:18:43 | Сообщение # 1
Сообщений: 942
Репутация: 132 [ +/- ]
Если кто-то из вас играл в Dota 2, то наверняка знает, что у Weaver'а есть способность "Отмотка времени". А для тех, кто не играл, поясню. После применения этой способности, игрок перемещается на позицию, в которой он был 5 секунд назад. Вопрос: возможно ли такое провернуть в css?
 
Tokami Дата: Воскресенье, 01.06.2014, 11:37:05 | Сообщение # 2
Сообщений: 238
Репутация: 19 [ +/- ]
BarD, ну ты даешь идей у тебя до фига а особенно из доты думаю реально если запоминать его кординаты)
 
BarD Дата: Воскресенье, 01.06.2014, 15:23:38 | Сообщение # 3
Сообщений: 942
Репутация: 132 [ +/- ]
Tokami, Вот именно, что запоминать не получается. Сначала думал сделать таймер на 5 сек (повторяющийся), и по его истечению запоминать координаты в переменную. А потом подумал, а если игрок нажмет на пункт на 3 секунде? От отмотается на 3 секунды назад.
Позже пришла в голову идея. Согласно ей надо запоминать координаты каждую секунду в одну из 5 переменных и делать какую-нибудь пустой. Но как их упорядочить? Как создать порядок записи по очереди?
 
«SeReGa»☆ Дата: Понедельник, 02.06.2014, 11:29:20 | Сообщение # 4
Сообщений: 395
Репутация: 37 [ +/- ]
BarD, Думаю как то так сойдёт.
 
OXIZ Дата: Суббота, 07.06.2014, 15:44:56 | Сообщение # 5
Сообщений: 13
Репутация: 2 [ +/- ]
Я бы посоветовал сделать это все массивом, и каждый раз просто переставляй в нем значения, записывая в начало последнюю координату ) все очень легко)
 
BarD Дата: Суббота, 07.06.2014, 18:59:03 | Сообщение # 6
Сообщений: 942
Репутация: 132 [ +/- ]
OXIZ, я тут недавно прочитал про стэк. Думаю, грамотнее было бы сделать с помощью него Но твоя идея тоже неплохая).
 
хвостег Дата: Воскресенье, 08.06.2014, 03:00:21 | Сообщение # 7
Сообщений: 161
Репутация: 53 [ +/- ]
Не знаю, поможет тебе это или нет, но на просторах инета есть плагин(модуль) для таймера, суть плагина в том, что если человек ставит на карте(например бхоп) рекорд, то потом его призрак(бот) проходит эту же карту до тех пор, пока не поставят новый.
Cвоеобразная демка на сурсмоде.
Я думаю если ты найдешь этот плагин, то почерпнешь в нем необходимые знания для написания своей "машины времени" :D

Добавлено (08.06.2014, 02:57:59)
---------------------------------------------
Короче этого плагина(модуля) я не нашел, поэтому написал свою хреньку, на звание лучшего метода мой код не претендует, так что не кидайтесь тапками!

Код

#include <sdktools>

new Handle:TimeMach[MAXPLAYERS+1]    = {INVALID_HANDLE, ...};
new bool:Start[MAXPLAYERS+1]  = {false, ...};
new bool:R_W[MAXPLAYERS+1]   = {false, ...};
new bool:CD[MAXPLAYERS+1]   = {false, ...};

public OnPluginStart()
{
  for(new client = 1; client < MaxClients; client++) { TimeMach[client] = CreateArray(3); /*#vector size#*/ }
   
  RegConsoleCmd("t_s", Command_Stat_TimeAr);
  RegConsoleCmd("t_r", Command_Read_TimeAr);
}

public OnClientPutInServer(client) { ClearValues(client); }
public OnClientDisconnect(client)  { ClearValues(client); }

public Action:Command_Stat_TimeAr(client, args)
{
  Start[client] = !Start[client];
  PrintToChatAll("5 sec Demo Array %s", Start[client] ? "Activate" : "Deactivate");
}

public Action:Command_Read_TimeAr(client, args)
{
  R_W[client] = !R_W[client];
  PrintToChatAll("Read Time %s", R_W[client] ? "Start" : "End");
}

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
  if(Start[client])
  {
   if(!R_W[client])    /*#Write Array#*/
   {
    new Float:ClPos[3];
    GetClientAbsOrigin(client, ClPos);
     
    if(GetArraySize(TimeMach[client]) < 900) /*Items In Array*/
    {
     PushArrayArray(TimeMach[client], ClPos);
    }
    else
    {
     if(!CD[client]) { CD[client] = true; PrintToChat(client, "[Time Machine All Ok]"); }
      
     RemoveFromArray(TimeMach[client], 0);
     PushArrayArray(TimeMach[client], ClPos);
    }
   }
   else    /*#Read Array#*/
   {
    new index = GetArraySize(TimeMach[client]);
     
    if(index && CD[client])
    {
     new Float:ArPos[3];
      
     GetArrayArray(TimeMach[client], index-1, ArPos);
     RemoveFromArray(TimeMach[client], index-1);
      
     TeleportEntity(client, ArPos, NULL_VECTOR, NULL_VECTOR);
    }
    else
    {
     if(CD[client]) { CD[client] = false; R_W[client] = false; PrintToChat(client, "[Time Machine Cool Down]"); }
    }
   }
  }
}

stock ClearValues(client)
{
  Start[client] = R_W[client] = false;
  ClearArray(TimeMach[client]);
}

Добавлено (08.06.2014, 03:00:21)
---------------------------------------------
тут никаких заумных проверок нет, это просто основа, все остальное допиливайте сами.



Сообщение отредактировал хвостег - Суббота, 07.06.2014, 22:56:45
 
BarD Дата: Воскресенье, 08.06.2014, 11:38:11 | Сообщение # 8
Сообщений: 942
Репутация: 132 [ +/- ]
Спасибо большое!
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Отмотка времени назад
  • Страница 1 из 1
  • 1
Поиск: