-
Notifications
You must be signed in to change notification settings - Fork 0
/
m7.ks
executable file
·106 lines (91 loc) · 3.56 KB
/
m7.ks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//OSCM4
clearscreen.
function math{
set Vh to VXCL(Ship:UP:vector, ship:velocity:orbit):mag. //Считаем горизонтальную скорость
set Vz to ship:verticalspeed. // это вертикальная скорость
set Rad to ship:body:radius+ship:altitude. // Радиус орбиты.
set Vorb to sqrt(ship:body:Mu/Rad). //Это 1я косм. на данной высоте.
set g_orb to ship:body:Mu/Rad^2. //Ускорение своб. падения на этой высоте.
set ThrIsp to EngThrustIsp. //EngThrustIsp возвращает суммарную тягу и средний Isp по всем активным двигателям.
set AThr to ThrIsp[0]*Throttle/(ship:mass). //Ускорение, которое сообщают ракете активные двигатели при тек. массе.
set ACentr to Vh^2/Rad. //Центростремительное ускорение.
set DeltaA to g_orb-ACentr-Max(Min(Vz,2),-2). //Уск своб падения минус центр. ускорение с поправкой на гашение вертикальной скорости.
set Foo to arcsin(DeltaA/athr).
set dVh to Vorb-Vh. //Дельта до первой косм.
return list (Vorb, Vh, Foo). //Возвращаем лист с данными.
}
FUNCTION EngThrustIsp{
//создаем пустой лист ens
set ens to list().
ens:clear.
set ens_thrust to 0.
set ens_isp to 0.
//запихиваем все движки в лист myengines
list engines in myengines.
//забираем все активные движки из myengines в ens.
for en in myengines {
if en:ignition = true and en:flameout = false {
ens:add(en).
}
}
//собираем суммарную тягу и Isp по всем активным движкам
for en in ens {
set ens_thrust to ens_thrust + en:availablethrust.
set ens_isp to ens_isp + en:isp.
}
//Тягу возвращаем суммарную, а Isp средний.
return list (ens_thrust).
}
function data{
clearscreen.
print "Апоапсис: "+ round(ship:orbit:apoapsis).
print "Периапсис: "+ round(ship:orbit:periapsis).
print "Осталось до апоапсиса: "+ eta:apoapsis.
}
function start{
//print "Ok".
stage.
}
//------------------------------- end function -------------------------------
start(). wait 1.
lock steering to heading(100,90).
until stage:solidfuel<1{data().}.
wait 3.
start().
print"Ждем Апоапсис.".
//until eta:apoapsis<10{data().}
until ship:altitude>70000{data().}.
lock throttle to 1.
start().
wait 1.
lock steering to heading(90,math[2]).
print "Ждем первой космической.".
until math[1]>math[0].
lock throttle to 0.
print "Достигнута первая космическая.".
lock steering to retrograde.
wait 10.
lock throttle to 1.
print "Снижаем переапсис до -20000.".
until ship:orbit:periapsis<-20000.
print"Отключаем двигатель.".
lock throttle to 0.
wait 3.
start().
lock Steering to -SHIP:VELOCITY:SURFACE.
print "Ждем 4000 метров над body."
until ship:altitude<4000.
start().
print "Раскрываем парашюты и ждем приземления.".
set warp to 3.
until ship:status="landed" or ship:status="splashed".
print ship:status.
wait 3.
set x to 0.
until x=3{
set SciBlock to ship:PARTSTAGGED("sci")[x].
set ScienceModule to SciBlock:GetModule("ModuleScienceExperiment").
ScienceModule:DEPLOY.
set x to x+1.
}.
print "Ок".