Полезные макросы для GV




MACRO n = if(planet&(besteta=0|race=me))(name str (17-numb^(totalships-ships(me))-numb^(ships(me))) + \n\f + round(ships(me)) str 0 + \8 + "-" + \c + round(totalships-ships(me)) str 0)(name)
MACRO numb = func((10*trunc(op(1)/10)<>0)+(100*trunc(op(1)/100)<>0)+(1000*trunc(op(1)/1000)<>0)+(10000*trunc(op(1)/10000)<>0)+(100000*trunc(op(1)/100000)<>0)+2)

Этот макрос позволяет подписать планеты и для каждой планеты выводит массы своего и чужих флотов прямо под названием планеты. Следует отметить, что массы флотов он показывает даже в том случае, если на этом ходу Ваш дрон был сбит.
Значительно исправлен 19.01.99 - стал работать быстрее, не подписывает unidentified планеты, а также более интеллектуално обрезает имена планет при неоходимости.
Применение - Alt-N, n
Ограничение - возможен неверный результат, если где-нибудь на планете встретятся 2 флота массой каждый более миллиона ;)
Автор - Alchi
как это выглядит в GV

MACRO mas = name str 8 + \n\f + round(size) str 0.0 + ' (' + round(qlty) str 0.0 + ')'
Макрос для подписывания планет (действует только в регистрированной версии GV). Выводит под названием планеты ее размер и качество планеты (вес корабля, который эта планета может построить, будучи полностью развитой, не имеющей свободных материалов).
Применение - Alt-N, mas
Автор - Alchi
как это выглядит в GV

MACRO run = func(if(planet&ships(op(1))=0&(besteta=0|race=me)&race<>op(1))(name str 8 + \n\f\d + "unvisible")(if(besteta=0|race=me)(name + \n\f\d + round(ships(op(1))) str 0)(name)))
Макрос для подписывания планет, видимых Вам, но невидимых указанной расе надписью - "unvisible". Если же планета этой расе видна, то она подписывается массой кораблей, принадлежащих этой расе. Использование - Alt-N, run^("name of race"). Работает только в зарегистрированном GV. Для тех у кого GV нерегистрирован могу порекомендовать макросы для фильтров по карте "fn" и "fr", приведенные ниже, которые, правда, обладают гораздо меньшей наглядностью.
Автор - Alchi
как это выглядит в GV

MACRO occ = (TYP='COL' OR TYP='CAP') & STATE='In orbit'
Это фильтр для готовых к разгрузке транспортов.
Автор - Alchi

