|
|
@ -851,11 +851,11 @@ int Locomotives::Loco_SearchAndLock(Locomotive *loco) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else strncpy (loco->blocknext, way.substr(pos+3,string::npos).c_str(), REFERENCENAME_LEN);
|
|
|
|
else strncpy (loco->blocknext, way.substr(pos+3,string::npos).c_str(), REFERENCENAME_LEN);
|
|
|
|
strncpy (loco->auto_way, way.c_str(), WAYDATA_LEN);
|
|
|
|
strncpy (loco->auto_way, way.c_str(), WAYDATA_LEN);
|
|
|
|
if (server->railways.LockWay(way, loco->name) == 1) {
|
|
|
|
if (server->railways.LockWay(way, loco->name, 1, 0) == 1) {
|
|
|
|
loco->auto_data = -1;
|
|
|
|
loco->auto_data = -1;
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
server->railways.UnLockWay(way, loco->name);
|
|
|
|
server->railways.LockWay(way, loco->name, 0, RAILWAYS_LOCKF_KEEPSTART);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -876,11 +876,20 @@ int Locomotives::Loco_SearchAndLock(Locomotive *loco) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else strncpy (loco->blocknext, way.substr(pos+3,string::npos).c_str(), REFERENCENAME_LEN);
|
|
|
|
else strncpy (loco->blocknext, way.substr(pos+3,string::npos).c_str(), REFERENCENAME_LEN);
|
|
|
|
strncpy (loco->auto_way, way.c_str(), WAYDATA_LEN);
|
|
|
|
strncpy (loco->auto_way, way.c_str(), WAYDATA_LEN);
|
|
|
|
if (server->railways.LockWay(way, loco->name) == 1) {
|
|
|
|
if (server->railways.LockWay(way, loco->name, 1, 0) == 1) {
|
|
|
|
loco->auto_data = -1;
|
|
|
|
loco->auto_data = -1;
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
server->railways.UnLockWay(way, loco->name);
|
|
|
|
if (server->railways.LockWay(way, loco->name, 0, RAILWAYS_LOCKF_KEEPSTART) == 0) {
|
|
|
|
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
|
|
|
|
SetModeMan(loco->name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
server->LocomotiveSetMan(loco->name);
|
|
|
|
|
|
|
|
server->LocomotiveSetSpeed(loco->name, 0);
|
|
|
|
|
|
|
|
debug (DEBUG_ERROR, "*** ERROR *** %s:%d locomotive %s error occured. Could not undo the locking of the way.",
|
|
|
|
|
|
|
|
__FILE__, __LINE__, loco->name);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -980,15 +989,19 @@ int Locomotives::Loco_OnRoute(Locomotive *loco) {
|
|
|
|
//
|
|
|
|
//
|
|
|
|
if (Loco_SearchAndLock(loco) == 1) {
|
|
|
|
if (Loco_SearchAndLock(loco) == 1) {
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKNEXT;
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKNEXT;
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Found Way Prepare '%s'\n", loco->name);
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Found Way Prepare '%s'", loco->name);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vslow : loco->vslow);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vslow : loco->vslow);
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else if (loco->flags && LOCO_F_AUTO) {
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKSTOP;
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKSTOP;
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Slow Down '%s'\n", loco->name);
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Slow Down '%s'", loco->name);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vslow : loco->vslow);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vslow : loco->vslow);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute '%s' some error occured.", loco->name);
|
|
|
|
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1027,7 +1040,7 @@ int Locomotives::Loco_BlockEnterStop(Locomotive *loco) {
|
|
|
|
|
|
|
|
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
loco->auto_onroute = LOCO_OR_STOPWAIT;
|
|
|
|
loco->auto_onroute = LOCO_OR_STOPWAIT;
|
|
|
|
server->railways.UnLockWay(loco->auto_wayold, loco->name);
|
|
|
|
server->railways.LockWay(loco->auto_wayold, loco->name, 0, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
@ -1069,7 +1082,7 @@ int Locomotives::Loco_BlockEnterNext(Locomotive *loco) {
|
|
|
|
debug (0, "Locomotives::Loco_BlockEnterNext could not prepare way in time '%s'\n", loco->name);
|
|
|
|
debug (0, "Locomotives::Loco_BlockEnterNext could not prepare way in time '%s'\n", loco->name);
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
SetSpeed(loco->name, 0);
|
|
|
|
loco->auto_onroute = LOCO_OR_STOPWAIT;
|
|
|
|
loco->auto_onroute = LOCO_OR_STOPWAIT;
|
|
|
|
server->railways.UnLockWay(loco->auto_wayold, loco->name);
|
|
|
|
server->railways.LockWay(loco->auto_wayold, loco->name, 0, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
|
timer_start(&loco->auto_timenext);
|
|
|
@ -1079,7 +1092,7 @@ int Locomotives::Loco_BlockEnterNext(Locomotive *loco) {
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
debug (0, "* Locomotives::Loco_BlockEnterNext endblock reached %s", loco->name);
|
|
|
|
debug (0, "* Locomotives::Loco_BlockEnterNext endblock reached %s", loco->name);
|
|
|
|
|
|
|
|
|
|
|
|
server->railways.UnLockWay(loco->auto_wayold, loco->name);
|
|
|
|
server->railways.LockWay(loco->auto_wayold, loco->name, 0, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
server->blocks.SetLockedby(loco->blockprev+2, loco->name, 0);
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
loco->auto_wayold[0] = 0;
|
|
|
|
|
|
|
|
|
|
|
|