PDA

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
Чё в нём такого полезного? Просто время чтоли считает, сколько в игру играл?

Ten
09-18-2007, 10:06 AM
Таймер исключительно полезная штука для сетевой игры, он позволяет контролировать своё развитие, а если приблизительно представляешь тактику соперника, то сможешь примерно просчитать, когда он сможет нанести удар. Ну и встретить вражеский флот со всем радушием :)

Естественно, разведку никто не отменял, но таймер позволяет строить более точные прогнозы. Приятно, что теперь он есть в игре: не очень удобно посматривать на часы или секундомер – теряются ценные мгновения.

[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);

AVE
01-10-2008, 04:20 PM
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

AVE
01-12-2008, 03:49 PM
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
Это вывод текста.

Ten
01-21-2008, 10:08 AM
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 раз спрашивать союзника: "А тебе ресурсы не нужны?", а в случае их отсутствия просто положить.

Ten
01-25-2010, 09:04 PM
А фраза «особенно в командных баталиях» это то, о чём я подумал? :)

// 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
Да, нормально. На логику игры не влияет.