免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
Board logo

標題: [OMSI] AI中門教學 [打印本頁]

作者: HU8370    時間: 2015-6-15 20:00     標題: [OMSI] AI中門教學

以下為FF3170的教學:
自駕車嘅門script喺AI模式下,中門會關得好慢(準確地說,係不斷開關,所以門掣會不停扭動),表示"doorTarget_23"呢個variable不停被0、1、0、1、0...咁set法--"doorTarget_23"嘅用處,就係話畀{macrdoor2_Calc}同{macrdoor3_Calc}呢兩個macro知,到底中門係要開定係要關。所以當"doorTarget_23"不斷遊走於0同1之間,中門就會不斷開關。

即係話,{macrdooo2_Calc}同{macrdoor3_Calc}入面嘅嘢,唔係中門不斷開關嘅基本原因,問題嘅根源在於設定"doorTarget_23"嘅數值嘅script。而由於問題只會喺AI模式下出現,出問題嘅script入面一定有同AI有關嘅variable,所以範圍就收窄到同"AI"&"doorTarget_23"有關嘅script。

閞door_modern_kacha.osc,搵"L.L.AI"就會搵到:
    '----------------------
    '   AI-Ablauf:

    (L.L.AI_Scheduled_AtStation) s0
    1 =
    {if}
    'Wenn Türen geöffnet werden sollen:
       (L.L.Velocity) (C.L.Door_Bremse_Halte_MaxKMH) <
       {if}
    'Nur, wenn v < maxkmh, sonst warten
    'Taster jeweils nur betätigen, falls noch nicht an
          (L.L.bremse_halte_sw) !
          {if}
             (M.L.trg_bus_dooraft)
          {endif}
          (L.L.doorTarget_0) ! (L.L.door_AI_timer) 0.3 > &&
          {if}
             (M.L.trg_bus_doorfront0)
          {endif}
          (L.L.doorTarget_1) ! (L.L.door_AI_timer) 0.6 > &&
          {if}
             (M.L.trg_bus_doorfront1)
          {endif}
       {else}
          0 (S.L.door_AI_timer)
       {endif}
       (L.L.door_AI_timer) (L.S.Timegap) + (S.L.door_AI_timer)
    {else}
    l0 -1 =
    {if}
    'Wenn Türen geschlossen werden sollen:
    'Taster jeweils nur betätigen, falls noch nicht aus:
       (L.L.doorTarget_1)
       {if}
          (M.L.trg_bus_doorfront1)
          0 (S.L.door_AI_timer)
       {endif}
       (L.L.doorTarget_0) (L.L.door_AI_timer) 0.3 > &&
       {if}
          (M.L.trg_bus_doorfront0)
       {endif}
    'Haltestellenbremse erst wegnehmen, wenn alle Türen zu. Dann auch erst den Bus AI-mäßig freigeben:
       (L.L.door_0) 0.1 <
       (L.L.door_1) 0.1 < &&
       (L.L.door_2) 0.1 < &&
       {if}
          (L.L.bremse_halte_sw) (L.L.door_AI_timer) 0.3 > &&
          {if}
             (M.L.trg_bus_dooraft)
          {endif}
          (L.L.bremse_halte_sw) !
          {if}
             0 (S.L.AI_Scheduled_AtStation)
          {endif}
       {else}
    'Sollte eine der Türen auf sein und die Haltestellenbremse aus, dann sofort diese einlegen
          (L.L.bremse_halte_sw) !
          {if}
             (M.L.trg_bus_dooraft)
          {endif}
          (L.L.doorTarget_0) !
          (L.L.doorTarget_1) ! &&
          {if}
             0 (S.L.door_AI_timer)
          {endif}
       {endif}
       (L.L.door_AI_timer) (L.S.Timegap) + (S.L.door_AI_timer)
    {endif}
    {endif}

而問題就係出喺度。

先解釋一吓:當AI埋緊站,AI_Scheduled_AtStation就係1,準備出站就係-1,行緊就係0。所以要解決中門關門嘅問題,就係睇"l0 -1 ="之後嗰段。

可以見到當中門位置(L.L.door_2)唔係<0.1,就會run:
(L.L.bremse_halte_sw) !
      {if}
         (M.L.trg_bus_dooraft)
      {endif}

