я бы сделал видео с каховки с информатором, но у меня fraps не пишет звук,
Не торопись, я вскорости выложу для вас M-Signals и напишу/откопаю инструкцию.Сигналка моя временная, она будет потом более грамотно расстановлена и доработана
Можно.пока я и один хороший человек работаем над кабинами, как выяснилось, используется какая-то часть от некогда опубликованного скрипа Combine
это видно по скоростям на экране:
хотя тут еще имеются скрипты написанные нами, я не знаю точно, можно ли эту кабину будет публиковать, и надо обязательно узнать у авторов
не знаю к кому обращаться, то жду ответа по ЛС или здесь, надеюсь, что можно, ведь если нет - то разработка линии отбросится на пару месяцев назад
include "defaultlocomotivecabin.gs"
include "locomotive.gs"
include "trainz.gs"
include "gs.gs"
include "common.gs"
include "world.gs"
include "vehicle.gs"
include "train.gs"
class TPhyObject
{
public float X = 0;
public float Y = 0;
public float Vx = 0;
public float Vy = 0;
public float m = 0;
public void Reset(void)
{
X = 0;
Y = 0;
Vx = 0;
Vy = 0;
m = 0;
}
};
class ALS_Cab isclass DefaultLocomotiveCabin
{
public void Attach(GameObject obj);
thread void ALSG(void);
void ARS (int ALSCode);
public void Init(void);
int ARSState = 0;
Asset myasset;
TPhyObject Wag;
TPhyObject Bog;
TPhyObject Wh;
float ov = 0.0;
float z = 0;
float dt = 10.0;
int kv_pos = 0;
int kv_pos_old = 0;
int cpos = 0;
int cposc = 0;
bool cd = false;
thread void KB(void)
{
float a = 0.0;
bool vz1_locked = false;
bool add = false;
float tadd = 0.0;
while(true)
{
Sleep(0.05);
cd = !cd;
z = z*0.7 + (loco.GetMyTrain().GetVelocity() - ov)*0.3/0.05;
//Interface.Print(loco.GetMyTrain().GetVelocity() - ov + " " + ov);
ov = loco.GetMyTrain().GetVelocity()*0.5 + ov*0.5;
tadd = 0.0;
float vel = loco.GetVelocity() * 3.6;
kv_pos = GetNamedControl("throttle_lever2").GetValue();
if ((kv_pos_old >= 0) and (kv_pos < 0))
Sleep(0.5);
kv_pos_old = kv_pos;
if (GetNamedControl("throttle_lever2").GetValue() > 0)
kv_pos = GetNamedControl("throttle_lever2").GetValue() + 0.3;
if (GetNamedControl("throttle_lever2").GetValue() < 0)
kv_pos = GetNamedControl("throttle_lever2").GetValue() - 0.3;
if (kv_pos > 3)
kv_pos = 3;
if (kv_pos < -3)
kv_pos = -3;
if ((ARSState == 1) or (ARSState == 2))
kv_pos = -3;
if (vel > 0.1)
{
if (vz1_locked)
loco.SetEngineSetting("loco-auto-brake",100);
if ((kv_pos < -1) and (cposc > 16) and (a > -0.4))
loco.SetEngineSetting("loco-auto-brake",100);
}
if (kv_pos == 0)
{
if (loco.GetEngineSetting("reverser") != 1)
World.PlaySound(myasset,"sound/razbor.wav",1.0f,2,10,loco,"a.cabfront");
cpos = 1;
cposc = 1;
loco.SetEngineSetting("throttle",0);
loco.SetEngineSetting("dynamic-brake",0);
loco.SetEngineSetting("reverser",1);
}
if (kv_pos == 1)
{
loco.SetEngineSetting("loco-auto-brake",0);
loco.SetEngineSetting("dynamic-brake",0);
loco.SetEngineSetting("reverser",2);
if (cpos == 0)
cposc = 1;
if (cposc > 0)
cpos = cposc;
}
if (kv_pos == 2 and cd)
{
cpos = (vel / 35.0) *24 + 6;
if (cposc < 6)
cposc = 6;
if (cpos > 32)
cpos = 32;
if (cposc < cpos)
++cposc;
if ((cposc < 32) and (loco.GetEngineParam("applied-force") < 33000) and (vel < 25))
tadd = 8.0;
}
if (kv_pos == 3 and cd)
{
if (cpos < 32)
cpos = (vel / 35.0) *24 + 6;
if (cpos >= 32)
cpos = 32 + (vel - 32)*4 / 23.0;
if (cpos > 36)
cpos = 36;
if (cposc < cpos)
++cposc;
if ((cposc < 36) and (loco.GetEngineParam("applied-force") < 33000) and (vel < 30))
tadd = 8.0;
}
if (kv_pos > 0)
{
float ttl = 0;
if (vel > 3.0)
vz1_locked = false;
loco.SetEngineSetting("loco-auto-brake",0);
if (cposc == 1)
ttl = 1;
if (cposc <= 32)
ttl = 1 + (cposc / 32.0)*3.0;
if (cposc > 32)
ttl = 4 + ((cposc - 32) / 4.0);
if ((cpos - cposc > 0) and (cpos - cposc < 7) )
ttl = 8;
loco.SetEngineSetting("reverser",2);
loco.SetEngineSetting("throttle",ttl + tadd);
if (loco.GetEngineSetting("reverser") != 2)
{
loco.SetEngineSetting("throttle",0);
loco.SetEngineSetting("reverser",2);
}
}
a = (-0.06 - cposc*0.17/18.0) * (vel - (37 - cposc*35/18.0));
if (a > 0)
a = 0;
if (kv_pos == -1)
{
loco.SetEngineSetting("reverser",2);
loco.SetEngineSetting("dynamic-brake",2);
loco.SetEngineSetting("throttle",0.01);
if (!vz1_locked)
loco.SetEngineSetting("loco-auto-brake",0);
if (cposc == 1)
{
//a = -0.03 * (vel - 30);
if (a < -0.4)
a = -0.4;
}
add = false;
}
if (kv_pos == -2 and cd)
{
loco.SetEngineSetting("reverser",2);
loco.SetEngineSetting("dynamic-brake",2);
loco.SetEngineSetting("throttle",0.01);
//if ((cposc >17) and (a > -0.8))
// loco.SetEngineSetting("loco-auto-brake",100);
if ((a > -1.07) and (!add) and (cposc < 18))
{
add = true;
cposc++;
}
if (cposc == 1)
{
//a = -0.03 * (vel - 30);
if (a < -1.07)
a = -1.07;
}
add = true;
}
if (kv_pos == -3 and cd)
{
cpos =18;// 18 - (vel - 10)*18 / 55;
if (cpos > 18)
cpos = 18;
if (cpos < 0)
cpos = 0;
if ( (a > -1.07) and (cposc < 18) )
{
++cposc;
}
if ((cposc >17) and (a > -0.8))
loco.SetEngineSetting("loco-auto-brake",100);
}
if (kv_pos < 0)
{
//float ttl = 0;
//loco.SetEngineSetting("throttle",1);
if ((vel < 1) and (kv_pos < -1) and (cposc > 17))
vz1_locked = true;
//if (cposc != 0)
// a = (-0.03 - cposc*0.18/18.0) * (vel - (30 - cposc*25/18.0));
if (a < -1.2)
a = -1.2;
if (a > 0)
a = 0;
loco.SetEngineSetting("throttle",-a);
loco.GetMyTrain().AddVelocity(a*0.05);
//Interface.Print("KB=" + kv_pos + " pos=" + cposc + " ttl=" + loco.GetEngineSetting("throttle") + " f=" + loco.GetEngineParam("applied-force") + " a=" + a);
}
}
}
public void PhyTick(float dt)
{
int i = 0;
float ft = dt / 40.0;
for (i = 0; i < 10;++i)
{
if (!Wh or !Bog or !Wag)
return;
float XForce = (Wh.X - Bog.X)*1000.0*10000.0 + (Bog.X - Wag.X)*100.0*10000.0;
float YForce = (Wh.Y - Bog.Y)*585.0*10000.0 - (Bog.Y - Wag.Y)*585.0*10000.0 - Bog.m*9.8;
float XAccel = XForce/Bog.m;
float YAccel = YForce/Bog.m;
Wh.X = Wh.X*0.98 + Wh.Vx*ft;
Wh.Y = Wh.Y*0.98 + Wh.Vy*ft;
if (Math.Rand(0,1000) < Math.Fabs(loco.GetVelocity()))
{
Wh.Vx = Math.Rand(-1.0,1.0)*loco.GetVelocity()*0.03;
Wh.Vy = Math.Rand(-1.0,1.0)*loco.GetVelocity()*0.06;
}
Bog.Vx = Bog.Vx*0.998 + ft*XAccel;
Bog.Vy = Bog.Vy*0.997 + ft*YAccel;
Bog.X = Bog.X + ft*Bog.Vx;
Bog.Y = Bog.Y + ft*Bog.Vy;
XForce = (Bog.X - Wag.X)*100.0*10000.0;
YForce = (Bog.Y - Wag.Y)*585.0*10000.0 - Wag.m*9.8;
YForce = YForce - Math.Fmin(240000*(Bog.Vy + Wag.Vy),150000);
XForce = XForce - Math.Fmin(240000*(Bog.Vx + Wag.Vx),150000);
XAccel = XForce/Wag.m;
YAccel = YForce/Wag.m;
Wag.Vx = Wag.Vx*0.999 + ft*XAccel;
Wag.Vy = Wag.Vy*0.997 + ft*YAccel;
Wag.X = Wag.X + ft*Wag.Vx;
Wag.Y = Wag.Y + ft*Wag.Vy;
if (Wag.Y > 0.2)
Wag.Y = 0.2;
if (Wag.Y < -0.2)
Wag.Y = -0.2;
if (Bog.Y > 0.2)
Bog.Y = 0.2;
if (Bog.Y < -0.2)
Bog.Y = -0.2;
}
}
float vz1st = 0.0;
public void Update()
{
inherited();
dt = World.GetSeconds() - dt;
if (dt < 1.0)
PhyTick(dt);
dt = World.GetSeconds();
loco.SetMeshTranslation("default",Wag.X,z*0.021,Wag.Y);
if (loco.GetEngineSetting("loco-auto-brake") < vz1st)
World.PlaySound(myasset,"sound/vz1_o.wav",1.0f,2,10,loco,"a.cabfront");
if (loco.GetEngineSetting("loco-auto-brake") > vz1st)
World.PlaySound(myasset,"sound/vz1_t.wav",1.0f,2,10,loco,"a.cabfront");
vz1st = loco.GetEngineSetting("loco-auto-brake");
}
public void Attach(GameObject obj)
{
inherited(obj);
SetTextureSelfIllumination("pult.texture.txt",1,0,0);
SetTextureSelfIllumination("pult.jpg",1,0,0);
Wag = new TPhyObject();
Bog = new TPhyObject();
Wh = new TPhyObject();
Wag.Reset();
Bog.Reset();
Wh.Reset();
Wag.m = 19200;
Wag.Y = -0.07;
Bog.Y = 00.0;
Bog.m = 7550.0;
Wh.m = 1000;
SetFXNameText("als_lcd","99");
ALSG();
KB();
int i = 0;
for (i=0;i < loco.GetMyTrain().GetVehicles().size(); ++i)
{loco.GetMyTrain().GetVehicles()[i].SetProductDisabled();}
(cast<Vehicle>obj).SetHeadlightColor(0.1,0.1,0.05);
(cast<Vehicle>obj).SetRollBasedOnTrack(-1.0);
(cast<Vehicle>obj).SetCabinSwayAmount(50.0);
}
Browser vdb;
public void Init(void)
{
inherited();
myasset = GetAsset();
SetFXNameText("als_lcd","00");
vdb = Constructors.NewBrowser();
vdb.SetWindowStyle(2);
vdb.SetWindowWidth(400);
vdb.SetWindowHeight(70);
vdb.SetWindowPosition(Interface.GetDisplayWidth()/2.0 - 200,50);
vdb.SetCloseEnabled(false);
}
int ALSCode2 = 0;
thread void ALSG(void)
{
StringTable ST = GetAsset().GetStringTable();
while(true)
{
Sleep(0.5);
GSTrackSearch GSTS=loco.BeginTrackSearch(true);
MapObject mo=GSTS.SearchNext();
int ALSCode = 1;
while(mo){
if(mo.isclass(Signal) and GSTS.GetFacingRelativeToSearchDirection())
{
Soup props=mo.GetProperties();
if (props.GetNamedTag("MSig-type") != "")
{
ALSCode = props.GetNamedTagAsInt("MSig-als-fq");
ALSCode2 = props.GetNamedTagAsInt("MSig-als-fq");
break;
}
}
mo=GSTS.SearchNext();
if (GSTS.GetDistance() > 1000)
break;
}
string sALS = "";
if ((ALSCode == 1) or (ALSCode == 2) or (ALSCode == -1))
sALS = ST.GetString("als-och");
if (ALSCode == 0)
sALS = "0";
if (ALSCode > 3)
sALS = ALSCode * 10;
int vel = loco.GetVelocity() * 3.6;
SetFXNameText("als_lcd",sALS);
ARS(ALSCode);
}
}
void ARS (int ALSCode)
{
int MaxSpeed = ALSCode*10;
int MaxSpeedNext = ALSCode2*10;
if ((ALSCode == 1) or (ALSCode == 2) or (ALSCode == -1))
MaxSpeed = 999;
if (ALSCode == 0)
MaxSpeed = 20;
int Speed = Math.Abs(loco.GetVelocity()*3.6);
if ((Speed == MaxSpeed) and (ARSState == 0) and (Speed != 0))
{
ARSState = 3;
loco.SetEngineSetting("throttle",0);
}
if (Speed > MaxSpeed)
{
if (loco.GetEngineSetting("dynamic-brake") != 2)
{
loco.SetEngineSetting("throttle",0);
loco.SetEngineSetting("dynamic-brake",2);
}
if (loco.GetEngineSetting("dynamic-brake") == 0)
{
loco.SetEngineSetting("loco-auto-brake",100);
Sleep(1);
}
loco.SetEngineSetting("loco-auto-brake",0);
Speed = Math.Abs(loco.GetVelocity()*3.6);
if (Speed > MaxSpeed)
{
loco.SetEngineSetting("dynamic-brake",2);
loco.SetEngineSetting("throttle",2);
ARSState = 2;
}
}
if ((Speed < MaxSpeed) and (ARSState == 2))
{
ARSState = 1;
}
if ((Speed < MaxSpeed) and (ARSState == 3) and (Speed != 0))
{
ARSState = 0;
World.PlaySound(myasset,"sound/ARSend.wav",1.0f,2,10,loco,"a.cabfront");
}
if (ARSState != 0)
World.PlaySound(myasset,"sound/ARSsig.wav",1.0f,2,10,loco,"a.cabfront");
string s="<html><body bgcolor='#010101' leftmargin=50 rightmargin=50>";
if (Speed < 10)
s=s+"<b><font color='#00FF00' size=16 face='arial'>0" + Speed + " </font>";
else
s=s+"<b><font color='#00FF00' size=16 face='arial'>" + Speed + " </font>";
if (MaxSpeed == 999)
s=s+"<b><font color='#FF0000' size=16 face='arial'>"+ GetAsset().GetStringTable().GetString("als-och") + " </font>";
else
s=s+"<b><font color='#300000' size=16 face='arial'>"+ GetAsset().GetStringTable().GetString("als-och") + " </font>";
if (ALSCode == 0 or (ALSCode2 == 0 and ALSCode2 < ALSCode))
s=s+"<b><font color='#FF0000' size=16 face='arial'>0 </font>";
else
s=s+"<b><font color='#300000' size=16 face='arial'>0 </font>";
if (ALSCode == 4 or (ALSCode2 == 4 and ALSCode2 < ALSCode))
s=s+"<b><font color='#FFFF00' size=16 face='arial'>40 </font>";
else
s=s+"<b><font color='#303000' size=16 face='arial'>40 </font>";
if (ALSCode == 6 or (ALSCode2 == 6 and ALSCode2 < ALSCode))
s=s+"<b><font color='#00FF00' size=16 face='arial'>60 </font>";
else
s=s+"<b><font color='#003000' size=16 face='arial'>60 </font>";
if (ALSCode == 7 or (ALSCode2 == 7 and ALSCode2 < ALSCode))
s=s+"<b><font color='#00FF00' size=16 face='arial'>70 </font>";
else
s=s+"<b><font color='#003000' size=16 face='arial'>70 </font>";
if (ALSCode == 8 or (ALSCode2 == 8 and ALSCode2 < ALSCode))
s=s+"<b><font color='#00FF00' size=16 face='arial'>80 </font>";
else
s=s+"<b><font color='#003000' size=16 face='arial'>80 </font>";
s=s+"</body></html>";
vdb.LoadHTMLString(GetAsset(),s);
}
public void UserPressKey(string s)
{
if ((s == "shovel-coal") and (ARSState == 1))
{
//loco.SetEngineSetting("throttle",0);
//loco.SetEngineSetting("dynamic-brake",0);
ARSState = 0;
World.PlaySound(myasset,"sound/ARSend.wav",1.0f,2,10,loco,"a.cabfront");
}
if (s == "steam-regulator-up")
{
GetNamedControl("throttle_lever2").SetValue(GetNamedControl("throttle_lever2").GetValue() + 1.2);
World.PlaySound(myasset,"sound/kv.wav",1.0f,2,10,loco,"a.cabfront");
}
if (s == "steam-regulator-down")
{
GetNamedControl("throttle_lever2").SetValue(GetNamedControl("throttle_lever2").GetValue() - 1.2);
World.PlaySound(myasset,"sound/kv.wav",1.0f,2,10,loco,"a.cabfront");
}
inherited(s);
}
thread void LockKB(void)
{
GetNamedControl("throttle_lever2").SetLocked(true);
Sleep(0.8);
GetNamedControl("throttle_lever2").SetLocked(false);
}
public void UserSetControl(CabinControl control, float value)
{
if ((control.GetName() == "throttle_lever2") and (kv_pos == -1))
LockKB();
if (control.GetName() == "throttle_lever2")
World.PlaySound(myasset,"sound/kv.wav",1.0f,2,10,loco,"a.cabfront");
inherited(control, value);
}
};
kuid <kuid:160177:52200>
kind "engine"
rem "81-717"
epbrakes 1
flowsize
{
trainbrakepipe 170000
epreservoirpipe 0.1
no3pipe 0.1
no4pipe 0.1
auxreservoirvent 0.1
auxreservoir_no3 0.1
auxreservoir_trainbrakepipe 0.1
autobrakecylindervent 1
auxreservoir_autobrakecylinder 1
equaliser_mainreservoir 0.06
equaliservent 0.06
equaliserventhandleoff 0
equaliserventemergency 0.1
no3pipevent 1.5
no3pipe_mainreservoir 0.1
compressor 2
trainbrakepipe_reservoir 1
trainbrakepipevent 0.06
no3pipe_autobrakecylinder 2
epreservoirpipe_autobrakecylinder 0.1
mainreservoir_ep 0.1
vacuumbrakepipe 0.1
vacuumbrakepipereleasevent 0.1
vacuumbrakepipevent 0.1
vacuumbrakereservoir_vacuumbrakepipe 0.1
vacuumbrakecylinder_vacuumbrakepipe 0.1
highspeedexhauster_vacuumbrakepipe 0.1
}
volume
{
scale 1
trainbrakepipe 0.029
epreservoirpipe 0.029
no3pipe 0.029
no4pipe 0.029
auxreservoir 0.1
autobrakecylinder 0.042
vacuumbrakepipe 0
vacuumbrakereservoir 0
vacuumbrakecylinder 0
mainreservoir 0.425
equaliser 0.0095
independantbrakecylinder 0.014
}
pressure
{
scale 1
compressor 0.00852036
mainreservoir 0.00852036
highspeedexhauster 0
brakepipe 0.00602471
brakeinitial 0.00532593
brakefull 0.00402819
indbrakefull 0.00203167
trainbrakepipe_start 0.00472697
epreservoirpipe_start 0
no3pipe_start 0
no4pipe_start 0
auxreservoir_start 0.00472697
autobrakecylinder_start 0.00362889
vacuumbrakepipe_start 0
vacuumbrakereservoir_start 0
vacuumbrakecylinder_start 0
mainreservoir_start 0.00852036
equaliser_start 0.00472697
independantbrakecylinder_start 0
}
mass
{
scale 1
fuel "6.2156e+006"
}
motor
{
resistance 0.1
adhesion 0.1
maxvoltage 600
maxspeed 25
brakeratio 45000
max-accel 10000
max-decel 40000
throttle-notches 8
axle-count 4
surface-area 80
moving-friction-coefficient 0.06
air-drag-coefficient 0.0002
}
throttle-power
{
0
{
0 0
}
1
{
0 40
0.05 8
0.2 7
2.77 3
5.5 1
}
2
{
0 100
0.3 42
1.1 42
1.4 33
2.8 13
6 8
}
3
{
0 100
0.3 42
4.17 42
5 18
6 13
10 6
25 2
}
4
{
0 100
2.0 42
4.3 42
4.4 42
7.8 42
8.3 42
10 42
13 14
15 9
17.7 8
22.2 7
25 5
}
5
{
0 100
2.3 42
4.4 42
2.0 42
7.8 42
8.3 42
13.8 42
15.7 40
19.5 21
22.2 16
25 12
}
6
{
0 40
25 40
}
}
description "81-717_engine_config"
trainz-build 2.2
category-class "RC"
category-region-0 "RU"
category-era-1 "1990s"
category-era-0 "1980s"
asset-filename "81-717_engine"
thumbnail
username "81-717_engine"
author "Jam"
organisation "Trainz.ru"
contact-email "jamd@mail.ru"
contact-website "www.metro.trainz.ru"
license "View License.txt"
kuid-table
{
}
Не торопись, я вскорости выложу для вас M-Signals и напишу/откопаю инструкцию.
Вернуться в [TZ] Подвижной состав
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0