Jag har gjort ett genombrott!
Efter flera försök med felsökning rörande TAB/"Passing signal at danger approved/denied" där DV4 medgivandesignal fångar upp och blockerar detta så har jag äntligen hittat felkällan:
I commonscript så har jag följande rader:
PHP-kod:
function GetSignalState()
return gSignalState
end
Detta gör att TSC genom funktionen GetSignalState alltid frågar signaler om dess status så länge spelet är igång. Det är här som TAB-funktionen hanteras.
Problemet är att eftersom det låg i CommonScript så hämtar alla signaler som kör commonscript denna funktion. Huvudsignaler såsom H2, H5 och DV7 har en gSignalState definierad, något jag upptäckte när jag debuggade kodraderna. Däremot har F2, F3 och DV4 medgivandesignal ingen gSignalState definierad, eftersom deras enda uppgift är att hämta försignalbesked eller matchande växlingssignal från en huvudsignal som hanterar all signalscript.
Men eftersom GetSignalState även körs hos dessa utan att gSignalState är definierad så "fångar" de upp TAB-förfrågan, och gör inget med det. - Ingeting fungerar förrän man har kört förbi signalens länk.
Lösningen:
Flytta bort kodraden ovan från CommonScript och lägg in det vid varje huvudsignal och huvuddvärg. På så sätt är det endast dessa signaler som TSC ska kolla på och hantera TAB. Andra signaler som inte har GetSignalState i sin kod ignoreras helt. TAB landar då vid rätt signal och du får då besked om du får passera eller inte, följt av att DV4 medgivnadedvärg, DV6 eller DV7 visar "Rörelse tillåten" eller "Rörelse tillåten, hinder finns"
Det tog mig 3 år att inse att GetSignalState() var boven bakom dramat. Utan ordentlig dokumentation så blir man bara frustrerad.
Även andra buggar är åtgärdade såsom:
- DV4 medgivandesignal visade alltid "Rörelse ej tillåten" även om TAB är godkänt. - Åtgärdat genom att ge nya värden för följande meddelanden som skickas mellan signalerna:
HTML-kod:
SIGNAL_GO = 20
SIGNAL_SLOW = 21
SIGNAL_STOP = 22
SIGNAL_BLOCKED = 23
SIGNAL_SHUNT = 24
SIGNAL_UNPROTECTED = 25
SIGNAL_CALLON = 26
Detta, tyvärr, bryter kompatibiliteten med de gamla svenska signalerna, men hellre det än att det krockade med andra definitioner:
HTML-kod:
OCCUPATION_INCREMENT = 14
OCCUPATION_DECREMENT = 15
DISTANCE_INCREMENT = 16
DISTANCE_DECREMENT = 17
- Ordnade åtgärd där blocksignaler hanterade inte TAB korrekt och var fast i STATE_BLOCKED. upprepade TAB-förfrågan kunde skickas.
Scriptfilerna är uppe på Github.
VIKTIGT: Använd absolut inte dessa signaler ihop med de gamla svenska bommarna. Det kommer uppstå meddelandekonflikter dem emellan som gör att signaler och/eller bommar börjar bete sig felaktigt.
Återstår: FÅ signalerna att visa stopp när inget tåg närmar sig, för att vara mer realistiskt.
- Lära mig blender och skapa nya signalskyltar.
När detta är inlagt så gör jag hårdtester och publicerar en ny beta som alla kan ladda ner och testa.
@Totte - ja. Det kan man. - Vad jag gjorde var att jag kopierade newS signaler och placerade dem i SummerADDE/SESignalsTest och sedan expanderade jag det befintliga scriptet med allt jag ville ha med.
Jag hör er, Hgv och Totte. Ni vill inte byta ut de signaler ni redan har placerat ut. - Jag kan testa om jag kan lägga in mina scripter hos de befintliga signalerna som newS och KMW har skapat, men jag lovar ingeting.