(M.L.trg_bus_dooraft)即係run{macro:trg_bus_dooraft},{macro:trg_bus_dooraft}入面有:
(L.L.doorTarget_23) ! (S.L.doorTarget_23)

即係如果"doorTarget_23"係0就set佢做1,如果佢係1就set佢做0。由於"bremse_halte_sw"(即係原裝車嘅door lock)永遠係0(自駕車版VA已廢除door lock),所以就會不斷run{macro:trg_bus_dooraft},即係不斷將"doorTarget_23"0、1、0、1、0...咁set。

所以好明顯,要解決呢個中門不斷開關嘅問題,就要改run{macro:trg_bus_dooraft}嘅condition。
改咗之後:
    '----------------------
    '   AI-Ablauf:

    (L.L.AI_Scheduled_AtStation) s0
    1 =
    {if}
    'Wenn Türen geöffnet werden sollen:
       (L.L.Velocity) (C.L.Door_Bremse_Halte_MaxKMH) <
       {if}
    'Nur, wenn v < maxkmh, sonst warten
    'Taster jeweils nur betätigen, falls noch nicht an
          (L.L.doorTarget_23) ! (L.L.haltewunsch) &&
          {if}
             (M.L.trg_bus_dooraft)
          {endif}
          (L.L.doorTarget_0) ! (L.L.door_AI_timer) 0.3 > &&
          {if}
             (M.L.trg_bus_doorfront0)
          {endif}
          (L.L.doorTarget_1) ! (L.L.door_AI_timer) 0.6 > &&
          {if}
             (M.L.trg_bus_doorfront1)
          {endif}
       {else}
          0 (S.L.door_AI_timer)
       {endif}
       (L.L.door_AI_timer) (L.S.Timegap) + (S.L.door_AI_timer)
    {else}
    l0 -1 =
    {if}
    'Wenn Türen geschlossen werden sollen:
    'Taster jeweils nur betätigen, falls noch nicht aus:
       (L.L.doorTarget_1)
       {if}
          (M.L.trg_bus_doorfront1)
          0 (S.L.door_AI_timer)
       {endif}
       (L.L.doorTarget_0) (L.L.door_AI_timer) 0.3 > &&
       {if}
          (M.L.trg_bus_doorfront0)
       {endif}
    'Haltestellenbremse erst wegnehmen, wenn alle Türen zu. Dann auch erst den Bus AI-mäßig freigeben:
       (L.L.door_0) 0.1 <
       (L.L.door_1) 0.1 < &&
       (L.L.door_2) 0.1 < &&
       {if}
          0 (S.L.AI_Scheduled_AtStation)
       {else}
    'Sollte eine der Türen auf sein und die Haltestellenbremse aus, dann sofort diese einlegen
          (L.L.doorTarget_23)
          {if}
             (M.L.trg_bus_dooraft)
          {endif}
          (L.L.doorTarget_0) !
          (L.L.doorTarget_1) ! &&
          {if}
             0 (S.L.door_AI_timer)
          {endif}
       {endif}
       (L.L.door_AI_timer) (L.S.Timegap) + (S.L.door_AI_timer)
    {endif}
    {endif}

只係改咗三樣嘢:
1.將埋站時run{macro:trg_bus_dooraft}嘅condition由「door lock未開」改為「中門未開」&「有人打鐘」
2.將準備出站時run{macro:trg_bus_dooraft}嘅condition改成doorTarget_23嘅數值(即係如果中門仲係喺「開」模式就run{macro:trg_bus_dooraft},轉做「關」模式,之後就唔再重複)
3.將原本要關好門同埋door lock off先可以出站,改為關好門就可以出站
即係將車門開關同door lock完全獨立。

改完之後,無論係自駕車、自駕車轉AI定係AI巴,都可以用同一段script正常運作

希望大家睇得明
作者: 5180    時間: 2015-6-16 14:23

THX
作者: 5180    時間: 2015-6-23 12:29

呀SY8985又話出教學帖
作者: HU8370    時間: 2015-6-23 23:53

==?

回復 3# 5180
作者: PJ4660    時間: 2015-8-18 16:19

回復 3# 5180
幾時話出?
作者: Rainyuen831    時間: 2015-8-20 01:23

THX THX THX THX




歡迎光臨 GY6588 x HU8370 Studio OMSI, 星之卡比討論區 (http://gx7824.youpost.info/) Powered by Discuz! 7.2