MACRO bat = (WriteLn('# '+race))+sort(1)+sum(WriteLn(gun str 4.0+' '+p.w str 8.2+':'+w str 6.2+' '+p.s str 8.2+':'+s str 6.2+' '+weight str 8.2+' '+# str 4.0) ,0)
Создание файла для программы BATTLE.EXE из списка кораблей. Результат получается в клипбоарде.
Автор - мне неизвестен

MACRO WriteTechShip = writeln(p.a str 4+' '+p.w str 0.2+':'+w str 0.2+' '+p.s str 0.2+':'+s str 0.2 +' '+weight str 0.2+' '+number str 5)
MACRO WriteParamShip = writeln('* '+race+', Ship type: '+type+' ('+p.d str 0.2+','+p.a str 0+','+p.w str 0.2+','+p.s str 0.2+','+p.c str 0.2+'), Speed: '+speed str 0.2)
MACRO GetBF = writeln(''),sum(WriteTechShip,WriteParamShip,show('Wait! Data saving...')),sort(1)
MACRO S4B = func(if openfile(op(1)) (show("Can't open file! Check file name!")) (show('Data succsessfully saved!'),closefile,GetBF,show('Succsessful open file!')))

Создает файл для программы BATTLE.EXE. Результат записывается в файл. Работает - из окна кораблей на планете или из общего окна кораблей - пофигу. Запускать - s4b^("file_name")
Автор - Threefeets

MACRO rc = r.c:=race
MACRO SP = (rc=race)*10*(L/size)*(1-size/2500)*(selectraces(race=r.c)+drv))

Макрос для Dragon Galaxy (партии с летающими планетами). Служит для подсчета скорости полета данной конкретной планеты.
Автор - SLIPPERY

MACRO ztech = z.d:=zdrive+zweapon+zshield+zcargo
MACRO zdrive = z.drive:="d-" + ztmin^(drv) str 0.0 + "-" + ztmax^(drv) str 0.0 + " "
MACRO zweapon = z.drive:="w-" + ztmin^(wpn) str 0.0 + "-" + ztmax^(wpn) str 0.0 + " "
MACRO zshield = z.drive:="s-" + ztmin^(shld) str 0.0 + "-" + ztmax^(shld) str 0.0 + " "
MACRO zcargo = z.drive:="c-" + ztmin^(crg) str 0.0 + "-" + ztmax^(crg) str 0.0 + "%"
MACRO ztmax = func( round (200* (1-op(1)+ 1.4427*ln(2^(op(1)-1)+(pop/4+0.75*ind)/3000)) ))
MACRO ztmin = func( round (10000* (1-op(1)+ 1.4427*ln(2^(op(1)-1)+0.0167)) ))

Макрос ZTECH для Dragon Galaxy (партии с замедлением технологий). Расчет степени замедления технологий. Применяется из списка рас. На выходе - скорость развития технологий на данном этапе в % относительно стандартных правил. При этом для каждого вида технологий выводится 2 значения:
первое - степень замедления при развитии технологии с минимальными затратами производства
второе - степень замедления при развитии технологии всеми имеющимися планетами
Автор - Alchi

MACRO newzt = n.ewzt:="D="+newzd^(race) str 4.2 +" W="+newzw^(race) str 4.2 +" S="+newzs^(race) str 4.2 +" C="+newzc^(race) str 4.2
MACRO newzw = func(SELECTRACES(race=op(1))+1+1.4427*ln(2^(wpn-1)+zl^(race,'weapons')))
MACRO newzs = func(SELECTRACES(race=op(1))+1+1.4427*ln(2^(shld-1)+zl^(race,'shields')))
MACRO newzd = func(SELECTRACES(race=op(1))+1+1.4427*ln(2^(drv-1)+zl^(race,'drive')))
MACRO newzc = func(SELECTRACES(race=op(1))+1+1.4427*ln(2^(crg-1)+zl^(race,'cargo')))
MACRO zl = func(SELECTPLANETS(race=op(1))+sum(l*(production=op(2)))/3000)

Макрос NEWZT для Dragon Galaxy (партии с замедлением технологий). Применяется из списка планет. Служит для пересчета технологий с учетом их прироста. Учитывает замедление технологий. Не учитывает изучение наук.
Автор - Alchi

MACRO newt = NNewt:="D="+newd^(race) str 4.2 +" W="+neww^(race) str 4.2 +" S="+news^(race) str 4.2 +" C="+newc^(race) str 4.2
MACRO neww = func(plusw+SELECTRACES(race=op(1))+wpn+SELECTPLANETS(race=op(1)) )
MACRO news = func(pluss+SELECTRACES(race=op(1))+shld+SELECTPLANETS(race=op(1)) )
MACRO newd = func(plusd+SELECTRACES(race=op(1))+drv+SELECTPLANETS(race=op(1)) )
MACRO newc = func(plusc+SELECTRACES(race=op(1))+crg+SELECTPLANETS(race=op(1)) )
MACRO plusw = sum(l*(production='weapons'))/5000
MACRO pluss = sum(l*(production='shields'))/5000
MACRO plusd = sum(l*(production='drive'))/5000
MACRO plusc = sum(l*(production='cargo'))/5000

Макрос NEWT для пересчета технологий, с учетом их прироста. Применяется из списка планет. Не учитывает изучение наук.
Автор - SLIPPERY


MACRO CargaNe0 = func( if c (c) (1));
MACRO AvgSpeed = sum(#*weight*e.speed)/sum(#*(weight+wgt/CargaNe0^(c)))
MACRO AddDrones = func( (sum(#*weight*e.speed)- op(2) * sum(#*(weight+wgt/CargaNe0^(c)))) / (op(2)-op(1) ))
MACRO AddShip = func( -((sum(#*weight*e.speed)- op(2) * (sum(#*(weight-wgt/CargaNe0^(c))) + op(1))) / op(1) ))

Использование AvgSpeed понятно как
AddDrones - считает какую массу дронов(можно и чего нибудь другого) нужно добавить чтобы флот полетел с расчетной скоростью
AddDrones^([Скорость_дронов],[Нужная_скорость_флота])
AddShip - считает, какую должен иметь фиксированную скорость корабль известной массы, добавляемый к флоту, чтобы флот летел с заданной скоростью
AddShip^([Вес_добавляемого_корабля],[Нужная_скорость_флота])
Автор - Taras, кажется

MACRO plann = func((name to op(1)) < op(2))
Фильтр. Применяется из списка планет. Оставляет планеты, находящиеся в пределах определенного расстояния от заданной планеты. Используется для отдания команды "send out spies on these planets". Пример использования - plann^("#123",100)
Автор - Alchi

MACRO fr = func(planet&ships(op(1)))
Фильтр для карты. Оставляет на карте только те из планет, что видны Вам, которые видит указанная раса. Использование fr^("name of race").
Автор - Alchi

MACRO fn = func(planet&(totalships-ships(me))>op(1))
Фильтр для карты. Оставляет на карте только те из планет, что видны вам, на которых присутствуют чужие корабли общей массой более указанной величины Использование fn^([масса]), например fn^(100)
Автор - Alchi

MACRO fd = func(-(name to op(1)) - (besteta <> -1)*1000)
Применяется из списка планет для User Value (Alt-D).
Пример: fd^("#1")
После применения этого макроса и сортировки (Alt-S) по User Value формируется список планет для расылки дронов. При этом команда "Send out spies on these planets" рассылает всю выделенную группу по сформированному списку - на все планеты, ближайшие к заданной планете. В первую очередь рассылка идет на планеты, куда Вы еще не направили наблюдателей.
Автор - Alchi

MACRO sbor = func(if (toofar^(op(1)))(sum(if (toofar^(op(1)))(sum(if (state="in orbit"&(trunc((dest to op(1))/(speed+0.001))+1=op(2)))(command("s "+grp str 0+" "+op(1))<>"")(0)))("too far"))
MACRO toofar = func(selectraces(race=me)+40*drv>selectplanets(race=me)+min(op(1) to name))

В каком-то смысле макрос обратен команде "send out spies..."
Применяется из сформированного списка кораблей Alt-Q, sbor^("name of planet",[ETA]) и формирует ордер с отправкой всех кораблей "in orbit" в этом списке на указанную планету. Причем отправляет только те корабли, которые прибудут через количество ходов, заданное параметром ETA
Например для решающей битвы можно со всей округи таким образом наскрести сотню дронов, оголив разведпункты на всех планетах ;)
Если в силу неразвитости DRIVE, планета недостижима, то выдается сообщение "too far" и корабли никуда не посылаются
Автор - Alchi

MACRO sborall = func(if (toofar^(op(1)))(sum(if (state="in orbit"&speed>0)(command("s "+grp str 0+" "+op(1))<>"")(0)))("too far"))
MACRO toofar = func(selectraces(race=me)+40*drv>selectplanets(race=me)+min(op(1) to name))

Упрощенная версия предыдущего макроса. Применяется из сформированного списка кораблей, при этом посылаются все корабли из списка на указанную планету, не обращая внимания на то, через сколько ходов они туда прилетят. Применение sborall^("name of planet").
Если в силу неразвитости DRIVE, планета недостижима, то выдается сообщение "too far" и корабли никуда не посылаются
Автор - Alchi

Я буду благодарен, если Вы пришлете мне интересные с Вашей точки зрения макросы.

А все вышеприведенные макросы содержатся в моем именном GV.CTL, который Вы можете забрать и настроить по своим надобностям. Если захотите воспользоваться приведенными макросами, то лучше возьмите GV.CTL, а не копируйте со страницы, потому что возможна неадекватность отображения макросов с помощью браузера (видит теги там, где идет тело макроса).



Обратно 1