View Full Version : Таймер в Homeworld2
[FX]Storm
09-14-2007, 07:50 AM
Выкладываю таймер для ХВ2 (создатель LeviathansWrath). Для того, чтобы установить таймер, нужно пихнуть файл autoexec.lua в папку bin, например:
F:\Program Files\Homeworld II\Bin
Для примера дам скрин демонстрирующий таймер:
http://img381.imageshack.us/img381/8297/ss00256uy4.th.jpg (http://img381.imageshack.us/my.php?image=ss00256uy4.jpg)
На миниатюре не видно, так что смотреть скрин полностью. Если не найдете, таймер в верхнем левом углу.
Домашняя страничка таймера на сайте клана TFL: http://www.freewebs.com/tflhw2maps/files.htm
[FX]Storm
09-16-2007, 10:13 PM
Выложил новою версию таймера. Изменений всего 3:
1 Убраны надписи time и буквы типо h s m.
2 Изменен формат таймера теперь идет так: 0.0.1, 0.0.2 и.т.д.
3 Теперь таймер отабражаеться в сенсорах.
Вот скрин (в сенсорах потому что там он есть и ничем не отличаеться от режима не в сенсорах):
http://img107.imageshack.us/img107/5198/ss00267nc1.jpg
Ссылки на первоисточник:
http://hwfx.ipbfree.com/index.php?showtopic=60&st=15&#entry7644
http://demonclan.org/hw2/file.php
КамАЗ
09-17-2007, 11:06 PM
Чё в нём такого полезного? Просто время чтоли считает, сколько в игру играл?
Таймер исключительно полезная штука для сетевой игры, он позволяет контролировать своё развитие, а если приблизительно представляешь тактику соперника, то сможешь примерно просчитать, когда он сможет нанести удар. Ну и встретить вражеский флот со всем радушием :)
Естественно, разведку никто не отменял, но таймер позволяет строить более точные прогнозы. Приятно, что теперь он есть в игре: не очень удобно посматривать на часы или секундомер – теряются ценные мгновения.
[FX]Storm
09-18-2007, 12:09 PM
Для тех кто нехочет таймер качать, нужно просто добвить текст которой я напишу в autoexec.lua
Вот чем они отличаються
Старый Таймер
function updateTimer()
dr_clear("timer")
dr_setautoclear("timer",0)
local time = Universe_GameTime();
local h = floor(time/3600.0);
local m = floor(time/60.0 - h*60);
local s = time - m*60 - h*3600;
local str = format("Time: %2.0fh %2.0fm %3.1fs",h, m, s)
dr_text2d("timer",0.0,0.98,str, 255,255,255)
end
Rule_AddInterval("updateTimer", 2)
Новый Таймер
function updateTimer()
dr_clear("timer");
dr_setautoclear("timer",0);
local time = Universe_GameTime();
local h = floor(time / 3600);
local m = floor(time / 60 - h * 60);
local s = floor(time - m * 60 - h * 3600);
local str = format("%2.0f:%2.0f:%2.0f", h, m, s);
dr_text2d("timer", 0, 0.9, str, 255, 255, 255);
end
Rule_AddInterval("updateTimer", 2);
Storm;20068']
local str = format("%2.0f:%2.0f:%2.0f", h, m, s);
Немного поправлю. Красивее выглядит таймер с нулями:
local str = format("%02.0f:%02.0f:%02.0f", h, m, s);
[FX]Storm
01-12-2008, 02:53 PM
Спасибо, AVE. Тэн поможешь разобраться с таймером из FX18 (хочу засунуть его в обычный). Вот содержание:
InGameRunTimeTimerDisplay = 0
function GameTimerDisplay()
InGameRunTimeTimerDisplay = InGameRunTimeTimerDisplay + 1
local iSeconds = mod(InGameRunTimeTimerDisplay,60)
local iMinutes = (InGameRunTimeTimerDisplay - iSeconds) / 60
local iHours = iMinutes
iMinutes = mod(iMinutes, 60)
iHours = iHours - iMinutes
iHours = iHours / 60
local sStrToDisplay = ""
if (iHours < 10) then
sStrToDisplay = sStrToDisplay.."0"..iHours..":"
else
sStrToDisplay = sStrToDisplay..iHours..":"
end
if (iMinutes < 10) then
sStrToDisplay = sStrToDisplay.."0"..iMinutes..":"
else
sStrToDisplay = sStrToDisplay..iMinutes..":"
end
if (iSeconds < 10) then
sStrToDisplay = sStrToDisplay.."0"..iSeconds
else
sStrToDisplay = sStrToDisplay..iSeconds
end
UI_SetTextLabelText("ResourceMenu", "lblTimerSize", sStrToDisplay)
end
Storm;22461']Спасибо AVE.
Не за что. :)
Storm;22461']Тэн поможешь разобраться с таймером из FX18 (хочу засунуть его в обычный) Вот содержание
Могу и я.
InGameRunTimeTimerDisplay = 0
В этой переменной (далее таймер), собственно, и содержится количество секунд, прошедших с момента начала игры.
function GameTimerDisplay()
InGameRunTimeTimerDisplay = InGameRunTimeTimerDisplay + 1
Я так понимаю, функция GameTimerDisplay() где-то вызывается через RuleAddInterval, что обеспечивает ее вызов раз в секунду.
local iSeconds = mod(InGameRunTimeTimerDisplay,60)
local iMinutes = (InGameRunTimeTimerDisplay - iSeconds) / 60
local iHours = iMinutes
iMinutes = mod(iMinutes, 60)
iHours = iHours - iMinutes
iHours = iHours / 60
Здесь вычисляются часы/минуты/секунды. Секунды - остаток от деления (mod) на 60, и т.д.
local sStrToDisplay = ""
if (iHours < 10) then
sStrToDisplay = sStrToDisplay.."0"..iHours..":"
else
sStrToDisplay = sStrToDisplay..iHours..":"
end
if (iMinutes < 10) then
sStrToDisplay = sStrToDisplay.."0"..iMinutes..":"
else
sStrToDisplay = sStrToDisplay..iMinutes..":"
end
if (iSeconds < 10) then
sStrToDisplay = sStrToDisplay.."0"..iSeconds
else
sStrToDisplay = sStrToDisplay..iSeconds
end
Здесь видно, что авторы не знают про format(), и делают то же самое руками.
UI_SetTextLabelText("ResourceMenu", "lblTimerSize", sStrToDisplay)
end
Это вывод текста.
That's the one I posted. It's the updated white one that does stay in senors. I'll post the link again: http://demonclan.org/hw2/files/timer.zipПеревод будет звучать так: Что-то подобное я выкладывал. Это обновлённый белый [таймер], который остаётся в сенсорах. Запостю этот линк снова:...
Качаем архив, смотрим дату autoexec.lua - 15 сентября. Комментарии излишни :)
Раз уж заглянул, любопытства ради почитал тему (http://hwfx.ipbfree.com/index.php?showtopic=60) всю, выяснилось, что создатель таймера - не LeviathansWrath, о чём он, собственно, не забыл упомянуть. Заглянул на сайт TFL, таймер датирован 15ым июня 2007, но возможно это восстановление или перенос аккаунта (сайт вообще не обновляется с 2006го). Ho и там нет никакой информации об авторе.
В силу того, что таймер - вещь полезная, мне захотелось разобраться, в чью светлую голову пришла идея об его создании. После непродолжительного гугленья наткнулся на небольшую подборку (http://forums.relicnews.com/showthread.php?p=228596#post228596) подсказок и советов на форумах реликньюс. Выяснилось, что самую первую версию таймера создал Eiden, а концепт, раскрывающий общие принципы его реализации, набросал (http://forums.relicnews.com/showthread.php?p=216784#post216784) mecha, сотрудник Relic Entertainment (программист, не иначе как :)). Обоим товарищам однозначный мегареспект :thumbsup:
[FX]Storm
01-21-2008, 02:11 PM
Ну уж извените!!! выкладывал та он (LeviathansWrath) да и с англ у меня не ладу поэтому думал что он выложил, а тут оказываеться вот что!! спасибо за проеснение ситуации!
regul
01-01-2010, 09:58 PM
http://forums.relicnews.com/showthread.php?t=187483
This mod updates hw2's interface with two features present in many new rts games. An in-game Timer and a Resource display that shows your teamate's resources. With this mod you can share ru as a team without having to ask 'does anyone have any extra ru?' all the time.
You can use this with with regular hw2, or any mod - online or offline.
Фича добавляет в игру таймер и отображение ресурсов союзника. Работает со всеми модами.
Лёшка
01-25-2010, 05:24 PM
regul, cпасибо тебе, удобная штука, особенно в коммандных баталиях :friends: :thumbsup:
А фраза «особенно в командных баталиях» это то, о чём я подумал?А о чём ты подумал? :) Я не экстрасенс :)
Удобная в смысле тем, что не надо 20 раз спрашивать союзника: "А тебе ресурсы не нужны?", а в случае их отсутствия просто положить.
А фраза «особенно в командных баталиях» это то, о чём я подумал? :)
// UPD:
Ну, я больше в шутку спросил :) Мне попадалась похожая штука (точнее, это она и есть), и я не добавил её в тему таймеров лишь потому, что проверка на союз реализована в самом скрипте, что открывает некоторый простор для читерства.
Agronom
04-11-2011, 01:29 AM
Частично переписал скрипт:
Время и ресурсы выводятся вместо текста "Resource Units", чтобы их было видно в режиме сенсоров.
Автоматически открываются меню "build" и "build queue" (для удобства :)).
Теперь правило updateTimer работает только во время игры.
function updateTimer()
if Universe_GameTime == nil then
Rule_Remove("updateTimer");
return
end
--TIME
local time = Universe_GameTime();
local h = floor(time / 3600);
local m = floor(time / 60 - h * 60);
local s = floor(time - m * 60 - h * 3600);
local str;
if h > 0 then
str = format("%d:%02d:%02d", h, m, s);
else
str = format("%d:%02d", m, s);
end
--RU
if (GR_MULTIPLAYER == GetGameRubric()) then
local me = Universe_CurrentPlayer();
for playerIndex=0, Universe_PlayerCount()-1 do
if (me ~= playerIndex and AreAllied(me, playerIndex)==1) then
local PlayerRUs = Player_GetRU(playerIndex);
str = str .. format(" <c=38a2fa>%d{<c=ffd800>%d", playerIndex+1, PlayerRUs);
if PlayerRUs < 1000 then str = str .. " "; end
if PlayerRUs < 100 then str = str .. " "; end
if PlayerRUs < 10 then str = str .. " "; end
end
end
end
UI_SetTextLabelText("ResourceMenu", "lblResourceUnitsStaticText", str);
end
UI_SetElementSize("ResourceMenu", "lblResourceUnitsStaticText", 168, 13);
Rule_AddInterval("updateTimer", 5);
updateTimer();
MainUI_UserEvent(eBuildManager);
UI_ToggleScreen("BuildQueueMenu", 1);
Поместить в "Homeworld2/Bin/autoexec.lua".
KUPRUM
04-11-2011, 11:12 AM
А если у одного союзника нет данного фикса, то игра по сети нормально идет?
Agronom
04-11-2011, 05:52 PM
Да, нормально. На логику игры не влияет.