Макросы и Фильтры для пользователей программы GV. Все очень просто. Все, что ниже, надо вставить в файл gv.ctl Ты можешь либо посмотреть, либо сразу забрать в виде файла (11 Кб). ; Макросы пользователя. ; Macro <имя macro> = <значение> ; используются в Query, Filter, etc. ; Фильтр военных кораблей противников Macro Wars = (warship| orbship) & enemy ; Фильтр своих военных кораблей Macro Warme = (orbship | warship) & (race = me) ; Фильтр HЕ своих военных кораблей Macro DangShip = orbship | warship ; Фильтр орбитальных кораблей Macro Orbship = (weight>2 & (p.w>0 | p.s>0 & #>2) | weight<=2 & #>2 ) & speed<3.1 Macro Bombs = sum(#*bomb) Macro Brutto = sum(#*weight) Macro Netto = sum(#*cpty) Macro Guns = sum(#*gun) Macro OrbStan = orbship & p.w>=10 Macro OrbPerf = orbship & gun>5 & p.w<10 Macro OrbCov = orbship & weight<5 Macro OrbShield = orbcov & def>0 Macro DangShip = orbship | warship Macro Cruiser = warship & p.w>=10 & speed>=3 Macro Perf = warship & gun>5 & p.w<10 & speed>=3 Macro Cover = warship & weight<6 Macro Drone = cover & def=0 Macro HD = cover & def>0 Macro AvgDef = sum(#*def)/summ(#) Macro AvgDefence = sum(#*def*weight)/summ(#*weight) Macro AvgCargo = sum(#*cpty)/summ(#) Macro AvgAttack = sum(#*gun*attack)/summ(#*gun) Macro AvgSpeed = sum(#*weight*speed)/summ(#*weight) Macro EnyWar = warship & not Frend Macro EnyOrb = orbship & not Frend Macro EnyDang = dangship & not Frend Macro EWar = warship & Enemy Macro EOrb = orbship & Enemy Macro EDang = dangship & Enemy Macro DShip = EWar & dest to '#181' < speed Macro Friend = race=me | Good Macro Enemy = not Friend ; Технологии ; ; макрос получения текущих технологий macro oldT =Nrace:=race\SELECTRACES(race=Nrace)\oldD:=drv\oldW:=wpn\oldS:=shld\oldC:=crg\SELECTPLANETS(race=Nrace) ; макросы пересчета технологий с учетом прироста macro newT = NNewt:="D="+(oldt+plusD+oldD) str 4.2 +" W="+(plusW+oldW) str 4.2 +" S="+(plusS+oldS) str 4.2 +" C="+(plusC+oldC) str 4.2 +" N="+plusN str 4 ; макросы пересчета замедленных технологий с учетом прироста ; 1 + log( 2^(OldTech-1) + L/3000) ; вспомогательный ; slow^( Macro slow =func( 1 + ln( 2^(op(1)-1) + op(2)*5/3 ) / ln(2) ) ; основной макрос Macro slowT = NNewt:="D="+(oldT+slow^(oldD,plusD)) str 4.2 +" W="+slow^(oldW,plusW) str 4.2 +" S="+slow^(oldS,plusS) str 4.2 +" C="+slow^(oldC,plusC) str 4.2 +" N="+plusN str 4 ; рабочие макросы подсчета прироста технологий 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 ; основной макрос для обычных технологий macro plusT = NNewt:="d="+(oldT+plusD) str 4.2 +" w="+plusW str 4.2 +" s="+plusS str 4.2 +" c="+plusC str 4.2 +" N="+plusN str 4 ; макрос подсчета прироста замедленных технологий macro plusST = NNewt:="d="+(oldT+slow^(oldD,plusD)-oldD) str 4.2 +" w="+(slow^(oldW,plusW)-oldW) str 4.2 +" s="+(slow^(oldS,plusS)-oldS) str 4.2 +" c="+(slow^(oldC,plusC)-oldC) str 4.2 +" N="+plusN str 4 ; макросы подсчета прироста технологий по текущей науке Macro plusN =pr_d:=production\sum(l*(production=pr_d))/5000 ; макрос подсчета массы постройки типа корабля по всем планетам Macro plusK =pr_d:=production\sum(outwgt*(production=pr_d)) ; Макросы фильтра текущего флота из списка кораблей : ; Это надо запустить в Query для запоминания текущего флота macro FLT =fl_t:=fleet macro DST =ds_t:=dest ; Это фильтр по текущему флоту , запускается после FLT macro FL =fleet = fl_t ; Буксировка ; ; вспомогательные макросы ; Pеальная загрузка macro SpeedF =20*sum(#*d*p.d)/sum( #*(weight+(if (c > 0) (wgt / c)(0)) ) ) ; полностью загруженого macro SpeedC =20*sum(#*d*p.d)/sum( #*(weight+(if (c > 0) (cpty / c)(0)) ) ) ; без груза macro SpeedE =20*sum(#*d*p.d)/sum( #*weight ) ; Макросы подсчета скорости флота, состоящего из кораблей списка : ; обобщенная macro Flots =Fflot:="Speed="+SpeedF str 4.2 +" Full="+SpeedC str 4.2 +" Empty="+SpeedE str 4.2+' '+flt ; по текущему флоту macro Flotm =Fflotm:="Spd="+SpeedF str 4.2 +" Ful="+SpeedC str 4.2 +" Emp="+SpeedE str 4.2+"/"+fleet str 10 ; по текущему флоту macro Fltt =Fflot:=flt+dst\SELECTSHIPS(fl_t=fleet & ds_t=dest & race=me) macro Flott =Fflott:="Spd="+(Fltt+SpeedF) str 4.2 +" Ful="+SpeedC str 4.2 +" Emp="+SpeedE str 4.2+"/"+fl_t str 10 ; Создание файла для программы BATTLE.EXE из списка кораблей ; результат получается в клипбоарде MACRO battl = (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) |
; Это вспомогательный макрос для подсчета скорости и бомбинга Macro rc = r.c:=race ; Полеты планет ; ; Макрос подсчета скорости планеты - текущий macro SP = r.c:=race\10*(L/size)*(1-size/2500)*(selectraces(race=r.c)+drv)) ; Макрос подсчета скорости планеты из списка планет - произвольный ; SpeedP^( ; D - Drive владельца ; L - производственные единицы, ; L=0 - берутся реальные значения macro SpeedP = func(10*op(1)*( (if (op(2)=0)(L)(op(2)))/size)*(1-size/2500) ) ; Бомбинг ; ; Ослабленный бомбинг - текущий Macro SB = r.c:=race\d.e:=dest\sum(#*bomb)*(SELECTPLANETS(name=d.e)+1)/sqrt(1000/size*(SELECTRACES(race=r.c)+shld)) ;Macro SB = sum(#*bomb)*(dst=dest)*(SELECTPLANETS(name=d.e)+1)*(rc=race)/sqrt(1000/size*(SELECTRACES(race=r.c)+shld)) ; Ослабленный бомбинг - произвольный ; Sbomb^(Shields,Size) ; Shields - техи защита владельца планеты ; Size - размер планеты Macro SBomb = func( sum(#*bomb)/sqrt(op(1)*1000/op(2)) ) ; Терраформинг ; ; Макрос подсчета терраформинга macro Terr = Tterr:="Size="+(Size+0.1*L) str 1 +" Res="+(Res*(1-L*0.3/Size)) str 3.2+ " Pop="+(if ((Pop*1.08+Col*8-Size-0.1*L)>0) (Size+0.1*L) (Pop*1.08+Col*8)) str 1+" Ind="+(if ((Ind+$-Size-0.1*L)>0) (Size+0.1*L) (Ind+$)) str 1 ; Gentler ;А загружаюсь вручную по фильтру: macro car =cpty>7 & state='in orbit' ; macro loading =car & cpty-wgt>0.1 & (plcol^(dest)>5 or plcap^(dest)>35) ;macro plcol=func(getplanet(op(1))+col) ;macro plcap=func(getplanet(op(1))+$) ;macro plpop=func(getplanet(op(1))+pop) ; Автоматические погрузка-разгрузка ( UN ): ; macro o =state='in orbit' & race=me macro plcol =func(getplanet(op(1))+col) macro plcap =func(getplanet(op(1))+$) macro Ssize =func(getplanet(op(1))+size) ; Gentler ; 1. Выгрузить понемногу кола на пустые планеты (смотреть, ; чтоб кого не обидеть). macro un1 =selectraces(1)\while cnt (selectships((owner(dest) like 'unin*') & typ='COL' & o & wgt)\if cnt (command('U '+ grp str 1+' 0 0.01')\show('NewPlan '+cnt str 5+' Grp='+grp str 1))(0)) ; Gentler ; 2. Разгрузить все грузовики (трюм более 2 ) над своими планетами. macro un2 =selectraces(1)\while cnt (selectships(owner(dest)=me & o & wgt>2)\if cnt (command('U '+grp str 1)\show('Unload '+cnt str 5.0+' Grp='+grp str 5))(0)) ; Gentler ; 3. Загрузить единичные трюмы новых военных кораблей. macro un3 =selectraces(1)\while cnt (selectships(owner(dest)=me & o & un3f & plcol^(dest))\if cnt (command('L '+grp str 1+' COL')\show('LoadColW'+cnt str 5+' Grp='+grp str 1))(0)) macro un3f =cpty>0 & p.c<3 & (cpty-wgt>0.1 & typ='COL' | typ='') ; 4. Загрузить грузовики CAP macro un4 =selectraces(1)\while cnt (selectships(owner(dest)=me & o & un4f & plpop^(dest)> 0.98*Ssize^(dest) )\if cnt (command('L '+grp str 1+' CAP')\show('LoadCap'+cnt str 5+' Grp='+grp str 1))(0)) macro un4f =cpty>50 & (cpty-wgt>0 & typ='CAP' | typ='') & plcap^(dest)>cpty/2 ; ; Обязательно проверяйте загрузку - возможна загрузка не того что вы хотите ; 5. Загрузить грузовики COL macro un5 =selectraces(1)\while cnt (selectships(owner(dest)=me & o & un5f & plcol^(dest))\if cnt (command('L '+grp str 1+' COL')\show('LoadCol'+cnt str 5+' Grp='+grp str 1))(0)) macro un5f =cpty>1 & (cpty-wgt>0 & typ='COL' | typ='') ; ; Обязательно проверяйте загрузку - возможна загрузка не того что вы хотите ; и объединяющий макрос macro un =un1\un2\un3\un4\un5 ; разгрузка по порядку следования групп ; unload macro unload =selectships(1)\cnt1:=cnt+20\while cnt1>0(cnt1:=cnt1-1\if cnt (show('Use '+cnt1 str 0)\Writeln('U '+cnt1 str 0+' 0 0.01')) ('Ok')) ; Разное ; ; отправка по фильтру на планету ; send," macro send =selectraces(1)\while cnt>0(selectships(o &(dest to op(-1) > (op(0)-1)*speed) & !(dest to op(-1) > op(0)*speed))\if cnt(show('Send '+grp str 0+' to '+op(-1)+' ( '+cnt str 0+' )')\command('S '+grp str 0+' '+op(-1)))("O'k!")) ; Делаешь список кораблей врага, пишешь в фильтре ; Dist^("#123") и получаешь список кораблей, кто до #123 долетает за ход. macro Dist = func( (speed > (planet to op(1)) ) ) ; Массовая смена производства ; ; prod," ;например на планете производится Drive ; и я хочу заменить на это текущее производство ; везде , где заложена Shields : ; prod,"Sh*",0 ; или на планетах с L<500 : ; prod,"*",500 ; требуется задать фильтр Lprod , можете изобрести свой macro Lprod =L macro Prod =Tprod:=production\while cnt ( selectplanets( Lprod & race=me & !(production=Tprod) )\if cnt (command("P "+name+" "+Tprod)\show('NewPlan '+cnt str 5+' Planet='+name str 12))(0) ) ; Gentler ;Вот еще, может пригодится, макрос постановки в апгрейд одиночных ;дронов на свежезавоеванных планетах - чтоб видеть их лишний ход macro plpop =func(getplanet(op(1))+pop) macro updron =selectraces(race=me)\Tdr:=drv\while cnt>0 (selectships(owner(dest)=me&o & weight=1 & #=1 & TDr>d)\show('Rest:'+cnt str 1)\if cnt (command('X '+grp str 1+' DRIVE 1 '+(d+0.01) str 1.2))(0))\command("#") ; Делаешь список кораблей врага, пишешь в фильтре ; Dist^("#123") и получаешь список кораблей, кто до #123 долетает за ход. macro Dist = func( (speed > (planet to op(1)) ) ) Спасибо SLIPPERY за этот научный труд. Используются технологии uCoz
mr.Skull galaxy@caravan.ru |
Реклама в Галактике | ||
srand() ; $banner = int(rand(1000000)) ; !> | srand() ; $banner = int(rand(1000000)) ; !> | srand() ; $banner = int(rand(1000000)) ; !> |