From 3e4e14ac3e82bbd4d30595d8108022b71bfa5198 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 00:38:58 +0100 Subject: [PATCH 001/217] CHG set depot tile CHG road tiles are automatically determined --- class/class_basic_coords.nut | 41 ++++-------------------------------- class/class_chapter_02.nut | 32 +++++++++++++++++++++------- 2 files changed, 28 insertions(+), 45 deletions(-) diff --git a/class/class_basic_coords.nut b/class/class_basic_coords.nut index 5e51a6d..9df888e 100644 --- a/class/class_basic_coords.nut +++ b/class/class_basic_coords.nut @@ -26,8 +26,6 @@ city1_halt_2 <- [] city2_halt_1 <- [] - switch (pak_name) { - case "pak64": local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) @@ -42,42 +40,11 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } - break - case "pak64.german": - local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_1.append(list[i]) - } - list.clear() - list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_2.append(list[i]) - } - list.clear() - list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] - for ( local i = 0; i < list.len(); i++ ) { - city2_halt_1.append(list[i]) - } - break - case "pak128": - local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_1.append(list[i]) - } - list.clear() - list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_2.append(list[i]) - } - list.clear() - list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] - for ( local i = 0; i < list.len(); i++ ) { - city2_halt_1.append(list[i]) - } - break - default: - } +/** + * define road depot city 1 + */ +city1_road_depot <- coord(124,188) //115,185 /** diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 8e669e1..03d4d65 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -36,7 +36,7 @@ class tutorial.chapter_02 extends basic_chapter dep_lim1 = {a = null, b = null} dep_lim2 = {a = null, b = null} coorda = coord(115,186) - c_dep = coord(115,185) // depot + c_dep = city1_road_depot //coord(115,185) // depot coordb = coord(116,185) cursor_a = false cursor_b = false @@ -416,7 +416,14 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: local next_mark = true - local c_list = [my_tile(coordb), my_tile(coorda), my_tile(c_dep)] + local c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] + // Checking the tiles nwse from the depot tile on the road + local tile = my_tile(city1_road_depot) + if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x-1, tile.y, tile.z)) } + if ( tile_x(tile.x+1, tile.y, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x+1, tile.y, tile.z)) } + if ( tile_x(tile.x, tile.y-1, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x, tile.y-1, tile.z)) } + if ( tile_x(tile.x, tile.y+1, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x, tile.y+1, tile.z)) } + c_list.append(tile) try { next_mark = delay_mark_tile_list(c_list) } @@ -428,12 +435,12 @@ class tutorial.chapter_02 extends basic_chapter cursor_b = cursor_control(my_tile(coordb)) //Para la carretera - local tile = my_tile(c_dep) + //local tile = my_tile(city1_road_depot) local way = tile.find_object(mo_way) local label = tile.find_object(mo_label) if (!way && !label){ local t1 = command_x(tool_remover) - local err1 = t1.work(player_x(pl), my_tile(c_dep), "") + local err1 = t1.work(player_x(pl), tile, "") label_x.create(c_dep, player_x(pl), translate("Place the Road here!.")) return 0 } @@ -762,6 +769,7 @@ class tutorial.chapter_02 extends basic_chapter local percentage = chapter_percentage(chapter_steps, chapter_step, chapter_sub_steps, chapter_sub_step) return percentage } + function is_work_allowed_here(pl, tool_id, name, pos, tool) { local t = tile_x(pos.x, pos.y, pos.z) local ribi = 0 @@ -820,7 +828,7 @@ class tutorial.chapter_02 extends basic_chapter case 3: if (pos.x == c_dep.x && pos.y == c_dep.y ) - return format(translate("You must build the %d stops first."),7) + return format(translate("You must build the %d stops first."),city1_halt_1.len()) if (pos.x>city1_lim.a.x && pos.y>city1_lim.a.y && pos.x Date: Wed, 8 Jan 2025 01:17:00 +0100 Subject: [PATCH 002/217] FIX build road Todo change text -> no tiles in text "Build a road from the open field to a neighboring field." --- class/class_chapter_02.nut | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 03d4d65..1d06f1c 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -41,6 +41,8 @@ class tutorial.chapter_02 extends basic_chapter cursor_a = false cursor_b = false + c_list = [] // tile list for build + // Step 3 ===================================================================================== //Parasdas de autobus c_lock = [coord(99,28), coord(98,32), coord(99,32), coord(97,27), coord(97,26)] @@ -136,8 +138,8 @@ class tutorial.chapter_02 extends basic_chapter cty1.name = get_city_name(cty1.c) cty2.name = get_city_name(cty2.c) - dep_lim1 = {a = c_dep, b = coorda} - dep_lim2 = {a = c_dep, b = coordb} + //dep_lim1 = {a = c_dep, b = coorda} + //dep_lim2 = {a = c_dep, b = coordb} local pl = 0 //Schedule list form current convoy @@ -416,7 +418,7 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: local next_mark = true - local c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] + c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] // Checking the tiles nwse from the depot tile on the road local tile = my_tile(city1_road_depot) if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x-1, tile.y, tile.z)) } @@ -431,8 +433,11 @@ class tutorial.chapter_02 extends basic_chapter return 0 } - cursor_a = cursor_control(my_tile(coorda)) - cursor_b = cursor_control(my_tile(coordb)) + for ( local i = 0; i < c_list.len(); i++ ) { + cursor_control(c_list[i]) + } + //cursor_a = cursor_control(my_tile(coorda)) + //cursor_b = cursor_control(my_tile(coordb)) //Para la carretera //local tile = my_tile(city1_road_depot) @@ -445,7 +450,7 @@ class tutorial.chapter_02 extends basic_chapter return 0 } else if ((way)&&(way.get_owner().nr==pl)){ - if(next_mark ){ + if(next_mark) { next_mark = delay_mark_tile_list(c_list, true) tile.remove_object(player_x(1), mo_label) this.next_step() @@ -796,6 +801,14 @@ class tutorial.chapter_02 extends basic_chapter local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach(desc in way_desc){ if(desc.get_name() == name){ + for ( local i = 0; i < c_list.len()-1; i++ ) { + //if ((pos.x>=c_list[i].x)&&(pos.y>=c_list[i].y)&&(pos.x<=city1_road_depot.x)&&(pos.y<=city1_road_depot.y)){ + if(!cursor_control(c_list[i])) + return null + //} + } + + /* if ((pos.x>=dep_lim1.a.x)&&(pos.y>=dep_lim1.a.y)&&(pos.x<=dep_lim1.b.x)&&(pos.y<=dep_lim1.b.y)){ if(!cursor_b) return null @@ -803,8 +816,8 @@ class tutorial.chapter_02 extends basic_chapter if ((pos.x>=dep_lim2.a.x)&&(pos.y>=dep_lim2.a.y)&&(pos.x<=dep_lim2.b.x)&&(pos.y<=dep_lim2.b.y)){ if(!cursor_a) return null - } - return translate("Connect the road here")+" ("+c_dep.tostring()+")." + }*/ + return translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." } } } From feb1c6b60a9f04ef7689e7413ddc1bf42004fd3a Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 01:20:29 +0100 Subject: [PATCH 003/217] FIX passanger count --- class/class_chapter_07.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 5742711..973a355 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -164,7 +164,7 @@ class tutorial.chapter_07 extends basic_chapter if ( check_halt_merge(st1_c, stop1) ) { load = cov_pax(stop1, gl_wt, gl_good) - transfer_pass } else { - transfer_pass = cov_pax(stop2, gl_wt, gl_good) + transfer_pass = cov_pax(stop1, gl_wt, gl_good) } if(load>goal_lod1){ load = 0 @@ -198,7 +198,7 @@ class tutorial.chapter_07 extends basic_chapter if ( check_halt_merge(st3_c, stop3) ) { load = cov_pax(stop3, gl_wt, gl_good) - transfer_pass } else { - transfer_pass = cov_pax(stop2, gl_wt, gl_good) + transfer_pass = cov_pax(stop3, gl_wt, gl_good) } if(load>goal_lod3){ load = 0 @@ -215,7 +215,7 @@ class tutorial.chapter_07 extends basic_chapter if ( check_halt_merge(st4_c, stop4) ) { load = cov_pax(stop4, gl_wt, gl_good) - transfer_pass } else { - transfer_pass = cov_pax(stop2, gl_wt, gl_good) + transfer_pass = cov_pax(stop4, gl_wt, gl_good) } if(load>goal_lod4){ load = 0 From 0d1ee72773938f0f6c77d2946264d05282fb783f Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 01:30:01 +0100 Subject: [PATCH 004/217] FIX build depot road --- class/class_chapter_02.nut | 86 +++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 1d06f1c..82628e2 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -33,15 +33,12 @@ class tutorial.chapter_02 extends basic_chapter // Step 1 ===================================================================================== //Carretera para el deposito - dep_lim1 = {a = null, b = null} - dep_lim2 = {a = null, b = null} - coorda = coord(115,186) - c_dep = city1_road_depot //coord(115,185) // depot + //c_dep = city1_road_depot //coord(115,185) // depot coordb = coord(116,185) - cursor_a = false - cursor_b = false + //cursor_a = false + //cursor_b = false - c_list = [] // tile list for build + build_list = [] // tile list for build // Step 3 ===================================================================================== //Parasdas de autobus @@ -138,23 +135,29 @@ class tutorial.chapter_02 extends basic_chapter cty1.name = get_city_name(cty1.c) cty2.name = get_city_name(cty2.c) - //dep_lim1 = {a = c_dep, b = coorda} - //dep_lim2 = {a = c_dep, b = coordb} + if(this.step == 1) { + local tile = my_tile(city1_road_depot) + if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x-1, tile.y, tile.z)) } + if ( tile_x(tile.x+1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x+1, tile.y, tile.z)) } + if ( tile_x(tile.x, tile.y-1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y-1, tile.z)) } + if ( tile_x(tile.x, tile.y+1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y+1, tile.z)) } + build_list.append(tile) + } local pl = 0 //Schedule list form current convoy if(this.step == 4){ - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local c_list = city1_halt_1 start_sch_tmpsw(pl,c_dep, c_list) } else if(this.step == 6){ - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local c_list = city1_halt_2 start_sch_tmpsw(pl,c_dep, c_list) } else if(this.step == 7){ - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local c_list = city2_halt_1 start_sch_tmpsw(pl,c_dep, c_list) } @@ -179,12 +182,14 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: - text.t1 = c_dep.href("("+c_dep.tostring()+")") - text.t2 = coorda.href("("+coorda.tostring()+")") - text.t3 = coordb.href("("+coordb.tostring()+")") + text.t1 = city1_road_depot.href("("+city1_road_depot.tostring()+")") + // remove from textfile + // or used build_list[] - last entry depot tile + text.t2 = "" //coorda.href("("+coorda.tostring()+")") + text.t3 = "" //coordb.href("("+coordb.tostring()+")") break case 2: - text.pos = c_dep.href("("+c_dep.tostring()+")") + text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 3: local list_tx = "" @@ -393,7 +398,7 @@ class tutorial.chapter_02 extends basic_chapter } text.load = veh1_load text.wait = get_wait_time_text(veh1_wait) - text.pos = c_dep.href("("+c_dep.tostring()+")") + text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") text.bus1 = translate(veh1_obj) text.name = cty1.c.href(cty1.name.tostring()) text.name2 = cty2.c.href(cty2.name.tostring()) @@ -418,27 +423,21 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: local next_mark = true - c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] + //c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] // Checking the tiles nwse from the depot tile on the road local tile = my_tile(city1_road_depot) - if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x-1, tile.y, tile.z)) } - if ( tile_x(tile.x+1, tile.y, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x+1, tile.y, tile.z)) } - if ( tile_x(tile.x, tile.y-1, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x, tile.y-1, tile.z)) } - if ( tile_x(tile.x, tile.y+1, tile.z).get_way(wt_road) != null ) { c_list.append(tile_x(tile.x, tile.y+1, tile.z)) } - c_list.append(tile) + /*if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x-1, tile.y, tile.z)) } + if ( tile_x(tile.x+1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x+1, tile.y, tile.z)) } + if ( tile_x(tile.x, tile.y-1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y-1, tile.z)) } + if ( tile_x(tile.x, tile.y+1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y+1, tile.z)) } + build_list.append(tile)*/ try { - next_mark = delay_mark_tile_list(c_list) + next_mark = delay_mark_tile_list(build_list) } catch(ev) { return 0 } - for ( local i = 0; i < c_list.len(); i++ ) { - cursor_control(c_list[i]) - } - //cursor_a = cursor_control(my_tile(coorda)) - //cursor_b = cursor_control(my_tile(coordb)) - //Para la carretera //local tile = my_tile(city1_road_depot) local way = tile.find_object(mo_way) @@ -446,12 +445,12 @@ class tutorial.chapter_02 extends basic_chapter if (!way && !label){ local t1 = command_x(tool_remover) local err1 = t1.work(player_x(pl), tile, "") - label_x.create(c_dep, player_x(pl), translate("Place the Road here!.")) + label_x.create(city1_road_depot, player_x(pl), translate("Place the Road here!.")) return 0 } else if ((way)&&(way.get_owner().nr==pl)){ if(next_mark) { - next_mark = delay_mark_tile_list(c_list, true) + next_mark = delay_mark_tile_list(build_list, true) tile.remove_object(player_x(1), mo_label) this.next_step() } @@ -461,7 +460,7 @@ class tutorial.chapter_02 extends basic_chapter break; case 2: local next_mark = true - local c_list1 = [my_tile(c_dep)] + local c_list1 = [my_tile(city1_road_depot)] local stop_mark = true try { next_mark = delay_mark_tile(c_list1) @@ -470,10 +469,10 @@ class tutorial.chapter_02 extends basic_chapter return 0 } //Para el deposito - local tile = my_tile(c_dep) + local tile = my_tile(city1_road_depot) local waydepo = tile.find_object(mo_way) if (!tile.find_object(mo_depot_road)){ - label_x.create(c_dep, player_x(pl), translate("Build a Depot here!.")) + label_x.create(city1_road_depot, player_x(pl), translate("Build a Depot here!.")) } else if (next_mark){ next_mark = delay_mark_tile(c_list1, stop_mark) @@ -801,22 +800,13 @@ class tutorial.chapter_02 extends basic_chapter local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach(desc in way_desc){ if(desc.get_name() == name){ - for ( local i = 0; i < c_list.len()-1; i++ ) { - //if ((pos.x>=c_list[i].x)&&(pos.y>=c_list[i].y)&&(pos.x<=city1_road_depot.x)&&(pos.y<=city1_road_depot.y)){ - if(!cursor_control(c_list[i])) + for ( local i = 0; i < build_list.len()-1; i++ ) { + if ( ((pos.x==build_list[i].x)&&(pos.y==build_list[i].y)) || ((pos.x==city1_road_depot.x)&&(pos.y==city1_road_depot.y)) ) { + if(!cursor_control(build_list[i])) return null - //} + } } - /* - if ((pos.x>=dep_lim1.a.x)&&(pos.y>=dep_lim1.a.y)&&(pos.x<=dep_lim1.b.x)&&(pos.y<=dep_lim1.b.y)){ - if(!cursor_b) - return null - } - if ((pos.x>=dep_lim2.a.x)&&(pos.y>=dep_lim2.a.y)&&(pos.x<=dep_lim2.b.x)&&(pos.y<=dep_lim2.b.y)){ - if(!cursor_a) - return null - }*/ return translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." } } From b3d6a2d694c15d447cfbc8e7e9bc5618125b7e78 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 03:17:45 +0100 Subject: [PATCH 005/217] CHG city limit and coords building chapter 1 --- class/class_basic_coords.nut | 57 -------------------------- class/class_basic_coords_p128.nut | 67 +++++++++++++++++++++++++++++++ class/class_basic_coords_p64.nut | 67 +++++++++++++++++++++++++++++++ class/class_basic_coords_p64g.nut | 67 +++++++++++++++++++++++++++++++ class/class_chapter_01.nut | 38 +++++++++--------- class/class_chapter_02.nut | 16 ++++---- scenario.nut | 13 +++++- 7 files changed, 240 insertions(+), 85 deletions(-) delete mode 100644 class/class_basic_coords.nut create mode 100644 class/class_basic_coords_p128.nut create mode 100644 class/class_basic_coords_p64.nut create mode 100644 class/class_basic_coords_p64g.nut diff --git a/class/class_basic_coords.nut b/class/class_basic_coords.nut deleted file mode 100644 index 9df888e..0000000 --- a/class/class_basic_coords.nut +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file class_basic_coords.nut - * @brief sets the pakset specific map coords - * - * - * - */ - -/** - * set tiles chapter 1 for inspections tool - * - * 0 - mon - * 1 - cur - * 2 - tow - */ - - -/** - * set halt coords city - * - * city1_halt_1 - used in chapter: 2, 5 - * city1_halt_2 - used in chapter: 2 - * city2_halt_1 - used in chapter: 2 - */ - city1_halt_1 <- [] - city1_halt_2 <- [] - city2_halt_1 <- [] - - local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_1.append(list[i]) - } - list.clear() - list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] - for ( local i = 0; i < list.len(); i++ ) { - city1_halt_2.append(list[i]) - } - list.clear() - list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] - for ( local i = 0; i < list.len(); i++ ) { - city2_halt_1.append(list[i]) - } - -/** - * define road depot city 1 - */ -city1_road_depot <- coord(124,188) //115,185 - - -/** - * chapter 5 - * - * id = step - * sid = sub step - * hlist = halt list - * - */ \ No newline at end of file diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut new file mode 100644 index 0000000..cf60613 --- /dev/null +++ b/class/class_basic_coords_p128.nut @@ -0,0 +1,67 @@ +/** + * @file class_basic_coords.nut + * @brief sets the pakset specific map coords + * + * + * + */ + +/** + * set limit for build + * + * + */ +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +/** + * set tiles for buildings + * + * mon + * cur + * tow + */ +city1_mon <- coord(113,189) +city1_cur <- coord(113,185) +city1_tow <- coord(111,184) + +/** + * set halt coords city + * + * city1_halt_1 - used in chapter: 2, 5 + * city1_halt_2 - used in chapter: 2 + * city2_halt_1 - used in chapter: 2 + */ +city1_halt_1 <- [] +city1_halt_2 <- [] +city2_halt_1 <- [] + +local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_1.append(list[i]) +} +list.clear() +list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_2.append(list[i]) +} +list.clear() +list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] +for ( local i = 0; i < list.len(); i++ ) { + city2_halt_1.append(list[i]) +} + +/** + * define road depot city 1 + */ +city1_road_depot <- coord(115,185) + + +/** + * chapter 5 + * + * id = step + * sid = sub step + * hlist = halt list + * + */ diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut new file mode 100644 index 0000000..cf60613 --- /dev/null +++ b/class/class_basic_coords_p64.nut @@ -0,0 +1,67 @@ +/** + * @file class_basic_coords.nut + * @brief sets the pakset specific map coords + * + * + * + */ + +/** + * set limit for build + * + * + */ +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +/** + * set tiles for buildings + * + * mon + * cur + * tow + */ +city1_mon <- coord(113,189) +city1_cur <- coord(113,185) +city1_tow <- coord(111,184) + +/** + * set halt coords city + * + * city1_halt_1 - used in chapter: 2, 5 + * city1_halt_2 - used in chapter: 2 + * city2_halt_1 - used in chapter: 2 + */ +city1_halt_1 <- [] +city1_halt_2 <- [] +city2_halt_1 <- [] + +local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_1.append(list[i]) +} +list.clear() +list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_2.append(list[i]) +} +list.clear() +list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] +for ( local i = 0; i < list.len(); i++ ) { + city2_halt_1.append(list[i]) +} + +/** + * define road depot city 1 + */ +city1_road_depot <- coord(115,185) + + +/** + * chapter 5 + * + * id = step + * sid = sub step + * hlist = halt list + * + */ diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut new file mode 100644 index 0000000..e472204 --- /dev/null +++ b/class/class_basic_coords_p64g.nut @@ -0,0 +1,67 @@ +/** + * @file class_basic_coords.nut + * @brief sets the pakset specific map coords + * + * + * + */ + +/** + * set limit for build + * + * + */ +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +/** + * set tiles for buildings + * + * mon + * cur + * tow + */ +city1_mon <- coord(119,183) +city1_cur <- coord(116,188) +city1_tow <- coord(111,184) + +/** + * set halt coords city + * + * city1_halt_1 - used in chapter: 2, 5 + * city1_halt_2 - used in chapter: 2 + * city2_halt_1 - used in chapter: 2 + */ +city1_halt_1 <- [] +city1_halt_2 <- [] +city2_halt_1 <- [] + +local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_1.append(list[i]) +} +list.clear() +list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] +for ( local i = 0; i < list.len(); i++ ) { + city1_halt_2.append(list[i]) +} +list.clear() +list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] +for ( local i = 0; i < list.len(); i++ ) { + city2_halt_1.append(list[i]) +} + +/** + * define road depot city 1 + */ +city1_road_depot <- coord(124,188) //115,185 + + +/** + * chapter 5 + * + * id = step + * sid = sub step + * hlist = halt list + * + */ diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 07d4c59..3939d11 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -26,29 +26,29 @@ class tutorial.chapter_01 extends basic_chapter c_test = coord3d(0,0,1) // Step 3 ===================================================================================== - c_buil1 = coord(113,189) - c_buil2 = coord(113,185) + //c_buil1 = coord(113,189) + //c_buil2 = coord(113,185) buil1_name = "" //auto started buil2_name = "" //auto started buil2_list = null //auto started // Step 4 ===================================================================================== cit_list = null //auto started - city_lim = {a = coord(109,181), b = coord(128,193)} - cty1 = {c = coord(111,184), name = ""} + //city_lim = {a = coord(109,181), b = coord(128,193)} + cty1 = {name = ""} function start_chapter() //Inicia solo una vez por capitulo { - cty1.name = get_city_name(cty1.c) - local t = my_tile(cty1.c) + cty1.name = get_city_name(city1_tow) + local t = my_tile(city1_tow) local buil = t.find_object(mo_building) cit_list = buil ? buil.get_tile_list() : null - t = my_tile(c_buil1) + t = my_tile(city1_mon) buil = t.find_object(mo_building) buil1_name = buil ? translate(buil.get_name()):"No existe" - t = my_tile(c_buil2) + t = my_tile(city1_cur) buil = t.find_object(mo_building) buil2_name = buil ? translate(buil.get_name()):"No existe" @@ -58,18 +58,18 @@ class tutorial.chapter_01 extends basic_chapter function set_goal_text(text){ switch (this.step) { case 1: - text.pos = cty1.c.href("("+cty1.c.tostring()+")") - text.pos1 = cty1.c.href(""+translate(tx_cty)+" ("+cty1.c.tostring()+")") + text.pos = city1_tow.href("("+city1_tow.tostring()+")") + text.pos1 = city1_tow.href(""+translate(tx_cty)+" ("+city1_tow.tostring()+")") text.pos2 = c_fac.href(""+translate(tx_fac)+" ("+c_fac.tostring()+")") text.pos3 = c_st.href(""+translate(tx_st)+" ("+c_st.tostring()+")") text.link = ""+translate(tx_link)+" >>" break; case 3: - text.pos = ""+buil1_name+" ("+c_buil1.tostring()+")" - text.buld_name = ""+buil2_name+" ("+c_buil2.tostring()+")" + text.pos = ""+buil1_name+" ("+city1_mon.tostring()+")" + text.buld_name = ""+buil2_name+" ("+city1_cur.tostring()+")" break; case 4: - text.pos2 = "" + translate("Town Centre")+" ("+cty1.c.tostring()+")" + text.pos2 = "" + translate("Town Centre")+" ("+city1_tow.tostring()+")" break; } @@ -99,7 +99,7 @@ class tutorial.chapter_01 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(city_lim.a, city_lim.b, opt, del, text) + label_bord(city1_limit1.a, city1_limit1.b, opt, del, text) this.next_step() } //return chapter_percentage(chapter_steps, 2, 0, 0) @@ -107,8 +107,8 @@ class tutorial.chapter_01 extends basic_chapter case 3: local next_mark = true - local c_list1 = [my_tile(c_buil1)] - local c_list2 = [my_tile(c_buil2)] + local c_list1 = [my_tile(city1_mon)] + local c_list2 = [my_tile(city1_cur)] local stop_mark = true if (pot0==0) { try { @@ -192,13 +192,13 @@ class tutorial.chapter_01 extends basic_chapter case 3: if(tool_id == 4096) { if(pot0==0){ - if ((pos.x == c_buil1.x)&&(pos.y == c_buil1.y)){ + if ((pos.x == city1_mon.x)&&(pos.y == city1_mon.y)){ pot0 = 1 return null } } else if (pot1==1 && pot2==0){ - if ((pos.x == c_buil2.x)&&(pos.y == c_buil2.y)){ + if ((pos.x == city1_cur.x)&&(pos.y == city1_cur.y)){ pot2 = 1 return null } @@ -254,7 +254,7 @@ class tutorial.chapter_01 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(city_lim.a, city_lim.b, opt, del, text) + label_bord(city1_limit1.a, city1_limit1.b, opt, del, text) pot0=1 pot2=1 } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 82628e2..723be5b 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -27,14 +27,14 @@ class tutorial.chapter_02 extends basic_chapter ch2_cov_lim3 = {a = 0, b = 0} //Limites para las ciudades - city1_lim = {a = coord(109,181), b = coord(128,193)} - city2_lim = {a = coord(120,150), b = coord(138,159)} + //city1_lim = {a = coord(109,181), b = coord(128,193)} + //city2_lim = {a = coord(120,150), b = coord(138,159)} cty1 = {c = coord(111,184), name = ""} // Step 1 ===================================================================================== //Carretera para el deposito //c_dep = city1_road_depot //coord(115,185) // depot - coordb = coord(116,185) + //coordb = coord(116,185) //cursor_a = false //cursor_b = false @@ -635,7 +635,7 @@ class tutorial.chapter_02 extends basic_chapter this.next_step() //Elimina cuadro label local opt = 0 - label_bord(city1_lim.a, city1_lim.b, opt, true, "X") + label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") label_bord(brdg_lim.a, brdg_lim.b, opt, true, "X") label_bord(dock_lim.a, dock_lim.b, opt, true, "X") //Creea un cuadro label @@ -706,7 +706,7 @@ class tutorial.chapter_02 extends basic_chapter //Creea un cuadro label local opt = 0 - label_bord(city1_lim.a, city1_lim.b, opt, false, "X") + label_bord(city1_limit1.a, city1_limit1.b, opt, false, "X") label_bord(city2_lim.a, city2_lim.b, opt, false, "X") pot2=1 @@ -736,7 +736,7 @@ class tutorial.chapter_02 extends basic_chapter //Elimina cuadro label local opt = 0 //label_bord(city1_lim.a, city1_lim.b, opt, true, "X") - label_bord(city2_lim.a, city2_lim.b, opt, true, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") this.next_step() } } @@ -754,7 +754,7 @@ class tutorial.chapter_02 extends basic_chapter if (glsw[0]==1 && glsw[1]==1){ local opt = 0 - label_bord(city1_lim.a, city1_lim.b, opt, true, "X") + label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") label_bord(city2_lim.a, city2_lim.b, opt, true, "X") this.next_step() } @@ -832,7 +832,7 @@ class tutorial.chapter_02 extends basic_chapter if (pos.x == c_dep.x && pos.y == c_dep.y ) return format(translate("You must build the %d stops first."),city1_halt_1.len()) - if (pos.x>city1_lim.a.x && pos.y>city1_lim.a.y && pos.xcity1_limit1.a.x && pos.y>city1_limit1.a.y && pos.x Date: Wed, 8 Jan 2025 16:43:47 +0100 Subject: [PATCH 006/217] ADD file for messages --- class/class_messages.nut | 101 +++++++++++++++++++-------------------- scenario.nut | 7 +-- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/class/class_messages.nut b/class/class_messages.nut index 4b2954c..ebcf1f5 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -1,10 +1,22 @@ -/* +/** * list messages * * * */ +/** + * chapter texts + * +*/ +ch1_name <- "Getting Started" +coord_chapter_1 <- coord(113,189) +ch1_text1 <- "This is a town centre" +ch1_text2 <- "This is a factory" +ch1_text3 <- "This is a station" +ch1_text4 <- "This is a link" +ch1_text5 <- "Town Centre" + /* * single messages * @@ -24,25 +36,25 @@ function get_message(id) { local txt_message = "" switch(id) { - case: 1 + case 1: txt_message = translate("You can only delete the stops.") break - case: 2 + case 2: txt_message = translate("Action not allowed") break - case: 3 + case 3: break - case: 4 + case 4: break - case: 5 + case 5: break - case: 6 + case 6: break - case: 7 + case 7: break } @@ -70,44 +82,44 @@ function get_message(id) { * * */ -function get_tile_message(id, tile) { +function get_tile_message(id, tx, ty, tz = null) { local txt_tile = "" - if ( tile.len() == 2 ) { + if ( tz == null ) { + local tile = coord(tx, ty) txt_tile = coord_to_string(tile) - } else if ( tile.len() == 3 ) { - txt_tile = coord3d_to_string(tile) } else { - txt_tile = tile + local tile = coord3d(tx, ty, tz) + txt_tile = coord3d_to_string(tile) } local txt_message = "" switch(id) { - case: 1 + case 1: txt_message = translate("Action not allowed")+" ("+txt_tile+")." break - case: 2 + case 2: txt_message = translate("Connect the road here")+" ("+txt_tile+")." break - case: 3 + case 3: txt_message = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+txt_tile+")." break - case: 4 + case 4: txt_message = translate("You must build the bridge here")+" ("+txt_tile+")." break - case: 5 + case 5: txt_message = translate("Indicates the limits for using construction tools")+" ("+txt_tile+")." break - case: 6 + case 6: txt_message = translate("Text label")+" ("+txt_tile+")." break - case: 7 + case 7: txt_message = translate("You must first build a stretch of road")+" ("+txt_tile+")." break - case: 8 + case 8: txt_message = translate("You must build the depot in")+" ("+txt_tile+")." break - case: 9 + case 9: break } @@ -136,25 +148,25 @@ function get_data_message(id, data) { local txt_message = "" switch(id) { - case: 1 + case 1: txt_message = format(translate("You must build the %d stops first."), data) break - case: 2 + case 2: txt_message = format(translate("Only %d stops are necessary."), data) break - case: 3 + case 3: break - case: 4 + case 4: break - case: 5 + case 5: break - case: 6 + case 6: break - case: 7 + case 7: break } @@ -163,7 +175,6 @@ function get_data_message(id, data) { } - /* * messages with a string/digit and tile * @@ -194,31 +205,31 @@ function get_tiledata_message(id, data, tile) { local txt_message = "" switch(id) { - case: 1 + case 1: txt_message = format(translate("Stops should be built in [%s]"), data)+" ("+txt_tile+")." break - case: 2 + case 2: txt_message = format(translate("You must build a stop in [%s] first"), data)+" ("+txt_tile+")." break - case: 3 + case 3: txt_message = format(translate("Select station No.%d"), data)+" ("+txt_tile+")." break - case: 4 + case 4: break - case: 5 + case 5: break - case: 6 + case 6: break - case: 7 + case 7: break - case: 8 + case 8: break - case: 9 + case 9: break } @@ -226,15 +237,3 @@ function get_tiledata_message(id, data, tile) { return txt_message } - - -/* - - - - - - - - -*/ diff --git a/scenario.nut b/scenario.nut index f3e8c5d..2d081e1 100644 --- a/scenario.nut +++ b/scenario.nut @@ -282,15 +282,16 @@ function get_integral(tx) include(nut_path+"class_basic_chapter") // include class for basic chapter structure switch (pak_name) { case "pak64": - include(nut_path+"class_basic_coords_p64") // include class for + include(nut_path+"class_basic_coords_p64") // include coords def pak64 break case "pak64.german": - include(nut_path+"class_basic_coords_p64g") // include class for + include(nut_path+"class_basic_coords_p64g") // include coords def pak64german break case "pak128": - include(nut_path+"class_basic_coords_p128") // include class for + include(nut_path+"class_basic_coords_p128") // include coords def pak128 break } + include(nut_path+"class_messages") // include def messages texts } From f42219cd3c3ea4613b85438a7e3c6a3afcb5339f Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 16:45:28 +0100 Subject: [PATCH 007/217] CHG Separation of code and coords/text --- class/class_chapter_01.nut | 41 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 3939d11..c1712b4 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -8,33 +8,24 @@ class tutorial.chapter_01 extends basic_chapter { - chapter_name = "Getting Started" - chapter_coord = coord(113,189) + chapter_name = ch1_name + chapter_coord = coord_chapter_1 startcash = 500000 // pl=0 startcash; 0=no reset comm_script = false - // Step 1 ===================================================================================== - c_fac = coord(149,200) - c_st = coord(117,197) - tx_cty = "This is a town centre" - tx_fac = "This is a factory" - tx_st = "This is a station" - tx_link = "This is a link" - // Step 2 ===================================================================================== c_test = coord3d(0,0,1) // Step 3 ===================================================================================== - //c_buil1 = coord(113,189) - //c_buil2 = coord(113,185) buil1_name = "" //auto started buil2_name = "" //auto started buil2_list = null //auto started + c_list_mon = null // tile list mon + c_list_cur = null // tile list cur // Step 4 ===================================================================================== cit_list = null //auto started - //city_lim = {a = coord(109,181), b = coord(128,193)} cty1 = {name = ""} function start_chapter() //Inicia solo una vez por capitulo @@ -47,10 +38,12 @@ class tutorial.chapter_01 extends basic_chapter t = my_tile(city1_mon) buil = t.find_object(mo_building) buil1_name = buil ? translate(buil.get_name()):"No existe" + c_list_mon = buil.get_tile_list() t = my_tile(city1_cur) buil = t.find_object(mo_building) buil2_name = buil ? translate(buil.get_name()):"No existe" + c_list_cur = buil.get_tile_list() return 0 } @@ -59,17 +52,17 @@ class tutorial.chapter_01 extends basic_chapter switch (this.step) { case 1: text.pos = city1_tow.href("("+city1_tow.tostring()+")") - text.pos1 = city1_tow.href(""+translate(tx_cty)+" ("+city1_tow.tostring()+")") - text.pos2 = c_fac.href(""+translate(tx_fac)+" ("+c_fac.tostring()+")") - text.pos3 = c_st.href(""+translate(tx_st)+" ("+c_st.tostring()+")") - text.link = ""+translate(tx_link)+" >>" + text.pos1 = city1_tow.href(""+translate(ch1_text1)+" ("+city1_tow.tostring()+")") + text.pos2 = coord_fac_1.href(""+translate(ch1_text2)+" ("+coord_fac_1.tostring()+")") + text.pos3 = coord_st_1.href(""+translate(ch1_text3)+" ("+coord_st_1.tostring()+")") + text.link = ""+translate(ch1_text4)+" >>" break; case 3: text.pos = ""+buil1_name+" ("+city1_mon.tostring()+")" text.buld_name = ""+buil2_name+" ("+city1_cur.tostring()+")" break; case 4: - text.pos2 = "" + translate("Town Centre")+" ("+city1_tow.tostring()+")" + text.pos2 = "" + translate(ch1_text5)+" ("+city1_tow.tostring()+")" break; } @@ -112,7 +105,7 @@ class tutorial.chapter_01 extends basic_chapter local stop_mark = true if (pot0==0) { try { - next_mark = delay_mark_tile(c_list1) + next_mark = delay_mark_tile(c_list_mon) } catch(ev) { return 0 @@ -120,7 +113,7 @@ class tutorial.chapter_01 extends basic_chapter } else if (pot0==1 && pot1==0) { try { - next_mark = delay_mark_tile(c_list1, stop_mark) + next_mark = delay_mark_tile(c_list_mon, stop_mark) } catch(ev) { return 0 @@ -129,7 +122,7 @@ class tutorial.chapter_01 extends basic_chapter } if (pot1==1 && pot2==0) { try { - next_mark = delay_mark_tile(c_list2) + next_mark = delay_mark_tile(c_list_cur) } catch(ev) { return 0 @@ -137,7 +130,7 @@ class tutorial.chapter_01 extends basic_chapter } else if (pot2==1 && pot3==0) { try { - next_mark = delay_mark_tile(c_list2, stop_mark) + next_mark = delay_mark_tile(c_list_cur, stop_mark) } catch(ev) { return 0 @@ -182,7 +175,7 @@ class tutorial.chapter_01 extends basic_chapter local label = tile_x(pos.x,pos.y,pos.z).find_object(mo_label) local result=null // null is equivalent to 'allowed' - result = translate("Action not allowed") + result = get_message(2) switch (this.step) { case 1: @@ -219,6 +212,8 @@ class tutorial.chapter_01 extends basic_chapter } if (tool_id == 4096){ if (label && label.get_text()=="X") + //local message = get_tile_message(5, pos.x, pos.y) + //return message return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." From 594fc1da3d8781783fc6c7737616bf56d187aab4 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 16:45:55 +0100 Subject: [PATCH 008/217] CHG Separation of code and coords/text --- class/class_chapter_02.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 723be5b..884fc1f 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -814,8 +814,8 @@ class tutorial.chapter_02 extends basic_chapter break; //Construye un deposito de carreteras case 2: - if ((pos.x==c_dep.x)&&(pos.y==c_dep.y)){ - if (my_tile(c_dep).find_object(mo_way)){ + if ((pos.x==city1_road_depot.x)&&(pos.y==city1_road_depot.y)){ + if (my_tile(city1_road_depot).find_object(mo_way)){ if (tool_id==tool_build_depot) return null } else { @@ -830,7 +830,7 @@ class tutorial.chapter_02 extends basic_chapter //Construye las paradas de autobus case 3: - if (pos.x == c_dep.x && pos.y == c_dep.y ) + if (pos.x == city1_road_depot.x && pos.y == city1_road_depot.y ) return format(translate("You must build the %d stops first."),city1_halt_1.len()) if (pos.x>city1_limit1.a.x && pos.y>city1_limit1.a.y && pos.x Date: Wed, 8 Jan 2025 17:09:08 +0100 Subject: [PATCH 009/217] CHG set depot coord --- class/class_chapter_02.nut | 41 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 884fc1f..2bcf6bb 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -385,7 +385,7 @@ class tutorial.chapter_02 extends basic_chapter text.n2 = cty2.c.href(cty2.name.tostring()) text.pt1 = c_label1.a.href("("+c_label1.a.tostring()+")") text.pt2 = c_label1.b.href("("+c_label1.b.tostring()+")") - text.dep = c_dep.href("("+c_dep.tostring()+")") + text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 8: @@ -508,7 +508,7 @@ class tutorial.chapter_02 extends basic_chapter if(cov_valid){ pot0 = 1 } - local c_list1 = [my_tile(c_dep)] + local c_list1 = [my_tile(city1_road_depot)] if (pot0 == 0){ local next_mark = true try { @@ -531,7 +531,7 @@ class tutorial.chapter_02 extends basic_chapter } if (pot1 == 1 ){ - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local line_name = line1_name //"Test 1" set_convoy_schedule(pl, c_dep, gl_wt, line_name) @@ -612,7 +612,7 @@ class tutorial.chapter_02 extends basic_chapter case 6: chapter_sub_steps = 2 - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local line_name = line2_name //"Test 2" set_convoy_schedule(pl,c_dep, gl_wt, line_name) @@ -715,7 +715,7 @@ class tutorial.chapter_02 extends basic_chapter else if (pot2==1 && pot3==0) { chapter_sub_step = 2 // sub step finish - local c_dep = this.my_tile(c_dep) + local c_dep = this.my_tile(city1_road_depot) local line_name = line3_name //"Test 3" set_convoy_schedule(pl, c_dep, gl_wt, line_name) @@ -857,18 +857,17 @@ class tutorial.chapter_02 extends basic_chapter return format(translate("Only %d stops are necessary."),city1_halt_1.len()) //Enrutar vehiculo - if ((pos.x == c_dep.x && pos.y == c_dep.y)){ + if ((pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ if(tool_id==4096){ pot0 = 1 return null } } if (tool_id==4108) { - local c_list = city1_halt_1 //Lista de todas las paradas de autobus - local c_dep = c_dep //Coordeadas del deposito + //local c_list = city1_halt_1 //Lista de todas las paradas de autobus local siz = c_list.len() //Numero de paradas - result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." - return is_stop_allowed(result, siz, c_list, pos) + result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." + return is_stop_allowed(result, siz, city1_halt_1, pos) } break; @@ -888,16 +887,16 @@ class tutorial.chapter_02 extends basic_chapter case 6: //Enrutar vehiculo if (pot0==0){ - if ((tool_id==4096)&&(pos.x == c_dep.x && pos.y == c_dep.y)){ + if ((tool_id==4096)&&(pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ stop_mark = true return null } if (tool_id==4108) { stop_mark = true local c_list = city1_halt_2 //Lista de todas las paradas de autobus - local c_dep = c_dep //Coordeadas del deposito + //local c_dep = c_dep //Coordeadas del deposito local siz = c_list.len() //Numero de paradas - result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." + result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) } } @@ -949,9 +948,9 @@ class tutorial.chapter_02 extends basic_chapter if (tool_id==4108){ //Paradas de la primera ciudad local c_list = city2_halt_1 //Lista de todas las paradas de autobus - local c_dep = c_dep //Coordeadas del deposito + //local c_dep = c_dep //Coordeadas del deposito local siz = c_list.len() //Numero de paradas - result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." + result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) } } @@ -1156,11 +1155,11 @@ class tutorial.chapter_02 extends basic_chapter return null break; case 2: - local list = [my_tile(c_dep)] + local list = [my_tile(city1_road_depot)] delay_mark_tile(list, true) //Para el deposito local t = command_x(tool_build_depot) - local err = t.work(player_x(pl), my_tile(c_dep), sc_dep_name) + local err = t.work(player_x(pl), my_tile(city1_road_depot), sc_dep_name) return null break; case 3: @@ -1180,7 +1179,7 @@ class tutorial.chapter_02 extends basic_chapter return null break case 4: - local list = [my_tile(c_dep)] + local list = [my_tile(city1_road_depot)] delay_mark_tile(list, true) if (pot0 == 0){ pot0 = 1 @@ -1188,7 +1187,7 @@ class tutorial.chapter_02 extends basic_chapter if (current_cov>ch2_cov_lim1.a && current_covch2_cov_lim2.a && current_covch2_cov_lim3.a && current_cov Date: Wed, 8 Jan 2025 17:35:24 +0100 Subject: [PATCH 010/217] CHG bus stops ch2 stC --- class/class_basic_coords_p64g.nut | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index e472204..28f54ec 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -6,6 +6,13 @@ * */ +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- coord(113,189) + /** * set limit for build * @@ -25,6 +32,24 @@ city1_mon <- coord(119,183) city1_cur <- coord(116,188) city1_tow <- coord(111,184) +/** + * set tiles for factory + * + * coord_fac_1 - ch1, ch4 + * + * + */ +coord_fac_1 <- coord(149,200) + +/** + * set tiles for stations + * + * coord_st_1 - city 1 + * + * + */ +coord_st_1 <- coord(117,197) + /** * set halt coords city * @@ -36,7 +61,7 @@ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] -local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] +local list = [coord(113,183), coord(117,186), coord(120,183), coord(126,187), coord(121,189), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } From bb1a39d4288edd851c175483eb80762e687f4b1d Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 17:39:06 +0100 Subject: [PATCH 011/217] CHG textfile merge the code then change the textfile --- de/chapter_02/goal_step_01.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index 12289d4..24c990d 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie die Felder zwischen {t1} und {t2} oder {t1} und {t3}.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer daneben befindlichen Straße.

\ No newline at end of file From 37b3c8a1b3033e44bd9bb8f2b12a54e6a0340258 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 18:33:53 +0100 Subject: [PATCH 012/217] CHG comment --- class/class_basic_coords_p64g.nut | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 28f54ec..5ff5847 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -77,7 +77,9 @@ for ( local i = 0; i < list.len(); i++ ) { } /** - * define road depot city 1 + * define depot + * + * road depot must be located one field next to a road */ city1_road_depot <- coord(124,188) //115,185 From c4d2e38d8c055944ab4f00b38138cff0acfdd7ad Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 8 Jan 2025 18:34:23 +0100 Subject: [PATCH 013/217] FIX errors CHG line name --- class/class_chapter_02.nut | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 2bcf6bb..21d707d 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -48,7 +48,7 @@ class tutorial.chapter_02 extends basic_chapter // Step 4 ===================================================================================== //Primer autobus - line1_name = "Test 1" + line1_name = "" veh1_obj = get_veh_ch2_st4() veh1_load = set_loading_capacity(1) veh1_wait = set_waiting_time(1) @@ -134,6 +134,7 @@ class tutorial.chapter_02 extends basic_chapter cty1.name = get_city_name(cty1.c) cty2.name = get_city_name(cty2.c) + line1_name = "City " + cty1.name if(this.step == 1) { local tile = my_tile(city1_road_depot) @@ -865,7 +866,7 @@ class tutorial.chapter_02 extends basic_chapter } if (tool_id==4108) { //local c_list = city1_halt_1 //Lista de todas las paradas de autobus - local siz = c_list.len() //Numero de paradas + local siz = city1_halt_1.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." return is_stop_allowed(result, siz, city1_halt_1, pos) } From 0dbe52881a21c53c5fa7c06f408c55c0f0acfada Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 9 Jan 2025 07:58:35 +0100 Subject: [PATCH 014/217] CHG update translate files --- de/chapter_02/06_1-2.txt | 2 +- de/chapter_02/goal_step_01.txt | 2 +- de/chapter_02/goal_step_03.txt | 2 +- de/chapter_02/goal_step_04.txt | 2 +- de/chapter_03/01_2-2.txt | 2 +- de/chapter_07/goal_step_01x04.txt | 2 +- de/info/info_pak64perman.txt | 2 +- en/chapter_07/goal_step_01x04.txt | 2 +- en/info/info_pak64perman.txt | 2 +- es/chapter_01/goal_step_01.txt | 2 +- es/chapter_07/goal_step_01x04.txt | 1 + es/info/info_pak64perman.txt | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 es/chapter_07/goal_step_01x04.txt diff --git a/de/chapter_02/06_1-2.txt b/de/chapter_02/06_1-2.txt index b5e5e1f..9ab61ad 100644 --- a/de/chapter_02/06_1-2.txt +++ b/de/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot{pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Alle Haltestellen auswählen:

[1] Wählen Sie die Haltestelle {st1} und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit, um {wait}.
[2] Wählen Sie die Haltestelle {st2} und alles so lassen, wie es ist.
[3] Wählen Sie die Haltestelle {st3} und alles so lassen, wie es ist.
[4] Wählen Sie die Haltestelle {st4} und alles so lassen, wie es ist.
[5] Wählen Sie die Haltestelle {st5} und alles so lassen, wie es ist.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:

[1] Wählen Sie die Haltestelle {st1} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.
[2] Wählen Sie die Haltestelle {st2}
[3] Wählen Sie die Haltestelle {st3}
[4] Wählen Sie die Haltestelle {st4}
[5] Wählen Sie die Haltestelle {st5}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index 24c990d..3a60d3b 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer daneben befindlichen Straße.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_03.txt b/de/chapter_02/goal_step_03.txt index 8eef85d..89d00b3 100644 --- a/de/chapter_02/goal_step_03.txt +++ b/de/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file +

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_04.txt b/de/chapter_02/goal_step_04.txt index 3202a2e..98722f8 100644 --- a/de/chapter_02/goal_step_04.txt +++ b/de/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf den Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

\ No newline at end of file +

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

\ No newline at end of file diff --git a/de/chapter_03/01_2-2.txt b/de/chapter_03/01_2-2.txt index b89edac..663122b 100644 --- a/de/chapter_03/01_2-2.txt +++ b/de/chapter_03/01_2-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Die Details sind:

Maximale Produktion pro Monat:
Zeigt die Produktionskapazität an, über die die Fabrik verfügt. Die Produktion kann je nach Bedarf durch den Transport von Passagieren, Post oder Strom zur Fabrik gesteigert werden.

Produktion:
Zeigt, was die Fabrik produziert, wie viel auf Lager ist und wie viel sie aus einer Einheit Rohstoffe herstellt.
Beispiel: {f2} verbraucht {g1_factor}% von {good1} und produziert {g2_factor}% von {good2}. Die maximale Produktion beträgt {prod_out} Einheiten pro Monat. Das bedeutet, dass es bis zu {g1_consum} {g1_metric} {good1} pro Monat verbraucht und daraus {g2_prod} {g2_metric} {good2} produziert.
Hinweis: Die oben angezeigte Produktion entspricht der Produktion von 100% Ware.

Verbrauch:
Zeigt die Rohstoffe an, die die Fabrik benötigt, die gelagerte oder unterwegs befindliche Menge und wie viel Rohstoff zur Herstellung einer Produkteinheit benötigt wird.

Verbraucher/Lieferanten:
Zeigt verbundene Fabriken an. Sie können Waren nur zwischen verbundenen Industrien transportieren.

Arbeiter wohnen in:
Zeigt die Städte an, aus denen die Arbeiter kommen mit Passagier- und Postrate.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file +{step_hinfo}

{tx} Die Details sind:

Maximale Produktion pro Monat:
Zeigt die Produktionskapazität an, über die die Fabrik verfügt. Die Produktion kann je nach Bedarf durch den Transport von Passagieren, Post oder Strom zur Fabrik gesteigert werden.

Produktion:
Zeigt, was die Fabrik produziert, wie viel auf Lager ist und wie viel sie aus einer Einheit Rohstoffe herstellt.
Beispiel: {f2} verbraucht {g1_factor}% von {good1} und produziert {g2_factor}% von {good2}. Die maximale Produktion beträgt {prod_out} Einheiten pro Monat. Das bedeutet, dass es bis zu {g1_consum} {g1_metric} {good1} pro Monat verbraucht und daraus {g2_prod} {g2_metric} {good2} produziert.
Hinweis: Die oben angezeigte Produktion entspricht dem Verbrauch und der Produktion von 100% Ware. Weicht der Prozentsatz bei der Ware ab, dann ist der Verbrauch/die Produktion für die Ware der entsprechende Prozentsatz.

Verbrauch:
Zeigt die Rohstoffe an, die die Fabrik benötigt, die gelagerte oder unterwegs befindliche Menge und wie viel Rohstoff zur Herstellung einer Produkteinheit benötigt wird.

Verbraucher/Lieferanten:
Zeigt verbundene Fabriken an. Sie können Waren nur zwischen verbundenen Industrien transportieren.

Arbeiter wohnen in:
Zeigt die Städte an, aus denen die Arbeiter kommen mit Passagier- und Postrate.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file diff --git a/de/chapter_07/goal_step_01x04.txt b/de/chapter_07/goal_step_01x04.txt index 3f9ff0c..b4579d7 100644 --- a/de/chapter_07/goal_step_01x04.txt +++ b/de/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass auf Feld {stop} ein Bushalt ist, der mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file +

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass auf Feld {stop} ein Bushalt ist, der mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

TIPP: Mit dem schnellen Vorlauf kann die Wartezeit verkürzt werden.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/info/info_pak64perman.txt b/de/info/info_pak64perman.txt index 74f8f4b..3477dc4 100644 --- a/de/info/info_pak64perman.txt +++ b/de/info/info_pak64perman.txt @@ -1 +1 @@ -

Beschreibung pak64.german

\ No newline at end of file +

Beschreibung pak64.german

Das pak64.german ist ein Grafikset was nur eine Höhe verwendet.

Im pak64.german gibt es auch keinen Bonus auf Geschwindigkeit. Diese ist aber trotzdem wichtig, weil Stationen nicht überfüllen dürfen. Überfüllen Stationen, dann bricht das Transportaufkommen ein.
Wenn Mindestladung benutzt wird, dann achten Sie darauf, das dann keine Stationen überfüllen.

Magnetbahn und die S-/U-Bahn sollten erst bei sehr hohem Passagieraufkommen genutzt werden.

\ No newline at end of file diff --git a/en/chapter_07/goal_step_01x04.txt b/en/chapter_07/goal_step_01x04.txt index 4dde1b5..707a787 100644 --- a/en/chapter_07/goal_step_01x04.txt +++ b/en/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

The city {city} must get a bus network that allows passengers to get to the {name} station.

Build as many bus stops in the city as you need to cover the city. Make sure that there is a bus stop on field {stop} that is connected to the {name} station so that passengers are counted.

To go to the next step, transport more than {load} passengers in a month.

Transported this month: {get_load}/{load}

\ No newline at end of file +

The city {city} must get a bus network that allows passengers to get to the {name} station.

Build as many bus stops in the city as you need to cover the city. Make sure that there is a bus stop on field {stop} that is connected to the {name} station so that passengers are counted.

To go to the next step, transport more than {load} passengers in a month.

HINT: Using the fast forward too can shorten the waiting time to complete this step.

Transported this month: {get_load}/{load}

\ No newline at end of file diff --git a/en/info/info_pak64perman.txt b/en/info/info_pak64perman.txt index 90f034e..57a9d3e 100644 --- a/en/info/info_pak64perman.txt +++ b/en/info/info_pak64perman.txt @@ -1 +1 @@ -

Description pak64.german

\ No newline at end of file +

Description pak64.german

The pak64.german is a graphics set that only uses one height.

In the pak64.german there is no bonus for speed. But this is still important because stations must not be overcrowded. If stations are overcrowded, the transport volume collapses.
If minimum load is used, make sure that stations are not overcrowded.

Magnet railway and the S-Bahn/U-Bahn should only be used when passenger volumes are very high.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_01.txt b/es/chapter_01/goal_step_01.txt index f538992..678ed74 100644 --- a/es/chapter_01/goal_step_01.txt +++ b/es/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace para Saltar Pasos

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 5.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file +

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace para Saltar Pasos

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file diff --git a/es/chapter_07/goal_step_01x04.txt b/es/chapter_07/goal_step_01x04.txt new file mode 100644 index 0000000..7689748 --- /dev/null +++ b/es/chapter_07/goal_step_01x04.txt @@ -0,0 +1 @@ +

La ciudad de {city} necesita mantener una red de autobuses que permita a los pasajeros llegar a la estación de tren de {name}.

Construye tantas paradas de autobús en la ciudad como necesites para cubrir la ciudad. Asegúrese de que el campo {stop} tenga una parada de autobús conectada a la estación de tren {name} para que se cuenten los pasajeros.

Para pasar al siguiente paso, transporte más de {load} pasajeros en un mes.

Este mes se promocionaron los siguientes: {get_load}/{load}

\ No newline at end of file diff --git a/es/info/info_pak64perman.txt b/es/info/info_pak64perman.txt index 2d2e0a6..fb8eada 100644 --- a/es/info/info_pak64perman.txt +++ b/es/info/info_pak64perman.txt @@ -1 +1 @@ -

Descripción pak64.german

\ No newline at end of file +

Descripción pak64.german

pak64.german es un conjunto de gráficos que solo usa una altura.

Tampoco hay bonificación de velocidad en pak64.german. Pero esto sigue siendo importante porque no se permite que las estaciones estén abarrotadas. Si las estaciones se saturan, los volúmenes de transporte colapsan.
Si se utiliza la carga mínima, tenga cuidado de no llenar excesivamente ninguna estación.

El maglev y el S-/U-Bahn sólo deberían utilizarse cuando haya un número muy elevado de pasajeros.

\ No newline at end of file From 7625d9e0ecb3c0490e3ba34291fd56d2ef691d07 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 9 Jan 2025 10:22:18 +0100 Subject: [PATCH 015/217] CHG ch2 steps --- class/class_basic_coords_p128.nut | 46 ++++- class/class_basic_coords_p64.nut | 46 ++++- class/class_basic_coords_p64g.nut | 28 ++- class/class_chapter_02.nut | 272 +++++++++--------------------- class/class_messages.nut | 2 + de/chapter_02/06_1-2.txt | 2 +- scenario.nut | 2 +- 7 files changed, 195 insertions(+), 203 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index cf60613..db59ac6 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -6,13 +6,28 @@ * */ +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- coord(113,189) +coord_chapter_2 <- coord(115,185) + /** * set limit for build * * */ -city1_limit1 <- {a = coord(109,181), b = coord(128,193)} -city2_limit1 <- {a = coord(120,150), b = coord(138,159)} +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +bridge1_limit <- {a = coord(119,193), b = coord(128,201)} +c_bridge1_limit1 <- {a = coord(126,191), b = coord(126,192)} +change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} + +c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} +change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} /** * set tiles for buildings @@ -23,7 +38,27 @@ city2_limit1 <- {a = coord(120,150), b = coord(138,159)} */ city1_mon <- coord(113,189) city1_cur <- coord(113,185) + city1_tow <- coord(111,184) +city2_tow <- coord(129,154) + +/** + * set tiles for factory + * + * coord_fac_1 - ch1, ch4 + * + * + */ +coord_fac_1 <- coord(149,200) + +/** + * set tiles for stations + * + * coord_st_1 - city 1 + * + * + */ +coord_st_1 <- coord(117,197) /** * set halt coords city @@ -56,6 +91,13 @@ for ( local i = 0; i < list.len(); i++ ) { */ city1_road_depot <- coord(115,185) +/** + * define bridges + * + * + */ +bridge1_coords <- {a = coord(126,192), b = coord(126,194)} + /** * chapter 5 diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index cf60613..9ba41d6 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -6,13 +6,28 @@ * */ +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- coord(113,189) +coord_chapter_2 <- coord(115,185) + /** * set limit for build * * */ -city1_limit1 <- {a = coord(109,181), b = coord(128,193)} -city2_limit1 <- {a = coord(120,150), b = coord(138,159)} +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +bridge1_limit <- {a = coord(119,193), b = coord(128,201)} +c_bridge1_limit1 <- {a = coord(126,192), b = coord(126,196)} +change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} + +c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} +change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} /** * set tiles for buildings @@ -23,7 +38,27 @@ city2_limit1 <- {a = coord(120,150), b = coord(138,159)} */ city1_mon <- coord(113,189) city1_cur <- coord(113,185) + city1_tow <- coord(111,184) +city2_tow <- coord(129,154) + +/** + * set tiles for factory + * + * coord_fac_1 - ch1, ch4 + * + * + */ +coord_fac_1 <- coord(149,200) + +/** + * set tiles for stations + * + * coord_st_1 - city 1 + * + * + */ +coord_st_1 <- coord(117,197) /** * set halt coords city @@ -56,6 +91,13 @@ for ( local i = 0; i < list.len(); i++ ) { */ city1_road_depot <- coord(115,185) +/** + * define bridges + * + * + */ +bridge1_coords <- {a = coord(126,193), b = coord(126,195)} + /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 5ff5847..be12d13 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -12,14 +12,24 @@ * */ coord_chapter_1 <- coord(113,189) +coord_chapter_2 <- coord(115,185) /** * set limit for build * * */ -city1_limit1 <- {a = coord(109,181), b = coord(128,193)} -city2_limit1 <- {a = coord(120,150), b = coord(138,159)} +city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city2_limit1 <- {a = coord(120,150), b = coord(138,159)} + +bridge1_limit <- {a = coord(119,193), b = coord(128,201)} +c_bridge1_limit1 <- {a = coord(126,192), b = coord(126,196)} +change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} + +c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} +change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} + +c_way_limi1 <- {a = coord(127,159), b = coord(133,187)} /** * set tiles for buildings @@ -30,7 +40,9 @@ city2_limit1 <- {a = coord(120,150), b = coord(138,159)} */ city1_mon <- coord(119,183) city1_cur <- coord(116,188) + city1_tow <- coord(111,184) +city2_tow <- coord(129,154) /** * set tiles for factory @@ -53,7 +65,7 @@ coord_st_1 <- coord(117,197) /** * set halt coords city * - * city1_halt_1 - used in chapter: 2, 5 + * city1_halt_1 - used in chapter: 2 * city1_halt_2 - used in chapter: 2 * city2_halt_1 - used in chapter: 2 */ @@ -66,7 +78,7 @@ for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() -list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] +list = [coord(132,189), coord(126,187), coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) } @@ -83,6 +95,14 @@ for ( local i = 0; i < list.len(); i++ ) { */ city1_road_depot <- coord(124,188) //115,185 +/** + * define bridges + * + * + */ +bridge1_coords <- {a = coord(126,193), b = coord(126,195)} + + /** * chapter 5 diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 21d707d..3be03b1 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -7,8 +7,8 @@ class tutorial.chapter_02 extends basic_chapter { - chapter_name = "Ruling the Roads" - chapter_coord = coord(115,185) + chapter_name = ch2_name + chapter_coord = coord_chapter_2 startcash = 800000 // pl=0 startcash; 0=no reset stop_mark = false @@ -26,17 +26,10 @@ class tutorial.chapter_02 extends basic_chapter // Step 7 ===================================================================================== ch2_cov_lim3 = {a = 0, b = 0} - //Limites para las ciudades - //city1_lim = {a = coord(109,181), b = coord(128,193)} - //city2_lim = {a = coord(120,150), b = coord(138,159)} - cty1 = {c = coord(111,184), name = ""} + cty1 = {name = ""} // Step 1 ===================================================================================== //Carretera para el deposito - //c_dep = city1_road_depot //coord(115,185) // depot - //coordb = coord(116,185) - //cursor_a = false - //cursor_b = false build_list = [] // tile list for build @@ -44,11 +37,10 @@ class tutorial.chapter_02 extends basic_chapter //Parasdas de autobus c_lock = [coord(99,28), coord(98,32), coord(99,32), coord(97,27), coord(97,26)] sch_cov_correct = false - //sch_list1 = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] // Step 4 ===================================================================================== //Primer autobus - line1_name = "" + line1_name = "Test 1" veh1_obj = get_veh_ch2_st4() veh1_load = set_loading_capacity(1) veh1_wait = set_waiting_time(1) @@ -56,21 +48,12 @@ class tutorial.chapter_02 extends basic_chapter // Step 5 ===================================================================================== // Primer puente - brdg_lim = {a = coord(119,193), b = coord(128,201)} - del_lim1 = {a = coord(119,193), b = coord(128,193)} - brdg1 = coord(126,193) - brdg2 = coord(126,195) - c_brdg1 = {a = coord3d(126,193,-1), b = coord3d(126,196,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) - c_brdg_limi1 = {a = coord(126,192), b = coord(126,196)} t_list_brd = [] // Step 6 ===================================================================================== // Conectando el muelle - dock_lim = {a = coord(128,181), b = coord(135,193)} - del_lim2 = {a = coord(128,181), b = coord(128,193)} - //sch_list2 = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] line2_name = "Test 2" dep_cnr2 = null //auto started cov_nr = 0 @@ -79,8 +62,7 @@ class tutorial.chapter_02 extends basic_chapter // Conectando las ciudades c_label1 = {a = coord(130,160), b = coord(130,185)} - cty2 = {c = coord(129,154), name = ""} - c_way_limi1 = {a = coord(127,159), b = coord(133,186)} + cty2 = {name = ""} c_way1 = {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) c_st0 = coord(126,187) @@ -117,10 +99,10 @@ class tutorial.chapter_02 extends basic_chapter function start_chapter() //Inicia solo una vez por capitulo { if ( pak_name == "pak128" ) { - brdg1 = coord(126,192) - brdg2 = coord(126,194) + //brdg1 = coord(126,192) + //brdg2 = coord(126,194) c_brdg1 = {a = coord3d(126,192,-1), b = coord3d(126,195,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) - c_brdg_limi1 = {a = coord(126,191), b = coord(126,195)} + //c_brdg_limi1 = {a = coord(126,191), b = coord(126,195)} } local lim_idx = cv_list[(persistent.chapter - 2)].idx @@ -132,8 +114,8 @@ class tutorial.chapter_02 extends basic_chapter dep_cnr2 = get_dep_cov_nr(ch2_cov_lim2.a,ch2_cov_lim2.b) dep_cnr3 = get_dep_cov_nr(ch2_cov_lim3.a,ch2_cov_lim3.b) - cty1.name = get_city_name(cty1.c) - cty2.name = get_city_name(cty2.c) + cty1.name = get_city_name(city1_tow) + cty2.name = get_city_name(city2_tow) line1_name = "City " + cty1.name if(this.step == 1) { @@ -160,11 +142,11 @@ class tutorial.chapter_02 extends basic_chapter else if(this.step == 7){ local c_dep = this.my_tile(city1_road_depot) local c_list = city2_halt_1 - start_sch_tmpsw(pl,c_dep, c_list) + start_sch_tmpsw(pl, c_dep, c_list) } // Starting tile list for bridge - for(local i = c_brdg1.a.y; i <= c_brdg1.b.y; i++){ + for(local i = c_brdg1.a.y; i < c_brdg1.b.y; i++){ t_list_brd.push(my_tile(coord(c_brdg1.a.x, i))) } @@ -193,55 +175,19 @@ class tutorial.chapter_02 extends basic_chapter text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 3: - local list_tx = "" - local c_list = city1_halt_1 - local siz = c_list.len() - for (local j=0;j%s %d: %s
", translate("Stop"), j+1, link) - } - else{ - local link = c.href(" ("+c.tostring()+")") - local stop_tx = translate("Build Stop here:") - list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, stop_tx, link) - } - } - text.list = list_tx + text.list = create_halt_list(city1_halt_1) break case 4: - local list_tx = "" - local c_list = city1_halt_1 - local siz = c_list.len() - for (local j=0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - continue - } - if(tmpsw[j]==0){ - list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) - } - else{ - list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - } - } - local c = coord(c_list[0].x, c_list[0].y) - local tile = my_tile(c) - text.stnam = "1) "+tile.get_halt().get_name()+" ("+c.tostring()+")" + //local c = coord(city1_halt_1[0].x, city1_halt_1[0].y) + local tile = my_tile(city1_halt_1[0]) + text.stnam = "1) "+tile.get_halt().get_name()+" ("+city1_halt_1[0].tostring()+")" - text.list = list_tx - text.nr = siz + text.list = create_schedule_list(city1_halt_1) + text.nr = city1_halt_1.len() break case 5: - text.bpos1 = brdg1.href("("+brdg1.tostring()+")") - text.bpos2 = brdg2.href("("+brdg2.tostring()+")") + text.bpos1 = bridge1_coords.a.href("("+bridge1_coords.a.tostring()+")") + text.bpos2 = bridge1_coords.b.href("("+bridge1_coords.b.tostring()+")") text.bridge_info = get_info_file("bridge") @@ -250,14 +196,11 @@ class tutorial.chapter_02 extends basic_chapter veh1_load = set_loading_capacity(2) veh1_wait = set_waiting_time(2) - local stxt = array(10) - local halt = my_tile(city1_halt_2[0]).get_halt() - - for (local j=0;j[1/2]") @@ -266,15 +209,14 @@ class tutorial.chapter_02 extends basic_chapter text = ttextfile("chapter_02/06_2-2.txt") text.tx = ttext("[2/2]") } + text.list = create_schedule_list(city1_halt_2) + + local tile = my_tile(city1_halt_2[0]) + text.stnam = "1) "+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" + + local halt = my_tile(city1_halt_2[0]).get_halt() text.line = get_line_name(halt) - text.st1 = stxt[0] - text.st2 = stxt[1] - text.st3 = stxt[2] - text.st4 = stxt[3] - text.st5 = stxt[4] - text.st6 = stxt[5] - text.st7 = stxt[6] - text.st8 = stxt[7] + text.cir = cov_nr text.cov = dep_cnr2 @@ -284,66 +226,24 @@ class tutorial.chapter_02 extends basic_chapter veh1_wait = set_waiting_time(3) if (!cov_sw){ - local a = 3 - local b = 3 - text = ttextfile("chapter_02/07_"+a+"-"+b+".txt") - text.tx = ttext("["+a+"/"+b+"]") - local list_tx = "" - local c_list = city2_halt_1 - local siz = c_list.len() - for (local j=0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - continue - } - if(tmpsw[j]==0){ - list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) - } - else{ - list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - } - } - local c = coord(c_list[siz-1].x, c_list[siz-1].y) - local tile = my_tile(c) - text.stnam = ""+siz+") "+tile.get_halt().get_name()+" ("+c.tostring()+")" + text = ttextfile("chapter_02/07_3-3.txt") + text.tx = ttext("[3/3]") - text.list = list_tx + local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) + text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" + + text.list = create_halt_list(city2_halt_1) text.nr = siz } else if (pot0==0){ - local a = 1 - local b = 3 - text = ttextfile("chapter_02/07_"+a+"-"+b+".txt") - text.tx = ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_02/07_1-3.txt") + text.tx = ttext("[1/3]") - local list_tx = "" - local c_list = city2_halt_1 - local siz = c_list.len() - for (local j=1;j%s %d: %s
", translate("Stop"), j, link) - } - else{ - local link = c.href(" ("+c.tostring()+")") - local stop_tx = translate("Build Stop here:") - list_tx += format("%s %d: %s %s
", translate("Stop"), j, stop_tx, link) - } - } - text.list = list_tx + text.list = create_halt_list(city2_halt_1.slice(1)) } else if (pot2==0){ - local a = 2 - local b = 3 - text = ttextfile("chapter_02/07_"+a+"-"+b+".txt") - text.tx = ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_02/07_2-3.txt") + text.tx = ttext("[2/3]") if (r_way.r) text.cbor = ""+translate("Ok")+"" @@ -351,39 +251,18 @@ class tutorial.chapter_02 extends basic_chapter text.cbor = coord(r_way.c.x, r_way.c.y).href("("+r_way.c.tostring()+")") } else if (pot3==0){ - local a = 3 - local b = 3 - text = ttextfile("chapter_02/07_"+a+"-"+b+".txt") - text.tx = ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_02/07_3-3.txt") + text.tx = ttext("[3/3]") - local list_tx = "" - local c_list = city2_halt_1 - local siz = c_list.len() - for (local j=0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - continue - } - if(tmpsw[j]==0){ - list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) - } - else{ - list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) - } - } - local c = coord(c_list[siz-1].x, c_list[siz-1].y) - local tile = my_tile(c) - text.stnam = ""+siz+") "+tile.get_halt().get_name()+" ("+c.tostring()+")" + local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) + text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" - text.list = list_tx - text.nr = siz + text.list = create_schedule_list(city2_halt_1) + text.nr = city1_halt_2.len() } - text.n1 = cty1.c.href(cty1.name.tostring()) - text.n2 = cty2.c.href(cty2.name.tostring()) + text.n1 = city1_tow.href(cty1.name.tostring()) + text.n2 = city2_tow.href(cty2.name.tostring()) text.pt1 = c_label1.a.href("("+c_label1.a.tostring()+")") text.pt2 = c_label1.b.href("("+c_label1.b.tostring()+")") text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") @@ -401,8 +280,8 @@ class tutorial.chapter_02 extends basic_chapter text.wait = get_wait_time_text(veh1_wait) text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") text.bus1 = translate(veh1_obj) - text.name = cty1.c.href(cty1.name.tostring()) - text.name2 = cty2.c.href(cty2.name.tostring()) + text.name = city1_tow.href(cty1.name.tostring()) + text.name2 = city2_tow.href(cty2.name.tostring()) text.tool1 = translate_objects_list.inspec text.tool2 = translate_objects_list.tools_road text.tool3 = translate_objects_list.tools_special @@ -556,9 +435,9 @@ class tutorial.chapter_02 extends basic_chapter this.next_step() //Crear cuadro label local opt = 0 - label_bord(brdg_lim.a, brdg_lim.b, opt, false, "X") + label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") //Elimina cuadro label - label_bord(del_lim1.a, del_lim1.b, opt, true, "X") + label_bord(change1_city1_limit1.a, change1_city1_limit1.b, opt, true, "X") //label_bord(c_lock.a, c_lock.b, opt, true, "X") lock_tile_list(c_lock, c_lock.len(), true, 1) } @@ -566,13 +445,14 @@ class tutorial.chapter_02 extends basic_chapter //return 50 break case 5: - local t_label = my_tile(brdg1) + local t_label = my_tile(bridge1_coords.a) local label = t_label.find_object(mo_label) local next_mark = true if (pot0 == 0){ if(!label) - label_x.create(brdg1, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(bridge1_coords.a, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(bridge1_coords.b, player_x(pl), "") try { next_mark = delay_mark_tile(t_list_brd) } @@ -598,13 +478,15 @@ class tutorial.chapter_02 extends basic_chapter local obj = false local r_way = get_fullway(coora, coorb, dir, obj) if (r_way.r){ + t_label.remove_object(player_x(1), mo_label) + t_label = my_tile(bridge1_coords.b) t_label.remove_object(player_x(1), mo_label) this.next_step() //Crear cuadro label local opt = 0 - label_bord(dock_lim.a, dock_lim.b, opt, false, "X") + label_bord(c_dock1_limit.a, c_dock1_limit.b, opt, false, "X") //Elimina cuadro label - label_bord(del_lim2.a, del_lim2.b, opt, true, "X") + label_bord(change2_city1_limit1.a, change2_city1_limit1.b, opt, true, "X") } } //return 65 @@ -637,10 +519,10 @@ class tutorial.chapter_02 extends basic_chapter //Elimina cuadro label local opt = 0 label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") - label_bord(brdg_lim.a, brdg_lim.b, opt, true, "X") - label_bord(dock_lim.a, dock_lim.b, opt, true, "X") + label_bord(bridge1_limit.a, bridge1_limit.b, opt, true, "X") + label_bord(c_dock1_limit.a, c_dock1_limit.b, opt, true, "X") //Creea un cuadro label - label_bord(city2_lim.a, city2_lim.b, opt, false, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, false, "X") } //return 70 break @@ -665,7 +547,7 @@ class tutorial.chapter_02 extends basic_chapter else if (pot0==1 && pot1==0){ //Elimina cuadro label local opt = 0 - label_bord(city2_lim.a, city2_lim.b, opt, true, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") //Creea un cuadro label opt = 0 @@ -706,9 +588,8 @@ class tutorial.chapter_02 extends basic_chapter label_bord(c_way_limi1.a, c_way_limi1.b, opt, true, "X") //Creea un cuadro label - local opt = 0 label_bord(city1_limit1.a, city1_limit1.b, opt, false, "X") - label_bord(city2_lim.a, city2_lim.b, opt, false, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, false, "X") pot2=1 } @@ -717,7 +598,7 @@ class tutorial.chapter_02 extends basic_chapter else if (pot2==1 && pot3==0) { chapter_sub_step = 2 // sub step finish local c_dep = this.my_tile(city1_road_depot) - local line_name = line3_name //"Test 3" + local line_name = line3_name //"Test 3" set_convoy_schedule(pl, c_dep, gl_wt, line_name) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) @@ -736,8 +617,10 @@ class tutorial.chapter_02 extends basic_chapter //Elimina cuadro label local opt = 0 - //label_bord(city1_lim.a, city1_lim.b, opt, true, "X") + label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") + + label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") this.next_step() } } @@ -755,8 +638,9 @@ class tutorial.chapter_02 extends basic_chapter if (glsw[0]==1 && glsw[1]==1){ local opt = 0 - label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") - label_bord(city2_lim.a, city2_lim.b, opt, true, "X") + //label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") + //label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") + label_bord(bridge1_limit.a, bridge1_limit.b, opt, true, "X") this.next_step() } } @@ -876,12 +760,12 @@ class tutorial.chapter_02 extends basic_chapter case 5: if (tool_id==tool_build_bridge || tool_id==tool_build_way) { - if ((pos.x>=c_brdg_limi1.a.x)&&(pos.y>=c_brdg_limi1.a.y)&&(pos.x<=c_brdg_limi1.b.x)&&(pos.y<=c_brdg_limi1.b.y)){ + if ((pos.x>=c_bridge1_limit1.a.x)&&(pos.y>=c_bridge1_limit1.a.y)&&(pos.x<=c_bridge1_limit1.b.x)&&(pos.y<=c_bridge1_limit1.b.y)){ pot0 = 1 result=null } else - return translate("You must build the bridge here")+" ("+brdg1.tostring()+")." + return translate("You must build the bridge here")+" ("+bridge1_coords.a.tostring()+")." } break; //Segundo Autobus @@ -906,7 +790,7 @@ class tutorial.chapter_02 extends basic_chapter // Construye las paradas if (pot0==0){ if ((tool_id==tool_build_station)){ - if (pos.x>city2_lim.a.x && pos.y>city2_lim.a.y && pos.xcity2_limit1.a.x && pos.y>city2_limit1.a.y && pos.x Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:

[1] Wählen Sie die Haltestelle {st1} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.
[2] Wählen Sie die Haltestelle {st2}
[3] Wählen Sie die Haltestelle {st3}
[4] Wählen Sie die Haltestelle {st4}
[5] Wählen Sie die Haltestelle {st5}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.
[3] Haltestellen auswählen:
{list}
[4] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/scenario.nut b/scenario.nut index 2d081e1..bf29d2b 100644 --- a/scenario.nut +++ b/scenario.nut @@ -280,6 +280,7 @@ function get_integral(tx) resul_version = string_analyzer() include(nut_path+"class_basic_convoys") // include class for detect eliminated convoys include(nut_path+"class_basic_chapter") // include class for basic chapter structure + include(nut_path+"class_messages") // include def messages texts switch (pak_name) { case "pak64": include(nut_path+"class_basic_coords_p64") // include coords def pak64 @@ -291,7 +292,6 @@ function get_integral(tx) include(nut_path+"class_basic_coords_p128") // include coords def pak128 break } - include(nut_path+"class_messages") // include def messages texts } From 1101cacc81e39506f722b9995030f9c6c0460689 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 9 Jan 2025 19:00:40 +0100 Subject: [PATCH 016/217] CHG code review chapter 2 --- class/class_basic_chapter.nut | 47 +++++++++-- class/class_basic_coords_p128.nut | 9 ++- class/class_basic_coords_p64.nut | 7 ++ class/class_basic_coords_p64g.nut | 27 +++++-- class/class_chapter_02.nut | 129 +++++++++--------------------- class/class_messages.nut | 1 - 6 files changed, 115 insertions(+), 105 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 24bd71c..decd736 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -126,11 +126,6 @@ class basic_chapter percentage -= percentage_step } - // tutorial finish - if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { - percentage = 101 - } - //gui.add_message("ch_steps "+ch_steps+" ch_step "+ch_step+" ch_steps "+sub_steps+" sub_step "+sub_step) return percentage @@ -3289,4 +3284,46 @@ class basic_chapter } +function create_halt_list(cord_list) { + local list_tx = "" + local c_list = cord_list + for (local j=0;j%s %d: %s
", translate("Stop"), j+1, link) + } + else{ + local link = c.href(" ("+c.tostring()+")") + local stop_tx = translate("Build Stop here:") + list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, stop_tx, link) + } + } + return list_tx +} + +function create_schedule_list(coord_list) { + local list_tx = "" + local c_list = coord_list + for (local j = 0; j < coord_list.len(); j++) { + local c = coord(c_list[j].x, c_list[j].y) + local tile = my_tile(c) + local st_halt = tile.get_halt() + if(sch_cov_correct){ + list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) + continue + } + if(tmpsw[j]==0){ + list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) + } + else{ + list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) + } + } + return list_tx +} + // END OF FILE diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index db59ac6..675fbc1 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -96,7 +96,14 @@ city1_road_depot <- coord(115,185) * * */ -bridge1_coords <- {a = coord(126,192), b = coord(126,194)} +bridge1_coords <- {a = coord3d(126,192,-1), b = coord3d(126,194,0), dir = 3} + +/** + * define ways + * + * + */ +way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} /** diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 9ba41d6..6f49d4f 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -98,6 +98,13 @@ city1_road_depot <- coord(115,185) */ bridge1_coords <- {a = coord(126,193), b = coord(126,195)} +/** + * define ways + * + * + */ +way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} + /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index be12d13..50a4c66 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -29,7 +29,7 @@ change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} -c_way_limi1 <- {a = coord(127,159), b = coord(133,187)} +c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} /** * set tiles for buildings @@ -65,25 +65,29 @@ coord_st_1 <- coord(117,197) /** * set halt coords city * - * city1_halt_1 - used in chapter: 2 - * city1_halt_2 - used in chapter: 2 - * city2_halt_1 - used in chapter: 2 + * used in chapter: 2 + * city1_halt_1 - halts city 1 + * city1_halt_2 - halts connect city 1 dock and station + * city2_halt_1 - halts connect city 2 to city 1 + * line_connect_halt - halt in all halt lists */ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] -local list = [coord(113,183), coord(117,186), coord(120,183), coord(126,187), coord(121,189), coord(113,190)] +line_connect_halt = coord(126,187) + +local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() -list = [coord(132,189), coord(126,187), coord(126,198), coord(120,196)] +list = [coord(132,189), line_connect_halt, coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) } list.clear() -list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] +list = [line_connect_halt, coord(121,155), coord(127,155), coord(132,155), coord(135,153)] for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } @@ -100,7 +104,14 @@ city1_road_depot <- coord(124,188) //115,185 * * */ -bridge1_coords <- {a = coord(126,193), b = coord(126,195)} +bridge1_coords <- {a = coord3d(126,193,-1), b = coord3d(126,195,-1), dir = 3} + +/** + * define ways + * + * + */ +way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 3be03b1..78fea51 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -48,7 +48,6 @@ class tutorial.chapter_02 extends basic_chapter // Step 5 ===================================================================================== // Primer puente - c_brdg1 = {a = coord3d(126,193,-1), b = coord3d(126,196,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) t_list_brd = [] // Step 6 ===================================================================================== @@ -60,37 +59,18 @@ class tutorial.chapter_02 extends basic_chapter // Step 7 ===================================================================================== // Conectando las ciudades - c_label1 = {a = coord(130,160), b = coord(130,185)} cty2 = {name = ""} - c_way1 = {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) - c_st0 = coord(126,187) - //sch_list3 = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] line3_name = "Test 3" dep_cnr3 = null //auto started // Step 8 ===================================================================================== - pub_st1 = coord(120,196) - pub_st2 = coord(120,196) price = 1200 - //Script + // define objects //---------------------------------------------------------------------------------- - //obj_search = find_object("way", wt_road, 50) - //gui.add_message("test") - - // sc_way_name = obj_search.get_name() //"asphalt_road" - /*if ( obj_desc == null ) {.()get_desc - - } else { - } - - /*obj_desc = find_object("bridge", wt_road, 50) - sc_bridge_name = obj_desc.get_name() //"tb_classic_road" - obj_desc = find_station(wt_road) - sc_station_name = obj_desc.get_name() //"BusStop"*/ sc_way_name = get_obj_ch2(1) sc_bridge_name = get_obj_ch2(2) sc_station_name = get_obj_ch2(3) @@ -98,13 +78,6 @@ class tutorial.chapter_02 extends basic_chapter function start_chapter() //Inicia solo una vez por capitulo { - if ( pak_name == "pak128" ) { - //brdg1 = coord(126,192) - //brdg2 = coord(126,194) - c_brdg1 = {a = coord3d(126,192,-1), b = coord3d(126,195,0), dir = 3} //Inicio, Fin de la via y direccion(fullway) - //c_brdg_limi1 = {a = coord(126,191), b = coord(126,195)} - } - local lim_idx = cv_list[(persistent.chapter - 2)].idx ch2_cov_lim1 = {a = cv_lim[lim_idx].a, b = cv_lim[lim_idx].b} ch2_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} @@ -146,8 +119,8 @@ class tutorial.chapter_02 extends basic_chapter } // Starting tile list for bridge - for(local i = c_brdg1.a.y; i < c_brdg1.b.y; i++){ - t_list_brd.push(my_tile(coord(c_brdg1.a.x, i))) + for(local i = bridge1_coords.a.y; i <= bridge1_coords.b.y; i++){ + t_list_brd.push(my_tile(coord(bridge1_coords.a.x, i))) } } @@ -196,11 +169,6 @@ class tutorial.chapter_02 extends basic_chapter veh1_load = set_loading_capacity(2) veh1_wait = set_waiting_time(2) - /*for (local j=0;j[1/2]") @@ -263,16 +231,16 @@ class tutorial.chapter_02 extends basic_chapter text.n1 = city1_tow.href(cty1.name.tostring()) text.n2 = city2_tow.href(cty2.name.tostring()) - text.pt1 = c_label1.a.href("("+c_label1.a.tostring()+")") - text.pt2 = c_label1.b.href("("+c_label1.b.tostring()+")") + local t = coord(way1_coords.a.x, way1_coords.a.y) + text.pt1 = t.href("("+t.tostring()+")") + t = coord(way1_coords.b.x, way1_coords.b.y) + text.pt2 = t.href("("+t.tostring()+")") text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 8: - local st_halt1 = my_tile(pub_st1).get_halt() - local st_halt2 = my_tile(pub_st2).get_halt() - text.st1 = pub_st1.href(st_halt1.get_name()+" ("+pub_st1.tostring()+")") - //text.st2 = pub_st2.href(st_halt2.get_name()+" ("+pub_st2.tostring()+")") + local st_halt1 = my_tile(city1_halt_2[city1_halt_2.len()-1]).get_halt() + text.st1 = city1_halt_2[city1_halt_2.len()-1].href(st_halt1.get_name()+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")") text.prce = money_to_string(price) break } @@ -303,14 +271,7 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: local next_mark = true - //c_list = [] //[my_tile(coordb), my_tile(coorda), my_tile(c_dep)] - // Checking the tiles nwse from the depot tile on the road local tile = my_tile(city1_road_depot) - /*if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x-1, tile.y, tile.z)) } - if ( tile_x(tile.x+1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x+1, tile.y, tile.z)) } - if ( tile_x(tile.x, tile.y-1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y-1, tile.z)) } - if ( tile_x(tile.x, tile.y+1, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x, tile.y+1, tile.z)) } - build_list.append(tile)*/ try { next_mark = delay_mark_tile_list(build_list) } @@ -472,9 +433,9 @@ class tutorial.chapter_02 extends basic_chapter } if (pot1==1) { //Comprueba la conexion de la via - local coora = coord3d(c_brdg1.a.x, c_brdg1.a.y, c_brdg1.a.z) - local coorb = coord3d(c_brdg1.b.x, c_brdg1.b.y, c_brdg1.b.z) - local dir = c_brdg1.dir + local coora = coord3d(bridge1_coords.a.x, bridge1_coords.a.y, bridge1_coords.a.z) + local coorb = coord3d(bridge1_coords.b.x, bridge1_coords.b.y, bridge1_coords.b.z) + local dir = bridge1_coords.dir local obj = false local r_way = get_fullway(coora, coorb, dir, obj) if (r_way.r){ @@ -551,11 +512,11 @@ class tutorial.chapter_02 extends basic_chapter //Creea un cuadro label opt = 0 - label_bord(c_way_limi1.a, c_way_limi1.b, opt, false, "X") + label_bord(c_way_limit1.a, c_way_limit1.b, opt, false, "X") //Limpia las carreteras opt = 2 - label_bord(c_way_limi1.a, c_way_limi1.b, opt, true, "X", gl_wt) + label_bord(c_way_limit1.a, c_way_limit1.b, opt, true, "X", gl_wt) pot1=1 } @@ -563,9 +524,9 @@ class tutorial.chapter_02 extends basic_chapter else if (pot1==1 && pot2==0){ chapter_sub_step = 1 // sub step finish //Comprueba la conexion de la via - local coora = coord3d(c_way1.a.x,c_way1.a.y,c_way1.a.z) - local coorb = coord3d(c_way1.b.x,c_way1.b.y,c_way1.b.z) - local dir = c_way1.dir + local coora = coord3d(way1_coords.a.x,way1_coords.a.y,way1_coords.a.z) + local coorb = coord3d(way1_coords.b.x,way1_coords.b.y,way1_coords.b.z) + local dir = way1_coords.dir local obj = false local r_way = get_fullway(coora, coorb, dir, obj) @@ -580,12 +541,12 @@ class tutorial.chapter_02 extends basic_chapter waya.unmark() wayb.unmark() - my_tile(c_label1.a).remove_object(player_x(1), mo_label) - my_tile(c_label1.b).remove_object(player_x(1), mo_label) + //way1_coords.a.remove_object(player_x(1), mo_label) + //way1_coords.b.remove_object(player_x(1), mo_label) //Elimina cuadro label local opt = 0 - label_bord(c_way_limi1.a, c_way_limi1.b, opt, true, "X") + label_bord(c_way_limit1.a, c_way_limit1.b, opt, true, "X") //Creea un cuadro label label_bord(city1_limit1.a, city1_limit1.b, opt, false, "X") @@ -612,7 +573,7 @@ class tutorial.chapter_02 extends basic_chapter if (current_cov == ch2_cov_lim3.b) { //Desmarca la via en la parada - local way_mark = my_tile(c_st0).find_object(mo_way) + local way_mark = my_tile(line_connect_halt).find_object(mo_way) way_mark.unmark() //Elimina cuadro label @@ -629,17 +590,14 @@ class tutorial.chapter_02 extends basic_chapter case 8: if (pot0==0){ - local halt1 = my_tile(pub_st1).get_halt() - local halt2 = my_tile(pub_st2).get_halt() - if (pl != halt1.get_owner().nr) + local halt1 = my_tile(city1_halt_2[city1_halt_2.len()-1]).get_halt() + if (pl != halt1.get_owner().nr && glsw[0] == 0) glsw[0]=1 - if (pl != halt2.get_owner().nr) + if (pl != halt1.get_owner().nr) glsw[1]=1 if (glsw[0]==1 && glsw[1]==1){ local opt = 0 - //label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") - //label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") label_bord(bridge1_limit.a, bridge1_limit.b, opt, true, "X") this.next_step() } @@ -733,13 +691,13 @@ class tutorial.chapter_02 extends basic_chapter } } else if (tool_id==tool_build_station) - return result = format(translate("Stops should be built in [%s]"),cty1.name)+" ("+cty1.c.tostring()+")." + return result = format(translate("Stops should be built in [%s]"), cty1.name)+" ("+cty1.c.tostring()+")." break; //Enrutar el primer autobus case 4: if (tool_id==tool_build_station) - return format(translate("Only %d stops are necessary."),city1_halt_1.len()) + return format(translate("Only %d stops are necessary."), city1_halt_1.len()) //Enrutar vehiculo if ((pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ @@ -749,10 +707,8 @@ class tutorial.chapter_02 extends basic_chapter } } if (tool_id==4108) { - //local c_list = city1_halt_1 //Lista de todas las paradas de autobus - local siz = city1_halt_1.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." - return is_stop_allowed(result, siz, city1_halt_1, pos) + return is_stop_allowed(result, city1_halt_1.len(), city1_halt_1, pos) } break; @@ -779,7 +735,6 @@ class tutorial.chapter_02 extends basic_chapter if (tool_id==4108) { stop_mark = true local c_list = city1_halt_2 //Lista de todas las paradas de autobus - //local c_dep = c_dep //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) @@ -816,8 +771,8 @@ class tutorial.chapter_02 extends basic_chapter } //Para construir la carretera else if (pot1==1 && pot2==0){ - if ((pos.x>=c_way_limi1.a.x)&&(pos.y>=c_way_limi1.a.y)&&(pos.x<=c_way_limi1.b.x)&&(pos.y<=c_way_limi1.b.y)){ - if((pos.x==c_label1.a.x)&&(pos.y==c_label1.a.y)){ + if ((pos.x>=c_way_limit1.a.x)&&(pos.y>=c_way_limit1.a.y)&&(pos.x<=c_way_limit1.b.x)&&(pos.y<=c_way_limit1.b.y)){ + if((pos.x==way1_coords.a.x)&&(pos.y==way1_coords.a.y)){ if (tool_id==tool_remover || tool_id==tool_remove_way) return result else if (tool_id==tool_build_way) @@ -832,11 +787,8 @@ class tutorial.chapter_02 extends basic_chapter else if (pot2==1 && pot3==0){ if (tool_id==4108){ //Paradas de la primera ciudad - local c_list = city2_halt_1 //Lista de todas las paradas de autobus - //local c_dep = c_dep //Coordeadas del deposito - local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." - return is_stop_allowed(result, siz, c_list, pos) + return is_stop_allowed(result, city2_halt_1.len(), city2_halt_1, pos) } } break; @@ -844,22 +796,19 @@ class tutorial.chapter_02 extends basic_chapter //Paradas publicas case 8: if (tool_id==4128) { - if (pos.x==pub_st1.x && pos.y==pub_st1.y){ - if (glsw[0]==0) - return null - else + if (pos.x==city1_halt_2[city1_halt_2.len()-1].x && pos.y==city1_halt_2[city1_halt_2.len()-1].y && glsw[0] > 0){ return format(translate("Select station No.%d"),2)+" ("+pub_st2.tostring()+")." - } - if (pos.x==pub_st2.x && pos.y==pub_st2.y){ - if (glsw[1]==0) + } else { return null } + /*if (pos.x==city1_halt_2[city1_halt_2.len()-1].x && pos.y==city1_halt_2[city1_halt_2.len()-1].y && glsw[1] > 0){ + return null } else { if (glsw[0]==0) - return format(translate("Select station No.%d"),1)+" ("+pub_st1.tostring()+")." + return format(translate("Select station No.%d"),1)+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")." else if (glsw[1]==0) - return format(translate("Select station No.%d"),2)+" ("+pub_st2.tostring()+")." - } + return format(translate("Select station No.%d"),2)+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")." + }*/ } break; } @@ -1172,7 +1121,7 @@ class tutorial.chapter_02 extends basic_chapter } if (pot2==0){ local t = command_x(tool_build_way) - local err = t.work(player_x(pl), c_way1.a, c_way1.b, sc_way_name) + local err = t.work(player_x(pl), way1_coords.a, way1_coords.b, sc_way_name) } if (current_cov>ch2_cov_lim3.a && current_cov Date: Thu, 9 Jan 2025 20:40:17 +0100 Subject: [PATCH 017/217] FIX missing code --- class/class_basic_coords_p128.nut | 10 +++++++--- class/class_basic_coords_p64.nut | 16 ++++++++++------ class/class_basic_coords_p64g.nut | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 675fbc1..0c8504a 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -63,14 +63,18 @@ coord_st_1 <- coord(117,197) /** * set halt coords city * - * city1_halt_1 - used in chapter: 2, 5 - * city1_halt_2 - used in chapter: 2 - * city2_halt_1 - used in chapter: 2 + * used in chapter: 2 + * city1_halt_1 - halts city 1 + * city1_halt_2 - halts connect city 1 dock and station + * city2_halt_1 - halts connect city 2 to city 1 + * line_connect_halt - halt in all halt lists */ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] +line_connect_halt <- coord(126,187) + local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 6f49d4f..32c7b74 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -63,25 +63,29 @@ coord_st_1 <- coord(117,197) /** * set halt coords city * - * city1_halt_1 - used in chapter: 2, 5 - * city1_halt_2 - used in chapter: 2 - * city2_halt_1 - used in chapter: 2 + * used in chapter: 2 + * city1_halt_1 - halts city 1 + * city1_halt_2 - halts connect city 1 dock and station + * city2_halt_1 - halts connect city 2 to city 1 + * line_connect_halt - halt in all halt lists */ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] -local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] +line_connect_halt <- coord(126,187) + +local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() -list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] +list = [coord(132,189), line_connect_halt, coord(121,189), coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) } list.clear() -list = [coord(126,187), coord(121,155), coord(127,155), coord(132,155), coord(135,153)] +list = [line_connect_halt, coord(121,155), coord(127,155), coord(132,155), coord(135,153)] for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 50a4c66..41a0daa 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -75,7 +75,7 @@ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] -line_connect_halt = coord(126,187) +line_connect_halt <- coord(126,187) local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { From 427d8d2fc8248b997a15db3c7d3d1b7a184aeb48 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 9 Jan 2025 20:50:12 +0100 Subject: [PATCH 018/217] FIX check build bridge --- class/class_chapter_02.nut | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 78fea51..81a96ce 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -90,6 +90,8 @@ class tutorial.chapter_02 extends basic_chapter cty1.name = get_city_name(city1_tow) cty2.name = get_city_name(city2_tow) line1_name = "City " + cty1.name + line2_name = line1_name + " dock/station" + line3_name = cty1.name + " " + cty2.name if(this.step == 1) { local tile = my_tile(city1_road_depot) @@ -433,8 +435,13 @@ class tutorial.chapter_02 extends basic_chapter } if (pot1==1) { //Comprueba la conexion de la via + local tx = 0 + local ty = 1 + local tile = square_x(bridge1_coords.b.x+tx, bridge1_coords.b.y+ty).get_ground_tile() + // todo check bridge direction + local coora = coord3d(bridge1_coords.a.x, bridge1_coords.a.y, bridge1_coords.a.z) - local coorb = coord3d(bridge1_coords.b.x, bridge1_coords.b.y, bridge1_coords.b.z) + local coorb = coord3d(tile.x, tile.y, tile.z) local dir = bridge1_coords.dir local obj = false local r_way = get_fullway(coora, coorb, dir, obj) From 12872bda24992b807ff23872fd9bbeb0a8a835a9 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Thu, 9 Jan 2025 18:50:22 -0400 Subject: [PATCH 019/217] FIX Bug building the dead end street for the depot --- class/class_basic_chapter.nut | 1 - class/class_chapter_02.nut | 11 ++++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index decd736..abb6f4d 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1921,7 +1921,6 @@ class basic_chapter else return cursor_sw = false - return null } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 78fea51..0046757 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -641,15 +641,20 @@ class tutorial.chapter_02 extends basic_chapter case 1: if (tool_id==tool_build_way){ local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) + local str_c = tool.start_pos + local str_way = world.is_coord_valid(str_c)? tile_x(str_c.x, str_c.y, str_c.z).find_object(mo_way) : null foreach(desc in way_desc){ if(desc.get_name() == name){ for ( local i = 0; i < build_list.len()-1; i++ ) { if ( ((pos.x==build_list[i].x)&&(pos.y==build_list[i].y)) || ((pos.x==city1_road_depot.x)&&(pos.y==city1_road_depot.y)) ) { - if(!cursor_control(build_list[i])) - return null + if(cursor_control(build_list[i])){ + return null + } + if(!str_way){ + return null + } } } - return translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." } } From 1181dcf29f57eaff65a0dfe26ad787e0d0cc0000 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Thu, 9 Jan 2025 19:22:00 -0400 Subject: [PATCH 020/217] FIX some coord in pak64 --- class/class_basic_coords_p64.nut | 2 +- class/class_chapter_02.nut | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 6f49d4f..8292ae7 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -96,7 +96,7 @@ city1_road_depot <- coord(115,185) * * */ -bridge1_coords <- {a = coord(126,193), b = coord(126,195)} +bridge1_coords <- {a = coord3d(126,193,0), b = coord3d(126,195,0), dir = 3} /** * define ways diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 0046757..a9a2a1b 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -696,7 +696,7 @@ class tutorial.chapter_02 extends basic_chapter } } else if (tool_id==tool_build_station) - return result = format(translate("Stops should be built in [%s]"), cty1.name)+" ("+cty1.c.tostring()+")." + return result = format(translate("Stops should be built in [%s]"), cty1.name)+" ("+city1_tow.tostring()+")." break; //Enrutar el primer autobus From 076b7ae8e9d5dcede95c7971425eae79963eab28 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 10 Jan 2025 06:49:28 +0100 Subject: [PATCH 021/217] CHG remove c_lock --- class/class_basic_chapter.nut | 41 +++++++++++------------------------ class/class_chapter_02.nut | 6 +---- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index abb6f4d..24eddff 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1921,6 +1921,7 @@ class basic_chapter else return cursor_sw = false + return null } @@ -2236,28 +2237,28 @@ class basic_chapter } } - function set_convoy_schedule(pl, coord, wt, line_name) - { + function set_convoy_schedule(pl, coord, wt, line_name) + { local depot = depot_x(coord.x, coord.y, coord.z) // Deposito /Garaje local cov_list = depot.get_convoy_list() // Lista de vehiculos en el deposito local d_nr = cov_list.len() //Numero de vehiculos en el deposito - if (d_nr == 0) reset_tmpsw() + if (d_nr == 0) reset_tmpsw() if (d_nr == 1 && active_sch_check){ - active_sch_check = false - local cov_line = cov_list[0].get_line() - local play = player_x(pl) - local sched = schedule_x(wt, []) + active_sch_check = false + local cov_line = cov_list[0].get_line() + local play = player_x(pl) + local sched = schedule_x(wt, []) local siz = tmpcoor.len() for(local j = 0; j < siz; j++) { local c = tmpcoor[j] - if (tmpsw[j] == 1){ + if (tmpsw[j] == 1){ //gui.add_message("("+tmpcoor[j].x+","+tmpcoor[j].y+")") - sched.entries.append(schedule_entry_x(c, 0, 0)) + sched.entries.append(schedule_entry_x(c, 0, 0)) } else { break } - } + } local entrie try { @@ -2284,7 +2285,7 @@ class basic_chapter else { if (line.get_waytype() == wt && line.get_schedule().entries.len()==0) { // right type, no schedule -> take this. - line.set_name(line_name) + line.set_name(line_name) c_line = line break } @@ -2298,7 +2299,7 @@ class basic_chapter return null } return null - } + } function update_convoy_schedule(pl, wt, name, schedule) { //gui.add_message("noooo") @@ -3065,22 +3066,6 @@ class basic_chapter } } - function lock_tile_list(c_list, siz, del, pl, text = "X") - { - if (!del) { - for (local j = 0 ;j Date: Fri, 10 Jan 2025 06:58:37 +0100 Subject: [PATCH 022/217] FIX missing parameter --- class/class_basic_coords_p128.nut | 4 +++- class/class_basic_coords_p64.nut | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 0c8504a..5a6886b 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -29,6 +29,8 @@ change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} +c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} + /** * set tiles for buildings * @@ -100,7 +102,7 @@ city1_road_depot <- coord(115,185) * * */ -bridge1_coords <- {a = coord3d(126,192,-1), b = coord3d(126,194,0), dir = 3} +bridge1_coords <- {a = coord3d(126,192,-1), b = coord3d(126,194,-1), dir = 3} /** * define ways diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 67d3b80..978083e 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -29,6 +29,8 @@ change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} +c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} + /** * set tiles for buildings * From 43b7d867f89e7b2e42af250b3adeb49e7110917c Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 10 Jan 2025 08:45:02 +0100 Subject: [PATCH 023/217] CHG remove c_lock --- class/class_chapter_03.nut | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 4cba5f1..8819b0b 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -89,7 +89,6 @@ class tutorial.chapter_03 extends basic_chapter f1_reached = set_transportet_goods(1) //Step 6 ===================================================================================== - c_lock = [coord(60,10), coord(77,25)] //Futuros transformadores //Primer tramo de rieles //-------------------------------------------------------------------------------------------- @@ -975,13 +974,6 @@ class tutorial.chapter_03 extends basic_chapter } if (pot1==1 && pot0==0){ - //Marca tiles para evitar construccion de objetos - local c_list = c_lock - local siz = c_lock.len() - local del = false - local pl_nr = 1 - local text = "X" - lock_tile_list(c_list, siz, del, pl_nr, text) this.next_step() reset_stop_flag() @@ -1156,13 +1148,6 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot4==1 && pot5==0){ - //Elimina las Marcas de tiles - local c_list = c_lock - local siz = c_lock.len() - local del = true - local pl_nr = 1 - local text = "X" - lock_tile_list(c_list, siz, del, pl_nr, text) this.next_step() } From d6fa2535e73e68071278be38285574d132cc77e0 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 10 Jan 2025 17:14:02 +0100 Subject: [PATCH 024/217] CHG line names for automated build --- class/class_basic_chapter.nut | 98 +++++++++++-------------------- class/class_basic_coords_p128.nut | 7 +++ class/class_basic_coords_p64.nut | 7 +++ class/class_basic_coords_p64g.nut | 7 +++ class/class_chapter_02.nut | 20 +++---- class/class_chapter_03.nut | 60 +++++++++++-------- class/class_chapter_04.nut | 21 +++++-- class/class_chapter_05.nut | 50 ++++++++++------ class/class_chapter_06.nut | 11 ++-- class/class_messages.nut | 68 ++++++++++++++++++++- 10 files changed, 222 insertions(+), 127 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 24eddff..f014c79 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -209,7 +209,7 @@ class basic_chapter return null } - function comm_get_line(player, wt, sched) + function comm_get_line(player, wt, sched, line_name) { player.create_line(wt) // find the line - it is a line without schedule and convoys @@ -218,6 +218,7 @@ class basic_chapter foreach(line in list) { if (line.get_waytype() == wt && line.get_schedule().entries.len()==0) { // right type, no schedule -> take this. + line.set_name(line_name) c_line = line break } @@ -869,7 +870,7 @@ class basic_chapter for(local j=0;j take this. - line.set_name(line_name) - c_line = line - break - } - } + else if (cov_line.get_name() == line_name && cov_line.get_waytype() == wt){ + cov_line.change_schedule(play, sched) + return null + } + // find the line - it is a line without schedule and convoys + local list = play.get_line_list() + local c_line = null + foreach(line in list) { + if (line.get_name() == line_name && line.get_waytype() == wt){ + c_line = line + break + } + else { + if (line.get_waytype() == wt && line.get_schedule().entries.len()==0) { + // right type, no schedule -> take this. + line.set_name(line_name) + c_line = line + break + } } + } if(c_line){ c_line.change_schedule(play, sched) cov_list[0].set_line(play, c_line) } - return null - } - return null + return null + } + return null } function update_convoy_schedule(pl, wt, name, schedule) @@ -3066,34 +3066,6 @@ class basic_chapter } } - function bus_result_message(nr, name, veh, cov) - { - switch (nr) { - case 0: - return format(translate("Select the Bus [%s]."),name) - break - - case 1: - return format(translate("The number of bus must be [%d]."),cov) - break - - case 2: - return format(translate("The number of convoys must be [%d], press the [Sell] button."),cov) - - case 3: - return translate("The bus must be [Passengers].") - break - - case 4: - return format(translate("Must not use trailers [%d]."),veh-1) - break - - default: - return translate("The convoy is not correct.") - break - } - } - function is_water_entry(list, under = false) { local siz = list.len() diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 5a6886b..7fa45d2 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -70,6 +70,9 @@ coord_st_1 <- coord(117,197) * city1_halt_2 - halts connect city 1 dock and station * city2_halt_1 - halts connect city 2 to city 1 * line_connect_halt - halt in all halt lists + * + * used chapter 5 + * city1_post_halts - halts for post */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -82,6 +85,7 @@ for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() +// first coord add city1_post_halts list = [coord(132,189), coord(126,187), coord(121,189), coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) @@ -92,6 +96,9 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } +city1_post_halts <- city1_halt_1 +city1_post_halts.insert(4, city1_halt_2[0]) + /** * define road depot city 1 */ diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 978083e..720844c 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -70,6 +70,9 @@ coord_st_1 <- coord(117,197) * city1_halt_2 - halts connect city 1 dock and station * city2_halt_1 - halts connect city 2 to city 1 * line_connect_halt - halt in all halt lists + * + * used chapter 5 + * city1_post_halts - halts for post */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -82,6 +85,7 @@ for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() +// first coord add city1_post_halts list = [coord(132,189), line_connect_halt, coord(121,189), coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) @@ -92,6 +96,9 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } +city1_post_halts <- city1_halt_1 +city1_post_halts.insert(4, city1_halt_2[0]) + /** * define road depot city 1 */ diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 41a0daa..2e986ab 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -70,6 +70,9 @@ coord_st_1 <- coord(117,197) * city1_halt_2 - halts connect city 1 dock and station * city2_halt_1 - halts connect city 2 to city 1 * line_connect_halt - halt in all halt lists + * + * used chapter 5 + * city1_post_halts - halts for post */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -82,6 +85,7 @@ for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } list.clear() +// first coord add city1_post_halts list = [coord(132,189), line_connect_halt, coord(126,198), coord(120,196)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_2.append(list[i]) @@ -92,6 +96,9 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } +city1_post_halts <- city1_halt_1 +city1_post_halts.insert(4, city1_halt_2[0]) + /** * define depot * diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 394ec73..303d0a4 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -90,7 +90,7 @@ class tutorial.chapter_02 extends basic_chapter cty2.name = get_city_name(city2_tow) line1_name = "City " + cty1.name line2_name = line1_name + " dock/station" - line3_name = cty1.name + " " + cty2.name + line3_name = cty1.name + " - " + cty2.name if(this.step == 1) { local tile = my_tile(city1_road_depot) @@ -410,7 +410,7 @@ class tutorial.chapter_02 extends basic_chapter local next_mark = true if (pot0 == 0){ if(!label) - label_x.create(bridge1_coords.a, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(bridge1_coords.a, player_x(pl), get_label_text(2)) label_x.create(bridge1_coords.b, player_x(pl), "") try { next_mark = delay_mark_tile(t_list_brd) @@ -498,7 +498,7 @@ class tutorial.chapter_02 extends basic_chapter local siz = city2_halt_1.len() local c_list = city2_halt_1 - local name = translate("Place Stop here!.") + local name = get_label_text(1) local load = good_alias.passa local all_stop = is_stop_building(siz, c_list, name, load) @@ -658,7 +658,7 @@ class tutorial.chapter_02 extends basic_chapter } } } - return translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." + return get_tile_message(2, city1_road_depot.x, city1_road_depot.y)//translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." } } } @@ -675,7 +675,7 @@ class tutorial.chapter_02 extends basic_chapter } } else if (tool_id==tool_build_depot) - return result=translate("You must build the depot in")+" ("+c_dep.tostring()+")." + return result=translate("You must build the depot in")+" ("+city1_road_depot.tostring()+")." break; //Construye las paradas de autobus @@ -705,7 +705,7 @@ class tutorial.chapter_02 extends basic_chapter //Enrutar el primer autobus case 4: if (tool_id==tool_build_station) - return format(translate("Only %d stops are necessary."), city1_halt_1.len()) + return get_data_message(2, city1_halt_1.len()) //format(translate("Only %d stops are necessary."), city1_halt_1.len()) //Enrutar vehiculo if ((pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ @@ -838,7 +838,7 @@ class tutorial.chapter_02 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' if ( (pl == 0) && (schedule.waytype != gl_wt) ) - result = translate("Only road schedules allowed") + result = get_message(3) local nr = schedule.entries.len() switch (this.step) { case 4: @@ -1043,7 +1043,7 @@ class tutorial.chapter_02 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line1_name) local good_nr = 0 //Passengers local name = veh1_obj @@ -1095,7 +1095,7 @@ class tutorial.chapter_02 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[i]), 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line2_name) local good_nr = 0 //Passengers local name = veh1_obj @@ -1147,7 +1147,7 @@ class tutorial.chapter_02 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line3_name) local good_nr = 0 //Passengers local name = veh1_obj diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 8819b0b..0c97a29 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -249,6 +249,14 @@ class tutorial.chapter_03 extends basic_chapter sc_wag3_nr = set_train_lenght(3) //------------------------------------------------------------------------------------ + fab_list = [ + factory_data.rawget("1"), + factory_data.rawget("2"), + factory_data.rawget("3") + ] + line2_name = "Test 5" + line3_name = "Test 6" + function start_chapter(){ //Inicia solo una vez por capitulo if ( pak_name == "pak128" ) { @@ -298,6 +306,10 @@ class tutorial.chapter_03 extends basic_chapter cy4.name = get_city_name(cy4.c) cy5.name = get_city_name(cy5.c) + line1_name = get_good_data(1, 3) + " " + fab_list[0].name + " - " + fab_list[1].name + line2_name = get_good_data(2, 3) + " " + fab_list[1].name + " - " + fab_list[2].name + line3_name = "Passanger Train" + local pl = 0 if(this.step == 11){ local c_dep = this.my_tile(c_dep3) @@ -308,10 +320,6 @@ class tutorial.chapter_03 extends basic_chapter function set_goal_text(text){ - local fac_1 = factory_data.rawget("1") - local fac_2 = factory_data.rawget("2") - local fac_3 = factory_data.rawget("3") - if ( translate_objects_list.rawin("inspec") ) { if ( translate_objects_list.inspec != translate("Abfrage") ) { gui.add_message("change language") @@ -638,8 +646,8 @@ class tutorial.chapter_03 extends basic_chapter local stext = ttextfile("chapter_03/step_1-4_hinfo.txt") stext.good1 = get_good_data(1, 3) stext.good2 = get_good_data(2, 3) - stext.f1 = fac_1.c.href(fac_1.name+" ("+fac_1.c.tostring()+")") - stext.f2 = fac_2.c.href(fac_2.name+" ("+fac_2.c.tostring()+")") + stext.f1 = fab_list[0].c.href(fab_list[0].name+" ("+fab_list[0].c.tostring()+")") + stext.f2 = fab_list[1].c.href(fab_list[1].name+" ("+fab_list[1].c.tostring()+")") text.step_hinfo = stext } if ( this.step >= 8 && this.step <= 10 ) { @@ -658,9 +666,9 @@ class tutorial.chapter_03 extends basic_chapter text.step_hinfo = stext } - text.f1 = fac_1.c.href(fac_1.name+" ("+fac_1.c.tostring()+")") - text.f2 = fac_2.c.href(fac_2.name+" ("+fac_2.c.tostring()+")") - text.f3 = fac_3.c.href(fac_3.name+" ("+fac_3.c.tostring()+")") + text.f1 = fab_list[0].c.href(fab_list[0].name+" ("+fab_list[0].c.tostring()+")") + text.f2 = fab_list[1].c.href(fab_list[1].name+" ("+fab_list[1].c.tostring()+")") + text.f3 = fab_list[2].c.href(fab_list[2].name+" ("+fab_list[2].c.tostring()+")") text.cdep=c_dep1.href("("+c_dep1.tostring()+")") text.way1=c_dep2.href("("+c_dep2.tostring()+")") @@ -691,11 +699,11 @@ class tutorial.chapter_03 extends basic_chapter text.good2 = get_good_data(2, 3) text.g2_metric =get_good_data(2, 1) // prod data - local g_in = read_prod_data(fac_2.c, 1, "in") + local g_in = read_prod_data(fab_list[1].c, 1, "in") text.prod_in = integer_to_string(g_in[0]) text.g1_factor = g_in[2] text.g1_consum = integer_to_string(g_in[1]) - local g_out = read_prod_data(fac_2.c, 2, "out") + local g_out = read_prod_data(fab_list[1].c, 2, "out") text.prod_out = integer_to_string(g_out[0]) text.g2_factor = g_out[2] text.g2_prod = integer_to_string(g_out[1]) @@ -712,17 +720,17 @@ class tutorial.chapter_03 extends basic_chapter local chapter_step = persistent.step local chapter_sub_steps = 0 // count all sub steps local chapter_sub_step = 0 // actual sub step - +/* local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") - +*/ switch (this.step) { case 1: chapter_sub_steps = 2 local next_mark = false if (pot0==0 || pot1 == 0) { - local list = fac_2.c_list + local list = fab_list[1].c_list try { next_mark = delay_mark_tile(list) } @@ -734,7 +742,7 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot2==0 || pot3==0) { - local list = fac_1.c_list + local list = fab_list[0].c_list try { next_mark = delay_mark_tile(list) } @@ -967,7 +975,7 @@ class tutorial.chapter_03 extends basic_chapter local wt = wt_rail if (current_cov == ch3_cov_lim1.b){ - reached = get_reached_target(fac_2.c, good_alias.wood ) + reached = get_reached_target(fab_list[1].c, good_alias.wood ) if (reached>= f1_reached){ pot1=1 } @@ -1181,7 +1189,7 @@ class tutorial.chapter_03 extends basic_chapter } else if(current_cov == ch3_cov_lim2.b){ - reached = get_reached_target(fac_3.c, good_alias.plan) + reached = get_reached_target(fab_list[2].c, good_alias.plan) if (reached>=f3_reached){ pot3=1 } @@ -1474,18 +1482,18 @@ class tutorial.chapter_03 extends basic_chapter if (!t.has_way(wt_rail)) ribi = 0 } - +/* local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") - +*/ local result = translate("Action not allowed") // null is equivalent to 'allowed' switch (this.step) { case 1: if (tool_id == 4096){ if (pot0==0){ - local list = fac_2.c_list + local list = fab_list[1].c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { pot0 = 1 @@ -1494,7 +1502,7 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot1==1){ - local list = fac_1.c_list + local list = fab_list[0].c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { pot2 = 1 @@ -2079,11 +2087,11 @@ class tutorial.chapter_03 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' local nr = schedule.entries.len() - +/* local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") - +*/ switch (this.step) { case 5: local selc = 0 @@ -2367,7 +2375,7 @@ class tutorial.chapter_03 extends basic_chapter local sched = schedule_x(wt, []) sched.entries.append(schedule_entry_x(my_tile(st1_list[0]), loc1_load, loc1_wait)) sched.entries.append(schedule_entry_x(my_tile(st2_list[0]), 0, 0)) - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line1_name) local good_nr = 0 //Passengers local name = loc1_name_obj @@ -2519,7 +2527,7 @@ class tutorial.chapter_03 extends basic_chapter local sched = schedule_x(wt, []) sched.entries.append(schedule_entry_x(my_tile(st3_list[0]), loc2_load, loc2_wait)) sched.entries.append(schedule_entry_x(my_tile(st4_list[0]), 0, 0)) - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line2_name) local name = loc2_name_obj local wag_name = sc_veh2_name @@ -2736,7 +2744,7 @@ class tutorial.chapter_03 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line3_name) // Set and run convoys local good_nr = 0 //Passengers diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 56c8d67..4977c8a 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -70,7 +70,12 @@ class tutorial.chapter_04 extends basic_chapter ship2_name_obj = get_veh_ch4(2) ship2_load = 100 ship2_wait = 42282 - line1_name = "Test 5" + line1_name = "Test 7" + line2_name = "Test 8" + line3_name = "Test 9" + fac_1 = null + fac_2 = null + fac_3 = null //Script //---------------------------------------------------------------------------------- @@ -83,6 +88,14 @@ class tutorial.chapter_04 extends basic_chapter function start_chapter() //Inicia solo una vez por capitulo { + fac_1 = factory_data.rawget("4") + fac_2 = factory_data.rawget("5") + fac_3 = factory_data.rawget("6") + line1_name = get_good_data(3, 3) + " " + fac_1.name + " - " + fac_2.name + line2_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name + line3_name = "Passanger Ship" + + if ( pak_name == "pak128" ) { c1_way_lim.a = coord(114, 193) c1_way.c = coord3d(127,193,-1) @@ -791,7 +804,7 @@ class tutorial.chapter_04 extends basic_chapter else sched.entries.append(schedule_entry_x(t_list[j], 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line1_name) local good_nr = good_desc_x(good_alias.oel).get_catg_index() //Fuels local name = ship1_name_obj @@ -862,7 +875,7 @@ class tutorial.chapter_04 extends basic_chapter local sched = schedule_x(gl_wt, []) sched.entries.append(schedule_entry_x(t_list[0], ship1_load, ship1_wait)) sched.entries.append(schedule_entry_x(t_list[1], 0, 0)) - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line2_name) local good_nr = good_desc_x(good_alias.gas).get_catg_index() //Fuels local name = ship1_name_obj @@ -917,7 +930,7 @@ class tutorial.chapter_04 extends basic_chapter else sched.entries.append(schedule_entry_x(t_list[j], 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line3_name) local good_nr = good_desc_x(good_alias.passa).get_catg_index() //Passengers local name = ship2_name_obj diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index d170341..1ef6b3a 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -67,19 +67,23 @@ class tutorial.chapter_05 extends basic_chapter {c = coord(132,190), name = get_obj_ch5(6), good = good_alias.mail} ] - sch_list2 = [ + sch_list2 = city1_post_halts + /*[ coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(132,189), coord(121,189), coord(118,191), coord(113,190) - ] + ]*/ //Para el Camion veh2_obj = get_veh_ch5(3) c_dep2 = coord(115,185) // depot - line1_name = "Test 6" + line1_name = "Test 10" veh2_load = 100 veh2_wait = 10571 d2_cnr = null //auto started + line2_name = "Test 11" + line3_name = "Test 12" + //Para el barco sch_list3 = [coord(133,189), coord(168,189)] veh3_obj = get_veh_ch5(4) @@ -98,6 +102,13 @@ class tutorial.chapter_05 extends basic_chapter sc_power_name = get_obj_ch5(3) sc_transf_name = get_obj_ch5(4) + fab_list = [ + factory_data.rawget("5"), + factory_data.rawget("3"), + factory_data.rawget("7"), + factory_data.rawget("8") + ] + function start_chapter() //Inicia solo una vez por capitulo { @@ -113,6 +124,8 @@ class tutorial.chapter_05 extends basic_chapter tile_x(134,235,0).remove_object(player_x(1), mo_label) } + //sch_list2.extend(city1_post_halts) + local lim_idx = cv_list[(persistent.chapter - 2)].idx ch5_cov_lim1 = {a = cv_lim[lim_idx].a, b = cv_lim[lim_idx].b} ch5_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} @@ -122,6 +135,15 @@ class tutorial.chapter_05 extends basic_chapter d2_cnr = get_dep_cov_nr(ch5_cov_lim2.a,ch5_cov_lim2.b) d3_cnr = get_dep_cov_nr(ch5_cov_lim3.a,ch5_cov_lim3.b) + /*fab_list = [ + factory_data.rawget("5"), + factory_data.rawget("3"), + factory_data.rawget("7"), + factory_data.rawget("8") + ]*/ + line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name + //line3_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name + local pl = 0 if(this.step == 4){ //Camion de correo @@ -143,12 +165,6 @@ class tutorial.chapter_05 extends basic_chapter local trf_name = translate("Build drain") // Aufspanntransformator local toolbar = translate_objects_list.tools_power // toolbar with powerline tools - local fab_list = [ - factory_data.rawget("5"), - factory_data.rawget("3"), - factory_data.rawget("7"), - factory_data.rawget("8") - ] switch (this.step) { case 1: @@ -330,12 +346,12 @@ class tutorial.chapter_05 extends basic_chapter save_glsw() save_pot() - local fab_list = [ + /*local fab_list = [ factory_data.rawget("5"), factory_data.rawget("3"), factory_data.rawget("7"), factory_data.rawget("8") - ] + ]*/ switch (this.step) { case 1: @@ -589,13 +605,13 @@ class tutorial.chapter_05 extends basic_chapter ribi = way.get_dirs() if (!t.has_way(gl_wt)) ribi = 0 - }*/ + } local fab_list = [ factory_data.rawget("5"), factory_data.rawget("3"), factory_data.rawget("7"), factory_data.rawget("8") - ] + ]*/ local result = translate("Action not allowed") // null is equivalent to 'allowed' switch (this.step) { @@ -667,7 +683,7 @@ class tutorial.chapter_05 extends basic_chapter if (glsw[j]==0){ return null } - else + else return translate("There is already a transformer here!")+" ("+pos.tostring()+")." } else if (glsw[j]==0) @@ -951,7 +967,7 @@ class tutorial.chapter_05 extends basic_chapter local sched = schedule_x(wt, []) sched.entries.append(schedule_entry_x(my_tile(sch_list1[0]), veh1_load, veh1_wait)) sched.entries.append(schedule_entry_x(my_tile(sch_list1[1]), 0, 0)) - local c_line = comm_get_line(player, wt, sched) + local c_line = comm_get_line(player, wt, sched, line1_name) local name = veh1_obj local cov_nr = d1_cnr //Max convoys nr in depot @@ -1058,7 +1074,7 @@ class tutorial.chapter_05 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, wt, sched) + local c_line = comm_get_line(player, wt, sched, line2_name) local name = veh2_obj local cov_nr = d2_cnr //Max convoys nr in depot @@ -1090,7 +1106,7 @@ class tutorial.chapter_05 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, wt, sched) + local c_line = comm_get_line(player, wt, sched, line3_name) local name = veh3_obj local cov_nr = d3_cnr //Max convoys nr in depot diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 14c49f0..931a443 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -61,7 +61,7 @@ class tutorial.chapter_06 extends basic_chapter sch_list1 = [coord(114,176), coord(168,489)] // Step 3 ===================================================================================== - line1_name = "Test 7" + line1_name = "Test 13" c_dep2 = coord(115,185) d2_cnr = null //auto started sch_list2 = [coord(114,177) coord(121,189), coord(126,187)] @@ -70,7 +70,7 @@ class tutorial.chapter_06 extends basic_chapter veh1_wait = 10571 // Step 4 ===================================================================================== - line2_name = "Test 8" + line2_name = "Test 14" c_dep3 = coord(167,497) d3_cnr = null //auto started @@ -88,6 +88,7 @@ class tutorial.chapter_06 extends basic_chapter sc_dep1 = get_obj_ch6(5) sc_dep2 = get_obj_ch6(6) + line3_name = "Test 15" function start_chapter() //Inicia solo una vez por capitulo { @@ -881,7 +882,7 @@ class tutorial.chapter_06 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[j]), 0, 0)) } - local c_line = comm_get_line(player, gl_wt, sched) + local c_line = comm_get_line(player, gl_wt, sched, line1_name) local depot = c_depot.find_object(mo_depot_air) local name = plane1_obj @@ -911,7 +912,7 @@ class tutorial.chapter_06 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[i]), 0, 0)) } - local c_line = comm_get_line(player, wt_road, sched) + local c_line = comm_get_line(player, wt_road, sched, line2_name) local good_nr = 0 //Passengers local name = veh1_obj @@ -953,7 +954,7 @@ class tutorial.chapter_06 extends basic_chapter else sched.entries.append(schedule_entry_x(my_tile(c_list[i]), 0, 0)) } - local c_line = comm_get_line(player, wt_road, sched) + local c_line = comm_get_line(player, wt_road, sched, line3_name) local good_nr = 0 //Passengers local name = veh1_obj diff --git a/class/class_messages.nut b/class/class_messages.nut index e5a2e3e..6d16cad 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -24,7 +24,7 @@ ch2_name <- "Ruling the Roads" * id - message id * 1 = You can only delete the stops. * 2 = Action not allowed - * + * 3 = Only road schedules allowed * * * @@ -44,7 +44,7 @@ function get_message(id) { txt_message = translate("Action not allowed") break case 3: - + txt_message = translate("Only road schedules allowed") break case 4: @@ -237,4 +237,68 @@ function get_tiledata_message(id, data, tile) { return txt_message +} + + function bus_result_message(nr, name, veh, cov) + { + switch (nr) { + case 0: + return format(translate("Select the Bus [%s]."),name) + break + + case 1: + return format(translate("The number of bus must be [%d]."),cov) + break + + case 2: + return format(translate("The number of convoys must be [%d], press the [Sell] button."),cov) + + case 3: + return translate("The bus must be [Passengers].") + break + + case 4: + return format(translate("Must not use trailers [%d]."),veh-1) + break + + default: + return translate("The convoy is not correct.") + break + } + } + +/** + * label messages + * + * + */ +function get_label_text(id) { + local txt_message = "" + + switch(id) { + case 1: + txt_message = translate("Place Stop here!.") + break + case 2: + txt_message = translate("Build a Bridge here!.") + break + case 3: + + break + case 4: + + break + case 5: + + break + case 6: + + break + case 7: + + break + } + + return txt_message + } From 09c6acbaa9a3c9e3751bb902b834f6388a6f4112 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 10 Jan 2025 17:15:00 +0100 Subject: [PATCH 025/217] CHG chapter count for if --- scenario.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenario.nut b/scenario.nut index bf29d2b..e051a0e 100644 --- a/scenario.nut +++ b/scenario.nut @@ -425,7 +425,7 @@ function get_goal_text(pl) function get_result_text(pl) { // finished ... - if(persistent.chapter>7) { + if(persistent.chapter>tutorial.len()) { local text = ttextfile("finished.txt") return text } From 7ebd3ebda031a705cb691db5d03c969be8923575 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 10 Jan 2025 17:38:48 +0100 Subject: [PATCH 026/217] merge changes Yona --- class/class_basic_chapter.nut | 13 ++++--------- class/class_basic_coords_p128.nut | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index f014c79..57ffaa3 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2511,7 +2511,7 @@ class basic_chapter function is_stop_building(siz, c_list, lab_name, good, label_sw = false) { - local player = player_x(1) + local pl_unown = player_x(15) local count = 0 for(local j=0;j Date: Sat, 11 Jan 2025 09:10:01 +0100 Subject: [PATCH 027/217] CHG name from lines by automatic build --- class/class_basic_coords_p128.nut | 5 ++ class/class_basic_coords_p64.nut | 5 ++ class/class_basic_coords_p64g.nut | 17 +++++-- class/class_basic_data.nut | 31 +++++++---- class/class_chapter_01.nut | 2 + class/class_chapter_02.nut | 6 +-- class/class_chapter_03.nut | 85 +++++++++++++++++++------------ class/class_chapter_04.nut | 17 +++---- class/class_chapter_05.nut | 61 +++++++++++++--------- class/class_chapter_06.nut | 57 ++++++++++++--------- scenario.nut | 5 +- 11 files changed, 182 insertions(+), 109 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index b6c41f8..3a1e1f3 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -43,6 +43,11 @@ city1_cur <- coord(113,185) city1_tow <- coord(111,184) city2_tow <- coord(129,154) +city3_tow <- coord(52,194) +city4_tow <- coord(115,268) +city5_tow <- coord(124,326) +city6_tow <- coord(125,378) +city7_tow <- coord(163,498) /** * set tiles for factory diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 720844c..c4cf6a6 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -43,6 +43,11 @@ city1_cur <- coord(113,185) city1_tow <- coord(111,184) city2_tow <- coord(129,154) +city3_tow <- coord(52,194) +city4_tow <- coord(115,268) +city5_tow <- coord(124,326) +city6_tow <- coord(125,378) +city7_tow <- coord(163,498) /** * set tiles for factory diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 2e986ab..6366295 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -43,6 +43,11 @@ city1_cur <- coord(116,188) city1_tow <- coord(111,184) city2_tow <- coord(129,154) +city3_tow <- coord(52,194) +city4_tow <- coord(115,268) +city5_tow <- coord(124,326) +city6_tow <- coord(125,378) +city7_tow <- coord(163,498) /** * set tiles for factory @@ -80,7 +85,8 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) -local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] +//local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] +local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } @@ -96,8 +102,13 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } -city1_post_halts <- city1_halt_1 -city1_post_halts.insert(4, city1_halt_2[0]) +city1_post_halts <- [] +for ( local i = 0; i < city1_halt_1.len(); i++ ) { + city1_post_halts.append(city1_halt_1[i]) + if ( i == 3 ) { + city1_post_halts.append(city1_halt_2[0]) + } +} /** * define depot diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 35b005c..6808145 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -105,16 +105,27 @@ function rename_factory_names() { } } - /* - gui.add_message("factory_data rawin 1: "+factory_data.rawin("1")) - gui.add_message("factory_data rawin 2: "+factory_data.rawin("2")) - gui.add_message("factory_data rawin 3: "+factory_data.rawin("3")) - gui.add_message("factory_data rawin 4: "+factory_data.rawin("4")) - gui.add_message("factory_data rawin 5: "+factory_data.rawin("5")) - gui.add_message("factory_data rawin 6: "+factory_data.rawin("6")) - gui.add_message("factory_data rawin 7: "+factory_data.rawin("7")) - gui.add_message("factory_data rawin 8: "+factory_data.rawin("8")) - */ + + /*local fab_list = [ factory_data.rawin("1"), + factory_data.rawin("2"), + factory_data.rawin("3"), + factory_data.rawin("4"), + factory_data.rawin("5"), + factory_data.rawin("6"), + factory_data.rawin("7"), + factory_data.rawin("8") + ] + gui.add_message(player_x(1), "factory_data len: "+factory_data.len()) + + gui.add_message(player_x(1), "factory_data rawin 1: "+factory_data.rawin("1")) + gui.add_message(player_x(1), "factory_data rawin 2: "+factory_data.rawin("2")) + gui.add_message(player_x(1), "factory_data rawin 3: "+factory_data.rawin("3")) + gui.add_message(player_x(1), "factory_data rawin 4: "+factory_data.rawin("4")) + gui.add_message(player_x(1), "factory_data rawin 5: "+factory_data.rawin("5")) + gui.add_message(player_x(1), "factory_data rawin 6: "+factory_data.rawin("6")) + gui.add_message(player_x(1), "factory_data rawin 7: "+factory_data.rawin("7")) + gui.add_message(player_x(1), "factory_data rawin 8: "+factory_data.rawin("8")) + */ } diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index c1712b4..3403b85 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -45,6 +45,8 @@ class tutorial.chapter_01 extends basic_chapter buil2_name = buil ? translate(buil.get_name()):"No existe" c_list_cur = buil.get_tile_list() + //gui.add_message("city1_post_halts " + city1_post_halts.len()) + return 0 } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 303d0a4..86aa641 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -39,7 +39,7 @@ class tutorial.chapter_02 extends basic_chapter // Step 4 ===================================================================================== //Primer autobus - line1_name = "Test 1" + line1_name = "ch2_l1" veh1_obj = get_veh_ch2_st4() veh1_load = set_loading_capacity(1) veh1_wait = set_waiting_time(1) @@ -52,7 +52,7 @@ class tutorial.chapter_02 extends basic_chapter // Step 6 ===================================================================================== // Conectando el muelle - line2_name = "Test 2" + line2_name = "ch2_l2" dep_cnr2 = null //auto started cov_nr = 0 @@ -61,7 +61,7 @@ class tutorial.chapter_02 extends basic_chapter cty2 = {name = ""} - line3_name = "Test 3" + line3_name = "ch2_l3" dep_cnr3 = null //auto started diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 0c97a29..1829882 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -89,6 +89,7 @@ class tutorial.chapter_03 extends basic_chapter f1_reached = set_transportet_goods(1) //Step 6 ===================================================================================== + //c_lock = [coord(60,10), coord(77,25)] //Futuros transformadores //Primer tramo de rieles //-------------------------------------------------------------------------------------------- @@ -218,7 +219,7 @@ class tutorial.chapter_03 extends basic_chapter loc3_load = 100 loc3_wait = 25369 - line1_name = "Test 4" + line1_name = "ch3_l1" st_lim_a = [ {a = coord(55,197), b = coord(58,197)}, {a = coord(116,198), b = coord(119,198)}, {a = coord(120,266), b= coord(120,269)}, {a = coord(120,326), b= coord(120,329)}, {a = coord(120,380), b= coord(120,383)}, {a = coord(121,326), b= coord(121,329)}, @@ -249,13 +250,9 @@ class tutorial.chapter_03 extends basic_chapter sc_wag3_nr = set_train_lenght(3) //------------------------------------------------------------------------------------ - fab_list = [ - factory_data.rawget("1"), - factory_data.rawget("2"), - factory_data.rawget("3") - ] - line2_name = "Test 5" - line3_name = "Test 6" + //fab_list = null + line2_name = "ch3_l2" + line3_name = "ch3_l3" function start_chapter(){ //Inicia solo una vez por capitulo @@ -300,11 +297,17 @@ class tutorial.chapter_03 extends basic_chapter start_lvl_z = c_tunn2.a.z end_lvl_z = c_tunn2.b.z - cy1.name = get_city_name(cy1.c) - cy2.name = get_city_name(cy2.c) - cy3.name = get_city_name(cy3.c) - cy4.name = get_city_name(cy4.c) - cy5.name = get_city_name(cy5.c) + cy1.name = get_city_name(city1_tow) + cy2.name = get_city_name(city3_tow) + cy3.name = get_city_name(city4_tow) + cy4.name = get_city_name(city5_tow) + cy5.name = get_city_name(city6_tow) + + local fab_list = [ + factory_data.rawget("1"), + factory_data.rawget("2"), + factory_data.rawget("3") + ] line1_name = get_good_data(1, 3) + " " + fab_list[0].name + " - " + fab_list[1].name line2_name = get_good_data(2, 3) + " " + fab_list[1].name + " - " + fab_list[2].name @@ -320,6 +323,10 @@ class tutorial.chapter_03 extends basic_chapter function set_goal_text(text){ + local fac_1 = factory_data.rawget("1") + local fac_2 = factory_data.rawget("2") + local fac_3 = factory_data.rawget("3") + if ( translate_objects_list.rawin("inspec") ) { if ( translate_objects_list.inspec != translate("Abfrage") ) { gui.add_message("change language") @@ -646,8 +653,8 @@ class tutorial.chapter_03 extends basic_chapter local stext = ttextfile("chapter_03/step_1-4_hinfo.txt") stext.good1 = get_good_data(1, 3) stext.good2 = get_good_data(2, 3) - stext.f1 = fab_list[0].c.href(fab_list[0].name+" ("+fab_list[0].c.tostring()+")") - stext.f2 = fab_list[1].c.href(fab_list[1].name+" ("+fab_list[1].c.tostring()+")") + stext.f1 = fac_1.c.href(fac_1.name+" ("+fac_1.c.tostring()+")") + stext.f2 = fac_2.c.href(fac_2.name+" ("+fac_2.c.tostring()+")") text.step_hinfo = stext } if ( this.step >= 8 && this.step <= 10 ) { @@ -666,9 +673,9 @@ class tutorial.chapter_03 extends basic_chapter text.step_hinfo = stext } - text.f1 = fab_list[0].c.href(fab_list[0].name+" ("+fab_list[0].c.tostring()+")") - text.f2 = fab_list[1].c.href(fab_list[1].name+" ("+fab_list[1].c.tostring()+")") - text.f3 = fab_list[2].c.href(fab_list[2].name+" ("+fab_list[2].c.tostring()+")") + text.f1 = fac_1.c.href(fac_1.name+" ("+fac_1.c.tostring()+")") + text.f2 = fac_2.c.href(fac_2.name+" ("+fac_2.c.tostring()+")") + text.f3 = fac_3.c.href(fac_3.name+" ("+fac_3.c.tostring()+")") text.cdep=c_dep1.href("("+c_dep1.tostring()+")") text.way1=c_dep2.href("("+c_dep2.tostring()+")") @@ -699,11 +706,11 @@ class tutorial.chapter_03 extends basic_chapter text.good2 = get_good_data(2, 3) text.g2_metric =get_good_data(2, 1) // prod data - local g_in = read_prod_data(fab_list[1].c, 1, "in") + local g_in = read_prod_data(fac_2.c, 1, "in") text.prod_in = integer_to_string(g_in[0]) text.g1_factor = g_in[2] text.g1_consum = integer_to_string(g_in[1]) - local g_out = read_prod_data(fab_list[1].c, 2, "out") + local g_out = read_prod_data(fac_2.c, 2, "out") text.prod_out = integer_to_string(g_out[0]) text.g2_factor = g_out[2] text.g2_prod = integer_to_string(g_out[1]) @@ -720,17 +727,17 @@ class tutorial.chapter_03 extends basic_chapter local chapter_step = persistent.step local chapter_sub_steps = 0 // count all sub steps local chapter_sub_step = 0 // actual sub step -/* + local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") -*/ + switch (this.step) { case 1: chapter_sub_steps = 2 local next_mark = false if (pot0==0 || pot1 == 0) { - local list = fab_list[1].c_list + local list = fac_2.c_list try { next_mark = delay_mark_tile(list) } @@ -742,7 +749,7 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot2==0 || pot3==0) { - local list = fab_list[0].c_list + local list = fac_1.c_list try { next_mark = delay_mark_tile(list) } @@ -975,13 +982,20 @@ class tutorial.chapter_03 extends basic_chapter local wt = wt_rail if (current_cov == ch3_cov_lim1.b){ - reached = get_reached_target(fab_list[1].c, good_alias.wood ) + reached = get_reached_target(fac_2.c, good_alias.wood ) if (reached>= f1_reached){ pot1=1 } } if (pot1==1 && pot0==0){ + //Marca tiles para evitar construccion de objetos + /*local c_list = c_lock + local siz = c_lock.len() + local del = false + local pl_nr = 1 + local text = "X" + lock_tile_list(c_list, siz, del, pl_nr, text)*/ this.next_step() reset_stop_flag() @@ -1156,6 +1170,13 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot4==1 && pot5==0){ + //Elimina las Marcas de tiles + /*local c_list = c_lock + local siz = c_lock.len() + local del = true + local pl_nr = 1 + local text = "X" + lock_tile_list(c_list, siz, del, pl_nr, text)*/ this.next_step() } @@ -1189,7 +1210,7 @@ class tutorial.chapter_03 extends basic_chapter } else if(current_cov == ch3_cov_lim2.b){ - reached = get_reached_target(fab_list[2].c, good_alias.plan) + reached = get_reached_target(fac_3.c, good_alias.plan) if (reached>=f3_reached){ pot3=1 } @@ -1482,18 +1503,18 @@ class tutorial.chapter_03 extends basic_chapter if (!t.has_way(wt_rail)) ribi = 0 } -/* + local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") -*/ + local result = translate("Action not allowed") // null is equivalent to 'allowed' switch (this.step) { case 1: if (tool_id == 4096){ if (pot0==0){ - local list = fab_list[1].c_list + local list = fac_2.c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { pot0 = 1 @@ -1502,7 +1523,7 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot1==1){ - local list = fab_list[0].c_list + local list = fac_1.c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { pot2 = 1 @@ -2087,11 +2108,11 @@ class tutorial.chapter_03 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' local nr = schedule.entries.len() -/* + local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") -*/ + switch (this.step) { case 5: local selc = 0 diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 4977c8a..d4757ef 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -70,13 +70,10 @@ class tutorial.chapter_04 extends basic_chapter ship2_name_obj = get_veh_ch4(2) ship2_load = 100 ship2_wait = 42282 - line1_name = "Test 7" - line2_name = "Test 8" - line3_name = "Test 9" - fac_1 = null - fac_2 = null - fac_3 = null + line1_name = "ch4_l1" + line2_name = "ch4_l2" + line3_name = "ch4_l3" //Script //---------------------------------------------------------------------------------- sc_way_name = get_obj_ch4(1) @@ -88,14 +85,16 @@ class tutorial.chapter_04 extends basic_chapter function start_chapter() //Inicia solo una vez por capitulo { - fac_1 = factory_data.rawget("4") - fac_2 = factory_data.rawget("5") - fac_3 = factory_data.rawget("6") + local fac_1 = factory_data.rawget("4") + local fac_2 = factory_data.rawget("5") + local fac_3 = factory_data.rawget("6") + line1_name = get_good_data(3, 3) + " " + fac_1.name + " - " + fac_2.name line2_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name line3_name = "Passanger Ship" + if ( pak_name == "pak128" ) { c1_way_lim.a = coord(114, 193) c1_way.c = coord3d(127,193,-1) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 1ef6b3a..ea54735 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -67,7 +67,7 @@ class tutorial.chapter_05 extends basic_chapter {c = coord(132,190), name = get_obj_ch5(6), good = good_alias.mail} ] - sch_list2 = city1_post_halts + //sch_list2 = city1_post_halts /*[ coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(132,189), coord(121,189), coord(118,191), coord(113,190) @@ -75,14 +75,14 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh2_obj = get_veh_ch5(3) - c_dep2 = coord(115,185) // depot - line1_name = "Test 10" + //c_dep2 = coord(115,185) // depot veh2_load = 100 veh2_wait = 10571 d2_cnr = null //auto started - line2_name = "Test 11" - line3_name = "Test 12" + line1_name = "ch5_l1" + line2_name = "ch5_l2" + line3_name = "ch5_l3" //Para el barco sch_list3 = [coord(133,189), coord(168,189)] @@ -102,15 +102,21 @@ class tutorial.chapter_05 extends basic_chapter sc_power_name = get_obj_ch5(3) sc_transf_name = get_obj_ch5(4) - fab_list = [ + function start_chapter() //Inicia solo una vez por capitulo + { + + local fab_list = [ factory_data.rawget("5"), factory_data.rawget("3"), factory_data.rawget("7"), factory_data.rawget("8") ] - function start_chapter() //Inicia solo una vez por capitulo - { + line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name + line2_name = translate("Post") + " City " + get_city_name(city1_tow) + local ta = this.my_tile(sch_list3[0]) + local tb = this.my_tile(sch_list3[0]) + line3_name = translate("Post") + " " + ta.get_halt().get_name() + " - " + tb.get_halt().get_name() if ( pak_name == "pak128" ) { c_way_lim1.a = coord(127,211) @@ -141,14 +147,13 @@ class tutorial.chapter_05 extends basic_chapter factory_data.rawget("7"), factory_data.rawget("8") ]*/ - line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name //line3_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name local pl = 0 if(this.step == 4){ //Camion de correo - local c_dep = this.my_tile(c_dep2) - local c_list = sch_list2 + local c_dep = this.my_tile(city1_road_depot) + local c_list = city1_post_halts start_sch_tmpsw(pl,c_dep, c_list) //Barco de Correo/Pasajeros @@ -165,6 +170,12 @@ class tutorial.chapter_05 extends basic_chapter local trf_name = translate("Build drain") // Aufspanntransformator local toolbar = translate_objects_list.tools_power // toolbar with powerline tools + local fab_list = [ + factory_data.rawget("5"), + factory_data.rawget("3"), + factory_data.rawget("7"), + factory_data.rawget("8") + ] switch (this.step) { case 1: @@ -250,7 +261,7 @@ class tutorial.chapter_05 extends basic_chapter text = ttextfile("chapter_05/04_2-3.txt") text.tx = "[2/3]" local list_tx = "" - local c_list = sch_list2 + local c_list = city1_post_halts local siz = c_list.len() for (local j=0;j ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b){ local wt = wt_road - local c_depot = my_tile(c_dep2) + local c_depot = my_tile(city1_road_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito local sched = schedule_x(wt, []) - local c_list = sch_list2 + local c_list = city1_post_halts local siz = c_list.len() for(local j = 0;j ("+c_dep2.tostring()+")" + text.dep2 = " ("+city1_road_depot.tostring()+")" text.load = veh1_load text.wait = get_wait_time_text(veh1_wait) text.cnr = d2_cnr @@ -208,7 +215,7 @@ class tutorial.chapter_06 extends basic_chapter text.cnr = d3_cnr break - } + } local st1_halt = my_tile(sch_list1[0]).get_halt() local st2_halt = my_tile(sch_list1[1]).get_halt() if(st1_halt){ @@ -219,8 +226,8 @@ class tutorial.chapter_06 extends basic_chapter text.w2name = translate(obj2_way_name) text.bus1 = translate(veh1_obj) text.bus2 = translate(veh2_obj) - text.cit1 = cty1.c.href(cty1.name.tostring()) - text.cit2 = cty2.c.href(cty2.name.tostring()) + text.cit1 = city1_tow.href(cty1.name.tostring()) + text.cit2 = city7_tow.href(cty2.name.tostring()) text.st1 = " ("+st1_pos.tostring()+")" text.st2 = " ("+st2_pos.tostring()+")" text.dep1 = " ("+c_dep1.tostring()+")" @@ -337,9 +344,9 @@ class tutorial.chapter_06 extends basic_chapter break; case 3: - local c_dep = this.my_tile(c_dep2) - local line_name = line1_name - set_convoy_schedule(pl, c_dep, wt_road, line_name) + local c_dep = my_tile(city1_road_depot) + local line_name = line1_name + set_convoy_schedule(pl, c_dep, wt_road, line_name) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) local cov_list = depot.get_convoy_list() //Lista de vehiculos en el deposito @@ -368,9 +375,9 @@ class tutorial.chapter_06 extends basic_chapter return 25 } else if (pot0==1 && pot1==0){ - local c_dep = this.my_tile(c_dep3) - local line_name = line2_name - set_convoy_schedule(pl, c_dep, wt_road, line_name) + local c_dep = my_tile(c_dep3) + local line_name = line2_name + set_convoy_schedule(pl, c_dep, wt_road, line_name) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) local cov_list = depot.get_convoy_list() //Lista de vehiculos en el deposito @@ -555,7 +562,7 @@ class tutorial.chapter_06 extends basic_chapter case 3: if (tool_id==4108) { local c_list = sch_list2 //Lista de todas las paradas de autobus - local c_dep = c_dep2 //Coordeadas del deposito + local c_dep = city1_road_depot //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) @@ -688,8 +695,8 @@ class tutorial.chapter_06 extends basic_chapter } break case 3: - if ((depot.x != c_dep2.x)||(depot.y != c_dep2.y)) - return translate("You must select the deposit located in")+" ("+c_dep2.tostring()+")." + if ((depot.x != city1_road_depot.x)||(depot.y != city1_road_depot.y)) + return translate("You must select the deposit located in")+" ("+city1_road_depot.tostring()+")." if (current_cov>ch6_cov_lim2.a && current_covch6_cov_lim2.a && current_covtutorial.len()) { + if(persistent.chapter>7) { local text = ttextfile("finished.txt") return text } @@ -584,6 +584,7 @@ function is_scenario_completed(pl) chapter.step = 1 else chapter.step = persistent.step + chapter.start_chapter() return 1 } From b54dd2741ef1c6f346be6982829349ef0ba4dd5a Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 11 Jan 2025 14:57:36 +0100 Subject: [PATCH 028/217] CHG last step in last chapter return 100% --- class/class_basic_chapter.nut | 5 +++++ scenario.nut | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 57ffaa3..c60aab1 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -128,6 +128,11 @@ class basic_chapter //gui.add_message("ch_steps "+ch_steps+" ch_step "+ch_step+" ch_steps "+sub_steps+" sub_step "+sub_step) + // tutorial finish + if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { + percentage = 100 + } + return percentage } diff --git a/scenario.nut b/scenario.nut index 4dac1bc..c7c6394 100644 --- a/scenario.nut +++ b/scenario.nut @@ -425,7 +425,7 @@ function get_goal_text(pl) function get_result_text(pl) { // finished ... - if(persistent.chapter>7) { + if(persistent.chapter>tutorial.len()) { local text = ttextfile("finished.txt") return text } From 4ca56ad5a6c3b5675f29178a7c2cc82038079daa Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 11 Jan 2025 19:04:02 +0100 Subject: [PATCH 029/217] FIX wrong line set chapter 6 step 3 --- class/class_chapter_06.nut | 42 ++++++++------------------------------ 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index e4d8bf5..7a6343e 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -8,7 +8,7 @@ class tutorial.chapter_06 extends basic_chapter { chapter_name = "The forgotten Air transport" - chapter_coord = coord(112,174) + chapter_coord = city1_tow startcash = 500000 // pl=0 startcash; 0=no reset gl_wt = wt_air @@ -107,38 +107,8 @@ class tutorial.chapter_06 extends basic_chapter line1_name = "Air " + cty1.name + " - " + cty2.name line2_name = "City " + cty1.name + " - Airport" - line3_name = "City " + cty2.name - - - local pl = 0 - //Schedule list form current convoy - if(this.step == 3){ - local c_dep = this.my_tile(city1_road_depot) - local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) - local cov_list = depot.get_convoy_list() //Lista de vehiculos en el deposito - local convoy = convoy_x(gcov_id) - if (cov_list.len()>=1){ - convoy = cov_list[0] - } - local all_result = checks_convoy_schedule(convoy, pl) - sch_cov_correct = all_result.res == null ? true : false - } + line3_name = "City " + cty2.name + " - Airport" - local pl = 0 - //Schedule list form current convoy - if(this.step == 3){ - gui.add_message("ch6 step 3") - local c_dep = this.my_tile(city1_road_depot) - local c_list = sch_list2 - start_sch_tmpsw(pl,c_dep, c_list) - } - else if(this.step == 4){ - gui.add_message("ch6 step 4") - local c_dep = this.my_tile(c_dep3) - local c_list = sch_list3 - start_sch_tmpsw(pl,c_dep, c_list) - } - return 0 } function set_goal_text(text){ @@ -611,6 +581,10 @@ class tutorial.chapter_06 extends basic_chapter local c_list = sch_list1 local siz = c_list.len() return set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + if(result == null){ + local line_name = line1_name + update_convoy_schedule(pl, wt_road, line_name, schedule) + } break case 3: if ( schedule.waytype != wt_road ) @@ -623,7 +597,7 @@ class tutorial.chapter_06 extends basic_chapter local line = true result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) if(result == null){ - local line_name = line1_name + local line_name = line2_name update_convoy_schedule(pl, wt_road, line_name, schedule) } return result @@ -639,7 +613,7 @@ class tutorial.chapter_06 extends basic_chapter local line = true result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) if(result == null){ - local line_name = line2_name + local line_name = line3_name update_convoy_schedule(pl, wt_road, line_name, schedule) } return result From 8af2a7b72ff9c1b50ff088777749b070b08c9231 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 11 Jan 2025 23:20:07 +0100 Subject: [PATCH 030/217] CHG coords move to separate file --- class/class_basic_coords_p128.nut | 50 +++++++++++++++++----- class/class_basic_coords_p64.nut | 69 ++++++++++++++++++++++--------- class/class_basic_coords_p64g.nut | 43 ++++++++++++++----- class/class_basic_data.nut | 16 +++---- class/class_chapter_03.nut | 4 +- class/class_chapter_04.nut | 47 +++++++++++---------- class/class_chapter_05.nut | 11 +++-- class/class_chapter_06.nut | 52 +++++++++++------------ class/class_chapter_07.nut | 4 +- class/class_messages.nut | 5 +++ scenario.nut | 30 ++++++++------ 11 files changed, 208 insertions(+), 123 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 3a1e1f3..2bfe041 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -6,14 +6,6 @@ * */ -/** - * set tiles for pos chapter start - * - * - */ -coord_chapter_1 <- coord(113,189) -coord_chapter_2 <- coord(115,185) - /** * set limit for build * @@ -56,7 +48,14 @@ city7_tow <- coord(163,498) * * */ -coord_fac_1 <- coord(149,200) +coord_fac_1 <- coord(123,160) // Timber plantation +coord_fac_2 <- coord(93,153) // Saw mill +coord_fac_3 <- coord(110,190) // Construction Wholesaler +coord_fac_4 <- coord(168,189) // Oil rig +coord_fac_5 <- coord(149,200) // Oil refinery +coord_fac_6 <- coord(112,192) // Gas station +coord_fac_7 <- coord(131,235) // Coal mine +coord_fac_8 <- coord(130,207) // Coal power station /** * set tiles for stations @@ -78,6 +77,10 @@ coord_st_1 <- coord(117,197) * * used chapter 5 * city1_post_halts - halts for post + * + * used chapter 6 + * city1_city7_air + * city1_halt_airport - */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -85,6 +88,7 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) +city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] local list = [coord(111,183), coord(116,183), coord(120,183), coord(126,187), coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) @@ -101,13 +105,24 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } -city1_post_halts <- city1_halt_1 -city1_post_halts.insert(4, city1_halt_2[0]) +city1_post_halts <- [] +for ( local i = 0; i < city1_halt_1.len(); i++ ) { + city1_post_halts.append(city1_halt_1[i]) + if ( i == 3 ) { + city1_post_halts.append(city1_halt_2[0]) + } +} + +city1_city7_air <- [coord(114,176), coord(168,489)] +city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), + coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] /** * define road depot city 1 */ city1_road_depot <- coord(115,185) +ship_depot <- coord(150, 190) +road_depot_ch5 <- coord(131,232) /** * define bridges @@ -132,3 +147,16 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} * hlist = halt list * */ + +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- city1_mon // city1_mon +coord_chapter_2 <- city1_road_depot // city1_road_depot +coord_chapter_3 <- coord_fac_2 // Saw mill +coord_chapter_4 <- ship_depot // ship_depot +coord_chapter_5 <- coord_fac_8 // Coal power station +coord_chapter_6 <- city1_halt_airport[0] // airport road stop +coord_chapter_7 <- city3_tow // city 3 townhall diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index c4cf6a6..02b4892 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -6,14 +6,6 @@ * */ -/** - * set tiles for pos chapter start - * - * - */ -coord_chapter_1 <- coord(113,189) -coord_chapter_2 <- coord(115,185) - /** * set limit for build * @@ -56,7 +48,14 @@ city7_tow <- coord(163,498) * * */ -coord_fac_1 <- coord(149,200) +coord_fac_1 <- coord(123,160) // Timber plantation +coord_fac_2 <- coord(93,153) // Saw mill +coord_fac_3 <- coord(110,190) // Construction Wholesaler +coord_fac_4 <- coord(168,189) // Oil rig +coord_fac_5 <- coord(149,200) // Oil refinery +coord_fac_6 <- coord(112,192) // Gas station +coord_fac_7 <- coord(131,235) // Coal mine +coord_fac_8 <- coord(130,207) // Coal power station /** * set tiles for stations @@ -68,16 +67,22 @@ coord_fac_1 <- coord(149,200) coord_st_1 <- coord(117,197) /** - * set halt coords city + * set halt coords * * used in chapter: 2 - * city1_halt_1 - halts city 1 - * city1_halt_2 - halts connect city 1 dock and station - * city2_halt_1 - halts connect city 2 to city 1 - * line_connect_halt - halt in all halt lists + * city1_halt_1 - halts city 1 + * city1_halt_2 - halts connect city 1 dock and station + * city2_halt_1 - halts connect city 2 to city 1 + * line_connect_halt - halt in all halt lists city1 * * used chapter 5 * city1_post_halts - halts for post + * + * used chapter 6 + * city1_city7_air + * city1_halt_airport - + * city7_halt + * */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -85,7 +90,8 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) -local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] +city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] +local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, city1_halt_airport[1], coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } @@ -101,13 +107,24 @@ for ( local i = 0; i < list.len(); i++ ) { city2_halt_1.append(list[i]) } -city1_post_halts <- city1_halt_1 -city1_post_halts.insert(4, city1_halt_2[0]) +city1_post_halts <- [] +for ( local i = 0; i < city1_halt_1.len(); i++ ) { + city1_post_halts.append(city1_halt_1[i]) + if ( i == 3 ) { + city1_post_halts.append(city1_halt_2[0]) + } +} + +city1_city7_air <- [coord(114,176), coord(168,489)] +city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), + coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] /** - * define road depot city 1 + * define depots */ -city1_road_depot <- coord(115,185) +city1_road_depot <- coord(115,185) +ship_depot <- coord(150, 190) +road_depot_ch5 <- coord(131,232) /** * define bridges @@ -132,3 +149,17 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} * hlist = halt list * */ + +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- city1_mon // city1_mon +coord_chapter_2 <- city1_road_depot // city1_road_depot +coord_chapter_3 <- coord_fac_2 // Saw mill +coord_chapter_4 <- ship_depot // ship_depot +coord_chapter_5 <- coord_fac_8 // Coal power station +coord_chapter_6 <- city1_halt_airport[0] // airport road stop +coord_chapter_7 <- city3_tow // city 3 townhall + diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 6366295..31f3646 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -6,14 +6,6 @@ * */ -/** - * set tiles for pos chapter start - * - * - */ -coord_chapter_1 <- coord(113,189) -coord_chapter_2 <- coord(115,185) - /** * set limit for build * @@ -56,7 +48,14 @@ city7_tow <- coord(163,498) * * */ -coord_fac_1 <- coord(149,200) +coord_fac_1 <- coord(123,160) // Timber plantation +coord_fac_2 <- coord(93,153) // Saw mill +coord_fac_3 <- coord(110,190) // Construction Wholesaler +coord_fac_4 <- coord(168,189) // Oil rig +coord_fac_5 <- coord(149,200) // Oil refinery +coord_fac_6 <- coord(112,192) // Gas station +coord_fac_7 <- coord(131,235) // Coal mine +coord_fac_8 <- coord(130,207) // Coal power station /** * set tiles for stations @@ -78,6 +77,10 @@ coord_st_1 <- coord(117,197) * * used chapter 5 * city1_post_halts - halts for post + * + * used chapter 6 + * city1_city7_air + * city1_halt_airport - */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -85,6 +88,7 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) +city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] //local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { @@ -110,12 +114,18 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } } +city1_city7_air <- [coord(114,176), coord(168,489)] +city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), + coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] + /** - * define depot + * define depots * * road depot must be located one field next to a road */ city1_road_depot <- coord(124,188) //115,185 +ship_depot <- coord(150, 190) +road_depot_ch5 <- coord(131,232) /** * define bridges @@ -141,3 +151,16 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} * hlist = halt list * */ + +/** + * set tiles for pos chapter start + * + * + */ +coord_chapter_1 <- city1_mon // city1_mon +coord_chapter_2 <- city1_road_depot // city1_road_depot +coord_chapter_3 <- coord_fac_2 // Saw mill +coord_chapter_4 <- ship_depot // ship_depot +coord_chapter_5 <- coord_fac_8 // Coal power station +coord_chapter_6 <- city1_halt_airport[0] // airport road stop +coord_chapter_7 <- city3_tow // city 3 townhall diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 6808145..adf9699 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -48,7 +48,7 @@ function rename_factory_names() { factory_x(f_tile[0].x, f_tile[0].y).set_name(translate(f_name)) - if ( f_tile[0].x == 123 && f_tile[0].y == 160 ) { + if ( f_tile[0].x == coord_fac_1.x && f_tile[0].y == coord_fac_1.y ) { // Timber plantation //translate_objects_list.rawset("fac_1_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -61,43 +61,43 @@ function rename_factory_names() { gui.add_message("factory_data d.rawin: "+d.rawget("c_list")) //factory_data.1.rawset(")*/ } - if ( f_tile[0].x == 93 && f_tile[0].y == 153 ) { + if ( f_tile[0].x == coord_fac_2.x && f_tile[0].y == coord_fac_2.y ) { // Saw mill translate_objects_list.rawset("fac_2_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("2", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 110 && f_tile[0].y == 190 ) { + if ( f_tile[0].x == coord_fac_3.x && f_tile[0].y == coord_fac_3.y ) { // Construction Wholesaler translate_objects_list.rawset("fac_3_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("3", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 168 && f_tile[0].y == 189 ) { + if ( f_tile[0].x == coord_fac_4.x && f_tile[0].y == coord_fac_4.y ) { // Oil rig translate_objects_list.rawset("fac_4_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("4", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 149 && f_tile[0].y == 200 ) { + if ( f_tile[0].x == coord_fac_5.x && f_tile[0].y == coord_fac_5.y ) { // Oil refinery translate_objects_list.rawset("fac_5_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("5", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 112 && f_tile[0].y == 192 ) { + if ( f_tile[0].x == coord_fac_6.x && f_tile[0].y == coord_fac_6.y ) { // Gas station translate_objects_list.rawset("fac_6_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("6", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 131 && f_tile[0].y == 235 ) { + if ( f_tile[0].x == coord_fac_7.x && f_tile[0].y == coord_fac_7.y ) { // Coal mine translate_objects_list.rawset("fac_7_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("7", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == 130 && f_tile[0].y == 207 ) { + if ( f_tile[0].x == coord_fac_8.x && f_tile[0].y == coord_fac_8.y ) { // Coal power station translate_objects_list.rawset("fac_8_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 1829882..4698a82 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -8,8 +8,8 @@ class tutorial.chapter_03 extends basic_chapter { - chapter_name = "Riding the Rails" - chapter_coord = coord(93,153) + chapter_name = ch3_name + chapter_coord = coord_chapter_3 startcash = 50000000 gl_wt = wt_rail diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index d4757ef..252055f 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -7,8 +7,8 @@ class tutorial.chapter_04 extends basic_chapter { - chapter_name = "Setting Sail" - chapter_coord = coord(156,190) + chapter_name = ch4_name + chapter_coord = coord_chapter_4 startcash = 1000000 // pl=0 startcash; 0=no reset gl_wt = wt_water @@ -40,7 +40,6 @@ class tutorial.chapter_04 extends basic_chapter dock_list1 = [coord(151, 198)] //Step 3 ===================================================================================== - c_dep1 = coord(150, 190) d1_cnr = null //auto started //Step 4 ===================================================================================== @@ -111,7 +110,7 @@ class tutorial.chapter_04 extends basic_chapter local pl = 0 if(this.step == 7){ - local c_dep = this.my_tile(c_dep1) + local c_dep = this.my_tile(ship_depot) local c_list = sch_list3 start_sch_tmpsw(pl,c_dep, c_list) } @@ -240,7 +239,7 @@ class tutorial.chapter_04 extends basic_chapter break } - text.dep1 = c_dep1.href("("+c_dep1.tostring()+")")+"" + text.dep1 = ship_depot.href("("+ship_depot.tostring()+")")+"" text.sh = translate(ship1_name_obj) text.cir = cov_cir text.f1 = fac_1.c.href(""+fac_1.name+" ("+fac_1.c.tostring()+")")+"" @@ -314,11 +313,11 @@ class tutorial.chapter_04 extends basic_chapter break; case 3: //Para Astillero - local t1 = my_tile(c_dep1) + local t1 = my_tile(ship_depot) local depot = t1.find_object(mo_depot_water) if (!depot){ - label_x.create(c_dep1, player_x(pl), translate("Build Shipyard here!.")) + label_x.create(ship_depot, player_x(pl), translate("Build Shipyard here!.")) } else{ t1.remove_object(player_x(1), mo_label) @@ -425,7 +424,7 @@ class tutorial.chapter_04 extends basic_chapter break case 7: - local c_dep = this.my_tile(c_dep1) + local c_dep = this.my_tile(ship_depot) local line_name = line1_name set_convoy_schedule(pl,c_dep, gl_wt, line_name) if(current_cov == ch4_cov_lim3.b){ @@ -514,7 +513,7 @@ class tutorial.chapter_04 extends basic_chapter break case 3: //Primer Astillero - if (pos.x==c_dep1.x && pos.y==c_dep1.y){ + if (pos.x==ship_depot.x && pos.y==ship_depot.y){ if (pot0==0){ if (tool_id == tool_build_depot){ pot0=1 @@ -529,13 +528,13 @@ class tutorial.chapter_04 extends basic_chapter } } else if (pot0==0) - result = translate("Place the shipyard here")+" ("+c_dep1.tostring()+")." + result = translate("Place the shipyard here")+" ("+ship_depot.tostring()+")." break //Enrutar barcos case 4: if (tool_id==4108){ local c_list = sch_list1 //[sch_list1[1], sch_list1[0]] //Lista de todas las paradas de autobus - local c_dep = c_dep1 //Coordeadas del deposito + local c_dep = ship_depot //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed_ex(result, siz, c_list, pos, gl_wt) @@ -570,7 +569,7 @@ class tutorial.chapter_04 extends basic_chapter else if (pot1==1 && pot2==0){ if (tool_id==4108){ local c_list = sch_list2 //Lista de todas las paradas de autobus - local c_dep = c_dep1 //Coordeadas del deposito + local c_dep = ship_depot //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed_ex(result, siz, c_list, pos, gl_wt) @@ -590,7 +589,7 @@ class tutorial.chapter_04 extends basic_chapter case 7: if (tool_id==4108){ local c_list = sch_list3 //Lista de todas las paradas de autobus - local c_dep = c_dep1 //Coordeadas del deposito + local c_dep = ship_depot //Coordeadas del deposito local siz = c_list.len()//Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed_ex(result, siz, c_list, pos, gl_wt) @@ -654,8 +653,8 @@ class tutorial.chapter_04 extends basic_chapter local wt = gl_wt switch (this.step) { case 4: - if ((depot.x != c_dep1.x)||(depot.y != c_dep1.y)) - return translate("You must select the deposit located in")+" ("+c_dep1.tostring()+")." + if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) + return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = d1_cnr local in_dep = true local veh = 1 @@ -687,8 +686,8 @@ class tutorial.chapter_04 extends basic_chapter break case 5: - if ((depot.x != c_dep1.x)||(depot.y != c_dep1.y)) - return translate("You must select the deposit located in")+" ("+c_dep1.tostring()+")." + if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) + return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = d2_cnr local in_dep = true local veh = 1 @@ -717,8 +716,8 @@ class tutorial.chapter_04 extends basic_chapter } break case 7: - if ((depot.x != c_dep1.x)||(depot.y != c_dep1.y)) - return translate("You must select the deposit located in")+" ("+c_dep1.tostring()+")." + if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) + return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = 1 local veh = 1 local good_list = [good_desc_x(good_alias.passa).get_catg_index()] //Passengers @@ -772,7 +771,7 @@ class tutorial.chapter_04 extends basic_chapter case 3: //Para Astillero - local t1 = my_tile(c_dep1) + local t1 = my_tile(ship_depot) local label = t1.find_object(mo_label) if (label){ @@ -790,7 +789,7 @@ class tutorial.chapter_04 extends basic_chapter case 4: // Para enrutar barcos local player = player_x(pl) - local c_depot = my_tile(c_dep1) + local c_depot = my_tile(ship_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito local depot = depot_x(c_depot.x, c_depot.y, c_depot.z) @@ -866,7 +865,7 @@ class tutorial.chapter_04 extends basic_chapter } if (current_cov> ch4_cov_lim2.a && current_cov< ch4_cov_lim2.b){ local player = player_x(pl) - local c_depot = my_tile(c_dep1) + local c_depot = my_tile(ship_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito local depot = depot_x(c_depot.x, c_depot.y, c_depot.z) @@ -893,7 +892,7 @@ class tutorial.chapter_04 extends basic_chapter break; case 6: - local t_dep = my_tile(c_dep1) + local t_dep = my_tile(ship_depot) local depot = t_dep.find_object(mo_depot_water) if (!depot){ @@ -917,7 +916,7 @@ class tutorial.chapter_04 extends basic_chapter case 7: local player = player_x(pl) if (current_cov> ch4_cov_lim3.a && current_cov< ch4_cov_lim3.b){ - local c_depot = my_tile(c_dep1) + local c_depot = my_tile(ship_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito local depot = depot_x(c_depot.x, c_depot.y, c_depot.z) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index ea54735..7084260 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -7,8 +7,8 @@ class tutorial.chapter_05 extends basic_chapter { - chapter_name = "Industrial Efficiency" - chapter_coord = coord(130,220) + chapter_name = ch5_name + chapter_coord = coord_chapter_5 startcash = 500000 // pl=0 startcash; 0=no reset //Step 2 ===================================================================================== @@ -32,7 +32,6 @@ class tutorial.chapter_05 extends basic_chapter //Limites del deposito y carretera //-------------------------------------------------------------------------------------------- c_dep1_lim = {a = coord(131,232), b = coord(132,232)} - c_dep1 = coord(131,232) //Para el Camion sch_list1 = [coord(132,233), coord(131,209)] @@ -187,7 +186,7 @@ class tutorial.chapter_05 extends basic_chapter text.w1 = c_w1.href("("+c_w1.tostring()+")") text.w2 = c_w2.href("("+c_w2.tostring()+")") - text.dep = c_dep1.href("("+c_dep1.tostring()+")") + text.dep = road_depot_ch5.href("("+road_depot_ch5.tostring()+")") text.veh = translate(veh1_obj) text.good = get_good_data(5, 3) //translate_objects_list.good_coal @@ -676,7 +675,7 @@ class tutorial.chapter_05 extends basic_chapter else if(pot2==1 && pot3==0){ if (tool_id==4108) { local c_list = sch_list1 //Lista de todas las paradas - local c_dep = c_dep1 //Coordeadas del deposito + local c_dep = road_depot_ch5 //Coordeadas del deposito local nr = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, nr, c_list, pos) @@ -964,7 +963,7 @@ class tutorial.chapter_05 extends basic_chapter if (current_cov> ch5_cov_lim1.a && current_cov< ch5_cov_lim1.b){ local wt = wt_road - local c_depot = my_tile(c_dep1) + local c_depot = my_tile(road_depot_ch5) try { comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 7a6343e..06f0c75 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -7,8 +7,8 @@ class tutorial.chapter_06 extends basic_chapter { - chapter_name = "The forgotten Air transport" - chapter_coord = city1_tow + chapter_name = ch6_name + chapter_coord = coord_chapter_6 startcash = 500000 // pl=0 startcash; 0=no reset gl_wt = wt_air @@ -58,13 +58,11 @@ class tutorial.chapter_06 extends basic_chapter plane1_obj = get_veh_ch6(1) plane1_load = 100 plane1_wait = 42282 - sch_list1 = [coord(114,176), coord(168,489)] // Step 3 ===================================================================================== line1_name = "ch6_l1" //c_dep2 = coord(115,185) d2_cnr = null //auto started - sch_list2 = [coord(114,177) coord(121,189), coord(126,187)] veh1_obj = get_veh_ch6(2) veh1_load = 100 veh1_wait = 10571 @@ -74,10 +72,6 @@ class tutorial.chapter_06 extends basic_chapter c_dep3 = coord(167,497) d3_cnr = null //auto started - sch_list3 = [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), - coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493) - ] - veh2_obj = get_veh_ch6(3) //Script @@ -129,7 +123,7 @@ class tutorial.chapter_06 extends basic_chapter case 3: local list_tx = "" - local c_list = sch_list2 + local c_list = city1_halt_airport local siz = c_list.len() for (local j=0;j "+st1_halt.get_name()+" ("+sch_list1[0].tostring()+")" - text.sch2 = " "+st2_halt.get_name()+" ("+sch_list1[1].tostring()+")" + text.sch1 = " "+st1_halt.get_name()+" ("+city1_city7_air[0].tostring()+")" + text.sch2 = " "+st2_halt.get_name()+" ("+city1_city7_air[1].tostring()+")" } text.w1name = translate(obj1_way_name) text.w2name = translate(obj2_way_name) @@ -512,26 +506,26 @@ class tutorial.chapter_06 extends basic_chapter if (tool_id==4108) { if (glsw[0]==0){ - if(pos.x == sch_list1[0].x && pos.y == sch_list1[0].y) { + if(pos.x == city1_city7_air[0].x && pos.y == city1_city7_air[0].y) { glsw[0]=1 return null } - else return translate("Click on the stop") + " ("+sch_list1[0].tostring()+")!." + else return translate("Click on the stop") + " ("+city1_city7_air[0].tostring()+")!." } if (glsw[1]==0 && glsw[0]==1){ - if(pos.x == sch_list1[1].x && pos.y == sch_list1[1].y) { + if(pos.x == city1_city7_air[1].x && pos.y == city1_city7_air[1].y) { glsw[1]=1 return null } - else return translate("Click on the stop") + " ("+sch_list1[1].tostring()+")!." + else return translate("Click on the stop") + " ("+city1_city7_air[1].tostring()+")!." } } break; case 3: if (tool_id==4108) { - local c_list = sch_list2 //Lista de todas las paradas de autobus + local c_list = city1_halt_airport //Lista de todas las paradas de autobus local c_dep = city1_road_depot //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." @@ -553,7 +547,7 @@ class tutorial.chapter_06 extends basic_chapter } if (pot0==1 && pot1==0){ if (tool_id==4108) { - local c_list = sch_list3 //Lista de todas las paradas de autobus + local c_list = city7_halt //Lista de todas las paradas de autobus local c_dep = c_dep3 //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." @@ -578,7 +572,7 @@ class tutorial.chapter_06 extends basic_chapter local selc = 0 local load = plane1_load local time = plane1_wait - local c_list = sch_list1 + local c_list = city1_city7_air local siz = c_list.len() return set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) if(result == null){ @@ -592,7 +586,7 @@ class tutorial.chapter_06 extends basic_chapter local selc = 0 local load = veh1_load local time = veh1_wait - local c_list = sch_list2 + local c_list = city1_halt_airport local siz = c_list.len() local line = true result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) @@ -608,7 +602,7 @@ class tutorial.chapter_06 extends basic_chapter local selc = 0 local load = veh1_load local time = veh1_wait - local c_list = sch_list3 + local c_list = city7_halt local siz = c_list.len() local line = true result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) @@ -663,7 +657,7 @@ class tutorial.chapter_06 extends basic_chapter local selc = 0 local load = plane1_load local time = plane1_wait - local c_list = sch_list1 + local c_list = city1_city7_air local siz = c_list.len() return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -682,7 +676,7 @@ class tutorial.chapter_06 extends basic_chapter //Para arracar varios vehiculos local id_start = ch6_cov_lim2.a local id_end = ch6_cov_lim2.b - local c_list = sch_list2 + local c_list = city1_halt_airport local cir_nr = get_convoy_number_exp(c_list[0], depot, id_start, id_end) cov -= cir_nr @@ -717,7 +711,7 @@ class tutorial.chapter_06 extends basic_chapter //Para arracar varios vehiculos local id_start = ch6_cov_lim3.a local id_end = ch6_cov_lim3.b - local c_list = sch_list3 + local c_list = city7_halt local cir_nr = get_convoy_number_exp(c_list[0], depot, id_start, id_end) cov -= cir_nr @@ -856,7 +850,7 @@ class tutorial.chapter_06 extends basic_chapter return null } local sched = schedule_x(gl_wt, []) - local c_list = sch_list1 + local c_list = city1_city7_air for(local j = 0;jch6_cov_lim2.a && current_covch6_cov_lim3.a && current_cov Date: Sun, 12 Jan 2025 00:57:11 +0100 Subject: [PATCH 031/217] CHG chapter 7 - no specific field at the station for the bus stop --- class/class_basic_chapter.nut | 20 +++++- class/class_basic_coords_p128.nut | 9 ++- class/class_basic_coords_p64.nut | 9 ++- class/class_basic_coords_p64g.nut | 10 ++- class/class_chapter_07.nut | 112 ++++++++++++++++-------------- 5 files changed, 102 insertions(+), 58 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index c60aab1..c9cf22f 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -317,7 +317,7 @@ class basic_chapter return result } - /* + /** * check is tile halt2 in tilelist halt1 * * halt1 = tile_x @@ -338,6 +338,22 @@ class basic_chapter return false } + /** + * check station add tile wt_road (chapter 7) + * + * halt = tile_x + */ + function check_halt_public(halt) { + local tiles = halt.get_halt().get_tile_list() + for ( local i = 0; i < tiles.len(); i++ ) { + local k = tiles[i].find_object(mo_building).get_desc().get_waytype() + if ( k == wt_road ) { + return tiles[i] + } + } + return null + } + function cov_pax(c, wt, good){ local halt = tile_x(c.x, c.y, c.z).get_halt() local cov_nr = 0 @@ -3282,4 +3298,4 @@ function create_schedule_list(coord_list) { return list_tx } -// END OF FILE +// END OF FILE \ No newline at end of file diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 2bfe041..43e796b 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -80,7 +80,12 @@ coord_st_1 <- coord(117,197) * * used chapter 6 * city1_city7_air - * city1_halt_airport - + * city1_halt_airport + * city7_halt + * + * used chapter 7 + * ch7_rail_stations + * */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -117,6 +122,8 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] + /** * define road depot city 1 */ diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 02b4892..71547a0 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -80,9 +80,13 @@ coord_st_1 <- coord(117,197) * * used chapter 6 * city1_city7_air - * city1_halt_airport - + * city1_halt_airport * city7_halt * + * used chapter 7 + * ch7_rail_stations + * + * */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -119,6 +123,8 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] + /** * define depots */ @@ -162,4 +168,3 @@ coord_chapter_4 <- ship_depot // ship_depot coord_chapter_5 <- coord_fac_8 // Coal power station coord_chapter_6 <- city1_halt_airport[0] // airport road stop coord_chapter_7 <- city3_tow // city 3 townhall - diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 31f3646..bc19605 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -80,7 +80,13 @@ coord_st_1 <- coord(117,197) * * used chapter 6 * city1_city7_air - * city1_halt_airport - + * city1_halt_airport + * city7_halt + * + * used chapter 7 + * ch7_rail_stations + * + * */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -118,6 +124,8 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] + /** * define depots * diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 812d188..963f776 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -18,38 +18,31 @@ class tutorial.chapter_07 extends basic_chapter compass_nr = 0 - cty1 = {c = coord(52,194), name = ""} + cty1 = {name = ""} c_cty_lim1 = {a = coord(0,0), b = coord(0,0)} - cty2 = {c = coord(115,268), name = ""} + cty2 = {name = ""} c_cty_lim2 = {a = coord(0,0), b = coord(0,0)} - cty3 = {c = coord(124,326), name = ""} + cty3 = {name = ""} c_cty_lim3 = {a = coord(0,0), b = coord(0,0)} - cty4 = {c = coord(125,378), name = ""} + cty4 = {name = ""} c_cty_lim4 = {a = coord(0,0), b = coord(0,0)} // Step 1 goal_lod1 = set_transportet_goods(3) - st1_c = tile_x(57,198,11) - stop1 = tile_x(56,196,11) // Step 2 goal_lod2 = set_transportet_goods(4) - st2_c = tile_x(120,267,3) - stop2 = tile_x(119,266,3) // Step 3 goal_lod3 = set_transportet_goods(5) - st3_c = tile_x(120,327,5) - stop3 = tile_x(122,330,5) // Step 4 goal_lod4 = set_transportet_goods(6) - st4_c = tile_x(120,381,9) - stop4 = tile_x(122,381,9) + pass_count = 0 transfer_pass = 0 function load_limits(city) //Load all limits for citys @@ -69,20 +62,20 @@ class tutorial.chapter_07 extends basic_chapter function start_chapter() //Inicia solo una vez por capitulo { - cty1.name = get_city_name(cty1.c) - local cty_buil1 = my_tile(cty1.c).find_object(mo_building).get_city() + cty1.name = get_city_name(city3_tow) + local cty_buil1 = my_tile(city3_tow).find_object(mo_building).get_city() c_cty_lim1 = load_limits(cty_buil1) - cty2.name = get_city_name(cty2.c) - local cty_buil2 = my_tile(cty2.c).find_object(mo_building).get_city() + cty2.name = get_city_name(city4_tow) + local cty_buil2 = my_tile(city4_tow).find_object(mo_building).get_city() c_cty_lim2 = load_limits(cty_buil2) - cty3.name = get_city_name(cty3.c) - local cty_buil3 = my_tile(cty3.c).find_object(mo_building).get_city() + cty3.name = get_city_name(city5_tow) + local cty_buil3 = my_tile(city5_tow).find_object(mo_building).get_city() c_cty_lim3 = load_limits(cty_buil3) - cty4.name = get_city_name(cty4.c) - local cty_buil4 = my_tile(cty4.c).find_object(mo_building).get_city() + cty4.name = get_city_name(city6_tow) + local cty_buil4 = my_tile(city6_tow).find_object(mo_building).get_city() c_cty_lim4 = load_limits(cty_buil4) compass_nr = my_compass() @@ -108,38 +101,34 @@ class tutorial.chapter_07 extends basic_chapter switch (this.step) { case 1: - local t = st1_c + local t = ch7_rail_stations[0] local halt = t.get_halt() text.name = t.href(""+halt.get_name()+" ("+coord3d_to_string(t)+")")+"" - text.city = cty1.c.href(""+cty1.name +" ("+cty1.c.tostring()+")")+"" - text.stop = stop1.href("("+coord3d_to_string(stop1)+")")+"" + text.city = city3_tow.href(""+cty1.name +" ("+city3_tow.tostring()+")")+"" text.load = goal_lod1 break case 2: - local t = st2_c + local t = ch7_rail_stations[1] local halt = t.get_halt() text.name = t.href(""+halt.get_name()+" ("+coord3d_to_string(t)+")")+"" - text.city = cty2.c.href(""+cty2.name +" ("+cty2.c.tostring()+")")+"" - text.stop = stop2.href("("+coord3d_to_string(stop2)+")")+"" + text.city = city4_tow.href(""+cty2.name +" ("+city4_tow.tostring()+")")+"" text.load = goal_lod2 break case 3: - local t = st3_c + local t = ch7_rail_stations[2] local halt = t.get_halt() text.name = t.href(""+halt.get_name()+" ("+coord3d_to_string(t)+")")+"" - text.city = cty3.c.href(""+cty3.name +" ("+cty3.c.tostring()+")")+"" - text.stop = stop3.href("("+coord3d_to_string(stop3)+")")+"" + text.city = city5_tow.href(""+cty3.name +" ("+city5_tow.tostring()+")")+"" text.load = goal_lod3 break case 4: - local t = st4_c + local t = ch7_rail_stations[3] local halt = t.get_halt() text.name = t.href(""+halt.get_name()+" ("+coord3d_to_string(t)+")")+"" - text.city = cty4.c.href(""+cty4.name +" ("+cty4.c.tostring()+")")+"" - text.stop = stop4.href("("+coord3d_to_string(stop4)+")")+"" + text.city = city6_tow.href(""+cty4.name +" ("+city6_tow.tostring()+")")+"" text.load = goal_lod4 break @@ -161,14 +150,18 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - if ( check_halt_merge(st1_c, stop1) ) { - load = cov_pax(stop1, gl_wt, gl_good) - transfer_pass - } else { - transfer_pass = cov_pax(stop1, gl_wt, gl_good) + local tile = check_halt_public(ch7_rail_stations[0]) + if ( tile != null ) { + if ( pass_count == 0 ) { + transfer_pass = cov_pax(ch7_rail_stations[0], gl_wt, gl_good) + pass_count++ + } + load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } if(load>goal_lod1){ load = 0 transfer_pass = 0 + pass_count = 0 this.next_step() } //return 5 @@ -178,14 +171,19 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - if ( check_halt_merge(st2_c, stop2) ) { - load = cov_pax(stop2, gl_wt, gl_good) - transfer_pass - } else { - transfer_pass = cov_pax(stop2, gl_wt, gl_good) + local c = 0 + local tile = check_halt_public(ch7_rail_stations[1]) + if ( tile != null ) { + if ( c == 0 ) { + transfer_pass = cov_pax(ch7_rail_stations[1], gl_wt, gl_good) + c++ + } + load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } if(load>goal_lod2){ load = 0 transfer_pass = 0 + pass_count = 0 this.next_step() } //return 25 @@ -195,14 +193,19 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - if ( check_halt_merge(st3_c, stop3) ) { - load = cov_pax(stop3, gl_wt, gl_good) - transfer_pass - } else { - transfer_pass = cov_pax(stop3, gl_wt, gl_good) + local c = 0 + local tile = check_halt_public(ch7_rail_stations[2]) + if ( tile != null ) { + if ( c == 0 ) { + transfer_pass = cov_pax(ch7_rail_stations[2], gl_wt, gl_good) + c++ + } + load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } if(load>goal_lod3){ load = 0 transfer_pass = 0 + pass_count = 0 this.next_step() } //return 50 @@ -212,14 +215,19 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - if ( check_halt_merge(st4_c, stop4) ) { - load = cov_pax(stop4, gl_wt, gl_good) - transfer_pass - } else { - transfer_pass = cov_pax(stop4, gl_wt, gl_good) + local c = 0 + local tile = check_halt_public(ch7_rail_stations[3]) + if ( tile != null ) { + if ( c == 0 ) { + transfer_pass = cov_pax(ch7_rail_stations[3], gl_wt, gl_good) + c++ + } + load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } if(load>goal_lod4){ load = 0 transfer_pass = 0 + pass_count = 0 this.next_step() } //return 75 @@ -247,7 +255,7 @@ class tutorial.chapter_07 extends basic_chapter return null } else - return translate("You can only use this tool in the city")+ " " + cty1.name.tostring()+" ("+cty1.c.tostring()+")." + return translate("You can only use this tool in the city")+ " " + cty1.name.tostring()+" ("+city3_tow.tostring()+")." break; case 2: @@ -258,7 +266,7 @@ class tutorial.chapter_07 extends basic_chapter return null } else - return translate("You can only use this tool in the city")+cty2.name.tostring()+" ("+cty2.c.tostring()+")." + return translate("You can only use this tool in the city")+cty2.name.tostring()+" ("+city4_tow.tostring()+")." break; case 3: @@ -269,7 +277,7 @@ class tutorial.chapter_07 extends basic_chapter return null } else - return translate("You can only use this tool in the city")+cty3.name.tostring()+" ("+cty3.c.tostring()+")." + return translate("You can only use this tool in the city")+cty3.name.tostring()+" ("+city5_tow.tostring()+")." break; case 4: @@ -280,7 +288,7 @@ class tutorial.chapter_07 extends basic_chapter return null } else - return translate("You can only use this tool in the city")+cty4.name.tostring()+" ("+cty4.c.tostring()+")." + return translate("You can only use this tool in the city")+cty4.name.tostring()+" ("+city6_tow.tostring()+")." break; case 5: From e68ad516dff31ebd8c31af263f0c08543bdc0705 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 12 Jan 2025 02:14:21 +0100 Subject: [PATCH 032/217] CHG update translate files --- de/chapter_02/06_1-2.txt | 2 +- de/chapter_07/goal_step_01x04.txt | 2 +- en/chapter_07/goal_step_01x04.txt | 2 +- es/chapter_07/goal_step_01x04.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/de/chapter_02/06_1-2.txt b/de/chapter_02/06_1-2.txt index 12e7a33..9ab61ad 100644 --- a/de/chapter_02/06_1-2.txt +++ b/de/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.
[3] Haltestellen auswählen:
{list}
[4] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:

[1] Wählen Sie die Haltestelle {st1} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.
[2] Wählen Sie die Haltestelle {st2}
[3] Wählen Sie die Haltestelle {st3}
[4] Wählen Sie die Haltestelle {st4}
[5] Wählen Sie die Haltestelle {st5}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_07/goal_step_01x04.txt b/de/chapter_07/goal_step_01x04.txt index b4579d7..6a43ece 100644 --- a/de/chapter_07/goal_step_01x04.txt +++ b/de/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass auf Feld {stop} ein Bushalt ist, der mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

TIPP: Mit dem schnellen Vorlauf kann die Wartezeit verkürzt werden.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file +

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass ein Bushalt mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

TIPP: Mit dem schnellen Vorlauf kann die Wartezeit verkürzt werden.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/en/chapter_07/goal_step_01x04.txt b/en/chapter_07/goal_step_01x04.txt index 707a787..f796754 100644 --- a/en/chapter_07/goal_step_01x04.txt +++ b/en/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

The city {city} must get a bus network that allows passengers to get to the {name} station.

Build as many bus stops in the city as you need to cover the city. Make sure that there is a bus stop on field {stop} that is connected to the {name} station so that passengers are counted.

To go to the next step, transport more than {load} passengers in a month.

HINT: Using the fast forward too can shorten the waiting time to complete this step.

Transported this month: {get_load}/{load}

\ No newline at end of file +

The city {city} must get a bus network that allows passengers to get to the {name} station.

Build as many bus stops in the city as you need to cover the city. Make sure there is a bus stop connected to {name} station so that passengers can be counted.

To go to the next step, transport more than {load} passengers in a month.

HINT: Using the fast forward too can shorten the waiting time to complete this step.

Transported this month: {get_load}/{load}

\ No newline at end of file diff --git a/es/chapter_07/goal_step_01x04.txt b/es/chapter_07/goal_step_01x04.txt index 7689748..520321f 100644 --- a/es/chapter_07/goal_step_01x04.txt +++ b/es/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

La ciudad de {city} necesita mantener una red de autobuses que permita a los pasajeros llegar a la estación de tren de {name}.

Construye tantas paradas de autobús en la ciudad como necesites para cubrir la ciudad. Asegúrese de que el campo {stop} tenga una parada de autobús conectada a la estación de tren {name} para que se cuenten los pasajeros.

Para pasar al siguiente paso, transporte más de {load} pasajeros en un mes.

Este mes se promocionaron los siguientes: {get_load}/{load}

\ No newline at end of file +

La ciudad de {city} necesita mantener una red de autobuses que permita a los pasajeros llegar a la estación de tren de {name}.

Construye tantas paradas de autobús en la ciudad como necesites para cubrir la ciudad. Asegúrese de que haya una parada de autobús conectada a la estación {name} para que se puedan contar los pasajeros.

Para pasar al siguiente paso, transporte más de {load} pasajeros en un mes.

Este mes se promocionaron los siguientes: {get_load}/{load}

\ No newline at end of file From 78a402ef6e5a9ce8922574676c4c2087e79c8b58 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 12 Jan 2025 10:40:26 +0100 Subject: [PATCH 033/217] CHG change code for rail line forrest saw mill --- class/class_basic_chapter.nut | 83 +++++++++- class/class_basic_coords_p128.nut | 10 ++ class/class_basic_coords_p64.nut | 10 ++ class/class_basic_coords_p64g.nut | 19 ++- class/class_basic_data.nut | 2 +- class/class_chapter_03.nut | 252 +++++++++++++----------------- scenario.nut | 6 +- 7 files changed, 231 insertions(+), 151 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index c9cf22f..70821f0 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1335,7 +1335,31 @@ class basic_chapter } return result } + //Comprueba conexion entre vias + /** + * tile_a - tile_x + * tile_b - tile_x + */ + function get_fullway_dir(tile_a, tile_b) { + local result = 0 + + if ( tile_a.y == tile_b.y ) { + if ( tile_a.x < tile_b.x ) { + result = 5 + } else if ( tile_a.x > tile_b.x ) { + result = 6 + } + } else if ( tile_a.x == tile_b.x ) { + if ( tile_a.y tile_b.y ) { + result = 2 + } + } + + return result + } //dir 0 = auto //dir 2 = coorda.y-- //dir 3 = coorda.y++ @@ -3298,4 +3322,61 @@ function create_schedule_list(coord_list) { return list_tx } -// END OF FILE \ No newline at end of file +/** + * calculate station lenght + * + * veh1 = loco + * veh2 = wg + * veh2c = wg count + * + */ +function calc_station_lenght(veh1, veh2, veh2c) { + local list = vehicle_desc_x.get_available_vehicles(wt_rail) + local cnv_lenght = 0 + foreach(veh in list) { + if ( veh.get_name() == veh1 ) { + cnv_lenght += veh.get_length() + } + if ( veh.get_name() == veh2 ) { + cnv_lenght += (veh.get_length() * veh2c) + } + } + local st_count = 0 + do { + cnv_lenght -= 16 + st_count += 1 + } while(cnv_lenght > 0) + return st_count +} + +/** + * create array stations tiles + * + * tile_a = tile_x + * tile_b = tile_x + * count + * + */ +function station_tiles(tile_a, tile_b, count) { + local st_tiles = [] + st_tiles.append(tile_x(tile_a.x, tile_a.y, tile_a.z)) + + for ( local i = 1; i < count; i++ ) { + if ( tile_a.x > tile_b.x ) { + st_tiles.append(tile_x(tile_a.x-i, tile_a.y, tile_a.z)) + } + if ( tile_a.x < tile_b.x ) { + st_tiles.append(tile_x(tile_a.x+i, tile_a.y, tile_a.z)) + } + if ( tile_a.y > tile_b.y ) { + st_tiles.append(tile_x(tile_a.x, tile_a.y-i, tile_a.z)) + } + if ( tile_a.y < tile_b.y ) { + st_tiles.append(tile_x(tile_a.x, tile_a.y+i, tile_a.z)) + } + //gui.add_message("st_tiles "+st_tiles[i]+" - "+ i) + } + + return st_tiles +} +// END OF FILE diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 43e796b..0a72f12 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -134,17 +134,27 @@ road_depot_ch5 <- coord(131,232) /** * define bridges * + * bridge1_coords = road bridge city 1 + * bridge2_coors = rail bridge fac_1 -> fac_2 + * bridge3_coors = rail bridge city 1 -> city 3 * */ bridge1_coords <- {a = coord3d(126,192,-1), b = coord3d(126,194,-1), dir = 3} +bridge2_coords <- {a = coord3d(106,158,-1), b = coord3d(100,158,-1)} +bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} /** * define ways * + * way1_coords = road city 1 -> city 2 + * + * way2_fac1_fac2 = rail factory 1 -> factory 2 * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} +// start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end +way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,1), coord3d(99,158,1), coord3d(96,155,1), coord3d(96,151,1)] /** * chapter 5 diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 71547a0..d1c76d7 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -135,17 +135,27 @@ road_depot_ch5 <- coord(131,232) /** * define bridges * + * bridge1_coords = road bridge city 1 + * bridge2_coors = rail bridge fac_1 -> fac_2 + * bridge3_coors = rail bridge city 1 -> city 3 * */ bridge1_coords <- {a = coord3d(126,193,0), b = coord3d(126,195,0), dir = 3} +bridge2_coords <- {a = coord3d(106,158,-1), b = coord3d(103,158,-1)} +bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} /** * define ways * + * way1_coords = road city 1 -> city 2 + * + * way2_fac1_fac2 = rail factory 1 -> factory 2 * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} +// start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end +way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index bc19605..f4de308 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -131,25 +131,40 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t * * road depot must be located one field next to a road */ -city1_road_depot <- coord(124,188) //115,185 +city1_road_depot <- coord(124,188) //115,185 ship_depot <- coord(150, 190) road_depot_ch5 <- coord(131,232) +/** + * rail_depot{depot_tile, way_tile} + */ +ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} + /** * define bridges * + * bridge1_coords = road bridge city 1 + * bridge2_coors = rail bridge fac_1 -> fac_2 + * bridge3_coors = rail bridge city 1 -> city 3 * */ bridge1_coords <- {a = coord3d(126,193,-1), b = coord3d(126,195,-1), dir = 3} +bridge2_coords <- {a = coord3d(106,158,-1), b = coord3d(103,158,-1)} +bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} /** * define ways * + * way1_coords = road city 1 -> city 2 + * + * way2_fac1_fac2 = rail factory 1 -> factory 2 + * * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} - +// start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end +way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] /** * chapter 5 diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index adf9699..a466d20 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -258,7 +258,7 @@ function get_obj_ch2(id) { * id 1 = step 5 loco * id 2 = step 7 loco * id 3 = step 11 loco - * id 4 = step 4 wag + * id 4 = step 5 wag * id 5 = step 7 wag * id 6 = step 11 wag * diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 4698a82..865ce59 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -26,70 +26,29 @@ class tutorial.chapter_03 extends basic_chapter ch3_cov_lim3 = {a = 0, b = 0} - cy1 = {c = coord(111,184), name = ""} - cy2 = {c = coord(52,194), name = ""} - cy3 = {c = coord(115,268), name = ""} - cy4 = {c = coord(124,326), name = ""} - cy5 = {c = coord(125,378), name = ""} + cy1 = {name = ""} + cy2 = {name = ""} + cy3 = {name = ""} + cy4 = {name = ""} + cy5 = {name = ""} //Step 1 ===================================================================================== - //Productor - //gui.add_message("factory_data rawin 1: "+get_factory_data("1")) - //fac_1 = {c = coord(123,160), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.wood} - //fac_1 = get_factory_data("1") - //f1_lim = {a = coord(123,160), b = coord(125,162)} - - //Fabrica - //fac_2 = {c = coord(93,153), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.plan} - //fac_2 = get_factory_data("2") - //f2_lim = {a = coord(93,153), b = coord(94,154)} //Step 2 ===================================================================================== //Primer tramo de rieles //-------------------------------------------------------------------------------------------- - st1_way_lim = {a = coord(120,163), b = coord(125,163)} //Limites de la via para la estacion + //st1_way_lim = {a = coord(120,163), b = coord(125,163)} //Limites de la via para la estacion bord1_lim = {a = coord(106,154), b = coord(120,167)} //Marca area con "X" - label1_lim = coord3d(120,163,0) //Indica el final de un tramo - c_way1 = {a = coord3d(125,163,0), b = coord3d(107,158,0), dir = 6} //Inicio, Fin de la via y direccion(fullway) - - //Estaciones del Productor - st1_list = [coord(125,163), coord(124,163), coord(123,163)] - //-------------------------------------------------------------------------------------------- - - //Para el puente - //------------------------------------------------------------------------------------------ - c_bway_lim1 = {b = coord(107,158), a = coord(102,158)} - c_brge1 = {b = coord(106,158), a = coord(103,158)} - brge1_z = -1 - //------------------------------------------------------------------------------------------- - - //Segundo tramo de rieles - //-------------------------------------------------------------------------------------------- - st2_way_lim = {a = coord(96,151), b = coord(96,155)} //Limites de la via para la estacion bord2_lim = {a = coord(95,155), b = coord(103,160)} //Marca area con "X" - label2_lim = coord3d(96,155,1) //Indica el final de un tramo - c_way3 = {a = coord3d(102,158,0), b = coord3d(96,151,1), dir = 6} //Inicio, Fin de la via y direccion(fullway) - - //Estaciones de la Fabrica - st2_list = [coord(96,151), coord(96,152), coord(96,153)] - //-------------------------------------------------------------------------------------------- - - //Step 4 ===================================================================================== - //Limites del deposito y rieles - //-------------------------------------------------------------------------------------------- - c_dep1 = coord(121,164) - c_dep1_lim = {b = coord(121,164), a = coord(121,163)} - //-------------------------------------------------------------------------------------------- //Step 5 ===================================================================================== loc1_name_obj = get_veh_ch3(1) - loc1_tile = 3 + loc1_tile = calc_station_lenght(get_veh_ch3(1), get_veh_ch3(4), set_train_lenght(1)) loc1_load = 100 loc1_wait = 0 f1_reached = set_transportet_goods(1) //Step 6 ===================================================================================== - //c_lock = [coord(60,10), coord(77,25)] //Futuros transformadores //Primer tramo de rieles //-------------------------------------------------------------------------------------------- @@ -257,9 +216,9 @@ class tutorial.chapter_03 extends basic_chapter function start_chapter(){ //Inicia solo una vez por capitulo if ( pak_name == "pak128" ) { - c_brge1.a = coord(100,158) - c_way1.b = coord3d(107,158,1) - c_way3.a = coord3d(99,158,1) + //c_brge1.a = coord(100,158) + //c_way1.b = coord3d(107,158,1) + //c_way3.a = coord3d(99,158,1) //bord3_lim.b = coord(96,172) c_tway_lim2.a = coord(95,172) c_way4.b = coord3d(95,172,3) @@ -313,12 +272,6 @@ class tutorial.chapter_03 extends basic_chapter line2_name = get_good_data(2, 3) + " " + fab_list[1].name + " - " + fab_list[2].name line3_name = "Passanger Train" - local pl = 0 - if(this.step == 11){ - local c_dep = this.my_tile(c_dep3) - local c_list = sch_list - start_sch_tmpsw(pl,c_dep, c_list) - } } function set_goal_text(text){ @@ -348,13 +301,13 @@ class tutorial.chapter_03 extends basic_chapter } break case 2: - local c1 = c_way1.a.href("("+c_way1.a.tostring()+")") - local c2 = c_way1.b.href("("+c_way1.b.tostring()+")") - local c3 = c_way3.a.href("("+c_way3.a.tostring()+")") - local c4 = c_way3.b.href("("+c_way3.b.tostring()+")") + local c1 = way2_fac1_fac2[0].href("("+way2_fac1_fac2[0].tostring()+")") + local c2 = way2_fac1_fac2[2].href("("+way2_fac1_fac2[2].tostring()+")") + local c3 = way2_fac1_fac2[3].href("("+way2_fac1_fac2[3].tostring()+")") + local c4 = way2_fac1_fac2[5].href("("+way2_fac1_fac2[5].tostring()+")") if (pot0==0){ - local c = label1_lim + local c = way2_fac1_fac2[1] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) if(!way) c2 = c_label @@ -367,7 +320,7 @@ class tutorial.chapter_03 extends basic_chapter text.tx = ttext("[2/3]") } else if (pot2==0){ - local c = label2_lim + local c = way2_fac1_fac2[4] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) if(!way) c4 = c_label @@ -375,7 +328,7 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/02_3-3.txt") text.tx = ttext("[3/3]") } - text.br = c_brge1.a.href("("+c_brge1.a.tostring()+")") + text.br = bridge2_coords.b.href("("+bridge2_coords.b.tostring()+")") text.w1 = c1 text.w2 = c2 text.w3 = c3 @@ -411,9 +364,9 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/04_3-3.txt") text.tx=ttext("[3/3]") } - text.w1 = c_dep1_lim.a.href("("+c_dep1_lim.a.tostring()+")") - text.w2 = c_dep1_lim.b.href("("+c_dep1_lim.b.tostring()+")") - text.dep = c_dep1.href("("+c_dep1.tostring()+")") + text.w1 = ch3_rail_depot1.b.href("("+ch3_rail_depot1.b.tostring()+")") + text.w2 = ch3_rail_depot1.a.href("("+ch3_rail_depot1.a.tostring()+")") + text.dep = ch3_rail_depot1.b.href("("+ch3_rail_depot1.b.tostring()+")") break case 5: text.reached = reached @@ -665,11 +618,11 @@ class tutorial.chapter_03 extends basic_chapter stext.cy4=cy4.name stext.cy5=cy5.name - stext.co1=cy1.c.href("("+cy1.c.tostring()+")") - stext.co2=cy2.c.href("("+cy2.c.tostring()+")") - stext.co3=cy3.c.href("("+cy3.c.tostring()+")") - stext.co4=cy4.c.href("("+cy4.c.tostring()+")") - stext.co5=cy5.c.href("("+cy5.c.tostring()+")") + stext.co1=city1_tow.href("("+city1_tow.tostring()+")") + stext.co2=city3_tow.href("("+city3_tow.tostring()+")") + stext.co3=city4_tow.href("("+city4_tow.tostring()+")") + stext.co4=city5_tow.href("("+city5_tow.tostring()+")") + stext.co5=city6_tow.href("("+city6_tow.tostring()+")") text.step_hinfo = stext } @@ -677,7 +630,7 @@ class tutorial.chapter_03 extends basic_chapter text.f2 = fac_2.c.href(fac_2.name+" ("+fac_2.c.tostring()+")") text.f3 = fac_3.c.href(fac_3.name+" ("+fac_3.c.tostring()+")") - text.cdep=c_dep1.href("("+c_dep1.tostring()+")") + text.cdep=ch3_rail_depot1.b.href("("+ch3_rail_depot1.b.tostring()+")") text.way1=c_dep2.href("("+c_dep2.tostring()+")") text.cy1=cy1.name @@ -686,11 +639,11 @@ class tutorial.chapter_03 extends basic_chapter text.cy4=cy4.name text.cy5=cy5.name - text.co1=cy1.c.href("("+cy1.c.tostring()+")") - text.co2=cy2.c.href("("+cy2.c.tostring()+")") - text.co3=cy3.c.href("("+cy3.c.tostring()+")") - text.co4=cy4.c.href("("+cy4.c.tostring()+")") - text.co5=cy5.c.href("("+cy5.c.tostring()+")") + text.co1=city1_tow.href("("+city1_tow.tostring()+")") + text.co2=city3_tow.href("("+city3_tow.tostring()+")") + text.co3=city4_tow.href("("+city4_tow.tostring()+")") + text.co4=city5_tow.href("("+city5_tow.tostring()+")") + text.co5=city6_tow.href("("+city6_tow.tostring()+")") text.cbor = "" if (r_way.r) text.cbor = "" + translate("Ok") + "" @@ -770,10 +723,10 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_steps = 3 //Primer tramo de rieles if (pot0==0){ - local limi = label1_lim - local tile1 = my_tile(st1_list[0]) + local limi = my_tile(way2_fac1_fac2[1]) + local tile1 = my_tile(way2_fac1_fac2[0]) if (!tile1.find_object(mo_way)){ - label_x.create(st1_list[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac1_fac2[0], player_x(pl), translate("Build Rails form here")) } else tile1.remove_object(player_x(1), mo_label) @@ -802,9 +755,10 @@ class tutorial.chapter_03 extends basic_chapter } local opt = 0 - local coora = coord3d(c_way1.a.x, c_way1.a.y, c_way1.a.z) - local coorb = coord3d(c_way1.b.x, c_way1.b.y, c_way1.b.z) - local dir = c_way1.dir + local coora = tile_x(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y, way2_fac1_fac2[0].z) + local coorb = tile_x(way2_fac1_fac2[2].x, way2_fac1_fac2[2].y, way2_fac1_fac2[2].z) + //gui.add_message("get_fullway_dir "+get_fullway_dir(way2_fac1_fac2[0], way2_fac1_fac2[1])) + local dir = get_fullway_dir(way2_fac1_fac2[0], way2_fac1_fac2[1]) local obj = false local wt = wt_rail @@ -812,7 +766,7 @@ class tutorial.chapter_03 extends basic_chapter r_way = get_fullway(coora, coorb, dir, obj) if (r_way.r) { tile_x(coora.x, coora.y, coora.z).find_object(mo_way).unmark() - tile_x(wayend.x, wayend.y, coorb.z).remove_object(player_x(1), mo_label) + tile_x(coorb.x, coorb.y, coorb.z).remove_object(player_x(1), mo_label) tile1.remove_object(player_x(1), mo_label) //elimina el cuadro label @@ -828,15 +782,17 @@ class tutorial.chapter_03 extends basic_chapter //Para el puente else if (pot0==1&&pot1==0) { chapter_sub_step = 1 // sub step finish - local tile = my_tile(c_brge1.b) + local tile = my_tile(bridge2_coords.a) if ((!tile.find_object(mo_bridge))){ - label_x.create(c_brge1.b, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(tile, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(my_tile(bridge2_coords.b), player_x(pl), "") r_way.c = coord3d(tile.x, tile.y, tile.z) } else { tile.remove_object(player_x(1), mo_label) + my_tile(bridge2_coords.b).remove_object(player_x(1), mo_label) - if (my_tile(c_brge1.b).find_object(mo_bridge)){ + if (my_tile(bridge2_coords.a).find_object(mo_bridge)){ pot1=1 } } @@ -844,8 +800,8 @@ class tutorial.chapter_03 extends basic_chapter //Segundo tramo de rieles else if (pot1==1 && pot2==0){ chapter_sub_step = 2 // sub step finish - local limi = label2_lim - local tile1 = my_tile(limi) + local limi = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) + local tile1 = limi if (r_way.c.y > limi.y){ label_x.create(limi, player_x(pl), translate("Build Rails form here")) //Creea un cuadro label @@ -862,13 +818,13 @@ class tutorial.chapter_03 extends basic_chapter local text = "X" label_bord(bord2_lim.a, bord2_lim.b, opt, del, text) if (!tile1.find_object(mo_label)) - label_x.create(st2_list[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac1_fac2[5], player_x(pl), translate("Build Rails form here")) } local opt = 0 - local coora = coord3d(c_way3.a.x, c_way3.a.y, c_way3.a.z) - local coorb = coord3d(c_way3.b.x, c_way3.b.y, c_way3.b.z) - local dir = c_way3.dir + local coora = my_tile(way2_fac1_fac2[3]) + local coorb = my_tile(way2_fac1_fac2[5]) + local dir = get_fullway_dir(way2_fac1_fac2[0], way2_fac1_fac2[1])//c_way3.dir local obj = false wayend = coorb @@ -899,7 +855,7 @@ class tutorial.chapter_03 extends basic_chapter if (pot1==0){ //Estaciones de la Fabrica local pl_nr = 1 - local c_list = st2_list + local c_list = station_tiles(way2_fac1_fac2[5], way2_fac1_fac2[4], loc1_tile) local st_nr = c_list.len() //Numero de estaciones local good = good_alias.goods local result = is_stations_building(pl_nr, c_list, st_nr, good) @@ -914,7 +870,7 @@ class tutorial.chapter_03 extends basic_chapter //Estaciones de la Fabrica local pl_nr = 1 - local c_list = st1_list + local c_list = station_tiles(way2_fac1_fac2[0], way2_fac1_fac2[1], loc1_tile) local st_nr = c_list.len() //Numero de estaciones local good = good_alias.goods local result = is_stations_building(pl_nr, c_list, st_nr, good) @@ -927,9 +883,9 @@ class tutorial.chapter_03 extends basic_chapter break case 4: chapter_sub_steps = 3 - local tile = my_tile(c_dep1) + local tile = my_tile(ch3_rail_depot1.b) if(pot0==0){ - local c_list = [my_tile(c_dep1_lim.a), my_tile(c_dep1_lim.b)] + local c_list = [my_tile(ch3_rail_depot1.b), my_tile(ch3_rail_depot1.a)] local siz = c_list.len() local next_mark = true @@ -940,7 +896,7 @@ class tutorial.chapter_03 extends basic_chapter return 0 } if(!tile.find_object(mo_way)){ - label_x.create(c_dep1, player_x(pl), translate("Build Rails form here")) + label_x.create(ch3_rail_depot1.b, player_x(pl), translate("Build Rails form here")) } else{ local stop_mark = true @@ -1541,13 +1497,13 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles if (pot0==0){ - local lab_t = my_tile(label1_lim) + local lab_t = my_tile(way2_fac1_fac2[1]) local lab = lab_t.find_object(mo_label) if(pos.x < lab_t.x && lab && lab.get_owner().nr == 0){ if(tool_id==tool_build_way) return "" } - if (pos.x>=st1_way_lim.a.x && pos.y>=st1_way_lim.a.y && pos.x<=st1_way_lim.b.x && pos.y<=st1_way_lim.b.y){ + if (pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ if(tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover){ local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach(desc in way_desc){ @@ -1568,20 +1524,20 @@ class tutorial.chapter_03 extends basic_chapter } //Construye un puente if (pot0==1 && pot1==0){ - if (pos.x>=c_bway_lim1.a.x && pos.y>=c_bway_lim1.a.y && pos.x<=c_bway_lim1.b.x && pos.y<=c_bway_lim1.b.y){ + if (pos.x>=way2_fac1_fac2[3].x && pos.y>=way2_fac1_fac2[3].y && pos.x<=way2_fac1_fac2[2].x && pos.y<=way2_fac1_fac2[2].y){ if(tool_id==tool_build_way) return null if(tool_id==tool_build_bridge){ - if(pos.z==brge1_z) + if(pos.z==bridge2_coords.a.z) return null else - return translate("You must build the bridge here")+" ("+c_brge1.b.tostring()+")." + return translate("You must build the bridge here")+" ("+bridge2_coords[1].tostring()+")." } } } //Segundo tramo de rieles if (pot1==1&&pot2==0){ - if (pos.x>=st2_way_lim.a.x && pos.y>=st2_way_lim.a.y && pos.x<=st2_way_lim.b.x && pos.y<=st2_way_lim.b.y){ + if (pos.x>=way2_fac1_fac2[5].x && pos.y>=way2_fac1_fac2[5].y && pos.x<=way2_fac1_fac2[4].x && pos.y<=way2_fac1_fac2[4].y){ if(tool_id==tool_build_bridge) return result return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) @@ -1601,7 +1557,7 @@ class tutorial.chapter_03 extends basic_chapter if (pot0==0){ //Estaciones de la Fabrica local good = good_alias.goods - local c_list = st2_list + local c_list = station_tiles(way2_fac1_fac2[5], way2_fac1_fac2[4], loc1_tile) local siz = c_list.len() return get_stations(pos, tool_id, result, good, c_list, siz) } @@ -1609,39 +1565,39 @@ class tutorial.chapter_03 extends basic_chapter else if (pot0==1 && pot1==0){ //Estaciones del Productor local good = good_alias.goods - local c_list = st1_list + local c_list = station_tiles(way2_fac1_fac2[0], way2_fac1_fac2[1], loc1_tile) local siz = c_list.len() return get_stations(pos, tool_id, result, good, c_list, siz) } break case 4: if(pot0==0){ - if (pos.x>=c_dep1_lim.a.x && pos.y>=c_dep1_lim.a.y && pos.x<=c_dep1_lim.b.x && pos.y<=c_dep1_lim.b.y){ + if (pos.x>=ch3_rail_depot1.a.x && pos.y>=ch3_rail_depot1.a.y && pos.x<=ch3_rail_depot1.b.x && pos.y<=ch3_rail_depot1.b.y){ if (tool_id==tool_build_way) return null } - else return translate("You must build track in")+" ("+c_dep1.tostring()+")." + else return translate("You must build track in")+" ("+ch3_rail_depot1.b.tostring()+")." } else if(pot0==1 && pot1==0){ - if ((pos.x==c_dep1.x)&&(pos.y==c_dep1.y)){ + if ((pos.x==ch3_rail_depot1.b.x)&&(pos.y==ch3_rail_depot1.b.y)){ if (tool_id==tool_build_depot) return null } - else return translate("You must build the train depot in")+" ("+c_dep1.tostring()+")." + else return translate("You must build the train depot in")+" ("+ch3_rail_depot1.b.tostring()+")." } else if (pot1==1 && pot2==0){ - if ((pos.x==c_dep1.x)&&(pos.y==c_dep1.y)){ + if ((pos.x==ch3_rail_depot1.a.x)&&(pos.y==ch3_rail_depot1.a.y)){ if (tool_id==4096){ pot2=1 return null } - else return translate("You must use the inspection tool")+" ("+c_dep1.tostring()+")." + else return translate("You must use the inspection tool")+" ("+ch3_rail_depot1.a.tostring()+")." } } break case 5: //Enrutar vehiculos (estacion nr1) - if (building && pos.x>=st1_way_lim.a.x && pos.y>=st1_way_lim.a.y && pos.x<=st1_way_lim.b.x && pos.y<=st1_way_lim.b.y){ + if (building && pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ if (tool_id==4108){ if (stop_flag[0]==0){ stop_flag[0] = 1 @@ -1653,7 +1609,7 @@ class tutorial.chapter_03 extends basic_chapter } else if (tool_id==4108){ if (stop_flag[0]==0) - return format(translate("Select station No.%d"),1)+" ("+coord(st1_list[0].x, st1_list[0].y).tostring()+".)" + return format(translate("Select station No.%d"),1)+" ("+coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y).tostring()+".)" } //Enrutar vehiculos (estacion nr2) if (building && pos.x>=st2_way_lim.a.x && pos.y>=st2_way_lim.a.y && pos.x<=st2_way_lim.b.x && pos.y<=st2_way_lim.b.y){ @@ -1665,7 +1621,7 @@ class tutorial.chapter_03 extends basic_chapter if (stop_flag[0]==0) return translate("Select the other station first")+" ("+coord(st1_list[0].x, st1_list[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep1.tostring()+".)" + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } else if (tool_id==4108){ @@ -1676,7 +1632,7 @@ class tutorial.chapter_03 extends basic_chapter return format(translate("Select station No.%d"),2)+" ("+coord(st2_list[0].x, st2_list[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep1.tostring()+".)" + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } break @@ -1799,7 +1755,7 @@ class tutorial.chapter_03 extends basic_chapter if (stop_flag[0]==0) return translate("Select the other station first")+" ("+coord(st3_list[0].x, st3_list[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep1.tostring()+".)" + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } else if (tool_id==4108){ @@ -1810,11 +1766,11 @@ class tutorial.chapter_03 extends basic_chapter return format(translate("Select station No.%d"),2)+" ("+coord(st4_list[0].x, st4_list[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep1.tostring()+".)" + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } if (pot2==1 && pot3==0){ - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep1.tostring()+".)" + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } break @@ -2118,7 +2074,7 @@ class tutorial.chapter_03 extends basic_chapter local selc = 0 local load = loc1_load local time = loc1_wait - local c_list = [st1_list[0], st2_list[0]] + local c_list = [way2_fac1_fac2[0], way2_fac1_fac2[5]] local siz = c_list.len() result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) if(result != null) @@ -2162,13 +2118,13 @@ class tutorial.chapter_03 extends basic_chapter switch (this.step) { case 5: local wt = gl_wt - if ((depot.x != c_dep1.x)||(depot.y != c_dep1.y)) + if ((depot.x != ch3_rail_depot1.a.x)||(depot.y != ch3_rail_depot1.a.y)) return 0 local cov = 1 local veh = 6 local good_list = [good_desc_x(good_alias.wood).get_catg_index()] //Wood local name = loc1_name_obj - local st_tile = st1_list.len() // 3 + local st_tile = loc1_tile // 3 local is_st_tile = true result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile, is_st_tile) @@ -2182,7 +2138,7 @@ class tutorial.chapter_03 extends basic_chapter local selc = 0 local load = loc1_load local time = loc1_wait - local c_list = [st1_list[0], st2_list[0]] + local c_list = [way2_fac1_fac2[0], way2_fac1_fac2[5]] local siz = c_list.len() return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -2276,8 +2232,8 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles if (pot0==0){ //Station tramo ---------------------------------------------------------------------- - local t_start = my_tile(st1_way_lim.b) - local t_end = my_tile(label1_lim) + local t_start = my_tile(coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y)) + local t_end = my_tile(coord(way2_fac1_fac2[1].x, way2_fac1_fac2[1].y)) t_start.remove_object(player_x(1), mo_label) t_end.remove_object(player_x(1), mo_label) @@ -2286,8 +2242,8 @@ class tutorial.chapter_03 extends basic_chapter local err = t.work(player, t_start, t_end, sc_way_name) //Outside tramo ---------------------------------------------------------------------- - t_start = my_tile(label1_lim) - t_end = my_tile(coord(c_way1.b.x, c_way1.b.y)) + t_start = my_tile(coord(way2_fac1_fac2[1].x, way2_fac1_fac2[1].y)) + t_end = my_tile(coord(way2_fac1_fac2[2].x, way2_fac1_fac2[2].y)) t = command_x(tool_build_way) err = t.work(player, t_start, t_end, sc_way_name) @@ -2299,8 +2255,8 @@ class tutorial.chapter_03 extends basic_chapter } //Para el puente if (pot1==0){ - local t_start = my_tile(c_brge1.a) - local t_end = my_tile(c_brge1.b) + local t_start = my_tile(bridge2_coords.a) + local t_end = my_tile(bridge2_coords.b) t_start.remove_object(player_x(1), mo_label) @@ -2311,14 +2267,14 @@ class tutorial.chapter_03 extends basic_chapter //Segundo tramo de rieles if (pot4==0){ //Outside tramo ---------------------------------------------------------------------- - local t_start = my_tile(coord(c_way3.a.x, c_way3.a.y)) - local t_end = my_tile(label2_lim) + local t_start = my_tile(coord(way2_fac1_fac2[3].x, way2_fac1_fac2[3].y)) + local t_end = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) local t = command_x(tool_build_way) local err = t.work(player, t_start, t_end, sc_way_name) //Station tramo ---------------------------------------------------------------------- - t_start = my_tile(label2_lim) - t_end = my_tile(st2_way_lim.a) + t_start = my_tile(way2_fac1_fac2[4]) + t_end = my_tile(way2_fac1_fac2[5]) t_start.remove_object(player_x(1), mo_label) t_end.remove_object(player_x(1), mo_label) @@ -2333,12 +2289,13 @@ class tutorial.chapter_03 extends basic_chapter if (pot0==0){ //Estaciones de la Fabrica - for(local j=0;jch3_cov_lim1.a && current_cov Date: Sun, 12 Jan 2025 20:40:54 +0100 Subject: [PATCH 034/217] FIX build stations --- class/class_chapter_03.nut | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 865ce59..28ae4fb 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1604,7 +1604,7 @@ class tutorial.chapter_03 extends basic_chapter return null } else - return translate("Select the other station")+" ("+coord(st2_list[0].x, st2_list[0].y).tostring()+".)" + return translate("Select the other station")+" ("+coord(way2_fac1_fac2[5].x, way2_fac1_fac2[5].y).tostring()+".)" } } else if (tool_id==4108){ @@ -1619,17 +1619,17 @@ class tutorial.chapter_03 extends basic_chapter return null } if (stop_flag[0]==0) - return translate("Select the other station first")+" ("+coord(st1_list[0].x, st1_list[0].y).tostring()+".)" + return translate("Select the other station first")+" ("+coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } else if (tool_id==4108){ if (stop_flag[0]==0) - return translate("Select the other station first")+" ("+coord(st1_list[0].x, st1_list[0].y).tostring()+".)" + return translate("Select the other station first")+" ("+coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==0) - return format(translate("Select station No.%d"),2)+" ("+coord(st2_list[0].x, st2_list[0].y).tostring()+".)" + return format(translate("Select station No.%d"),2)+" ("+coord(way2_fac1_fac2[5].x, way2_fac1_fac2[5].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" @@ -2891,8 +2891,8 @@ class tutorial.chapter_03 extends basic_chapter glsw[j] = 0 tile.mark() way.mark() - if(j!=0) - label_x.create(c_list[j], player_x(pl), format(translate("Build station No.%d here!."),j+1)) + //if(j!=0 ) + label_x.create(c_list[j], player_x(0), format(translate("Build station No.%d here!."),j+1)) sw = false } else { From 15ccc49ed7d308f9f622beb4d7d115602b2dca08 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Mon, 13 Jan 2025 10:59:51 -0400 Subject: [PATCH 035/217] Fix coord in CH3 depot --- class/class_basic_coords_p64.nut | 5 +++++ class/class_chapter_03.nut | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index d1c76d7..19a2fb1 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -132,6 +132,11 @@ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) road_depot_ch5 <- coord(131,232) +/** + * rail_depot{depot_tile, way_tile} + */ +ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} + /** * define bridges * diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 28ae4fb..fbb0150 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2118,8 +2118,8 @@ class tutorial.chapter_03 extends basic_chapter switch (this.step) { case 5: local wt = gl_wt - if ((depot.x != ch3_rail_depot1.a.x)||(depot.y != ch3_rail_depot1.a.y)) - return 0 + if ((depot.x != ch3_rail_depot1.b.x)||(depot.y != ch3_rail_depot1.b.y)) + return "Depot coordinate is incorrect ("+coord3d_to_string(depot)+")." local cov = 1 local veh = 6 local good_list = [good_desc_x(good_alias.wood).get_catg_index()] //Wood From 295b69913cc4aea25dbb8021891fabcd573e0944 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Mon, 13 Jan 2025 11:03:49 -0400 Subject: [PATCH 036/217] Fix coord in CH3 depot (commad auto script) --- class/class_chapter_03.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index fbb0150..429bbae 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2348,7 +2348,7 @@ class tutorial.chapter_03 extends basic_chapter case 5: local wt = wt_rail if (current_cov>ch3_cov_lim1.a && current_cov Date: Mon, 13 Jan 2025 22:03:38 +0100 Subject: [PATCH 037/217] ADD astar classes from Dwachs sqai --- class/astar.nut | 774 ++++++++++++++++++++++++++++++++++ class/class_basic_chapter.nut | 2 + class/class_chapter_03.nut | 29 +- scenario.nut | 1 + 4 files changed, 796 insertions(+), 10 deletions(-) create mode 100644 class/astar.nut diff --git a/class/astar.nut b/class/astar.nut new file mode 100644 index 0000000..0880218 --- /dev/null +++ b/class/astar.nut @@ -0,0 +1,774 @@ +/** + * @file astar.nut + * Classes to help with route-searching. + * Based on the A* algorithm. + */ + +/** + * Nodes for A* + */ +class astar_node extends coord3d +{ + previous = null // previous node + cost = -1 // cost to reach this node + dist = -1 // distance to target + constructor(c, p, co, d) + { + x = c.x + y = c.y + z = c.z + previous = p + cost = co + dist = d + } + function is_straight_move(d) + { + return d == dir || (previous && previous.dir == d) + } +} + +/** + * Class to perform A* searches. + * + * Derived classes have to implement: + * process_node(node): add nodes to open list reachable by node + * + * To use this: + * 1) call prepare_search + * 2) add tiles to target array + * 3) call compute_bounding_box + * 4) add start tiles to open list + * 5) call search() + * 6) use route + */ +class astar +{ + closed_list = null // table + nodes = null // array of astar_node + heap = null // binary heap + targets = null // array of coord3d's + + boundingbox = null // box containing all the targets + + route = null // route, reversed: target to start + + // statistics + calls_open = 0 + calls_closed = 0 + calls_pop = 0 + + // costs - can be fine-tuned + cost_straight = 10 + cost_curve = 14 + + constructor() + { + closed_list = {} + heap = simple_heap_x() + targets = [] + + } + + function prepare_search() + { + closed_list = {} + nodes = [] + route = [] + heap.clear() + targets = [] + calls_open = 0 + calls_closed = 0 + calls_pop = 0 + } + + // adds node c to closed list + function add_to_close(c) + { + closed_list[ coord3d_to_key(c) ] <- 1 + calls_closed++ + } + + function test_and_close(c) + { + local key = coord3d_to_key(c) + if (key in closed_list) { + return false + } + else { + closed_list[ key ] <- 1 + calls_closed++ + return true + } + } + + function is_closed(c) + { + local key = coord3d_to_key(c) + return (key in closed_list) + } + + // add node c to open list with give weight + function add_to_open(c, weight) + { + local i = nodes.len() + nodes.append(c) + heap.insert(weight, i) + calls_open++ + } + + function search() + { + // compute bounding box of targets + compute_bounding_box() + + local current_node = null + while (!heap.is_empty()) { + calls_pop++ + + local wi = heap.pop() + current_node = nodes[wi.value] + local dist = current_node.dist + + // target reached + if (dist == 0) break; + // already visited previously + if (!test_and_close(current_node)) { + current_node = null + continue; + } + // investigate neighbours and put them into open list + process_node(current_node) + + current_node = null + } + + route = [] + if (current_node) { + // found route + route.append(current_node) + + while (current_node.previous) { + current_node = current_node.previous + route.append(current_node) + } + } + + print("Calls: pop = " + calls_pop + ", open = " + calls_open + ", close = " + calls_closed) + } + + /** + * Computes bounding box of all targets to speed up distance computation. + */ + function compute_bounding_box() + { + if (targets.len()>0) { + local first = targets[0] + boundingbox = { xmin = first.x, xmax = first.x, ymin = first.y, ymax = first.y } + + for(local i=1; i < targets.len(); i++) { + local t = targets[i] + if (boundingbox.xmin > t.x) boundingbox.xmin = t.x; + if (boundingbox.xmax < t.x) boundingbox.xmax = t.x; + if (boundingbox.ymin > t.y) boundingbox.ymin = t.y; + if (boundingbox.ymax < t.y) boundingbox.ymax = t.y; + } + } + } + + /** + * Estimates distance to target. + * Returns zero if and only if c is a target tile. + */ + function estimate_distance(c) + { + local d = 0 + local curved = 0 + + // distance to bounding box + local dx = boundingbox.xmin - c.x + if (dx <= 0) dx = c.x - boundingbox.xmax; + if (dx > 0) d += dx; else dx = 0; + + local dy = boundingbox.ymin - c.y + if (dy <= 0) dy = c.y - boundingbox.ymax + if (dy > 0) d += dy; else dy = 0; + + if (d > 0) { + // cost to bounding box + return cost_straight * d + (dx*dy > 0 ? cost_curve - cost_straight : 0); + } + else { + local t = targets[0] + d = abs(t.x-c.x) + abs(t.y-c.y) + + // inside bounding box + for(local i=1; i < targets.len(); i++) { + local t = targets[i] + local dx = abs(t.x-c.x) + local dy = abs(t.y-c.y) + d = min(d, cost_straight * (dx+dy) + (dx*dy > 0 ? cost_curve - cost_straight : 0)) + } + } + return d + } +} + +/** + * Class to search a route along existing ways. + */ +class astar_route_finder extends astar +{ + wt = wt_all + + constructor(wt_) + { + base.constructor() + wt = wt_ + if ( [wt_all, wt_invalid, wt_water, wt_air].find(wt) ) { + throw("Using this waytype is going to be inefficient. Use at own risk.") + } + cost_curve = cost_straight + } + + function process_node(cnode) + { + local from = tile_x(cnode.x, cnode.y, cnode.z) + local back = dir.backward(cnode.dir) + // allowed directions + local dirs = from.get_way_dirs_masked(wt) + + for(local d = 1; d<16; d*=2) { + // do not go backwards, only along existing ways + if ( d == back || ( (dirs & d) == 0) ) { + continue + } + + local to = from.get_neighbour(wt, d) + if (to) { + if (!is_closed(to)) { + // estimate moving cost + local move = cnode.is_straight_move(d) ? cost_straight : cost_curve + local dist = estimate_distance(to) + local cost = cnode.cost + move + local weight = cost //+ dist + local node = ab_node(to, cnode, cost, dist, d) + + add_to_open(node, weight) + } + } + } + } + + // start and end have to be arrays of objects with 3d-coordinates + function search_route(start, end) + { + prepare_search() + foreach (e in end) { + targets.append(e); + } + compute_bounding_box() + + foreach (s in start) + { + local dist = estimate_distance(s) + add_to_open(ab_node(s, null, 1, dist+1, 0, 0), dist+1) + } + + search() + + if (route.len() > 0) { + return { start = route[route.len()-1], end = route[0], routes = route } + } + print("No route found") + return { err = "No route" } + } +} + +/** + * Class to search a route along existing ways. + */ +class astar_route_finder extends astar +{ + wt = wt_all + + constructor(wt_) + { + base.constructor() + wt = wt_ + if ( [wt_all, wt_invalid, wt_water, wt_air].find(wt) ) { + throw("Using this waytype is going to be inefficient. Use at own risk.") + } + cost_curve = cost_straight + } + + function process_node(cnode) + { + local from = tile_x(cnode.x, cnode.y, cnode.z) + local back = dir.backward(cnode.dir) + // allowed directions + local dirs = from.get_way_dirs_masked(wt) + + for(local d = 1; d<16; d*=2) { + // do not go backwards, only along existing ways + if ( d == back || ( (dirs & d) == 0) ) { + continue + } + + local to = from.get_neighbour(wt, d) + if (to) { + if (!is_closed(to)) { + // estimate moving cost + local move = cnode.is_straight_move(d) ? cost_straight : cost_curve + local dist = estimate_distance(to) + local cost = cnode.cost + move + local weight = cost //+ dist + local node = ab_node(to, cnode, cost, dist, d) + + add_to_open(node, weight) + } + } + } + } + + // start and end have to be arrays of objects with 3d-coordinates + function search_route(start, end) + { + prepare_search() + foreach (e in end) { + targets.append(e); + } + compute_bounding_box() + + foreach (s in start) + { + local dist = estimate_distance(s) + add_to_open(ab_node(s, null, 1, dist+1, 0, 0), dist+1) + } + + search() + + if (route.len() > 0) { + return { start = route.top(), end = route[0], routes = route } + } + print("No route found") + return { err = "No route" } + } +} + +class ab_node extends ::astar_node +{ + dir = 0 // direction to reach this node + flag = 0 // flag internal to the route searcher + constructor(c, p, co, d, di, fl=0) + { + base.constructor(c, p, co, d) + dir = di + flag = fl + } +} + +/** + * Helper class to find bridges and spots to place them. + */ +class pontifex +{ + player = null + bridge = null + + constructor(pl, way) + { + // print messages box + // 1 = erreg + // 2 = list bridges + local print_message_box = 0 + local wt_name = ["", "road", "rail", "water"] + + if ( print_message_box > 1 ) { + gui.add_message_at("____________ Search bridge ___________", world.get_time()) + } + player = pl + local list = bridge_desc_x.get_available_bridges(way.get_waytype()) + local len = list.len() + local way_speed = way.get_topspeed() + local bridge_min_len = 5 + + if (len>0) { + bridge = list[0] + if ( print_message_box == 2 ) { + gui.add_message_at(" ***** way : " + wt_name[way.get_waytype()], world.get_time()) + gui.add_message_at(" ***** bridge : " + bridge.get_name(), world.get_time()) + gui.add_message_at(" ***** get_max_length : " + bridge.get_max_length(), world.get_time()) + } + + for(local i=1; i bridge_min_len || b.get_max_length() == 0 ) { + if (bridge.get_topspeed() < way_speed) { + if (b.get_topspeed() > bridge.get_topspeed()) { + bridge = b + } + } + else { + if (way_speed < b.get_topspeed() && b.get_topspeed() < bridge.get_topspeed()) { + bridge = b + } + } + } + } + } + if ( print_message_box > 1 ) { + gui.add_message_at(" *** bridge found : " + bridge.get_name() + " way : " + wt_name[way.get_waytype()], world.get_time()) + gui.add_message_at("--------- Search bridge end ----------", world.get_time()) + } + } + + function find_end(pos, dir, min_length) + { + return bridge_planner_x.find_end(player, pos, dir, bridge, min_length) + } +} + +/** + * Class to search a route and to build a connection (i.e. roads). + * Builds bridges. But not tunnels (not implemented). + */ +class astar_builder extends astar +{ + builder = null + bridger = null + way = null + + function process_node(cnode) + { + local from = tile_x(cnode.x, cnode.y, cnode.z) + local back = dir.backward(cnode.dir) + + for(local d = 1; d<16; d*=2) { + // do not go backwards + if (d == back) { + continue + } + // continue straight after a bridge + if (cnode.flag == 1 && d != cnode.dir) { + continue + } + + local to = from.get_neighbour(wt_all, d) + if (to) { + if (builder.is_allowed_step(from, to) && !is_closed(to)) { + // estimate moving cost + local move = cnode.is_straight_move(d) ? cost_straight : cost_curve + local dist = estimate_distance(to) + // is there already a road? + if (!to.has_way(wt_road)) { + move += 8 + } + + local cost = cnode.cost + move + local weight = cost + dist + local node = ab_node(to, cnode, cost, dist, d) + + add_to_open(node, weight) + } + // try bridges + else if (bridger && d == cnode.dir && cnode.flag != 1) { + local len = 1 + local max_len = bridger.bridge.get_max_length() + + do { + local to = bridger.find_end(from, d, len) + if (to.x < 0 || is_closed(to)) { + break + } + local bridge_len = abs(from.x-to.x) + abs(from.y-to.y) + + // long bridges bad + local bridge_factor = 3 + + if ( bridge_len > 20 ) { + bridge_factor = 4 + }/* else if ( bridge_len > 8 ) { + bridge_factor = 4 + }*/ + local move = bridge_len * cost_straight * bridge_factor /*extra bridge penalty */; + // set distance to 1 if at a target tile + local dist = max(estimate_distance(to), 1) + + local cost = cnode.cost + move + local weight = cost + dist + local node = ab_node(to, cnode, cost, dist, d, 1 /*bridge*/) + + add_to_open(node, weight) + + len = bridge_len + 1 + } while (len <= max_len) + } + } + } + } + + function search_route(start, end, build_route = 1) + { + + if ( start.len() == 0 || end.len() == 0 ) { + if ( print_message_box > 0 ) { + gui.add_message_at(" *** invalid tile : start or end ", world.get_time()) + } + return { err = "No route" } + } + + prepare_search() + foreach (e in end) { + targets.append(e); + } + compute_bounding_box() + + foreach (s in start) + { + local dist = estimate_distance(s) + add_to_open(ab_node(s, null, 1, dist+1, 0, 0), dist+1) + } + + search() + + local bridge_tiles = 0 + local count_tree = 0 + + if (route.len() > 0) { + remove_field( route[0] ) + + // do not try to build in tunnels + local is_tunnel_0 = tile_x(route[0].x, route[0].y, route[0].z).find_object(mo_tunnel) + local is_tunnel_1 = is_tunnel_0 + + local last_treeway_tile = null + + for (local i = 1; i 1 && i < (route.len()-1) ) { + local tx_0 = tile_x(route[i-1].x, route[i-1].y, route[i-1].z) + local tx_1 = tile_x(route[i+1].x, route[i+1].y, route[i+1].z) + if ( tx_0.find_object(mo_way) != null && tx_1.find_object(mo_way) != null ) { + //gui.add_message_at(" check tx_0 and tx_1 ", t) + if ( test_exists_way == null ) { + local ty = route[i] + local cnv_count = tx_0.find_object(mo_way).get_convoys_passed()[0] + tx_0.find_object(mo_way).get_convoys_passed()[1] + + if ( last_treeway_tile != null && cnv_count == 0 ) { + ty = route[last_treeway_tile] + } + err = test_select_way(tx_1, tx_0, ty, way.get_waytype()) + //gui.add_message_at(" check tx_0 and tx_1 : test_select_way " + err, t) + if ( err ) { + check_build_tile = false + } + err = null + } + } else if ( test_exists_way != null && test_exists_way.get_waytype() == way.get_waytype() ) { + check_build_tile = false + } + if ( tx_0.find_object(mo_signal) != null ) { + check_build_tile = false + + } + } + + if ( test_exists_way != null && test_exists_way.get_owner() != our_player.nr ) { //&& last_treeway_tile != null + //gui.add_message_at("test_exists_way " + test_exists_way + " last_treeway_tile " + last_treeway_tile + " test_exists_way.get_waytype() " + test_exists_way.get_waytype() + " !t.is_bridge() " + !t.is_bridge() + " t.get_slope() " + t.get_slope(), t) + + test_exists_way = null + + + } + + if ( t.is_bridge() ) { + //gui.add_message_at(" t.is_bridge() " + t.is_bridge(), t) + last_treeway_tile = null + } + + if ( i > 2 && test_exists_way != null && last_treeway_tile != null && test_exists_way.get_waytype() == wt_rail && t.get_slope() == 0 ) { + //gui.add_message_at(our_player, " (624) ", t) + err = test_select_way(route[i], route[last_treeway_tile], route[i-1], way.get_waytype()) + if ( err ) { + last_treeway_tile = null + } else { + test_exists_way = null + last_treeway_tile = null + } + err = null + } + /*if ( way.get_waytype() == wt_rail && !t.is_bridge() && t.get_slope == 0 ) { + t = tile_x(route[i-1].x, route[i-1].y, route[i-1].z) + d = t.get_way_dirs(way.get_waytype()) + if ( dir.is_threeway(d) ) { + last_treeway_tile = i - 1 + } else { + last_treeway_tile = null + test_exists_way = null + } + + }*/ + if ( test_exists_way != null && ( i < 2 || test_exists_way.get_waytype() == wt_road ) ) { + test_exists_way = null + } + + local build_tile = false + if ( settings.get_pay_for_total_distance_mode == 2 && test_exists_way == null && check_build_tile ) { + err = command_x.build_way(our_player, route[i-1], route[i], way, true) + build_tile = true + } else if ( test_exists_way == null && check_build_tile ) { + err = command_x.build_way(our_player, route[i-1], route[i], way, false) + build_tile = true + } + if (err) { + //gui.add_message_at("Failed to build " + way.get_name() + " from " + coord_to_string(route[i-1]) + " to " + coord_to_string(route[i]) +"\n" + err, route[i]) + // remove way + // route[0] to route[i] + //err = command_x.remove_way(our_player, route[0], route[i]) + remove_wayline(route, (i - 1), way.get_waytype()) + } else { + t = tile_x(route[i-1].x, route[i-1].y, route[i-1].z) + d = t.get_way_dirs(way.get_waytype()) + //gui.add_message_at(" (666) dir.is_threeway(d) " + dir.is_threeway(d), t) + if ( dir.is_threeway(d) && way.get_waytype() == wt_rail && build_tile ) { + last_treeway_tile = i - 1 + } + } + } else if ( build_route == 0 ) { + if ( tile_x(route[i].x, route[i].y, route[i].z).find_object(mo_tree) != null ) { + count_tree++ + } + } + //} + } + else if (route[i-1].flag == 1) { + // plan build bridge + + local b_tiles = 0 + + // + if ( route[i-1].x == route[i].x ) { + if ( route[i-1].y > route[i].y ) { + b_tiles = (route[i-1].y - route[i].y + 1) + bridge_tiles += b_tiles + } else { + b_tiles = (route[i].y - route[i-1].y + 1) + bridge_tiles += b_tiles + } + } else if ( route[i-1].y == route[i].y ) { + if ( route[i-1].x > route[i].x ) { + b_tiles = (route[i-1].x - route[i].x + 1) + bridge_tiles += b_tiles + } else { + b_tiles = (route[i].x - route[i-1].x + 1) + bridge_tiles += b_tiles + } + } + + + if ( build_route == 1 ) { + // check ground under bridge + // check_ground() return true build bridge + // check_ground() return false no build bridge + + local build_bridge = true + // check whether the ground can be adjusted and no bridge is necessary + // bridge len <= 4 tiles + if ( b_tiles < 8 ) { + build_bridge = check_ground(tile_x(route[i-1].x, route[i-1].y, route[i-1].z), tile_x(route[i].x, route[i].y, route[i].z), way) + //gui.add_message_at("check_ground(pos_s, pos_e) --- " + build_bridge, route[i-1]) + } + + if ( build_bridge ) { + err = command_x.build_bridge(our_player, route[i-1], route[i], bridger.bridge) + if (err) { + // check whether bridge exists + sleep() + local arf = astar_route_finder(wt_road) + local res_bridge = arf.search_route([route[i-1]], [route[i]]) + + if ("routes" in res_bridge && res_bridge.routes.len() == abs(route[i-1].x-route[i].x)+abs(route[i-1].y-route[i].y)+1) { + // there is a bridge, continue + err = null + gui.add_message_at("Failed to build bridge from " + coord_to_string(route[i-1]) + " to " + coord_to_string(route[i]) +"\n" + err, route[i]) + } else { + remove_wayline(route, (i - 1), way.get_waytype()) + // remove bridge tiles build by not build bridge + + } + } + } + + } else if ( build_route == 0 ) { + } + + } + if (err) { + return { err = err } + } + } + return { start = route.top(), end = route[0], routes = route, bridge_lens = bridge_tiles, bridge_obj = bridger.bridge, tiles_tree = count_tree } + } + print("No route found") + return { err = "No route" } + } +} + +/* + * + * + */ +function test_select_way(start, end, wt) { + //gui.add_message_at("start " + coord3d_to_string(start) + " end " + coord3d_to_string(end) + " t_end " + coord3d_to_string(t_end), start) + local asf = astar_route_finder(wt_rail) + local wayline = asf.search_route([start], [end]) + if ( "err" in wayline ) { + //gui.add_message_at("no route from " + coord3d_to_string(start) + " to " + coord3d_to_string(end) , start) + + return false + } else { + //gui.add_message_at("exists route from " + coord3d_to_string(start) + " to " + coord3d_to_string(end) , start) + + return true + } +} diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 70821f0..9eb5c62 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3379,4 +3379,6 @@ function station_tiles(tile_a, tile_b, count) { return st_tiles } + + // END OF FILE diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 28ae4fb..f5af6d5 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -38,7 +38,7 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles //-------------------------------------------------------------------------------------------- //st1_way_lim = {a = coord(120,163), b = coord(125,163)} //Limites de la via para la estacion - bord1_lim = {a = coord(106,154), b = coord(120,167)} //Marca area con "X" + bord1_lim = {a = coord(105,153), b = coord(121,167)} //Marca area con "X" bord2_lim = {a = coord(95,155), b = coord(103,160)} //Marca area con "X" //Step 5 ===================================================================================== @@ -736,24 +736,33 @@ class tutorial.chapter_03 extends basic_chapter label_x.create(limi, player_x(pl), translate("Build Rails form here")) //elimina el cuadro label - local opt = 0 + /*local opt = 0 local del = true local text = "X" - label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) + label_bord(bord1_lim.a, bord1_lim.b, opt, del, text)*/ } - if (tile2.find_object(mo_label) && r_way.c.x<=limi.x){ - if (!tile_x(wayend.x, wayend.y, wayend.z).find_object(mo_way)) + + if (tile2.find_object(mo_label) && r_way.c.x<=limi.x) { + if (!tile_x(wayend.x, wayend.y, wayend.z).find_object(mo_way)) { label_x.create(wayend, player_x(pl), translate("Build Rails form here")) + + } //Creea un cuadro label - local opt = 0 - local del = false - local text = "X" - label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) - tile2.remove_object(player_x(1), mo_label) + local test_way = test_select_way(tile1, tile2, wt_rail) + if (test_way) { + local opt = 0 + local del = false + local text = "X" + label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) + + tile2.remove_object(player_x(1), mo_label) + + } } + local opt = 0 local coora = tile_x(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y, way2_fac1_fac2[0].z) local coorb = tile_x(way2_fac1_fac2[2].x, way2_fac1_fac2[2].y, way2_fac1_fac2[2].z) diff --git a/scenario.nut b/scenario.nut index 217a994..23c626d 100644 --- a/scenario.nut +++ b/scenario.nut @@ -292,6 +292,7 @@ function get_integral(tx) include(nut_path+"class_basic_convoys") // include class for detect eliminated convoys include(nut_path+"class_basic_chapter") // include class for basic chapter structure include(nut_path+"class_messages") // include def messages texts + include(nut_path+"astar") // .. route search for way building etc } From 4673b20750231d2cbc4aa905418f74f77941a327 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 23 Jan 2025 16:24:37 +0100 Subject: [PATCH 038/217] CHG ch3 rail line 1 coords to seperate file --- class/class_basic_coords_p128.nut | 2 ++ class/class_basic_coords_p64.nut | 10 ++++------ class/class_basic_coords_p64g.nut | 2 ++ class/class_chapter_03.nut | 20 ++++++++++---------- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 0a72f12..91e2d91 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -155,6 +155,8 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} // start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,1), coord3d(99,158,1), coord3d(96,155,1), coord3d(96,151,1)] +limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} +limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} /** * chapter 5 diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 19a2fb1..f469b58 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -132,11 +132,6 @@ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) road_depot_ch5 <- coord(131,232) -/** - * rail_depot{depot_tile, way_tile} - */ -ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} - /** * define bridges * @@ -160,7 +155,10 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} // start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end -way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] +way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] +limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} +limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} + /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index f4de308..5217c30 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -165,6 +165,8 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} // start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] +limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} +limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} /** * chapter 5 diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 80a5f67..c2d4b94 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -38,8 +38,8 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles //-------------------------------------------------------------------------------------------- //st1_way_lim = {a = coord(120,163), b = coord(125,163)} //Limites de la via para la estacion - bord1_lim = {a = coord(105,153), b = coord(121,167)} //Marca area con "X" - bord2_lim = {a = coord(95,155), b = coord(103,160)} //Marca area con "X" + //bord1_lim = {a = coord(105,153), b = coord(121,167)} //Marca area con "X" + //bord2_lim = {a = coord(95,155), b = coord(103,160)} //Marca area con "X" //Step 5 ===================================================================================== loc1_name_obj = get_veh_ch3(1) @@ -755,7 +755,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1a.a, limit_ch3_rail_line_1a.b, opt, del, text) tile2.remove_object(player_x(1), mo_label) @@ -782,7 +782,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1a.a, limit_ch3_rail_line_1a.b, opt, del, text) pot0=1 wayend=0 @@ -817,7 +817,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(bord2_lim.a, bord2_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1b.a, limit_ch3_rail_line_1b.b, opt, del, text) } else { tile1.remove_object(player_x(1), mo_label) @@ -825,7 +825,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord2_lim.a, bord2_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1b.a, limit_ch3_rail_line_1b.b, opt, del, text) if (!tile1.find_object(mo_label)) label_x.create(way2_fac1_fac2[5], player_x(pl), translate("Build Rails form here")) } @@ -844,7 +844,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord2_lim.a, bord2_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1b.a, limit_ch3_rail_line_1b.b, opt, del, text) tile_x(coorb.x, coorb.y, coorb.z).remove_object(player_x(1), mo_label) tile1.remove_object(player_x(1), mo_label) @@ -1522,7 +1522,7 @@ class tutorial.chapter_03 extends basic_chapter } } } - if (pos.x>=bord1_lim.a.x && pos.y>=bord1_lim.a.y && pos.x<=bord1_lim.b.x && pos.y<=bord1_lim.b.y){ + if (pos.x>=limit_ch3_rail_line_1a.a.x && pos.y>=limit_ch3_rail_line_1a.a.y && pos.x<=limit_ch3_rail_line_1a.b.x && pos.y<=limit_ch3_rail_line_1a.b.y){ if (!way && label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." } @@ -1551,7 +1551,7 @@ class tutorial.chapter_03 extends basic_chapter return result return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) } - if (pos.x>=bord2_lim.a.x && pos.y>=bord2_lim.a.y && pos.x<=bord2_lim.b.x && pos.y<=bord2_lim.b.y){ + if (pos.x>=limit_ch3_rail_line_1b.a.x && pos.y>=limit_ch3_rail_line_1b.a.y && pos.x<=limit_ch3_rail_line_1b.b.x && pos.y<=limit_ch3_rail_line_1b.b.y){ if (!way && label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." } @@ -2260,7 +2260,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord1_lim.a, bord1_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_1a.a, limit_ch3_rail_line_1a.b, opt, del, text) } //Para el puente if (pot1==0){ From a9dd4fb82651ce32f4eab81e791af70194c050ba Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 23 Jan 2025 21:32:03 +0100 Subject: [PATCH 039/217] CHG ch3 rail line 2 coords to seperate file --- class/class_basic_chapter.nut | 8 +- class/class_basic_coords_p128.nut | 11 ++ class/class_basic_coords_p64.nut | 10 ++ class/class_basic_coords_p64g.nut | 8 + class/class_chapter_03.nut | 284 +++++++++++++++--------------- 5 files changed, 175 insertions(+), 146 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 9eb5c62..53e5915 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1351,7 +1351,7 @@ class basic_chapter result = 6 } } else if ( tile_a.x == tile_b.x ) { - if ( tile_a.y tile_b.y ) { result = 2 @@ -1909,9 +1909,9 @@ class basic_chapter else if ((pos.x == t.x && pos.y == t.y && pos.z == t.z)||(cursor_sw)){ if (tool_id==tool_build_way || tool_id==tool_build_tunnel){ if ((ribi==0) || (ribi==1) || (ribi==2) || (ribi==4) || (ribi==8)){ - if(t.find_object(mo_tunnel)){ - return null - } + if(t.find_object(mo_tunnel)){ + return null + } foreach(d in desc){ //gui.add_message(d.get_name()+" :: "+name) if(d.get_name() == name){ diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 91e2d91..c99ea3b 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -131,6 +131,12 @@ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) road_depot_ch5 <- coord(131,232) +/** + * rail_depot{depot_tile, way_tile} + */ +ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} +ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} + /** * define bridges * @@ -158,6 +164,11 @@ way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,1), c limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} +// start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end +way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(95,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] +limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} +limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} + /** * chapter 5 * diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index f469b58..3ade480 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -132,6 +132,12 @@ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) road_depot_ch5 <- coord(131,232) +/** + * rail_depot{depot_tile, way_tile} + */ +ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} +ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} + /** * define bridges * @@ -159,6 +165,10 @@ way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107, limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} +// start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end +way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] +limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} +limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 5217c30..c99eb8c 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -139,6 +139,7 @@ road_depot_ch5 <- coord(131,232) * rail_depot{depot_tile, way_tile} */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} +ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} /** * define bridges @@ -159,6 +160,8 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way2_fac1_fac2 = rail factory 1 -> factory 2 * + * way2_fac2_fac3 = rail factory 2 -> factory 3 + * * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -168,6 +171,11 @@ way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), c limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} +// start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end +way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] +limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} +limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} + /** * chapter 5 * diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index c2d4b94..871d33d 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -32,15 +32,6 @@ class tutorial.chapter_03 extends basic_chapter cy4 = {name = ""} cy5 = {name = ""} - //Step 1 ===================================================================================== - - //Step 2 ===================================================================================== - //Primer tramo de rieles - //-------------------------------------------------------------------------------------------- - //st1_way_lim = {a = coord(120,163), b = coord(125,163)} //Limites de la via para la estacion - //bord1_lim = {a = coord(105,153), b = coord(121,167)} //Marca area con "X" - //bord2_lim = {a = coord(95,155), b = coord(103,160)} //Marca area con "X" - //Step 5 ===================================================================================== loc1_name_obj = get_veh_ch3(1) loc1_tile = calc_station_lenght(get_veh_ch3(1), get_veh_ch3(4), set_train_lenght(1)) @@ -48,52 +39,11 @@ class tutorial.chapter_03 extends basic_chapter loc1_wait = 0 f1_reached = set_transportet_goods(1) - //Step 6 ===================================================================================== - - //Primer tramo de rieles - //-------------------------------------------------------------------------------------------- - st3_way_lim = {a = coord(94,155), b = coord(94,160)} //Limites de la via para la estacion - bord3_lim = {a = coord(91,160), b = coord(96,174)} //Marca area con "X" - label3_lim = coord3d(94,160,2) //Indica el final de un tramo - c_way4 = {a = coord3d(94,155,2), b = coord3d(96,172,3), dir = 3} //Inicio, Fin de la via y direccion(fullway) - - //Estaciones de la Fabrica - st3_list = [coord(94,155), coord(94,156), coord(94,157)] - //-------------------------------------------------------------------------------------------- - - //Para el tunel - //------------------------------------------------------------------------------------------ - c_tway_lim2 = {a = coord(96,172), b = coord(104,172)} - c_tunn1 = {a = coord3d(96,172,3), b = coord3d(104,172,3), dir = 5} //Inicio, Fin de la via y direccion(fullway) - brge2_z = 1 - //------------------------------------------------------------------------------------------- - - //Segundo tramo de rieles - //-------------------------------------------------------------------------------------------- - st4_way_lim = {a = coord(109,186), b = coord(109,189)} //Limites de la via para la estacion - bord4_lim = {a = coord(102,171), b = coord(110,186)} //Marca area con "X" - label4_lim = coord3d(109,186,2) //Indica el final de un tramo - c_way5 = {a = coord3d(104,172,3), b = coord3d(109,189,2), dir = 5} //Inicio, Fin de la via y direccion(fullway) - - //Estaciones del Consumidor - st4_list = [coord(109,189), coord(109,188), coord(109,187)] - //-------------------------------------------------------------------------------------------- - //Step 7 ===================================================================================== - //Limites del deposito y rieles - //-------------------------------------------------------------------------------------------- - c_dep2 = coord(93,158) - c_dep2_lim = {b = coord(94,158), a = coord(93,158)} - //-------------------------------------------------------------------------------------------- - loc2_name_obj = get_veh_ch3(2) - loc2_tile = 3 + loc2_tile = calc_station_lenght(get_veh_ch3(2), get_veh_ch3(2), set_train_lenght(2)) loc2_load = 100 loc2_wait = 0 - - //Consumidor Final - //fac_3 = {c = coord(110,190), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.plan} - //fac_3 = get_factory_data("3") f3_reached = set_transportet_goods(2) //Step 8 ===================================================================================== @@ -220,9 +170,9 @@ class tutorial.chapter_03 extends basic_chapter //c_way1.b = coord3d(107,158,1) //c_way3.a = coord3d(99,158,1) //bord3_lim.b = coord(96,172) - c_tway_lim2.a = coord(95,172) - c_way4.b = coord3d(95,172,3) - c_bway_lim1.a = coord(99,158) + //c_tway_lim2.a = coord(95,172) + //way2_fac2_fac3[2] = coord3d(95,172,3) + //c_bway_lim1.a = coord(99,158) c_way6_lim.a = coord(94,198) c_way6.b = coord3d(94,198,6) c_bway_lim3.b = coord(94,198) @@ -378,13 +328,13 @@ class tutorial.chapter_03 extends basic_chapter text.wait = get_wait_time_text(loc1_wait) break case 6: - local c1 = c_way4.a.href("("+c_way4.a.tostring()+")") - local c2 = c_way4.b.href("("+c_way4.b.tostring()+")") - local c3 = c_way5.a.href("("+c_way5.a.tostring()+")") - local c4 = c_way5.b.href("("+c_way5.b.tostring()+")") + local c1 = way2_fac2_fac3[0].href("("+way2_fac2_fac3[0].tostring()+")") + local c2 = way2_fac2_fac3[2].href("("+way2_fac2_fac3[2].tostring()+")") + local c3 = way2_fac2_fac3[3].href("("+way2_fac2_fac3[3].tostring()+")") + local c4 = way2_fac2_fac3[5].href("("+way2_fac2_fac3[5].tostring()+")") if (pot0==0){ - local c = label3_lim + local c = way2_fac2_fac3[1] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) if(!way) c2 = c_label @@ -397,7 +347,7 @@ class tutorial.chapter_03 extends basic_chapter text.tx=ttext("[2/5]") } else if (pot2==0){ - local c = label4_lim + local c = way2_fac2_fac3[4] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) if(!way) c4 = c_label @@ -413,7 +363,7 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/06_5-5.txt") text.tx = ttext("[5/5]") } - text.tu = c_tway_lim2.a.href("("+c_tway_lim2.a.tostring()+")") + text.tu = way2_fac2_fac3[2].href("("+way2_fac2_fac3[2].tostring()+")") text.w1 = c1 text.w2 = c2 text.w3 = c3 @@ -428,8 +378,8 @@ class tutorial.chapter_03 extends basic_chapter text.tile = loc2_tile text.load = loc2_load text.wait = get_wait_time_text(loc2_wait) - text.w1 = c_dep2_lim.a.href("("+c_dep2_lim.a.tostring()+")") - text.w2 = c_dep2_lim.b.href("("+c_dep2_lim.b.tostring()+")") + text.w1 = ch3_rail_depot2.a.href("("+ch3_rail_depot2.a.tostring()+")") + text.w2 = ch3_rail_depot2.b.href("("+ch3_rail_depot2.b.tostring()+")") break case 8: @@ -631,7 +581,7 @@ class tutorial.chapter_03 extends basic_chapter text.f3 = fac_3.c.href(fac_3.name+" ("+fac_3.c.tostring()+")") text.cdep=ch3_rail_depot1.b.href("("+ch3_rail_depot1.b.tostring()+")") - text.way1=c_dep2.href("("+c_dep2.tostring()+")") + text.way1=ch3_rail_depot2.a.href("("+ch3_rail_depot2.a.tostring()+")") text.cy1=cy1.name text.cy2=cy2.name @@ -973,10 +923,10 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles if (pot0==0){ - local limi = label3_lim - local tile1 = my_tile(st3_list[0]) + local limi = way2_fac2_fac3[1] + local tile1 = my_tile(way2_fac2_fac3[0]) if (!tile1.find_object(mo_way)){ - label_x.create(st3_list[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac2_fac3[0], player_x(pl), translate("Build Rails form here")) } else tile1.remove_object(player_x(1), mo_label) @@ -989,7 +939,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord3_lim.a, bord3_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2a.a, limit_ch3_rail_line_2a.b, opt, del, text) } if (tile_x(r_way.c.x, r_way.c.y, r_way.c.z).find_object(mo_way) && r_way.c.y>=limi.y){ @@ -1000,14 +950,14 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(bord3_lim.a, bord3_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2a.a, limit_ch3_rail_line_2a.b, opt, del, text) } local opt = 0 - local coora = coord3d(c_way4.a.x, c_way4.a.y, c_way4.a.z) - local coorb = coord3d(c_way4.b.x, c_way4.b.y, c_way4.b.z) + local coora = coord3d(way2_fac2_fac3[0].x, way2_fac2_fac3[0].y, way2_fac2_fac3[0].z) + local coorb = coord3d(way2_fac2_fac3[2].x, way2_fac2_fac3[2].y, way2_fac2_fac3[2].z) local obj = false - local dir = c_way4.dir // 3 + local dir = get_fullway_dir(way2_fac2_fac3[0], way2_fac2_fac3[1]) // 3 wayend = coorb @@ -1020,7 +970,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord3_lim.a, bord3_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2a.a, limit_ch3_rail_line_2a.b, opt, del, text) pot0 = 1 wayend = 0 @@ -1029,23 +979,23 @@ class tutorial.chapter_03 extends basic_chapter //Para el tunel else if (pot0==1 && pot1==0){ chapter_sub_step = 1 // sub step finish - local tile = my_tile(c_tunn1.a) + local tile = my_tile(way2_fac2_fac3[2]) if ((!tile.find_object(mo_tunnel))){ - label_x.create(c_tunn1.a, player_x(pl), translate("Place a Tunnel here!.")) + label_x.create(way2_fac2_fac3[2], player_x(pl), translate("Place a Tunnel here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { tile.remove_object(player_x(1), mo_label) - if (my_tile(c_tunn1.b).find_object(mo_tunnel)){ + if (my_tile(way2_fac2_fac3[3]).find_object(mo_tunnel)){ } } local opt = 0 - local coora = coord3d(c_tunn1.a.x, c_tunn1.a.y, c_tunn1.a.z) - local coorb = coord3d(c_tunn1.b.x, c_tunn1.b.y, c_tunn1.b.z) + local coora = coord3d(way2_fac2_fac3[2].x, way2_fac2_fac3[2].y, way2_fac2_fac3[2].z) + local coorb = coord3d(way2_fac2_fac3[3].x, way2_fac2_fac3[3].y, way2_fac2_fac3[3].z) local obj = false local tunnel = true - local dir = c_tunn1.dir // 5 + local dir = get_fullway_dir(way2_fac2_fac3[2], way2_fac2_fac3[3]) // 5 wayend = coorb r_way = get_fullway(coora, coorb, dir, obj, tunnel) if (r_way.r){ @@ -1056,16 +1006,16 @@ class tutorial.chapter_03 extends basic_chapter //Segundo tramo de rieles else if (pot1==1 && pot2==0){ chapter_sub_step = 2 // sub step finish - local limi = label4_lim + local limi = way2_fac2_fac3[4] local tile1 = my_tile(limi) - local tile2 = my_tile(st4_list[0]) + local tile2 = my_tile(way2_fac2_fac3[5]) if (r_way.c.y < limi.y){ label_x.create(limi, player_x(pl), translate("Build Rails form here")) //Creea un cuadro label local opt = 0 local del = false local text = "X" - label_bord(bord4_lim.a, bord4_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2b.a, limit_ch3_rail_line_2b.b, opt, del, text) } else { tile1.remove_object(player_x(1), mo_label) @@ -1073,16 +1023,16 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord4_lim.a, bord4_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2b.a, limit_ch3_rail_line_2b.b, opt, del, text) if (!tile2.find_object(mo_way)) - label_x.create(st4_list[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac2_fac3[5], player_x(pl), translate("Build Rails form here")) } local opt = 0 - local coora = coord3d(c_way5.a.x, c_way5.a.y, c_way5.a.z) - local coorb = coord3d(c_way5.b.x, c_way5.b.y, c_way5.b.z) + local coora = coord3d(way2_fac2_fac3[3].x, way2_fac2_fac3[3].y, way2_fac2_fac3[3].z) + local coorb = coord3d(way2_fac2_fac3[5].x, way2_fac2_fac3[5].y, way2_fac2_fac3[5].z) local obj = false - local dir = c_way5.dir + local dir = get_fullway_dir(way2_fac2_fac3[2], way2_fac2_fac3[3]) wayend = coorb r_way = get_fullway(coora, coorb, dir, obj) if (r_way.r){ @@ -1092,7 +1042,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord4_lim.a, bord4_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2b.a, limit_ch3_rail_line_2b.b, opt, del, text) pot2=1 wayend = 0 @@ -1108,7 +1058,7 @@ class tutorial.chapter_03 extends basic_chapter //Estaciones de la Fabrica local pl_nr = 1 - local c_list = st4_list + local c_list = station_tiles(way2_fac2_fac3[5], way2_fac2_fac3[4], loc2_tile) local st_nr = c_list.len() //Numero de estaciones local good = good_alias.goods local result = is_stations_building(pl_nr, c_list, st_nr, good) @@ -1125,7 +1075,7 @@ class tutorial.chapter_03 extends basic_chapter //Estaciones de la Fabrica local pl_nr = 1 - local c_list = st3_list + local c_list = station_tiles(way2_fac2_fac3[0], way2_fac2_fac3[1], loc2_tile) local st_nr = c_list.len() //Numero de estaciones local good = good_alias.goods local result = is_stations_building(pl_nr, c_list, st_nr, good) @@ -1153,12 +1103,29 @@ class tutorial.chapter_03 extends basic_chapter local opt = 2 local wt = gl_wt - local tile = my_tile(c_dep2) + local tile = my_tile(ch3_rail_depot2.a) if(pot0==0){ + local c_list = [my_tile(ch3_rail_depot2.b), my_tile(ch3_rail_depot2.a)] + local siz = c_list.len() + + local next_mark = true + try { + next_mark = delay_mark_tile(c_list) + } + catch(ev) { + return 0 + } if(!tile.find_object(mo_way)){ - label_x.create(c_dep2, player_x(pl), translate("Build Rails form here")) + label_x.create(ch3_rail_depot2.a, player_x(pl), translate("Build Rails form here")) } else{ + local stop_mark = true + try { + next_mark = delay_mark_tile(c_list, stop_mark) + } + catch(ev) { + return 0 + } pot0=1 } } @@ -1649,13 +1616,13 @@ class tutorial.chapter_03 extends basic_chapter case 6: //Primer tramo de rieles if (pot0==0){ - local lab_t = my_tile(label3_lim) + local lab_t = my_tile(way2_fac2_fac3[1]) local lab = lab_t.find_object(mo_label) if(pos.y > lab_t.y && lab && lab.get_owner().nr == 0){ if(tool_id==tool_build_way) return "" } - if (pos.x>=st3_way_lim.a.x && pos.y>=st3_way_lim.a.y && pos.x<=st3_way_lim.b.x && pos.y<=st3_way_lim.b.y){ + if (pos.x>=way2_fac2_fac3[0].x && pos.y>=way2_fac2_fac3[0].y && pos.x<=way2_fac2_fac3[1].x && pos.y<=way2_fac2_fac3[1].y){ if(tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover){ local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach(desc in way_desc){ @@ -1665,7 +1632,7 @@ class tutorial.chapter_03 extends basic_chapter } } } - if (pos.x>=bord3_lim.a.x && pos.y>=bord3_lim.a.y && pos.x<=bord3_lim.b.x && pos.y<=bord3_lim.b.y){ + if (pos.x>=limit_ch3_rail_line_2a.a.x && pos.y>=limit_ch3_rail_line_2a.a.y && pos.x<=limit_ch3_rail_line_2a.b.x && pos.y<=limit_ch3_rail_line_2a.b.y){ if (label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." } @@ -1676,7 +1643,7 @@ class tutorial.chapter_03 extends basic_chapter } //Construye un tunel else if (pot0==1 && pot1==0){ - if (pos.x>=c_tway_lim2.a.x && pos.y>=c_tway_lim2.a.y && pos.x<=c_tway_lim2.b.x && pos.y<=c_tway_lim2.b.y){ + if (pos.x>=way2_fac2_fac3[2].x && pos.y>=way2_fac2_fac3[2].y && pos.x<=way2_fac2_fac3[3].x && pos.y<=way2_fac2_fac3[3].y){ if(tool_id==tool_build_way || tool_id==tool_build_tunnel){ return null } @@ -1685,12 +1652,12 @@ class tutorial.chapter_03 extends basic_chapter //Segundo tramo de rieles if (pot1==1&&pot2==0){ - if (pos.x>=st4_way_lim.a.x && pos.y>=st4_way_lim.a.y && pos.x<=st4_way_lim.b.x && pos.y<=st4_way_lim.b.y){ + if (pos.x>=way2_fac2_fac3[4].x && pos.y>=way2_fac2_fac3[4].y && pos.x<=way2_fac2_fac3[5].x && pos.y<=way2_fac2_fac3[5].y){ if(tool_id==tool_build_bridge) return result return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) } - if (pos.x>=bord4_lim.a.x && pos.y>=bord4_lim.a.y && pos.x<=bord4_lim.b.x && pos.y<=bord4_lim.b.y){ + if (pos.x>=limit_ch3_rail_line_2b.a.x && pos.y>=limit_ch3_rail_line_2b.a.y && pos.x<=limit_ch3_rail_line_2b.b.x && pos.y<=limit_ch3_rail_line_2b.b.y){ if (!way && label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." } @@ -1703,14 +1670,14 @@ class tutorial.chapter_03 extends basic_chapter //Estaciones de la Fabrica else if (pot2==1 && pot3==0){ local good = good_alias.goods - local c_list = st4_list + local c_list = station_tiles(way2_fac2_fac3[5], way2_fac2_fac3[4], loc2_tile) local siz = c_list.len() return get_stations(pos, tool_id, result, good, c_list, siz) } //Estaciones del Productor else if (pot3==1 && pot4==0){ local good = good_alias.goods - local c_list = st3_list + local c_list = station_tiles(way2_fac2_fac3[0], way2_fac2_fac3[1], loc2_tile) local siz = c_list.len() return get_stations(pos, tool_id, result, good, c_list, siz) } @@ -1720,27 +1687,27 @@ class tutorial.chapter_03 extends basic_chapter break //Construye rieles y deposito - if (pos.x>=c_dep2_lim.a.x && pos.y>=c_dep2_lim.a.y && pos.x<=c_dep2_lim.b.x && pos.y<=c_dep2_lim.b.y){ + if (pos.x>=ch3_rail_depot2.a.x && pos.y>=ch3_rail_depot2.a.y && pos.x<=ch3_rail_depot2.b.x && pos.y<=ch3_rail_depot2.b.y){ if (pot0==0){ if(tool_id==tool_build_way) return null else - return translate("You must build track in")+" ("+c_dep2.tostring()+")." + return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." } else if (pot0==1 && pot1==0) if(tool_id==tool_build_depot) return null else - return result = translate("You must build the train depot in")+" ("+c_dep2.tostring()+")." + return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." } else if (pot0==0) - return translate("You must build track in")+" ("+c_dep2.tostring()+")." + return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." else if (pot0==1 && pot1==0) - return result = translate("You must build the train depot in")+" ("+c_dep2.tostring()+")." + return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." //Enrutar vehiculos (estacion nr1) if (pot1==1 && pot2==0){ - if (building && pos.x>=st3_way_lim.a.x && pos.y>=st3_way_lim.a.y && pos.x<=st3_way_lim.b.x && pos.y<=st3_way_lim.b.y){ + if (building && pos.x>=way2_fac2_fac3[0].x && pos.y>=way2_fac2_fac3[0].y && pos.x<=way2_fac2_fac3[1].x && pos.y<=way2_fac2_fac3[1].y){ if (tool_id==4108 && building){ if (stop_flag[0]==0){ stop_flag[0] = 1 @@ -1755,7 +1722,7 @@ class tutorial.chapter_03 extends basic_chapter return format(translate("Select station No.%d"),1)+" ("+coord(st3_list[0].x, st3_list[0].y).tostring()+".)" } //Enrutar vehiculos (estacion nr2) - if (building && pos.x>=st4_way_lim.a.x && pos.y>=st4_way_lim.a.y && pos.x<=st4_way_lim.b.x && pos.y<=st4_way_lim.b.y){ + if (building && pos.x>=way2_fac2_fac3[4].x && pos.y>=way2_fac2_fac3[4].y && pos.x<=way2_fac2_fac3[5].x && pos.y<=way2_fac2_fac3[5].y){ if (tool_id==4108 && building){ if (stop_flag[0]==1 && stop_flag[1]==0){ stop_flag[1] = 1 @@ -2130,12 +2097,12 @@ class tutorial.chapter_03 extends basic_chapter if ((depot.x != ch3_rail_depot1.b.x)||(depot.y != ch3_rail_depot1.b.y)) return "Depot coordinate is incorrect ("+coord3d_to_string(depot)+")." local cov = 1 - local veh = 6 + local veh = set_train_lenght(1) + 1 local good_list = [good_desc_x(good_alias.wood).get_catg_index()] //Wood local name = loc1_name_obj local st_tile = loc1_tile // 3 local is_st_tile = true - result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile, is_st_tile) + result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile, is_st_tile) if (result!=null){ backward_pot(0) @@ -2155,15 +2122,15 @@ class tutorial.chapter_03 extends basic_chapter case 7: local wt = gl_wt - if ((depot.x != c_dep2.x)||(depot.y != c_dep2.y)) - return translate("You must select the deposit located in")+" ("+c_dep2.tostring()+")." + if ((depot.x != ch3_rail_depot2.a.x)||(depot.y != ch3_rail_depot2.a.y)) + return translate("You must select the deposit located in")+" ("+ch3_rail_depot2.a.tostring()+")." local cov = 1 - local veh = 6 + local veh = set_train_lenght(2) + 1 local good_list = [good_desc_x(good_alias.plan).get_catg_index()] local name = loc2_name_obj - local st_tile = st3_list.len() // 3 + local st_tile = loc2_tile // 3 local is_st_tile = true - result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile, is_st_tile) + result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile, is_st_tile) if (result!=null){ local good = translate_objects_list.good_plan @@ -2173,7 +2140,7 @@ class tutorial.chapter_03 extends basic_chapter local selc = 0 local load = loc2_load local time = loc2_wait - local c_list = [st3_list[0], st4_list[0]] + local c_list = [way2_fac2_fac3[0], way2_fac2_fac3[5]] local siz = c_list.len() return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -2184,7 +2151,7 @@ class tutorial.chapter_03 extends basic_chapter if ((depot.x != c_dep3.x)||(depot.y != c_dep3.y)) return translate("You must select the deposit located in")+" ("+c_dep3.tostring()+")." local cov = dep_cnr3 - local veh = 8 + local veh = set_train_lenght(3) + 1 local good_list = [good_desc_x (good_alias.passa).get_catg_index()] //Passengers local name = loc3_name_obj local st_tile = loc3_tile @@ -2198,7 +2165,7 @@ class tutorial.chapter_03 extends basic_chapter local cov_list = depot.get_convoy_list() cov -= cir_nr - result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile, is_st_tile) + result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile, is_st_tile) if (result!=null){ reset_tmpsw() local good = translate(good_alias.passa) @@ -2342,7 +2309,7 @@ class tutorial.chapter_03 extends basic_chapter } if(pot1==0){ - local t = my_tile(ch3_rail_depot1.a) + local t = my_tile(ch3_rail_depot1.b) t.remove_object(player_x(1), mo_label) local tool = command_x(tool_build_depot) tool.work(player, t, sc_dep_name) @@ -2394,9 +2361,8 @@ class tutorial.chapter_03 extends basic_chapter //Primer tramo de rieles if (pot0==0){ - //Station tramo ---------------------------------------------------------------------- - local t_start = my_tile(st3_way_lim.a) - local t_end = my_tile(label3_lim) + local t_start = my_tile(way2_fac2_fac3[0]) + local t_end = my_tile(way2_fac2_fac3[1]) t_start.remove_object(player_x(1), mo_label) t_end.remove_object(player_x(1), mo_label) @@ -2404,9 +2370,8 @@ class tutorial.chapter_03 extends basic_chapter local t = command_x(tool_build_way) local err = t.work(player, t_start, t_end, sc_way_name) - //Outside tramo ---------------------------------------------------------------------- - t_start = my_tile(label3_lim) - t_end = my_tile(coord(c_way4.b.x, c_way4.b.y)) + t_start = my_tile(way2_fac2_fac3[1]) + t_end = my_tile(coord(way2_fac2_fac3[2].x, way2_fac2_fac3[2].y)) t = command_x(tool_build_way) err = t.work(player, t_start, t_end, sc_way_name) @@ -2414,13 +2379,22 @@ class tutorial.chapter_03 extends basic_chapter local opt = 0 local del = true local text = "X" - label_bord(bord3_lim.a, bord3_lim.b, opt, del, text) + label_bord(limit_ch3_rail_line_2a.a, limit_ch3_rail_line_2a.b, opt, del, text) } //Para el Tunel if (pot1==0){ - local t_start = my_tile(c_tway_lim2.a) - if ( pak_name == "pak128" ) { - t_start.x += 1 + local t_start = my_tile(way2_fac2_fac3[2]) + // check tile slope ramp ( pak128 ) + if ( t_start.get_slope() == 0 ) { + if ( way2_fac2_fac3[2].x < way2_fac2_fac3[3].x ) { + t_start.x += 1 + } else if ( way2_fac2_fac3[2].x > way2_fac2_fac3[3].x ) { + t_start.x -= 1 + } else if ( way2_fac2_fac3[2].y < way2_fac2_fac3[3].y ) { + t_start.x += 1 + } else if ( way2_fac2_fac3[2].y > way2_fac2_fac3[3].y ) { + t_start.x -= 1 + } } t_start.remove_object(player_x(1), mo_label) local t = command_x(tool_build_tunnel) @@ -2435,14 +2409,14 @@ class tutorial.chapter_03 extends basic_chapter //Segundo tramo de rieles if (pot2==0){ //Outside tramo ---------------------------------------------------------------------- - local t_start = my_tile(coord(c_way5.a.x, c_way5.a.y)) - local t_end = my_tile(label4_lim) + local t_start = my_tile(coord(way2_fac2_fac3[3].x, way2_fac2_fac3[3].y)) + local t_end = my_tile(way2_fac2_fac3[4]) local t = command_x(tool_build_way) local err = t.work(player, t_start, t_end, sc_way_name) //Station tramo ---------------------------------------------------------------------- - t_start = my_tile(label4_lim) - t_end = my_tile(st4_way_lim.b) + t_start = my_tile(way2_fac2_fac3[4]) + t_end = my_tile(way2_fac2_fac3[5]) t_start.remove_object(player_x(1), mo_label) t_end.remove_object(player_x(1), mo_label) @@ -2455,7 +2429,20 @@ class tutorial.chapter_03 extends basic_chapter local mail = good_alias.mail //Estaciones de la Fabrica if (pot3==0){ - for(local j=0;jch3_cov_lim2.a && current_cov Date: Sat, 3 May 2025 12:59:53 +0200 Subject: [PATCH 040/217] CHG chapter 3 step H - build city 1 to city 2 build bridges in chapter 3 not work two clicks --- class/class_basic_coords_p128.nut | 13 ++ class/class_basic_coords_p64.nut | 13 ++ class/class_chapter_03.nut | 209 +++++++++++++++--------------- 3 files changed, 132 insertions(+), 103 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index c99ea3b..e5a2a66 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -23,6 +23,10 @@ change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} +c_way3_lim <- {a = coord(94,198), b = coord(114,198)} +c_bridge3_limit <- {a = coord(90,198), b = coord(94,198)} +c_way3_tun_limit <- {b = coord(92,194), a = coord(63,202)} + /** * set tiles for buildings * @@ -156,6 +160,8 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way2_fac1_fac2 = rail factory 1 -> factory 2 * + * way3_cy1_cy3 = city 1 -> city 3 + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -169,6 +175,13 @@ way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(95,172,3), coor limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} +// connect city 1 -> city 3 +way3_cy1_cy3 <- {a = coord3d(114,198,0), b = coord3d(94,198,6), dir = 123} +// tunnel build +way3_tun_list <- [coord3d(88,198,7), coord3d(87,198,8)] +// portal - first tile - end tile - portal +way3_tun_coord <- [coord3d(90,198,7), coord3d(89,198,8), coord3d(63,198,8), coord3d(60,198,11)]//, dir = null + /** * chapter 5 * diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 3ade480..8431f5b 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -23,6 +23,10 @@ change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} +c_way3_lim <- {a = coord(93,198), b = coord(114,198)} +c_bridge3_limit <- {a = coord(90,198), b = coord(94,198)} +c_way3_tun_limit <- {b = coord(92,194), a = coord(63,202)} + /** * set tiles for buildings * @@ -157,6 +161,8 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way2_fac1_fac2 = rail factory 1 -> factory 2 * + * way3_cy1_cy3 = city 1 -> city 3 + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -170,6 +176,13 @@ way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coor limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} +// connect city 1 -> city 3 +way3_cy1_cy3 <- {a = coord3d(114,198,0), b = coord3d(93,198,5)}//, dir = 123 +// tunnel build +way3_tun_list <- [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] +// portal - first tile - end tile - portal +way3_tun_coord <- [coord3d(90,198,6), coord3d(89,198,6), coord3d(63,198,8), coord3d(60,198,11)]//, dir = null + /** * chapter 5 * diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 871d33d..e4dec42 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -48,37 +48,38 @@ class tutorial.chapter_03 extends basic_chapter //Step 8 ===================================================================================== //Tramo de via para el tunel - c_way6_lim = {a = coord(93,198), b = coord(114,198)} - c_way6 = {a = coord3d(114,198,0), b = coord3d(93,198,5), dir = 123} //Inicio, Fin de la via y direccion(fullway) + //c_way6_lim = {a = coord(93,198), b = coord(114,198)} + //c_way6 = {a = coord3d(114,198,0), b = coord3d(93,198,5), dir = 123} //Inicio, Fin de la via y direccion(fullway) //------------------------------------------------------------------------------------------ //Para el puente //------------------------------------------------------------------------------------------ - c_bway_lim3 = {a = coord(90,198), b = coord(94,198)} - c_brge3 = {a = coord(93,198), b = coord(91,198)} - brge3_z = 5 + //c_bway_lim3 = {a = coord(90,198), b = coord(94,198)} + //c_brge3 = {a = coord(93,198), b = coord(91,198)} + //brge3_z = 5 //------------------------------------------------------------------------------------------- //Para la entrada del tunel //------------------------------------------------------------------------------------------ - start_tunn = coord(90,198) - end_tunn = coord(89,198) - c_tun_lock = coord(88,198) + //start_tunn = coord(90,198) + //end_tunn = coord(89,198) + //c_tun_lock = coord(88,198) //------------------------------------------------------------------------------------------ //Subterraneo //------------------------------------------------------------------------------------------ - c_tunn2_lim = {b = coord(92,194), a = coord(63,202)} - c_tunn2 = {a = coord3d(90,198,6), b = coord3d(63,198,8), dir = null} //Inicio, Fin de la via y direccion(fullway) + //c_tunn2_lim = {b = coord(92,194), a = coord(63,202)} + //c_tunn2 = {a = coord3d(90,198,6), b = coord3d(63,198,8), dir = null} //Inicio, Fin de la via y direccion(fullway) - c_end_tunn = coord3d(60,198,11) + //c_end_tunn = coord3d(60,198,11) dir_1 = {s = 28, r = 2 } //Direccion de la slope y Way ribi - layer_list = [6,7,8] - layer_lvl = 6 - start_lvl_z = 6 - end_lvl_z = 8 - c_tun_list = [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] + //layer_list = [6,7,8] + //layer_lvl = 6 + //start_lvl_z = 0 + // end_lvl_z = 0 + + //c_tun_list = [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] //------------------------------------------------------------------------------------------ //Step 9 ===================================================================================== @@ -173,23 +174,23 @@ class tutorial.chapter_03 extends basic_chapter //c_tway_lim2.a = coord(95,172) //way2_fac2_fac3[2] = coord3d(95,172,3) //c_bway_lim1.a = coord(99,158) - c_way6_lim.a = coord(94,198) - c_way6.b = coord3d(94,198,6) - c_bway_lim3.b = coord(94,198) - c_tunn2.a = coord3d(90,198,7) + //c_way6_lim.a = coord(94,198) + //c_way6.b = coord3d(94,198,6) + //c_bway_lim3.b = coord(94,198) + //c_tunn2.a = coord3d(90,198,7) //end_tunn = coord(91,198) - layer_list = [7,8] - layer_lvl = 7 - start_lvl_z = 7 - end_lvl_z = 8 - c_tun_list = [coord3d(88,198,7), coord3d(87,198,8)] - - c_cate_list1[0].b = c_tunn2.a - c_cate_list1[1].a = c_tunn2.a + //layer_list = [7,8] + //layer_lvl = 7 + //start_lvl_z = 7 + //end_lvl_z = 8 + //c_tun_list = [coord3d(88,198,7), coord3d(87,198,8)] + + c_cate_list1[0].b = way3_tun_coord[0] + c_cate_list1[1].a = way3_tun_coord[0] c_cate_list1[4].b = coord3d(90,197,7) c_cate_list1[5].a = coord3d(90,197,7) - c_cate_lim1[0].b = c_tunn2.a - c_cate_lim1[1].a = c_tunn2.a + c_cate_lim1[0].b = way3_tun_coord[0] + c_cate_lim1[1].a = way3_tun_coord[0] c_cate_lim1[4].a = coord3d(91,197,5) c_cate_lim1[5].b = coord3d(91,197,5) @@ -203,8 +204,8 @@ class tutorial.chapter_03 extends basic_chapter dep_cnr3 = get_dep_cov_nr(ch3_cov_lim3.a,ch3_cov_lim3.b) - start_lvl_z = c_tunn2.a.z - end_lvl_z = c_tunn2.b.z + //start_lvl_z = way3_tun_coord[0].z + //end_lvl_z = way3_tun_coord[2].z cy1.name = get_city_name(city1_tow) cy2.name = get_city_name(city3_tow) @@ -287,7 +288,7 @@ class tutorial.chapter_03 extends basic_chapter if (r_way.r) text.cbor = "" + translate("Ok") + "" else - text.cbor = coord(r_way.c.x, r_way.c.y).href("("+r_way.c.tostring()+")") + text.cbor = coord(r_way.c.x, r_way.c.y).href("("+coord3d_to_string(r_way.c)+")") break case 3: @@ -386,37 +387,37 @@ class tutorial.chapter_03 extends basic_chapter if(pot0==0){ text = ttextfile("chapter_03/08_1-5.txt") text.tx = ttext("[1/5]") - text.w1 = c_way6_lim.b.href("("+c_way6_lim.b.tostring()+")") - text.w2 = c_way6_lim.a.href("("+c_way6_lim.a.tostring()+")") + text.w1 = c_way3_lim.b.href("("+c_way3_lim.b.tostring()+")") + text.w2 = c_way3_lim.a.href("("+c_way3_lim.a.tostring()+")") } else if(pot1==0){ text = ttextfile("chapter_03/08_2-5.txt") text.tx = ttext("[2/5]") - text.br = c_brge3.a.href("("+c_brge3.a.tostring()+")") + text.br = bridge3_coords.a.href("("+bridge3_coords.a.tostring()+")") } else if (pot2==0){ text = ttextfile("chapter_03/08_3-5.txt") text.tx = ttext("[3/5]") - text.t1 = "("+ start_tunn.tostring()+")" + text.t1 = "("+ way3_tun_coord[0].tostring()+")" } else if(pot3==0){ local slope = tile_x(r_way.c.x, r_way.c.y, r_way.c.z).get_slope() - if(r_way.c.z[4/5]") local tx_list = "" local c_bord = coord(r_way.c.x, r_way.c.y) - for(local j=0; j < layer_list.len(); j++){ - local c = slope==0?c_bord:coord(c_tun_list[j].x, c_tun_list[j].y) - local c_z = c_tun_list[j].z - local layer_lvl = layer_list[j] + for(local j=0; j < way3_tun_list.len(); j++){ + local c = slope==0?c_bord:coord(way3_tun_list[j].x, way3_tun_list[j].y) + local c_z = way3_tun_list[j].z + local layer_lvl = way3_tun_list[j].z if (glsw[j]==0){ c = coord3d(c.x, c.y, c_z) local link = c.href("("+c.tostring()+")") - local layer = translate("Layer level")+" = "+(layer_lvl)+"" + local layer = translate("Layer level")+" = "+(way3_tun_list[0].z)+"" tx_list += ttext("--> " + format("[%d] %s %s
", j+1, link, layer)) - text.lev =layer_lvl + text.lev = way3_tun_list[0].z text.tunn = link break } @@ -424,22 +425,22 @@ class tutorial.chapter_03 extends basic_chapter c = coord3d(c.x, c.y, c_z) local link = c.href("("+c.tostring()+")") local tx_ok = translate("OK") - local tx_coord = "("+coord(c_tun_list[j].x, c_tun_list[j].y).tostring()+","+c_z+")" - local layer = translate("Layer level")+" = "+(layer_lvl)+"" + local tx_coord = "("+coord(way3_tun_list[j].x, way3_tun_list[j].y).tostring()+","+c_z+")" + local layer = translate("Layer level")+" = "+(way3_tun_list[0].z)+"" tx_list += ttext(""+format("[%d] %s", j+1, tx_coord+" "+layer+" "+tx_ok+"
")) - text.lev = layer_lvl + text.lev = way3_tun_list[0].z text.tunn = link } } - text.mx_lvl = end_lvl_z + text.mx_lvl = way3_tun_list[way3_tun_list.len()-1].z text.list = tx_list } else{ text = ttextfile("chapter_03/08_5-5.txt") text.tx = ttext("[5/5]") - text.lev = end_lvl_z - text.t1 = "("+ start_tunn.tostring()+")" - text.t2 = "("+ c_end_tunn.tostring()+")" + text.lev = way3_tun_list[way3_tun_list.len()-1].z + text.t1 = "("+ way3_tun_coord[0].tostring()+")" + text.t2 = "("+ way3_tun_coord[way3_tun_coord.len()-1].tostring()+")" } } text.plus = key_alias.plus_s @@ -498,7 +499,7 @@ class tutorial.chapter_03 extends basic_chapter break case 10: - if (pot0==0){ + if (pot0==0){ if (glsw[1]==0){ text = ttextfile("chapter_03/10_1-4.txt") text.tx = ttext("[1/4]") @@ -598,7 +599,7 @@ class tutorial.chapter_03 extends basic_chapter if (r_way.r) text.cbor = "" + translate("Ok") + "" else - text.cbor = coord(r_way.c.x, r_way.c.y).href("("+r_way.c.tostring()+")") + text.cbor = coord(r_way.c.x, r_way.c.y).href("("+coord3d_to_string(r_way.c)+")") text.tool1 = translate_objects_list.inspec text.tool2 = translate_objects_list.tools_rail @@ -744,7 +745,7 @@ class tutorial.chapter_03 extends basic_chapter local tile = my_tile(bridge2_coords.a) if ((!tile.find_object(mo_bridge))){ label_x.create(tile, player_x(pl), translate("Build a Bridge here!.")) - label_x.create(my_tile(bridge2_coords.b), player_x(pl), "") + label_x.create(my_tile(bridge2_coords.b), player_x(pl), translate("Build a Bridge here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { @@ -1160,8 +1161,8 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_steps = 5 //Para el tramo de via if (pot0==0){ - local coora = coord3d(c_way6.a.x, c_way6.a.y, c_way6.a.z) - local coorb = coord3d(c_way6.b.x, c_way6.b.y, c_way6.b.z) + local coora = coord3d(way3_cy1_cy3.a.x, way3_cy1_cy3.a.y, way3_cy1_cy3.a.z) + local coorb = coord3d(way3_cy1_cy3.b.x, way3_cy1_cy3.b.y, way3_cy1_cy3.b.z) local obj = false local tunnel = false local dir = get_dir_start(coora) @@ -1174,15 +1175,17 @@ class tutorial.chapter_03 extends basic_chapter //Para el puente else if (pot0==1 && pot1==0){ chapter_sub_step = 1 // sub step finish - local tile = my_tile(c_brge3.a) + local tile = my_tile(bridge3_coords.a) if ((!tile.find_object(mo_bridge))){ - label_x.create(c_brge3.a, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(bridge3_coords.a, player_x(pl), translate("Build a Bridge here!.")) + label_x.create(my_tile(bridge3_coords.b), player_x(pl), translate("Build a Bridge here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { tile.remove_object(player_x(1), mo_label) + my_tile(bridge3_coords.b).remove_object(player_x(1), mo_label) - if (my_tile(c_brge3.b).find_object(mo_bridge)){ + if (my_tile(bridge3_coords.b).find_object(mo_bridge)){ pot1=1 } } @@ -1190,7 +1193,7 @@ class tutorial.chapter_03 extends basic_chapter //Para la entrada del tunel else if (pot1==1 && pot2==0){ chapter_sub_step = 2 // sub step finish - local t_tunn = my_tile(start_tunn) + local t_tunn = my_tile(way3_tun_coord[0]) if (!t_tunn.find_object(mo_tunnel)){ local label_t = my_tile(start_tunn) @@ -1210,7 +1213,7 @@ class tutorial.chapter_03 extends basic_chapter } } else{ - label_x.create(start_tunn, player_x(pl), translate("Place a Tunnel here!.")) + label_x.create(way3_tun_coord[0], player_x(pl), translate("Place a Tunnel here!.")) } } else{ @@ -1221,8 +1224,8 @@ class tutorial.chapter_03 extends basic_chapter //Para conectar las dos entradas del tunel else if (pot2==1 && pot3==0){ chapter_sub_step = 3 // sub step finish - local coora = coord3d(c_tunn2.a.x, c_tunn2.a.y, c_tunn2.a.z) - local coorb = coord3d(c_tunn2.b.x, c_tunn2.b.y, c_tunn2.b.z) + local coora = coord3d(way3_tun_coord[0].x, way3_tun_coord[0].y, way3_tun_coord[0].z) + local coorb = coord3d(way3_tun_coord[2].x, way3_tun_coord[2].y, way3_tun_coord[2].z) local obj = false local tunnel = true local dir = get_dir_start(coora) @@ -1233,7 +1236,7 @@ class tutorial.chapter_03 extends basic_chapter //return 45 } - if(r_way.c.z=way2_fac1_fac2[3].x && pos.y>=way2_fac1_fac2[3].y && pos.x<=way2_fac1_fac2[2].x && pos.y<=way2_fac1_fac2[2].y){ + if (pos.x>=bridge2_coords.b.x-1 && pos.y>=bridge2_coords.b.y-1 && pos.x<=bridge2_coords.a.x+1 && pos.y<=bridge2_coords.a.y+1){ if(tool_id==tool_build_way) return null if(tool_id==tool_build_bridge){ - if(pos.z==bridge2_coords.a.z) + if(pos.z==bridge2_coords.a.z || pos.z==bridge2_coords.b.z) return null else - return translate("You must build the bridge here")+" ("+bridge2_coords[1].tostring()+")." + return translate("You must build the bridge here")+" ("+bridge2_coords.b.tostring()+")." } } } @@ -1753,7 +1756,7 @@ class tutorial.chapter_03 extends basic_chapter case 8: //Construye tramo de via para el tunel if (pot0==0){ - if (pos.x>=c_way6_lim.a.x && pos.y<=c_way6_lim.a.y && pos.x<=c_way6_lim.b.x && pos.y>=c_way6_lim.b.y){ + if (pos.x>=c_way3_lim.a.x && pos.y<=c_way3_lim.a.y && pos.x<=c_way3_lim.b.x && pos.y>=c_way3_lim.b.y){ if (tool_id==tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) } @@ -1762,14 +1765,14 @@ class tutorial.chapter_03 extends basic_chapter } //Construye un puente else if (pot0==1 && pot1==0){ - if (pos.x>=c_bway_lim3.a.x && pos.y>=c_bway_lim3.a.y && pos.x<=c_bway_lim3.b.x && pos.y<=c_bway_lim3.b.y){ + if (pos.x>=c_bridge3_limit.a.x && pos.y>=c_bridge3_limit.a.y && pos.x<=c_bridge3_limit.b.x && pos.y<=c_bridge3_limit.b.y){ if(tool_id==tool_build_way) return null if(tool_id==tool_build_bridge){ - if(pos.z==brge3_z) + if(pos.z==bridge3_coords.a.z || pos.z==bridge3_coords.b.z) return null else - return translate("You must build the bridge here")+" ("+c_brge3.a.tostring()+")." + return translate("You must build the bridge here")+" ("+bridge3_coords.a.tostring()+")." } } } @@ -1783,10 +1786,10 @@ class tutorial.chapter_03 extends basic_chapter //if (pos.x==c_tun_lock.x && pos.y==c_tun_lock.y) //return translate("Press [Ctrl] to build a tunnel entrance here")+" ("+start_tunn.tostring()+".)" - if (pos.x == start_tunn.x && pos.y == start_tunn.y) + if (pos.x == way3_tun_coord[0].x && pos.y == way3_tun_coord[0].y) return null - if (pos.x == end_tunn.x && pos.y == end_tunn.y) + if (pos.x == way3_tun_coord[1].x && pos.y == way3_tun_coord[1].y) return null } } @@ -1805,21 +1808,21 @@ class tutorial.chapter_03 extends basic_chapter local max = 1 local count_tunn = count_tunnel(pos, max) if (tool_id==tool_remover){ - if (pos.x>=c_tunn2_lim.a.x && pos.y<=c_tunn2_lim.a.y && pos.x<=c_tunn2_lim.b.x && pos.y>=c_tunn2_lim.b.y){ + if (pos.x>=c_way3_tun_limit.a.x && pos.y<=c_way3_tun_limit.a.y && pos.x<=c_way3_tun_limit.b.x && pos.y>=c_way3_tun_limit.b.y){ //El Tunel ya tiene la altura correcta - if (r_way.c.z+plus == c_tunn2.b.z) { + if (r_way.c.z+plus == way3_tun_coord[2].z) { return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) } if(!count_tunn && slope==0 && way && way.is_marked()) return null - if(count_tunn && pos.z!=end_lvl_z) return translate("You must use the tool to raise the ground here")+" ("+r_way.c.tostring()+".)" + if(count_tunn && pos.z!=way3_tun_list[way3_tun_list.len()-1].z) return translate("You must use the tool to raise the ground here")+" ("+r_way.c.tostring()+".)" } } if (tool_id==tool_build_tunnel || tool_id==tool_build_way || tool_id== 4099){ - if (pos.x>=c_tunn2_lim.a.x && pos.y<=c_tunn2_lim.a.y && pos.x<=c_tunn2_lim.b.x && pos.y>=c_tunn2_lim.b.y){ + if (pos.x>=c_way3_tun_limit.a.x && pos.y<=c_way3_tun_limit.a.y && pos.x<=c_way3_tun_limit.b.x && pos.y>=c_way3_tun_limit.b.y){ //El Tunel ya tiene la altura correcta - if (r_way.c.z+plus == c_tunn2.b.z) { + if (r_way.c.z+plus == way3_tun_coord[2].z) { //gui.add_message("Z: "+r_way.c.z+plus) return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) } @@ -1828,12 +1831,12 @@ class tutorial.chapter_03 extends basic_chapter local tunn_r_way = t_r_way.find_object(mo_tunnel) if(tunn_r_way){ //Se comprueba el primer tramo despues de la entrada del tunel---------------------------------- - local under = c_tunn2.a.z + local under = way3_tun_coord[0].z result = under_way_check(under, dir) if(result != null){ return result } - local start = c_tunn2.a + local start = way3_tun_coord[0] local max = 3 local new_max = tunnel_get_max(start, pos, max, dir) if(new_max < max){ @@ -1869,9 +1872,9 @@ class tutorial.chapter_03 extends basic_chapter } //Tunel Con pendientes --------------------------------------------------------------------------------------- if (tool_id == tool_setslope){ - if (pos.x>=c_tunn2_lim.a.x && pos.y<=c_tunn2_lim.a.y && pos.x<=c_tunn2_lim.b.x && pos.y>=c_tunn2_lim.b.y){ + if (pos.x>=c_way3_tun_limit.a.x && pos.y<=c_way3_tun_limit.a.y && pos.x<=c_way3_tun_limit.b.x && pos.y>=c_way3_tun_limit.b.y){ local slp_way = tile_x(r_way.c.x, r_way.c.y, r_way.c.z).get_slope() - local end_z = c_tunn2.b.z + local end_z = way3_tun_coord[2].z if (slp_way == dir_1.s) return translate("The slope is ready.") else if (pos.z < end_z){ @@ -2544,16 +2547,16 @@ class tutorial.chapter_03 extends basic_chapter case 8: if (pot0==0){ - local coora = coord3d(c_way6.a.x, c_way6.a.y, c_way6.a.z) - local coorb = coord3d(c_way6.b.x, c_way6.b.y, c_way6.b.z) + local coora = coord3d(way3_cy1_cy3.a.x, way3_cy1_cy3.a.y, way3_cy1_cy3.a.z) + local coorb = coord3d(way3_cy1_cy3.b.x, way3_cy1_cy3.b.y, way3_cy1_cy3.b.z) local t = command_x(tool_build_way) t.set_flags(2) local err = t.work(player, coora, coorb, sc_way_name) pot0=1 } if (pot0==1 && pot1==0){ - local t_start = my_tile(c_brge3.a) - local t_end = my_tile(c_brge3.b) + local t_start = my_tile(bridge3_coords.a) + local t_end = my_tile(bridge3_coords.b) t_start.unmark() t_end.unmark() t_start.remove_object(player_x(1), mo_label) @@ -2564,7 +2567,7 @@ class tutorial.chapter_03 extends basic_chapter pot1=1 } if (pot1==1 && pot2==0){ - local t_tunn = my_tile(start_tunn) + local t_tunn = my_tile(way3_tun_coord[0]) t_tunn.remove_object(player_x(1), mo_label) local t = command_x(tool_build_tunnel) t.set_flags(2) @@ -2574,7 +2577,7 @@ class tutorial.chapter_03 extends basic_chapter * FIX built tunnel end of bridge pak128 */ if ( pak_name == "pak128" ) { - local tile_t = my_tile(start_tunn) + local tile_t = my_tile(way3_tun_coord[0]) local tile_b = tile_x( tile_t.x+1, tile_t.y, tile_t.z-2 ) //local tile_w = tile_x( c_tunn2.a.x+4, c_tunn2.a.y, c_tunn2.a.z-1 ) @@ -2594,21 +2597,21 @@ class tutorial.chapter_03 extends basic_chapter } } if (pot2==1 && pot3==0){ - local siz = (start_tunn.x)-(c_tun_list[0].x) + local siz = (way3_tun_coord[0].x)-(way3_tun_list[0].x) local opt = 1 //Incrementa x - local t = tile_x(c_tun_list[0].x, c_tun_list[0].y, start_lvl_z) + local t = tile_x(way3_tun_list[0].x, way3_tun_list[0].y, way3_tun_list[0].z) clean_track_segment(t, siz, opt) local t_tun = command_x(tool_build_tunnel) - local c_start = c_tunn2.a - local c_end = coord3d(c_tun_list[0].x, c_tun_list[0].y, start_lvl_z) + local c_start = way3_tun_coord[0] + local c_end = coord3d(way3_tun_list[0].x, way3_tun_list[0].y, way3_tun_list[0].z) t_tun.work(player, c_start, c_end, sc_tunn_name) pot3 = 1 } if (pot3==1 && pot4==0){ local t_tun = command_x(tool_build_tunnel) - local c_list = c_tun_list - local t_start = my_tile(start_tunn) + local c_list = way3_tun_list + local t_start = my_tile(way3_tun_coord[0]) for(local j = 0; j<(c_list.len()-1);j++){ local c = coord3d(c_list[j].x, c_list[j].y, (t_start.z+j)) t_tun.work(player, t_start, c, sc_tunn_name) @@ -2619,7 +2622,7 @@ class tutorial.chapter_03 extends basic_chapter } command_x.set_slope(player, c, slope.all_up_slope) } - t_tun.work(player, c_tunn2.a , c_tunn2.b, sc_tunn_name) + t_tun.work(player, way3_tun_coord[0] , way3_tun_coord[2], sc_tunn_name) } return null From 1bf270f3827f146b425398ed2d1ea075b5069d8a Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 4 May 2025 02:42:23 +0200 Subject: [PATCH 041/217] CHG finish chapter 3 not correct work: disabled mark station step K class_basic_coords_p128, class_basic_coords_p128 not finish --- class/class_basic_chapter.nut | 41 ++++ class/class_basic_coords_p128.nut | 25 +++ class/class_basic_coords_p64.nut | 41 +++- class/class_basic_data.nut | 33 ++- class/class_chapter_03.nut | 350 ++++++++++++------------------ 5 files changed, 268 insertions(+), 222 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 53e5915..7ebe6dc 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3380,5 +3380,46 @@ function station_tiles(tile_a, tile_b, count) { return st_tiles } +/** + * check rail platform + * + * tile = tile_x halt pos + * rtype = 0 - check pos in platform + * 1 - return array platform + * pos = tile to click + * + * + */ +function check_rail_station(tile, rtype, pos = null) { + local halt_tiles = tile.get_halt().get_tile_list() + local d = tile.get_way_dirs(wt_rail) + + local check_x = null + local check_y = null + + local pl_tiles = [] + + if ( d == 1 || d == 4 || d == 5 ) { + // NS + check_x = tile.x + } else if ( d == 2 || d == 8 || d == 10 ) { + // EW + check_y = tile.y + } + + for ( local i = 0; i < halt_tiles.len(); i++ ) { + if ( ( halt_tiles[i].x == check_x || halt_tiles[i].y == check_y ) ) { + pl_tiles.append(halt_tiles[i]) + if ( rtype == 0 && halt_tiles[i].x == pos.x && halt_tiles[i].y == pos.y ) { + return true + } + } + } + + if ( pl_tiles.len() > 0 && rtype == 1 ) { + return pl_tiles + } + +} // END OF FILE diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index e5a2a66..bbc32bf 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -177,11 +177,36 @@ limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} // connect city 1 -> city 3 way3_cy1_cy3 <- {a = coord3d(114,198,0), b = coord3d(94,198,6), dir = 123} +/* connect [0] - [1] -> city 1 - city 4 + * connect [2] - [3] -> city 4 - city 5 + * connect [4] - [5] -> city 5 - city 6 + */ +way3_cy1_cy6 <- [ {a = coord3d(120,199,0), b = coord3d(120,264,3) }, {a = coord3d(121,264,3), b = coord3d(121,199,0) }, + {a = coord3d(120,271,3), b = coord3d(120,324,5) }, {a = coord3d(121,324,5), b = coord3d(121,271,3) }, + {a = coord3d(120,331,5), b = coord3d(120,377,9) }, {a = coord3d(121,377,9), b = coord3d(121,331,5) } + ] // tunnel build way3_tun_list <- [coord3d(88,198,7), coord3d(87,198,8)] // portal - first tile - end tile - portal way3_tun_coord <- [coord3d(90,198,7), coord3d(89,198,8), coord3d(63,198,8), coord3d(60,198,11)]//, dir = null +/** + * define signals and catenary for rail line city 3 -> city 6 + * + */ +way3_sign_list <- [ {c = coord3d(94,197,6), ribi = 8}, {c = coord3d(112,198,2), ribi = 2}, + {c = coord3d(121,199,0), ribi = 1}, {c = coord3d(120,263,3), ribi = 4}, + {c = coord3d(121,271,3), ribi = 1}, {c = coord3d(120,324,5), ribi = 4}, + {c = coord3d(121,331,5), ribi = 1}, {c = coord3d(120,377,9), ribi = 4}, + ] +way3_cate_list1 <- [ {a = coord3d(55,198,11), b = way3_tun_coord[0], dir = 0, tunn = true}, + {a = way3_tun_coord[0], b = coord3d(120,198,0), dir = 0, tunn = false}, + {a = coord3d(120,198,0), b = coord3d(120,383,9), dir = 5, tunn = false}, + {a = coord3d(121,383,9), b = coord3d(121,197,0), dir = 2, tunn = false}, + {a = coord3d(120,197,0), b = coord3d(90,197,7), dir = 6, tunn = false}, + {a = coord3d(90,197,7), b = coord3d(55,197,11), dir = 6, tunn = true} + ] + /** * chapter 5 * diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 8431f5b..f4ab5fd 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -127,8 +127,14 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), tile_x(120,326,5), + tile_x(120,380,9), tile_x(121,326,5), tile_x(121,266,3), tile_x(116,197,0) + ] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] + + /** * define depots */ @@ -141,6 +147,7 @@ road_depot_ch5 <- coord(131,232) */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} +ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} /** * define bridges @@ -157,11 +164,14 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} /** * define ways * - * way1_coords = road city 1 -> city 2 + * way1_coords = road city 1 -> city 2 * * way2_fac1_fac2 = rail factory 1 -> factory 2 * - * way3_cy1_cy3 = city 1 -> city 3 + * way3_cy1_cy3 = city 1 -> city 3 + * way3_cy1_cy6 = city 1 -> city 4 -> city 5 -> city 6 + * + * way3_tun_list, way3_tun_coord = build tunnel city 1 -> city 3 * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -178,11 +188,36 @@ limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} // connect city 1 -> city 3 way3_cy1_cy3 <- {a = coord3d(114,198,0), b = coord3d(93,198,5)}//, dir = 123 +/* connect [0] - [1] -> city 1 - city 4 + * connect [2] - [3] -> city 4 - city 5 + * connect [4] - [5] -> city 5 - city 6 + */ +way3_cy1_cy6 <- [ {a = coord3d(120,199,0), b = coord3d(120,264,3) }, {a = coord3d(121,264,3), b = coord3d(121,199,0) }, + {a = coord3d(120,271,3), b = coord3d(120,324,5) }, {a = coord3d(121,324,5), b = coord3d(121,271,3) }, + {a = coord3d(120,331,5), b = coord3d(120,377,9) }, {a = coord3d(121,377,9), b = coord3d(121,331,5) } + ] // tunnel build way3_tun_list <- [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] -// portal - first tile - end tile - portal +// portal - first tile underground - end tile underground - portal way3_tun_coord <- [coord3d(90,198,6), coord3d(89,198,6), coord3d(63,198,8), coord3d(60,198,11)]//, dir = null +/** + * define signals and catenary for rail line city 3 -> city 6 + * + */ +way3_sign_list <- [ {c = coord3d(94,197,6), ribi = 8}, {c = coord3d(112,198,2), ribi = 2}, + {c = coord3d(121,199,0), ribi = 1}, {c = coord3d(120,263,3), ribi = 4}, + {c = coord3d(121,271,3), ribi = 1}, {c = coord3d(120,324,5), ribi = 4}, + {c = coord3d(121,331,5), ribi = 1}, {c = coord3d(120,377,9), ribi = 4}, + ] +way3_cate_list1 <- [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tunn = true}, + {a = coord3d(90,198,6), b = coord3d(120,198,0), dir = 0, tunn = false}, + {a = coord3d(120,198,0), b = coord3d(120,383,9), dir = 5, tunn = false}, + {a = coord3d(121,383,9), b = coord3d(121,197,0), dir = 2, tunn = false}, + {a = coord3d(120,197,0), b = coord3d(90,197,6), dir = 6, tunn = false}, + {a = coord3d(90,197,6), b = coord3d(55,197,11), dir = 6, tunn = true} + ] + /** * chapter 5 * diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index a466d20..64b290e 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -962,9 +962,10 @@ function set_transportet_goods(id) { /* * set loading capacity * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 4 - chapter 3 step 11 : city train * */ function set_loading_capacity(id) { @@ -981,6 +982,9 @@ function set_loading_capacity(id) { case 3: return 100 break + case 4: + return 100 + break } break case "pak64.german": @@ -994,6 +998,9 @@ function set_loading_capacity(id) { case 3: return 60 break + case 4: + return 80 + break } break case "pak128": @@ -1007,6 +1014,9 @@ function set_loading_capacity(id) { case 3: return 100 break + case 4: + return 100 + break } break } @@ -1016,10 +1026,10 @@ function set_loading_capacity(id) { /* * set waiting time * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby - * + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 4 - chapter 3 step 11 : city train * * 1 day = 2115 * 1 hour = 88 @@ -1038,6 +1048,9 @@ function set_waiting_time(id) { case 3: return 10571 break + case 4: + return 25369 + break } break case "pak64.german": @@ -1051,6 +1064,9 @@ function set_waiting_time(id) { case 3: return 2555 break + case 4: + return 2115 + break } break case "pak128": @@ -1064,6 +1080,9 @@ function set_waiting_time(id) { case 3: return 10571 break + case 4: + return 25369 + break } break } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index e4dec42..db815ca 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -41,103 +41,22 @@ class tutorial.chapter_03 extends basic_chapter //Step 7 ===================================================================================== loc2_name_obj = get_veh_ch3(2) - loc2_tile = calc_station_lenght(get_veh_ch3(2), get_veh_ch3(2), set_train_lenght(2)) + loc2_tile = calc_station_lenght(get_veh_ch3(2), get_veh_ch3(5), set_train_lenght(2)) loc2_load = 100 loc2_wait = 0 f3_reached = set_transportet_goods(2) - //Step 8 ===================================================================================== - //Tramo de via para el tunel - //c_way6_lim = {a = coord(93,198), b = coord(114,198)} - //c_way6 = {a = coord3d(114,198,0), b = coord3d(93,198,5), dir = 123} //Inicio, Fin de la via y direccion(fullway) - //------------------------------------------------------------------------------------------ - - //Para el puente - //------------------------------------------------------------------------------------------ - //c_bway_lim3 = {a = coord(90,198), b = coord(94,198)} - //c_brge3 = {a = coord(93,198), b = coord(91,198)} - //brge3_z = 5 - //------------------------------------------------------------------------------------------- - - //Para la entrada del tunel - //------------------------------------------------------------------------------------------ - //start_tunn = coord(90,198) - //end_tunn = coord(89,198) - //c_tun_lock = coord(88,198) - //------------------------------------------------------------------------------------------ - - //Subterraneo - //------------------------------------------------------------------------------------------ - //c_tunn2_lim = {b = coord(92,194), a = coord(63,202)} - //c_tunn2 = {a = coord3d(90,198,6), b = coord3d(63,198,8), dir = null} //Inicio, Fin de la via y direccion(fullway) - - //c_end_tunn = coord3d(60,198,11) dir_1 = {s = 28, r = 2 } //Direccion de la slope y Way ribi - //layer_list = [6,7,8] - //layer_lvl = 6 - //start_lvl_z = 0 - // end_lvl_z = 0 - - //c_tun_list = [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] - //------------------------------------------------------------------------------------------ - - //Step 9 ===================================================================================== - //Para las vias y limites - c_way_list1 = [ {a = coord3d(120,199,0), b = coord3d(120,264,3) }, {a = coord3d(121,264,3), b = coord3d(121,199,0) }, - {a = coord3d(120,271,3), b = coord3d(120,324,5) }, {a = coord3d(121,324,5), b = coord3d(121,271,3) }, - {a = coord3d(120,331,5), b = coord3d(120,377,9) }, {a = coord3d(121,377,9), b = coord3d(121,331,5) } - ] - - c_way_lim1 = [ {a = coord(120,199), b = coord(120,264) }, {b = coord(121,264), a = coord(121,199) }, - {a = coord(120,271), b = coord(120,324) }, {b = coord(121,324), a = coord(121,271) }, - {a = coord(120,331), b = coord(120,377) }, {b = coord(121,377), a = coord(121,331) } - ] - //Para las señales de paso - sign_list = [ {c = coord3d(94,197,6), ribi = 8}, {c = coord3d(112,198,2), ribi = 2}, - {c = coord3d(121,199,0), ribi = 1}, {c = coord3d(120,263,3), ribi = 4}, - {c = coord3d(121,271,3), ribi = 1}, {c = coord3d(120,324,5), ribi = 4}, - {c = coord3d(121,331,5), ribi = 1}, {c = coord3d(120,377,9), ribi = 4}, - ] - - //Step 10 ===================================================================================== - //Para las catenary y limites - c_cate_list1 = [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tunn = true}, - {a = coord3d(90,198,6), b = coord3d(120,198,0), dir = 0, tunn = false}, - {a = coord3d(120,198,0), b = coord3d(120,383,9), dir = 5, tunn = false}, - {a = coord3d(121,383,9), b = coord3d(121,197,0), dir = 2, tunn = false}, - {a = coord3d(120,197,0), b = coord3d(90,197,6), dir = 6, tunn = false}, - {a = coord3d(90,197,6), b = coord3d(55,197,11), dir = 6, tunn = true} - ] - c_cate_lim1 = [ {a = coord3d(55,198,11), b = coord3d(90,198,6) }, - {a = coord3d(90,198,6), b = coord3d(120,198,0) }, - {a = coord3d(120,198,0), b = coord3d(120,383,9) }, - {b = coord3d(121,383,9), a = coord3d(121,197,0)}, - {b = coord3d(120,197,0), a = coord3d(91,197,6)}, - {b = coord3d(91,197,6), a = coord3d(55,197,11)} - ] - - //Limites del deposito y rieles - //-------------------------------------------------------------------------------------------- - c_dep3 = coord(108,196) - c_dep3_lim = {a = coord(108,196), b = coord(108,197)} - //-------------------------------------------------------------------------------------------- //Step 11 ===================================================================================== loc3_name_obj = get_veh_ch3(3) - loc3_tile = 4 - loc3_load = 100 - loc3_wait = 25369 + loc3_tile = calc_station_lenght(get_veh_ch3(3), get_veh_ch3(6), set_train_lenght(3)) + loc3_load = set_loading_capacity(4) + loc3_wait = set_waiting_time(4) line1_name = "ch3_l1" - st_lim_a = [ {a = coord(55,197), b = coord(58,197)}, {a = coord(116,198), b = coord(119,198)}, - {a = coord(120,266), b= coord(120,269)}, {a = coord(120,326), b= coord(120,329)}, - {a = coord(120,380), b= coord(120,383)}, {a = coord(121,326), b= coord(121,329)}, - {a = coord(121,266), b= coord(121,269)}, {a = coord(116,197), b = coord(119,197)} - ] - sch_list = [ coord(55,197), coord(116,198), coord(120,266), coord(120,326), - coord(120,380), coord(121,326), coord(121,266), coord(116,197) - ] + dep_cnr3 = null //auto started //Script @@ -167,33 +86,6 @@ class tutorial.chapter_03 extends basic_chapter function start_chapter(){ //Inicia solo una vez por capitulo if ( pak_name == "pak128" ) { - //c_brge1.a = coord(100,158) - //c_way1.b = coord3d(107,158,1) - //c_way3.a = coord3d(99,158,1) - //bord3_lim.b = coord(96,172) - //c_tway_lim2.a = coord(95,172) - //way2_fac2_fac3[2] = coord3d(95,172,3) - //c_bway_lim1.a = coord(99,158) - //c_way6_lim.a = coord(94,198) - //c_way6.b = coord3d(94,198,6) - //c_bway_lim3.b = coord(94,198) - //c_tunn2.a = coord3d(90,198,7) - //end_tunn = coord(91,198) - //layer_list = [7,8] - //layer_lvl = 7 - //start_lvl_z = 7 - //end_lvl_z = 8 - //c_tun_list = [coord3d(88,198,7), coord3d(87,198,8)] - - c_cate_list1[0].b = way3_tun_coord[0] - c_cate_list1[1].a = way3_tun_coord[0] - c_cate_list1[4].b = coord3d(90,197,7) - c_cate_list1[5].a = coord3d(90,197,7) - c_cate_lim1[0].b = way3_tun_coord[0] - c_cate_lim1[1].a = way3_tun_coord[0] - c_cate_lim1[4].a = coord3d(91,197,5) - c_cate_lim1[5].b = coord3d(91,197,5) - dir_1.s = 56 } @@ -204,9 +96,6 @@ class tutorial.chapter_03 extends basic_chapter dep_cnr3 = get_dep_cov_nr(ch3_cov_lim3.a,ch3_cov_lim3.b) - //start_lvl_z = way3_tun_coord[0].z - //end_lvl_z = way3_tun_coord[2].z - cy1.name = get_city_name(city1_tow) cy2.name = get_city_name(city3_tow) cy3.name = get_city_name(city4_tow) @@ -454,9 +343,9 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/09_1-2.txt") text.tx = ttext("[1/2]") local w_nr = 0 - for(local j=0;j[2/2]
") local sigtxt = "" - local list = sign_list + local list = way3_sign_list for(local j=0;j[4/4]") } - text.dep = c_dep3.href("("+c_dep3.tostring()+")") + text.dep = ch3_rail_depot3.b.href("("+ch3_rail_depot3.b.tostring()+")") break case 11: local tx_list = "" - local nr = sch_list.len() - local list = sch_list + local nr = ch3_rail_stations.len() + local list = ch3_rail_stations + + local mark_st = 0 for (local j=0;j%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) } else{ tx_list += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) + delay_mark_tile(st_list, true) + mark_st++ } } local c = coord(list[0].x, list[0].y) text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list - text.dep = c_dep3.href("("+c_dep3.tostring()+")") + text.dep = ch3_rail_depot3.b.href("("+ch3_rail_depot3.b.tostring()+")") text.loc3 = translate(loc3_name_obj) text.load = loc3_load text.wait = get_wait_time_text(loc3_wait) @@ -1279,19 +1177,19 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_steps = 2 //Para las vias if (pot0==0){ - for(local j=0;j=c_way_lim1[j].a.x && pos.y>=c_way_lim1[j].a.y && pos.x<=c_way_lim1[j].b.x && pos.y<=c_way_lim1[j].b.y){ + local limit_t = [] + if ( way3_cy1_cy6[j].a.x > way3_cy1_cy6[j].b.x || way3_cy1_cy6[j].a.y > way3_cy1_cy6[j].b.y ) { + limit_t.append(way3_cy1_cy6[j].b) + limit_t.append(way3_cy1_cy6[j].a) + } else { + limit_t.append(way3_cy1_cy6[j].a) + limit_t.append(way3_cy1_cy6[j].b) + } + + if(pos.x>=limit_t[0].x && pos.y>=limit_t[0].y && pos.x<=limit_t[1].x && pos.y<=limit_t[1].y) { if(tool_id == tool_build_way){ return null } } - else if (j== c_way_lim1.len()-1){ + else if (j == way3_cy1_cy6.len()-1){ result = translate("You are outside the allowed limits!")+" ("+pos.tostring()+")." } break @@ -1926,8 +1833,8 @@ class tutorial.chapter_03 extends basic_chapter //Elimina las señales if (tool_id==tool_remover){ if (sign || roadsign){ - for(local j=0;j=c_cate_lim1[j].a.x && pos.y>=c_cate_lim1[j].a.y && pos.x<=c_cate_lim1[j].b.x && pos.y<=c_cate_lim1[j].b.y){ - - if(tool_id == 4114){ + for(local j=0;j way3_cate_list1[j].b.x || way3_cate_list1[j].a.y > way3_cate_list1[j].b.y ) { + limit_t.append(way3_cate_list1[j].b) + limit_t.append(way3_cate_list1[j].a) + } else { + limit_t.append(way3_cate_list1[j].a) + limit_t.append(way3_cate_list1[j].b) + } + + if(pos.x>=limit_t[0].x && pos.y>=limit_t[0].y && pos.x<=limit_t[1].x && pos.y<=limit_t[1].y) { + if(tool_id == 4114){ return null - } - } - else if (j== c_cate_lim1.len()-1){ - result = translate("Connect the Track here")+" ("+r_way.c.tostring()+")." - } - } - if ((tool_id == 4114)&&(pos.x==c_dep3.x)&&(pos.y==c_dep3.y)) return null + } + } + else if (j== way3_cate_list1.len()-1){ + result = translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + } + } + if ((tool_id == 4114)&&(pos.x==ch3_rail_depot3.b.x)&&(pos.y==ch3_rail_depot3.b.y)) return null } else if (pot0==1 && pot1==0){ - if (pos.x>=c_dep3_lim.a.x && pos.y>=c_dep3_lim.a.y && pos.x<=c_dep3_lim.b.x && pos.y<=c_dep3_lim.b.y){ + local limit_t = [] + if ( ch3_rail_depot3.a.x > ch3_rail_depot3.b.x || ch3_rail_depot3.a.y > ch3_rail_depot3.b.y ) { + limit_t.append(ch3_rail_depot3.b) + limit_t.append(ch3_rail_depot3.a) + } else { + limit_t.append(ch3_rail_depot3.a) + limit_t.append(ch3_rail_depot3.b) + } + + if(pos.x>=limit_t[0].x && pos.y>=limit_t[0].y && pos.x<=limit_t[1].x && pos.y<=limit_t[1].y) { if (tool_id==4114){ return null } } - result = translate("Connect the Track here")+" ("+c_dep3.tostring()+")." + result = translate("Connect the Track here")+" ("+ch3_rail_depot3.a.tostring()+")." } else if (pot1==1 && pot2==0){ - if ((pos.x==c_dep3.x)&&(pos.y==c_dep3.y)){ + if ((pos.x==ch3_rail_depot3.b.x)&&(pos.y==ch3_rail_depot3.b.y)){ if (tool_id==tool_build_depot){ return null } } - result = translate("You must build the train depot in")+" ("+c_dep3.tostring()+")." + result = translate("You must build the train depot in")+" ("+ch3_rail_depot3.b.tostring()+")." } break @@ -2006,20 +1930,22 @@ class tutorial.chapter_03 extends basic_chapter if (tool_id==4108){ //gui.add_message(""+st_lim_a.len()+"") - for(local j=0;j=st_lim_a[j].a.x)&&(pos.y>=st_lim_a[j].a.y)&&(pos.x<=st_lim_a[j].b.x)&&(pos.y<=st_lim_a[j].b.y)){ - local c_list = sch_list //Lista de todas las estaciones - local c_dep = c_dep3 //Coordeadas del deposito - local siz = c_list.len() //Numero de paradas - result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." + local check = check_rail_station(ch3_rail_stations[j], 0, pos) + if( check ){ + local c_list = ch3_rail_stations //Lista de todas las estaciones + local c_dep = ch3_rail_depot3.b //Coordeadas del deposito + local siz = ch3_rail_stations.len() //Numero de paradas + result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot3.b.tostring()+")." return is_stop_allowed_ex(result, siz, c_list, pos, gl_wt) } else return result } - if ((j+1) == st_lim_a.len()) + if ((j+1) == ch3_rail_stations.len()) return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep3.tostring()+")." } return result @@ -2077,7 +2003,7 @@ class tutorial.chapter_03 extends basic_chapter local selc = 0 local load = loc3_load local time = loc3_wait - local c_list = sch_list + local c_list = ch3_rail_stations local siz = c_list.len() local line = true result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) @@ -2151,8 +2077,8 @@ class tutorial.chapter_03 extends basic_chapter case 11: if (current_cov>ch3_cov_lim3.a && current_covch3_cov_lim3.a && current_cov Date: Fri, 9 May 2025 11:15:39 +0200 Subject: [PATCH 042/217] CHG set coords --- class/class_basic_coords_p128.nut | 13 ++++++++- class/class_basic_coords_p64.nut | 4 +-- class/class_basic_coords_p64g.nut | 44 ++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index bbc32bf..fc0d041 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -90,6 +90,7 @@ coord_st_1 <- coord(117,197) * used chapter 7 * ch7_rail_stations * + * */ city1_halt_1 <- [] city1_halt_2 <- [] @@ -126,10 +127,14 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), tile_x(120,326,5), + tile_x(120,380,9), tile_x(121,326,5), tile_x(121,266,3), tile_x(116,197,0) + ] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** - * define road depot city 1 + * define depots */ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) @@ -137,9 +142,12 @@ road_depot_ch5 <- coord(131,232) /** * rail_depot{depot_tile, way_tile} + * + * road depot must be located one field next to a road */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} +ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} /** * define bridges @@ -161,6 +169,9 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * way2_fac1_fac2 = rail factory 1 -> factory 2 * * way3_cy1_cy3 = city 1 -> city 3 + * way3_cy1_cy6 = city 1 -> city 4 -> city 5 -> city 6 + * + * way3_tun_list, way3_tun_coord = build tunnel city 1 -> city 3 * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index f4ab5fd..92976c9 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -133,10 +133,10 @@ ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] - - /** * define depots + * + * road depot must be located one field next to a road */ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index c99eb8c..21cbf0b 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -23,6 +23,10 @@ change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} +c_way3_lim <- {a = coord(93,198), b = coord(114,198)} +c_bridge3_limit <- {a = coord(90,198), b = coord(94,198)} +c_way3_tun_limit <- {b = coord(92,194), a = coord(63,202)} + /** * set tiles for buildings * @@ -95,7 +99,6 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] -//local list = [coord(113,183), coord(117,186), coord(120,183), line_connect_halt, coord(121,189), coord(113,190)] local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) @@ -124,6 +127,10 @@ city1_city7_air <- [coord(114,176), coord(168,489)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] +ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), tile_x(120,326,5), + tile_x(120,380,9), tile_x(121,326,5), tile_x(121,266,3), tile_x(116,197,0) + ] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** @@ -140,6 +147,7 @@ road_depot_ch5 <- coord(131,232) */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} +ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} /** * define bridges @@ -161,7 +169,9 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * way2_fac1_fac2 = rail factory 1 -> factory 2 * * way2_fac2_fac3 = rail factory 2 -> factory 3 + * way3_cy1_cy6 = city 1 -> city 4 -> city 5 -> city 6 * + * way3_tun_list, way3_tun_coord = build tunnel city 1 -> city 3 * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -176,6 +186,38 @@ way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coor limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} +// connect city 1 -> city 3 +way3_cy1_cy3 <- {a = coord3d(114,198,0), b = coord3d(93,198,5)}//, dir = 123 +/* connect [0] - [1] -> city 1 - city 4 + * connect [2] - [3] -> city 4 - city 5 + * connect [4] - [5] -> city 5 - city 6 + */ +way3_cy1_cy6 <- [ {a = coord3d(120,199,0), b = coord3d(120,264,3) }, {a = coord3d(121,264,3), b = coord3d(121,199,0) }, + {a = coord3d(120,271,3), b = coord3d(120,324,5) }, {a = coord3d(121,324,5), b = coord3d(121,271,3) }, + {a = coord3d(120,331,5), b = coord3d(120,377,9) }, {a = coord3d(121,377,9), b = coord3d(121,331,5) } + ] +// tunnel build +way3_tun_list <- [coord3d(88,198,6), coord3d(87,198,7), coord3d(86,198,8)] +// portal - first tile underground - end tile underground - portal +way3_tun_coord <- [coord3d(90,198,6), coord3d(89,198,6), coord3d(63,198,8), coord3d(60,198,11)]//, dir = null + +/** + * define signals and catenary for rail line city 3 -> city 6 + * + */ +way3_sign_list <- [ {c = coord3d(94,197,6), ribi = 8}, {c = coord3d(112,198,2), ribi = 2}, + {c = coord3d(121,199,0), ribi = 1}, {c = coord3d(120,263,3), ribi = 4}, + {c = coord3d(121,271,3), ribi = 1}, {c = coord3d(120,324,5), ribi = 4}, + {c = coord3d(121,331,5), ribi = 1}, {c = coord3d(120,377,9), ribi = 4}, + ] +way3_cate_list1 <- [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tunn = true}, + {a = coord3d(90,198,6), b = coord3d(120,198,0), dir = 0, tunn = false}, + {a = coord3d(120,198,0), b = coord3d(120,383,9), dir = 5, tunn = false}, + {a = coord3d(121,383,9), b = coord3d(121,197,0), dir = 2, tunn = false}, + {a = coord3d(120,197,0), b = coord3d(90,197,6), dir = 6, tunn = false}, + {a = coord3d(90,197,6), b = coord3d(55,197,11), dir = 6, tunn = true} + ] + /** * chapter 5 * From 94c2c22d55b4b157e108246f7c36fc761ea59a98 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Fri, 9 May 2025 22:46:40 -0400 Subject: [PATCH 043/217] Fix bridges in CH 3 --- class/class_chapter_03.nut | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index db815ca..d5869ce 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1402,15 +1402,11 @@ class tutorial.chapter_03 extends basic_chapter //Construye un puente if (pot0==1 && pot1==0){ if (pos.x>=bridge2_coords.b.x-1 && pos.y>=bridge2_coords.b.y-1 && pos.x<=bridge2_coords.a.x+1 && pos.y<=bridge2_coords.a.y+1){ - if(tool_id==tool_build_way) + if(tool_id==tool_build_way || tool_id==tool_build_bridge) return null - if(tool_id==tool_build_bridge){ - if(pos.z==bridge2_coords.a.z || pos.z==bridge2_coords.b.z) - return null - else - return translate("You must build the bridge here")+" ("+bridge2_coords.b.tostring()+")." - } } + else + return translate("You must build the bridge here")+" ("+bridge2_coords.a.tostring()+")." } //Segundo tramo de rieles if (pot1==1&&pot2==0){ @@ -1664,15 +1660,12 @@ class tutorial.chapter_03 extends basic_chapter //Construye un puente else if (pot0==1 && pot1==0){ if (pos.x>=c_bridge3_limit.a.x && pos.y>=c_bridge3_limit.a.y && pos.x<=c_bridge3_limit.b.x && pos.y<=c_bridge3_limit.b.y){ - if(tool_id==tool_build_way) + if(tool_id==tool_build_way || tool_id==tool_build_bridge){ return null - if(tool_id==tool_build_bridge){ - if(pos.z==bridge3_coords.a.z || pos.z==bridge3_coords.b.z) - return null - else - return translate("You must build the bridge here")+" ("+bridge3_coords.a.tostring()+")." } } + else + return translate("You must build the bridge here")+" ("+bridge3_coords.a.tostring()+")." } //Construye Entrada del tunel else if (pot1==1 && pot2==0){ From be4311c66dda1454517bfabc215bae8836ed0af2 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 May 2025 10:25:52 +0200 Subject: [PATCH 044/217] FIX errors --- class/class_chapter_03.nut | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index d5869ce..2a39d4f 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -754,7 +754,7 @@ class tutorial.chapter_03 extends basic_chapter return 0 } if(!tile.find_object(mo_way)){ - label_x.create(ch3_rail_depot1.b, player_x(pl), translate("Build Rails form here")) + label_x.create(tile, player_x(pl), translate("Build Rails form here")) } else{ local stop_mark = true @@ -1015,7 +1015,7 @@ class tutorial.chapter_03 extends basic_chapter return 0 } if(!tile.find_object(mo_way)){ - label_x.create(ch3_rail_depot2.a, player_x(pl), translate("Build Rails form here")) + label_x.create(tile, player_x(pl), translate("Build Rails form here")) } else{ local stop_mark = true @@ -1459,18 +1459,20 @@ class tutorial.chapter_03 extends basic_chapter else return translate("You must build the train depot in")+" ("+ch3_rail_depot1.b.tostring()+")." } else if (pot1==1 && pot2==0){ - if ((pos.x==ch3_rail_depot1.a.x)&&(pos.y==ch3_rail_depot1.a.y)){ + if ((pos.x==ch3_rail_depot1.b.x)&&(pos.y==ch3_rail_depot1.b.y)){ if (tool_id==4096){ pot2=1 return null } - else return translate("You must use the inspection tool")+" ("+ch3_rail_depot1.a.tostring()+")." + else return translate("You must use the inspection tool")+" ("+ch3_rail_depot1.b.tostring()+")." } } break case 5: //Enrutar vehiculos (estacion nr1) - if (building && pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ + local st_check = check_rail_station(my_tile(way2_fac1_fac2[0]), 0, pos) + if (building && st_check){ + //if (building && pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ if (tool_id==4108){ if (stop_flag[0]==0){ stop_flag[0] = 1 @@ -1485,7 +1487,9 @@ class tutorial.chapter_03 extends basic_chapter return format(translate("Select station No.%d"),1)+" ("+coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y).tostring()+".)" } //Enrutar vehiculos (estacion nr2) - if (building && pos.x>=st2_way_lim.a.x && pos.y>=st2_way_lim.a.y && pos.x<=st2_way_lim.b.x && pos.y<=st2_way_lim.b.y){ + local st_check = check_rail_station(my_tile(way2_fac1_fac2[way2_fac1_fac2.len()-1]), 0, pos) + if (building && st_check){ + //if (building && pos.x>=way2_fac1_fac2[way2_fac1_fac2.len()-1].x && pos.y>=way2_fac1_fac2[way2_fac1_fac2.len()-1].y && pos.x<=way2_fac1_fac2[way2_fac1_fac2.len()-2].x && pos.y<=way2_fac1_fac2[way2_fac1_fac2.len()-2].y){ if (tool_id==4108){ if (stop_flag[0]==1 && stop_flag[1]==0){ stop_flag[1] = 1 From 095f12de6cf1e34d384155bed45d6e9f79a6fd89 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 May 2025 09:47:06 +0200 Subject: [PATCH 045/217] FIX errors --- class/class_chapter_03.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 2a39d4f..6bc0bb2 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1094,7 +1094,7 @@ class tutorial.chapter_03 extends basic_chapter local t_tunn = my_tile(way3_tun_coord[0]) if (!t_tunn.find_object(mo_tunnel)){ - local label_t = my_tile(start_tunn) + local label_t = my_tile(way3_tun_coord[0]) local lab = label_t.find_object(mo_label) if(lab){ if(label_t.is_marked()){ @@ -1107,7 +1107,7 @@ class tutorial.chapter_03 extends basic_chapter } else{ gl_tool = 0 - lab.set_text("Place a Tunnel here!.") + lab.set_text(translate("Place a Tunnel here!.")) } } else{ @@ -1988,7 +1988,7 @@ class tutorial.chapter_03 extends basic_chapter local selc = 0 local load = loc2_load local time = loc2_wait - local c_list = [st3_list[0], st4_list[0]] + local c_list = [way2_fac2_fac3[0], way2_fac2_fac3[way2_fac2_fac3.len()-1]] local siz = c_list.len() result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) if(result != null) From 7fbf0a63cb86eeec2fef214df173a602514ebb90 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Sun, 11 May 2025 12:16:07 -0400 Subject: [PATCH 046/217] Fix texts files in CH2 --- en/chapter_02/goal_step_04.txt | 26 +++++++++++++++++++++++++- es/chapter_02/goal_step_04.txt | 26 +++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/en/chapter_02/goal_step_04.txt b/en/chapter_02/goal_step_04.txt index be12459..4995318 100644 --- a/en/chapter_02/goal_step_04.txt +++ b/en/chapter_02/goal_step_04.txt @@ -1 +1,25 @@ -

Now you need to purchase a {bus1} Bus to run the service.

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] To configure the route of the vehicle, you must first click on the Schedule button.
[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
{list}
[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

Tip: Press the ["] key to hide the urban buildings.

It takes to the next step when all bus arrives at the first stop on the list.

\ No newline at end of file +

+Now you need to purchase a {bus1} Bus to run the service. +

+

+[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
+[2] To configure the route of the vehicle, you must first click on the Schedule button.
+[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
+{list}
+[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
+--> [a] Set Minimum load to {load}%.
+--> [b] Set Depart after to {wait}.
+[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

+

+Tip: Press the ["] key to hide the urban buildings. +

+

+

Following Convoys

+This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye). +

+

+Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy. +

+

+The tutorial will move to the next step when you are following the convoy. +

diff --git a/es/chapter_02/goal_step_04.txt b/es/chapter_02/goal_step_04.txt index 26b07c4..5eefb6d 100644 --- a/es/chapter_02/goal_step_04.txt +++ b/es/chapter_02/goal_step_04.txt @@ -1 +1,25 @@ -

Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio.

[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elige el Autobús {bus1}.
[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Consejo: Presiona la tecla ["] para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando el autobús llegue a la primera parada de la lista.

\ No newline at end of file +

+Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio. +

+

+[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elige el Autobús {bus1}.
+[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
+[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
+[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
+--> [a] Configura Carga mínima al {load}%.
+--> [b] Configura Salir después de a {wait}.
+[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito. +

+

+Consejo: Presiona la tecla ["] para ocultar los edificios urbanos. +

+

+

Siguiendo Convoyes

+Esta opción le permite seguir los vehículos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo). +

+

+Haga clic en el vehículo que ya está en circulación para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de título de la ventana del convoy (icono de ojo) y presionar para seguir al convoy. +

+

+El tutorial pasará al siguiente paso cuando estés siguiendo el convoy. +

From 5f75194943825323b5a53aba19e4cf5c80d5574c Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 14 May 2025 21:32:14 -0400 Subject: [PATCH 047/217] Texts moves (Follow convoy) to step 7 --- de/chapter_02/07_1-3.txt | 1 - de/chapter_02/07_1-4.txt | 1 + de/chapter_02/07_2-3.txt | 1 - de/chapter_02/07_2-4.txt | 1 + de/chapter_02/07_3-3.txt | 1 - de/chapter_02/07_3-4.txt | 1 + de/chapter_02/07_4-4.txt | 1 + de/chapter_02/goal_step_04.txt | 2 +- en/chapter_02/06_1-2.txt | 2 +- en/chapter_02/06_2-2.txt | 2 +- en/chapter_02/{07_1-3.txt => 07_1-4.txt} | 2 +- en/chapter_02/{07_2-3.txt => 07_2-4.txt} | 2 +- en/chapter_02/{07_3-3.txt => 07_3-4.txt} | 2 +- en/chapter_02/07_4-4.txt | 1 + en/chapter_02/goal_step_04.txt | 9 +-------- es/chapter_02/06_1-2.txt | 2 +- es/chapter_02/06_2-2.txt | 2 +- es/chapter_02/{07_1-3.txt => 07_1-4.txt} | 2 +- es/chapter_02/{07_2-3.txt => 07_2-4.txt} | 2 +- es/chapter_02/{07_3-3.txt => 07_3-4.txt} | 2 +- es/chapter_02/07_4-4.txt | 1 + es/chapter_02/goal_step_04.txt | 9 +-------- 22 files changed, 19 insertions(+), 30 deletions(-) delete mode 100644 de/chapter_02/07_1-3.txt create mode 100644 de/chapter_02/07_1-4.txt delete mode 100644 de/chapter_02/07_2-3.txt create mode 100644 de/chapter_02/07_2-4.txt delete mode 100644 de/chapter_02/07_3-3.txt create mode 100644 de/chapter_02/07_3-4.txt create mode 100644 de/chapter_02/07_4-4.txt rename en/chapter_02/{07_1-3.txt => 07_1-4.txt} (61%) rename en/chapter_02/{07_2-3.txt => 07_2-4.txt} (75%) rename en/chapter_02/{07_3-3.txt => 07_3-4.txt} (81%) create mode 100644 en/chapter_02/07_4-4.txt rename es/chapter_02/{07_1-3.txt => 07_1-4.txt} (70%) rename es/chapter_02/{07_2-3.txt => 07_2-4.txt} (79%) rename es/chapter_02/{07_3-3.txt => 07_3-4.txt} (86%) create mode 100644 es/chapter_02/07_4-4.txt diff --git a/de/chapter_02/07_1-3.txt b/de/chapter_02/07_1-3.txt deleted file mode 100644 index de5408a..0000000 --- a/de/chapter_02/07_1-3.txt +++ /dev/null @@ -1 +0,0 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Sie müssen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/07_1-4.txt b/de/chapter_02/07_1-4.txt new file mode 100644 index 0000000..c521565 --- /dev/null +++ b/de/chapter_02/07_1-4.txt @@ -0,0 +1 @@ +

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Sie mé»¶sen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/07_2-3.txt b/de/chapter_02/07_2-3.txt deleted file mode 100644 index eb42b7c..0000000 --- a/de/chapter_02/07_2-3.txt +++ /dev/null @@ -1 +0,0 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Öffnen Sie {tool2} und bauen Sie eine Straße von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedrückt, um gerade Abschnitte zu bauen.

Um zum nächsten Schritt zu gelangen, bauen Sie die Straße.

\ No newline at end of file diff --git a/de/chapter_02/07_2-4.txt b/de/chapter_02/07_2-4.txt new file mode 100644 index 0000000..9bc88e9 --- /dev/null +++ b/de/chapter_02/07_2-4.txt @@ -0,0 +1 @@ +

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} 謋fnen Sie {tool2} und bauen Sie eine Straé von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedr點kt, um gerade Abschnitte zu bauen.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/07_3-3.txt b/de/chapter_02/07_3-3.txt deleted file mode 100644 index 8c53c47..0000000 --- a/de/chapter_02/07_3-3.txt +++ /dev/null @@ -1 +0,0 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straßendepot{dep}, wählen Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wählen Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/07_3-4.txt b/de/chapter_02/07_3-4.txt new file mode 100644 index 0000000..ab5d5dc --- /dev/null +++ b/de/chapter_02/07_3-4.txt @@ -0,0 +1 @@ +

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straéndepot{dep}, wé‹’len Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wé‹’len Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugef黦t haben, w鋒len Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/07_4-4.txt b/de/chapter_02/07_4-4.txt new file mode 100644 index 0000000..08d18f8 --- /dev/null +++ b/de/chapter_02/07_4-4.txt @@ -0,0 +1 @@ +

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

Fahrzeugen folgen

Mit dieser Option ké°Šnen Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum né‹hsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_04.txt b/de/chapter_02/goal_step_04.txt index 98722f8..bb8a660 100644 --- a/de/chapter_02/goal_step_04.txt +++ b/de/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

\ No newline at end of file +

Da nun die Haltestellen vorhanden sind, mé»¶sen Sie einen Bus kaufen, um den Service anbieten zu ké°Šnen.

[1] Klicken Sie mit dem {tool1} auf das Straéndepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, mé»¶sen Sie zuné‹hst auf die Schaltflé‹he Fahrplan klicken um das Fahrzeugfenster zu é°‚fnen.
Hinweis: Das Depot-Fenster ké°Šnen Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan m黶sen Sie nun alle Haltestellen in der Stadt ausw鋒len, um sie zur Liste hinzuzuf黦en:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugef黦t haben, w鋒len Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schlieén Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlé‹st.

Tipp: Dr點ken Sie die Taste ", um st鋎tische Geb鋟de auszublenden.

Das Tutorial geht zum nächsten Schritt über, wenn der Konvoi das Depot verlässt.

\ No newline at end of file diff --git a/en/chapter_02/06_1-2.txt b/en/chapter_02/06_1-2.txt index 2ce0ba7..b2e4199 100644 --- a/en/chapter_02/06_1-2.txt +++ b/en/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:

[1] Select the stop {st1} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[2] Select the stop {st2} and leave everything as this.
[3] Select the stop {st3} and leave everything as this.
[4] Select the stop {st4} and leave everything as this.
[5] Select the stop {st5} and leave everything as this.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:

[1] Select the stop {st1} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[2] Select the stop {st2} and leave everything as this.
[3] Select the stop {st3} and leave everything as this.
[4] Select the stop {st4} and leave everything as this.
[5] Select the stop {st5} and leave everything as this.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/06_2-2.txt b/en/chapter_02/06_2-2.txt index 6d86e33..fac7ce5 100644 --- a/en/chapter_02/06_2-2.txt +++ b/en/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/07_1-3.txt b/en/chapter_02/07_1-4.txt similarity index 61% rename from en/chapter_02/07_1-3.txt rename to en/chapter_02/07_1-4.txt index 1a9ee4f..ad6d428 100644 --- a/en/chapter_02/07_1-3.txt +++ b/en/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} First you must build all stops in {name2}.

Stops list:
{list}

It takes to the next step when the bus starts from the depot.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} First you must build all stops in {name2}.

Stops list:
{list}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/07_2-3.txt b/en/chapter_02/07_2-4.txt similarity index 75% rename from en/chapter_02/07_2-3.txt rename to en/chapter_02/07_2-4.txt index fa35e46..1e5c1c1 100644 --- a/en/chapter_02/07_2-3.txt +++ b/en/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{tool2}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

It takes to the next step when the bus starts from the depot.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{tool2}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/07_3-3.txt b/en/chapter_02/07_3-4.txt similarity index 81% rename from en/chapter_02/07_3-3.txt rename to en/chapter_02/07_3-4.txt index 4a851dd..52db0aa 100644 --- a/en/chapter_02/07_3-3.txt +++ b/en/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Click on the Garage {dep} and choose a bus {bus1} and click on 'Schedule'.

Now select stops:.
{list}
- After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

It takes to the next chapter when the bus starts from the depot.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Click on the Garage {dep} and choose a bus {bus1} and click on 'Schedule'.

Now select stops:.
{list}
- After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/07_4-4.txt b/en/chapter_02/07_4-4.txt new file mode 100644 index 0000000..213b206 --- /dev/null +++ b/en/chapter_02/07_4-4.txt @@ -0,0 +1 @@ +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_04.txt b/en/chapter_02/goal_step_04.txt index 4995318..cdad529 100644 --- a/en/chapter_02/goal_step_04.txt +++ b/en/chapter_02/goal_step_04.txt @@ -14,12 +14,5 @@ Now you need to purchase a {bus1} Bus to run the service. Tip: Press the ["] key to hide the urban buildings.

-

Following Convoys

-This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye). -

-

-Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy. -

-

-The tutorial will move to the next step when you are following the convoy. +The tutorial will move to the next step when the convoy leave the depot.

diff --git a/es/chapter_02/06_1-2.txt b/es/chapter_02/06_1-2.txt index e026037..64bf13d 100644 --- a/es/chapter_02/06_1-2.txt +++ b/es/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:

[1] Selecciona la parada {st1} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[2] Selecciona la parada {st2} y deja todo como está.
[3] Seleccione la parada {st3} y deja todo como esta.
[4] Seleccione la parada {st4} y deja todo como esta.
[5] Seleccione la parada {st5} y deja todo como esta.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file +

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:

[1] Selecciona la parada {st1} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[2] Selecciona la parada {st2} y deja todo como está.
[3] Seleccione la parada {st3} y deja todo como esta.
[4] Seleccione la parada {st4} y deja todo como esta.
[5] Seleccione la parada {st5} y deja todo como esta.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/06_2-2.txt b/es/chapter_02/06_2-2.txt index a368ed3..bf4226b 100644 --- a/es/chapter_02/06_2-2.txt +++ b/es/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulación: {cir}/3

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulaci¨®n: {cir}/{cov}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/07_1-3.txt b/es/chapter_02/07_1-4.txt similarity index 70% rename from es/chapter_02/07_1-3.txt rename to es/chapter_02/07_1-4.txt index 73df4e4..6d9d9d7 100644 --- a/es/chapter_02/07_1-3.txt +++ b/es/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/07_2-3.txt b/es/chapter_02/07_2-4.txt similarity index 79% rename from es/chapter_02/07_2-3.txt rename to es/chapter_02/07_2-4.txt index 0989958..9cae306 100644 --- a/es/chapter_02/07_2-3.txt +++ b/es/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{tool2}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{tool2}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/07_3-3.txt b/es/chapter_02/07_3-4.txt similarity index 86% rename from es/chapter_02/07_3-3.txt rename to es/chapter_02/07_3-4.txt index 05b0569..be8e121 100644 --- a/es/chapter_02/07_3-3.txt +++ b/es/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Pulsa sobre el Depósito de Carretera{dep}, y selecciona un autobús {bus1} y pulse sobre 'Itinerario'.

Ahora seleccione las paradas:
{list}
- Después de añadir las {nr} paradas, seleccione la parada {stnam} de la lista y configure de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Se avanza al siguiente capitulo cuando el autobús salga del depósito.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Pulsa sobre el Depósito de Carretera{dep}, y selecciona un autobús {bus1} y pulse sobre 'Itinerario'.

Ahora seleccione las paradas:
{list}
- Después de añadir las {nr} paradas, seleccione la parada {stnam} de la lista y configure de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/07_4-4.txt b/es/chapter_02/07_4-4.txt new file mode 100644 index 0000000..b3006d4 --- /dev/null +++ b/es/chapter_02/07_4-4.txt @@ -0,0 +1 @@ +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

Siguiendo Convoyes

Esta opci¨®n le permite seguir los veh¨ªculos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el veh¨ªculo que ya est¨¢ en circulaci¨®n para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de t¨ªtulo de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_04.txt b/es/chapter_02/goal_step_04.txt index 5eefb6d..1aa2d91 100644 --- a/es/chapter_02/goal_step_04.txt +++ b/es/chapter_02/goal_step_04.txt @@ -14,12 +14,5 @@ Ahora que las paradas est Consejo: Presiona la tecla ["] para ocultar los edificios urbanos.

-

Siguiendo Convoyes

-Esta opción le permite seguir los vehículos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo). -

-

-Haga clic en el vehículo que ya está en circulación para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de título de la ventana del convoy (icono de ojo) y presionar para seguir al convoy. -

-

-El tutorial pasará al siguiente paso cuando estés siguiendo el convoy. +El tutorial pasará al siguiente paso cuando el autobús entre en circulación.

From 0aba71fec34e234ee67d943a0ec8e4d5a386819a Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 14 May 2025 22:51:19 -0400 Subject: [PATCH 048/217] CHG code (Follow convoy) to step 7 --- class/class_chapter_02.nut | 77 +++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 86aa641..5dea948 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -195,8 +195,8 @@ class tutorial.chapter_02 extends basic_chapter veh1_wait = set_waiting_time(3) if (!cov_sw){ - text = ttextfile("chapter_02/07_3-3.txt") - text.tx = ttext("[3/3]") + text = ttextfile("chapter_02/07_3-4.txt") + text.tx = ttext("[3/4]") local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" @@ -205,14 +205,14 @@ class tutorial.chapter_02 extends basic_chapter text.nr = siz } else if (pot0==0){ - text = ttextfile("chapter_02/07_1-3.txt") - text.tx = ttext("[1/3]") + text = ttextfile("chapter_02/07_1-4.txt") + text.tx = ttext("[1/4]") text.list = create_halt_list(city2_halt_1.slice(1)) } else if (pot2==0){ - text = ttextfile("chapter_02/07_2-3.txt") - text.tx = ttext("[2/3]") + text = ttextfile("chapter_02/07_2-4.txt") + text.tx = ttext("[2/4]") if (r_way.r) text.cbor = ""+translate("Ok")+"" @@ -220,8 +220,8 @@ class tutorial.chapter_02 extends basic_chapter text.cbor = coord(r_way.c.x, r_way.c.y).href("("+r_way.c.tostring()+")") } else if (pot3==0){ - text = ttextfile("chapter_02/07_3-3.txt") - text.tx = ttext("[3/3]") + text = ttextfile("chapter_02/07_3-4.txt") + text.tx = ttext("[3/4]") local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" @@ -229,6 +229,19 @@ class tutorial.chapter_02 extends basic_chapter text.list = create_schedule_list(city2_halt_1) text.nr = city1_halt_2.len() } + else if (pot4==0){ + text = ttextfile("chapter_02/07_4-4.txt") + text.tx = ttext("[4/4]") + + local conv = cov_save[current_cov-1] + if(is_cov_valid(conv)){ + local pos = conv.get_pos() + text.covpos = pos.href(conv.get_name()+" ("+pos.tostring()+")") + } + else{ + text.covpos = "null" + } + } text.n1 = city1_tow.href(cty1.name.tostring()) text.n2 = city2_tow.href(cty2.name.tostring()) @@ -344,8 +357,6 @@ class tutorial.chapter_02 extends basic_chapter //return 10+percentage break case 4: - local conv = cov_save[0] - local cov_valid = is_cov_valid(conv) if(cov_valid){ pot0 = 1 } @@ -388,9 +399,7 @@ class tutorial.chapter_02 extends basic_chapter } if (cov_valid && current_cov == ch2_cov_lim1.b){ - if (conv.is_followed()) { - pot2=1 - } + pot2=1 } if (pot2 == 1 ){ this.next_step() @@ -559,7 +568,7 @@ class tutorial.chapter_02 extends basic_chapter } } - else if (pot2==1 && pot3==0) { + else if (pot2==1) { chapter_sub_step = 2 // sub step finish local c_dep = this.my_tile(city1_road_depot) local line_name = line3_name //"Test 3" @@ -574,19 +583,37 @@ class tutorial.chapter_02 extends basic_chapter local all_result = checks_convoy_schedule(convoy, pl) sch_cov_correct = all_result.res == null ? true : false - if (current_cov == ch2_cov_lim3.b) { - //Desmarca la via en la parada - local way_mark = my_tile(line_connect_halt).find_object(mo_way) - way_mark.unmark() - - //Elimina cuadro label - local opt = 0 - label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") - label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") - label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") - this.next_step() + if (current_cov == ch2_cov_lim3.b){ + pot3=1 + break } + + if (pot3==1 && pot4==0) { + local conv = cov_save[current_cov-1] + local cov_valid = is_cov_valid(conv) + gui.add_message("("+conv.get_pos().tostring()+")") + + if (current_cov == ch2_cov_lim3.b){ + if (conv.is_followed()) { + //Desmarca la via en la parada + local way_mark = my_tile(line_connect_halt).find_object(mo_way) + way_mark.unmark() + + //Elimina cuadro label + local opt = 0 + label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") + + label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") + this.next_step() + } + } + else{ + backward_pot(3) + break + } + } } //return 95 break From d6e0b8f54b3628a8eaae7f6cd6a4e0dab06a5cfe Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Fri, 16 May 2025 20:40:24 -0400 Subject: [PATCH 049/217] Remove cov_sw var --- class/class_chapter_02.nut | 4 ++-- class/class_chapter_03.nut | 8 ++++---- scenario.nut | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 5dea948..6364e24 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -194,7 +194,7 @@ class tutorial.chapter_02 extends basic_chapter veh1_load = set_loading_capacity(3) veh1_wait = set_waiting_time(3) - if (!cov_sw){ + if (!correct_cov){ text = ttextfile("chapter_02/07_3-4.txt") text.tx = ttext("[3/4]") @@ -202,7 +202,7 @@ class tutorial.chapter_02 extends basic_chapter text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" text.list = create_halt_list(city2_halt_1) - text.nr = siz + text.nr = city2_halt_1.len() } else if (pot0==0){ text = ttextfile("chapter_02/07_1-4.txt") diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 6bc0bb2..9e282e0 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -790,7 +790,7 @@ class tutorial.chapter_03 extends basic_chapter //return 16 break case 5: - if (!cov_sw) + if (!correct_cov) return 0 local wt = wt_rail @@ -997,7 +997,7 @@ class tutorial.chapter_03 extends basic_chapter //return 35 break case 7: - if (!cov_sw) + if (!correct_cov) return 0 local opt = 2 @@ -1240,7 +1240,7 @@ class tutorial.chapter_03 extends basic_chapter case 10: chapter_sub_steps = 4 - if (!cov_sw) + if (!correct_cov) return 0 if (pot0==0){ @@ -2604,7 +2604,7 @@ class tutorial.chapter_03 extends basic_chapter break case 10: - if (!cov_sw) + if (!correct_cov) return 0 if (r_way.c != 0){ local tile = tile_x(r_way.c.x, r_way.c.y, r_way.c.z) diff --git a/scenario.nut b/scenario.nut index 23c626d..fce05ad 100644 --- a/scenario.nut +++ b/scenario.nut @@ -84,7 +84,6 @@ persistent.gall_cov <- 0 gall_cov <-0 persistent.current_cov <- 0 current_cov <- 0 -cov_sw <- true correct_cov <- true //---------------------------------------------------------------- From 77ac153c35470091de26155abae681fd3f8b8adc Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Fri, 16 May 2025 21:09:27 -0400 Subject: [PATCH 050/217] Add coord for current convoy CH2 --- de/chapter_02/07_4-4.txt | 2 +- en/chapter_02/07_4-4.txt | 2 +- es/chapter_02/07_4-4.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/de/chapter_02/07_4-4.txt b/de/chapter_02/07_4-4.txt index 08d18f8..a8f3f12 100644 --- a/de/chapter_02/07_4-4.txt +++ b/de/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

Fahrzeugen folgen

Mit dieser Option ké°Šnen Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum né‹hsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Jetzt müssen Sie dem Konvoi folgen.

Fahrzeugen folgen

Mit dieser Option ké°Šnen Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum né‹hsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Fahrzeug befindet sich bei: {covpos}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/en/chapter_02/07_4-4.txt b/en/chapter_02/07_4-4.txt index 213b206..03fa026 100644 --- a/en/chapter_02/07_4-4.txt +++ b/en/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Now you must follow the Convoy.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The vehicle is located at: {covpos}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/es/chapter_02/07_4-4.txt b/es/chapter_02/07_4-4.txt index b3006d4..65c3881 100644 --- a/es/chapter_02/07_4-4.txt +++ b/es/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

Siguiendo Convoyes

Esta opci¨®n le permite seguir los veh¨ªculos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el veh¨ªculo que ya est¨¢ en circulaci¨®n para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de t¨ªtulo de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Ahora debes seguir al Veh¨ªculo.

Siguiendo Convoyes

Esta opci¨®n le permite seguir los veh¨ªculos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el veh¨ªculo que ya est¨¢ en circulaci¨®n para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de t¨ªtulo de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

Localiza al Veh¨ªculo en: {covpos}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file From da8d2505cf9804396d8b22a2155b452b8b857332 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Fri, 16 May 2025 21:10:05 -0400 Subject: [PATCH 051/217] Fix minor bug --- class/class_chapter_02.nut | 1 - 1 file changed, 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 6364e24..14f4a00 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -586,7 +586,6 @@ class tutorial.chapter_02 extends basic_chapter if (current_cov == ch2_cov_lim3.b){ pot3=1 - break } if (pot3==1 && pot4==0) { From 9b321058672be41d4e54badffeea33aafad80e9c Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Fri, 16 May 2025 21:11:05 -0400 Subject: [PATCH 052/217] Remov debug message --- class/class_chapter_02.nut | 1 - 1 file changed, 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 14f4a00..e1158f8 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -591,7 +591,6 @@ class tutorial.chapter_02 extends basic_chapter if (pot3==1 && pot4==0) { local conv = cov_save[current_cov-1] local cov_valid = is_cov_valid(conv) - gui.add_message("("+conv.get_pos().tostring()+")") if (current_cov == ch2_cov_lim3.b){ if (conv.is_followed()) { From 73f960d1a577a2e22028388f2253964273989f7e Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 21 May 2025 11:29:39 -0400 Subject: [PATCH 053/217] Minor fix, Prissi: Clean up of schedule code and working with other times displays --- class/class_basic_chapter.nut | 172 +++++++++++----------------------- class/class_chapter_02.nut | 56 ++++++----- class/class_chapter_03.nut | 18 ++-- class/class_chapter_04.nut | 17 ++-- class/class_chapter_05.nut | 16 ++-- class/class_chapter_06.nut | 18 ++-- 6 files changed, 106 insertions(+), 191 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7ebe6dc..845c9e6 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -620,7 +620,6 @@ class basic_chapter function is_waystop_correct(player,schedule,nr,load,wait,coord, line = false) { - local result = 0 // coord = x,y,z place to compare the waystop // nr = number of schedule.entrie to compare local nr2 = schedule.entries.len()-1 @@ -651,9 +650,13 @@ class basic_chapter if(!target) return gui.add_message("Error aqui, not station here!. "+ coord) - local target_list = square_x(coord.x,coord.y).get_halt_list() + // no waypoints so far ... + if (!halt) + return translate("The schedule is not correct.") - if (!halt) return translate("The schedule is not correct.") + // find out if the stop contains the coordinates + local result = 1 + local target_list = square_x(coord.x,coord.y).get_halt_list() local t_list = halt.get_tile_list() local t2_list = targ_t.is_water() ? get_tiles_near_stations(t_list) : target.get_tile_list() local c_buld1 = targ_t.is_water() ? coord : t2_list[0].find_object(mo_building).get_pos() @@ -669,14 +672,12 @@ class basic_chapter else if((c_buld1.x == c_buld2.x) && (c_buld1.y == c_buld2.y)) { result = null } - if (result!=null){ local text = ttext("The waystop {nr} '{name}' isn't on place {pos}") text.name = target_list[0].get_name() text.pos = pos_to_text(coord) text.nr = (nr_st+1) - result = text.tostring() - return result + return text.tostring() } if (entrie.load != load) { @@ -690,16 +691,18 @@ class basic_chapter //gui.add_message(""+entrie.wait+" "+wait +" "+nr) if (abs(entrie.wait-wait)>7) { - - local text = ttext("The waittime in waystop {nr} '{name}' isn't {wait} {pos}") local txwait = get_wait_time_text(wait) - text.name = target_list[0].get_name() - text.pos = pos_to_text(coord) - text.wait = txwait - text.nr = (nr+1) - return text.tostring() + local iswait = get_wait_time_text(entrie.wait) + if(txwait!=iswait){ + local text = ttext("The waittime in waystop {nr} '{name}' isn't {wait} {pos}") + text.name = target_list[0].get_name() + text.pos = pos_to_text(coord) + text.wait = txwait + text.nr = (nr+1) + return text.tostring() + } } - return result + return null } function get_wait_time_text(wait) @@ -850,38 +853,53 @@ class basic_chapter return res } - function is_conv_schedule_correct(pl,all,nr,load,wait,cov,convoy,coord,line=false) + /// returns null or error string when not matching + function compare_schedule(result, pl, schedule, selc, load, time, c_list, line) { - //Check if schedule is correct - local conv_sch = convoy.get_schedule() - local entries = null + local nr = schedule.entries.len() + local size = c_list.len() + if (nr > size) + return format(translate("The schedule needs to have %d waystops, but there are %d ."),size, nr) - if (conv_sch) - entries = conv_sch.entries - else - return 0 - local sch_nr = entries.len() - if (sch_nr!=all) - return 1 - if (entries[nr].load!=load) - return 2 - if (entries[nr].wait!=wait) - return 3 + for(local j=0;j0;j--){ - if (result==null) - result = is_conv_schedule_correct(pl, all, nr, 0, 0, cov, convoy, c_list[j], line) - else - break - nr++ - } - } - - if (result!=null){ - switch (result) { - case 4: - return translate("The line is not correct.") - break - - case 5: - return translate("First create a line for the vehicle.") - break - - default : - return translate("The schedule is not correct.") - break - } - } - - if (result == null){ - update_convoy_removed(convoy, pl) - - } - return result - } - - function set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz, line = false) - { - for(local j=0;j 0 ? cov_save[current_cov-1] : null + local cov_valid = is_cov_valid(conv) if(cov_valid){ pot0 = 1 } @@ -394,13 +396,13 @@ class tutorial.chapter_02 extends basic_chapter convoy = cov_list[0] } local all_result = checks_convoy_schedule(convoy, pl) - sch_cov_correct = all_result.res == null ? true : false - } + if (cov_valid && current_cov == ch2_cov_lim1.b){ pot2=1 } + if (pot2 == 1 ){ this.next_step() //Crear cuadro label @@ -583,7 +585,6 @@ class tutorial.chapter_02 extends basic_chapter local all_result = checks_convoy_schedule(convoy, pl) sch_cov_correct = all_result.res == null ? true : false - if (current_cov == ch2_cov_lim3.b){ pot3=1 } @@ -594,17 +595,7 @@ class tutorial.chapter_02 extends basic_chapter if (current_cov == ch2_cov_lim3.b){ if (conv.is_followed()) { - //Desmarca la via en la parada - local way_mark = my_tile(line_connect_halt).find_object(mo_way) - way_mark.unmark() - - //Elimina cuadro label - local opt = 0 - label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") - label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") - - label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") - this.next_step() + pot4 = 1 } } else{ @@ -612,6 +603,19 @@ class tutorial.chapter_02 extends basic_chapter break } } + else if (pot4==1 && pot5==0){ + //Desmarca la via en la parada + local way_mark = my_tile(line_connect_halt).find_object(mo_way) + way_mark.unmark() + + //Elimina cuadro label + local opt = 0 + label_bord(city1_limit1.a, city1_limit1.b, opt, true, "X") + label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") + + label_bord(bridge1_limit.a, bridge1_limit.b, opt, false, "X") + this.next_step() + } } //return 95 break @@ -871,9 +875,7 @@ class tutorial.chapter_02 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city1_halt_1 - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line1_name //"Test 1" update_convoy_schedule(pl, gl_wt, line_name, schedule) @@ -886,9 +888,7 @@ class tutorial.chapter_02 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city1_halt_2 - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line2_name //"Test 2" update_convoy_schedule(pl, gl_wt, line_name, schedule) @@ -899,10 +899,8 @@ class tutorial.chapter_02 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city2_halt_1 - local siz = c_list.len() - local selc = siz-1 - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + local selc = c_list.len()-1 + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line3_name //"Test 3" update_convoy_schedule(pl, gl_wt, line_name, schedule) @@ -935,7 +933,7 @@ class tutorial.chapter_02 extends basic_chapter local time = veh1_wait local c_list = city1_halt_1 local siz = c_list.len() - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) if(result == null) reset_tmpsw() return result @@ -961,7 +959,7 @@ class tutorial.chapter_02 extends basic_chapter local c_list = city1_halt_2 local siz = c_list.len() local line = true - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz, line) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz, line) if(result == null) reset_tmpsw() return result @@ -985,7 +983,7 @@ class tutorial.chapter_02 extends basic_chapter local c_list = city2_halt_1 local siz = c_list.len() local selc = siz-1 - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) if(result == null) reset_tmpsw() return result @@ -1080,8 +1078,6 @@ class tutorial.chapter_02 extends basic_chapter local conv = depot.get_convoy_list() conv[0].set_line(player, c_line) comm_start_convoy(player, conv[0], depot) - pot2=1 - } return null break @@ -1184,6 +1180,8 @@ class tutorial.chapter_02 extends basic_chapter local conv = depot.get_convoy_list() conv[0].set_line(player, c_line) comm_start_convoy(player, conv[0], depot) + + pot4 = 1 } return null break diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 9e282e0..936dc75 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1965,8 +1965,6 @@ class tutorial.chapter_03 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' - local nr = schedule.entries.len() - local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") @@ -1977,8 +1975,7 @@ class tutorial.chapter_03 extends basic_chapter local load = loc1_load local time = loc1_wait local c_list = [way2_fac1_fac2[0], way2_fac1_fac2[5]] - local siz = c_list.len() - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result != null) reset_stop_flag() return result @@ -1989,8 +1986,7 @@ class tutorial.chapter_03 extends basic_chapter local load = loc2_load local time = loc2_wait local c_list = [way2_fac2_fac3[0], way2_fac2_fac3[way2_fac2_fac3.len()-1]] - local siz = c_list.len() - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result != null) reset_stop_flag() return result @@ -2001,9 +1997,7 @@ class tutorial.chapter_03 extends basic_chapter local load = loc3_load local time = loc3_wait local c_list = ch3_rail_stations - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line1_name update_convoy_schedule(pl, gl_wt, line_name, schedule) @@ -2042,7 +2036,7 @@ class tutorial.chapter_03 extends basic_chapter local time = loc1_wait local c_list = [way2_fac1_fac2[0], way2_fac1_fac2[5]] local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break @@ -2068,7 +2062,7 @@ class tutorial.chapter_03 extends basic_chapter local time = loc2_wait local c_list = [way2_fac2_fac3[0], way2_fac2_fac3[5]] local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break @@ -2103,7 +2097,7 @@ class tutorial.chapter_03 extends basic_chapter local time = loc3_wait local siz = c_list.len() - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) if(result == null) reset_tmpsw() return result diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 252055f..cca21f7 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -611,32 +611,27 @@ class tutorial.chapter_04 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' - local nr = schedule.entries.len() switch (this.step) { case 4: local selc = 0 local load = ship1_load local time = ship1_wait local c_list = sch_list1 //[sch_list1[1], sch_list1[0]] - local siz = c_list.len() - return set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + return compare_schedule(result, pl, schedule, selc, load, time, c_list, false) break case 5: local selc = 0 local load = ship1_load local time = ship1_wait local c_list = sch_list2 - local siz = c_list.len() - return set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + return compare_schedule(result, pl, schedule, selc, load, time, c_list, false) break case 7: local selc = 0 local load = ship2_load local time = ship2_wait local c_list = sch_list3 - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + return compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line1_name update_convoy_schedule(pl, gl_wt, line_name, schedule) @@ -681,7 +676,7 @@ class tutorial.chapter_04 extends basic_chapter local time = ship1_wait local c_list = sch_list1 local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break @@ -712,7 +707,7 @@ class tutorial.chapter_04 extends basic_chapter local time = ship1_wait local c_list = sch_list2 local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break case 7: @@ -736,7 +731,7 @@ class tutorial.chapter_04 extends basic_chapter local time = ship2_wait local c_list = sch_list3 local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break } diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 7084260..1558a2e 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -800,8 +800,7 @@ class tutorial.chapter_05 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = sch_list1 - local siz = c_list.len() - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result != null) reset_tmpsw() return result break @@ -811,9 +810,7 @@ class tutorial.chapter_05 extends basic_chapter local load = veh2_load local time = veh2_wait local c_list = city1_post_halts - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line1_name update_convoy_schedule(pl, wt_road, line_name, schedule) @@ -824,8 +821,7 @@ class tutorial.chapter_05 extends basic_chapter local load = veh3_load local time = veh3_wait local c_list = sch_list3 - local siz = c_list.len() - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) } return result break @@ -864,7 +860,7 @@ class tutorial.chapter_05 extends basic_chapter local time = veh1_wait local c_list = sch_list1 local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break case 4: @@ -893,7 +889,7 @@ class tutorial.chapter_05 extends basic_chapter local time = veh2_wait local c_list = city1_post_halts local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } else if (current_cov> ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b){ @@ -913,7 +909,7 @@ class tutorial.chapter_05 extends basic_chapter local time = veh3_wait local c_list = sch_list3 local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break } diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 06f0c75..6b019e2 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -564,7 +564,6 @@ class tutorial.chapter_06 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' - local nr = schedule.entries.len() switch (this.step) { case 2: reset_glsw() @@ -573,8 +572,7 @@ class tutorial.chapter_06 extends basic_chapter local load = plane1_load local time = plane1_wait local c_list = city1_city7_air - local siz = c_list.len() - return set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result == null){ local line_name = line1_name update_convoy_schedule(pl, wt_road, line_name, schedule) @@ -587,9 +585,7 @@ class tutorial.chapter_06 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city1_halt_airport - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line2_name update_convoy_schedule(pl, wt_road, line_name, schedule) @@ -603,9 +599,7 @@ class tutorial.chapter_06 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city7_halt - local siz = c_list.len() - local line = true - result = set_schedule_list(result, pl, schedule, nr, selc, load, time, c_list, siz, line) + result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line3_name update_convoy_schedule(pl, wt_road, line_name, schedule) @@ -659,7 +653,7 @@ class tutorial.chapter_06 extends basic_chapter local time = plane1_wait local c_list = city1_city7_air local siz = c_list.len() - return set_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } break case 3: @@ -691,7 +685,7 @@ class tutorial.chapter_06 extends basic_chapter local wait = veh1_wait local siz = c_list.len() local line = false - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, wait, c_list, siz, line) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, wait, c_list, siz, line) if(result == null) reset_tmpsw() return result @@ -726,7 +720,7 @@ class tutorial.chapter_06 extends basic_chapter local wait = veh1_wait local siz = c_list.len() local line = false - result = set_schedule_convoy(result, pl, cov, convoy, selc, load, wait, c_list, siz, line) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, wait, c_list, siz, line) if(result == null) reset_tmpsw() return result From ff7f7f2c7471227c5c3b5f559a19d8949e303a68 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 23 May 2025 21:12:06 +0200 Subject: [PATCH 054/217] CHG chapter 4 --- class/class_basic_chapter.nut | 7 +- class/class_basic_coords_p128.nut | 24 +++++ class/class_basic_coords_p64.nut | 26 ++++- class/class_basic_coords_p64g.nut | 24 +++++ class/class_chapter_04.nut | 158 ++++++++++++------------------ 5 files changed, 142 insertions(+), 97 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 845c9e6..cabaa55 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -992,6 +992,7 @@ class basic_chapter function get_convoy_number_exp(coord, c_dep, id_start, id_end, in_dep = false) //Permite contar los vehiculos en las estaciones /paradas { local halt = this.my_tile(coord).get_halt() + gui.add_message("("+halt+" .. "+coord.tostring()+") .. ??") local cov_list = halt.get_convoy_list() local cov_nr = 0 foreach(cov in cov_list) { @@ -3052,14 +3053,14 @@ class basic_chapter local nw_list = [] local c2d = "coord" for (local j = 0; j city 3 * + * way4_cannal = cannel to gas station + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -218,6 +232,10 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = way3_tun_coord[0], dir = 0, tu {a = coord3d(90,197,7), b = coord3d(55,197,11), dir = 6, tunn = true} ] +// dock raffenery - cannal stop - cannel way build +way4_cannal <- [coord3d(140,194,-3), coord3d(114,194,1), coord3d(127,193,-1)} +c_cannel_lim <- {a = coord(114, 193), b = coord(140, 194)} + /** * chapter 5 * @@ -239,3 +257,9 @@ coord_chapter_4 <- ship_depot // ship_depot coord_chapter_5 <- coord_fac_8 // Coal power station coord_chapter_6 <- city1_halt_airport[0] // airport road stop coord_chapter_7 <- city3_tow // city 3 townhall + +/** + * coord to arrea + * + */ +ch4_curiosity = coord(185,135) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 92976c9..9ac3c90 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -73,12 +73,20 @@ coord_st_1 <- coord(117,197) /** * set halt coords * - * used in chapter: 2 + * used chapter 2 * city1_halt_1 - halts city 1 * city1_halt_2 - halts connect city 1 dock and station * city2_halt_1 - halts connect city 2 to city 1 * line_connect_halt - halt in all halt lists city1 * + * used chapter 3 + * ch3_rail_stations - city line + * + * used chapter 4 + * ch4_ship1_halts - dock raffinerie - (coord_fac4) + * ch4_ship2_halts - dock raffinerie - canal stop gas station + * ch4_ship3_halts - passenger ship + * * used chapter 5 * city1_post_halts - halts for post * @@ -131,6 +139,10 @@ ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), tile_x(120,380,9), tile_x(121,326,5), tile_x(121,266,3), tile_x(116,197,0) ] +ch4_ship1_halts <- [coord3d(151, 198, -3)] +ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] +ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** @@ -173,6 +185,8 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way3_tun_list, way3_tun_coord = build tunnel city 1 -> city 3 * + * way4_cannal = cannel to gas station + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -218,6 +232,10 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tu {a = coord3d(90,197,6), b = coord3d(55,197,11), dir = 6, tunn = true} ] +// dock raffenery - cannal stop - cannel way build +way4_cannal <- [coord3d(140,194,-3), ch4_ship2_halts[1], coord3d(127,194,-1)] +c_cannel_lim <- {a = coord(114, 194), b = coord(140, 194)} + /** * chapter 5 * @@ -239,3 +257,9 @@ coord_chapter_4 <- ship_depot // ship_depot coord_chapter_5 <- coord_fac_8 // Coal power station coord_chapter_6 <- city1_halt_airport[0] // airport road stop coord_chapter_7 <- city3_tow // city 3 townhall + +/** + * coord to arrea + * + */ +ch4_curiosity = coord(185,135) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 21cbf0b..d921ecf 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -79,6 +79,14 @@ coord_st_1 <- coord(117,197) * city2_halt_1 - halts connect city 2 to city 1 * line_connect_halt - halt in all halt lists * + * used chapter 3 + * ch3_rail_stations - city line + * + * used chapter 4 + * ch4_ship1_halts - dock raffinerie - (coord_fac4) + * ch4_ship2_halts - dock raffinerie - canal stop gas station + * ch4_ship3_halts - passenger ship + * * used chapter 5 * city1_post_halts - halts for post * @@ -131,6 +139,10 @@ ch3_rail_stations <- [ tile_x(55,197,11), tile_x(116,198,0), tile_x(120,266,3), tile_x(120,380,9), tile_x(121,326,5), tile_x(121,266,3), tile_x(116,197,0) ] +ch4_ship1_halts <- [coord3d(151, 198, -3)] +ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] +ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** @@ -173,6 +185,8 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way3_tun_list, way3_tun_coord = build tunnel city 1 -> city 3 * + * way4_cannal = cannel to gas station + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -218,6 +232,10 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tu {a = coord3d(90,197,6), b = coord3d(55,197,11), dir = 6, tunn = true} ] +// dock raffenery - cannal stop - cannel way build +way4_cannal <- [coord3d(140,194,-3), ch4_ship2_halts[1], coord3d(127,194,-1)] +c_cannel_lim <- {a = coord(114, 194), b = coord(140, 194)} + /** * chapter 5 * @@ -239,3 +257,9 @@ coord_chapter_4 <- ship_depot // ship_depot coord_chapter_5 <- coord_fac_8 // Coal power station coord_chapter_6 <- city1_halt_airport[0] // airport road stop coord_chapter_7 <- city3_tow // city 3 townhall + +/** + * coord to arrea + * + */ +ch4_curiosity = coord(185,135) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index cca21f7..5a73b7b 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -25,20 +25,6 @@ class tutorial.chapter_04 extends basic_chapter c_way = coord3d(0, 0, 0) cov_cir = 0 - //Step 1 ===================================================================================== - //Productor - //fac_1 = {c = coord(168,189), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.oel} - //fac_1 = factory_data.rawget("4") - //f1_lim = {a = coord(168,189), b = coord(169,190)} - - //Fabrica - //fac_2 = {c = coord(149,200), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.gas} - //f2_lim = {a = coord(149,200), b = coord(150,201)} - - //Step 2 ===================================================================================== - //Para los muelles - dock_list1 = [coord(151, 198)] - //Step 3 ===================================================================================== d1_cnr = null //auto started @@ -47,28 +33,16 @@ class tutorial.chapter_04 extends basic_chapter ship1_load = 100 ship1_wait = 0 - sch_list1 = [coord(168, 189), coord(151, 198)] - //Step 5 ===================================================================================== //Para el canal acuatico - c1_way = {a = coord3d(140,194,-3), b = coord3d(114,194,1), c = coord3d(127,194,-1)} - c1_way_lim = {a = coord(114, 194), b = coord(140, 194)} - - //Consumidor Final - //fac_3 = {c = coord(112,192), c_list = null /*auto started*/, name = "" /*auto started*/, good = good_alias.gas} + //c1_way_lim = {a = coord(114, 194), b = coord(140, 194)} d2_cnr = null //auto started - sch_list2 = [coord(151, 198), coord(114, 194)] - - //Step 6 ===================================================================================== - sch_list3 = [coord(134,189), coord(187,141), coord(178,135)] - dock_list2 = [coord(133,189), coord(188,141), coord(179,135)] //Step 7 ===================================================================================== - tur = coord(185,135) ship2_name_obj = get_veh_ch4(2) ship2_load = 100 - ship2_wait = 42282 + ship2_wait = set_waiting_time(5) line1_name = "ch4_l1" line2_name = "ch4_l2" @@ -92,14 +66,6 @@ class tutorial.chapter_04 extends basic_chapter line2_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name line3_name = "Passanger Ship" - - - if ( pak_name == "pak128" ) { - c1_way_lim.a = coord(114, 193) - c1_way.c = coord3d(127,193,-1) - - } - local lim_idx = cv_list[(persistent.chapter - 2)].idx ch4_cov_lim1 = {a = cv_lim[lim_idx].a, b = cv_lim[lim_idx].b} ch4_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} @@ -110,8 +76,8 @@ class tutorial.chapter_04 extends basic_chapter local pl = 0 if(this.step == 7){ - local c_dep = this.my_tile(ship_depot) - local c_list = sch_list3 + local c_dep = this.my_tile(ship_depot) + local c_list = ch4_ship3_halts //sch_list3 start_sch_tmpsw(pl,c_dep, c_list) } return 0 @@ -136,7 +102,7 @@ class tutorial.chapter_04 extends basic_chapter } break case 2: - local c_list = dock_list1 + local c_list = ch4_ship1_halts local txdoc = "" local dock_name = translate("Dock") local ok_tex = translate("OK") @@ -159,8 +125,8 @@ class tutorial.chapter_04 extends basic_chapter break case 5: - local c1 = coord(c1_way.a.x, c1_way.a.y) - local c2 = coord(c1_way.b.x, c1_way.b.y) + local c1 = coord(way4_cannal[0].x, way4_cannal[0].y) + local c2 = coord(way4_cannal[1].x, way4_cannal[1].y) if(!correct_cov){ local a = 3 local b = 3 @@ -187,7 +153,7 @@ class tutorial.chapter_04 extends basic_chapter } text.w1 = c1.href(" ("+c1.tostring()+")")+"" text.w2 = c2.href(" ("+c2.tostring()+")")+"" - text.dock = sch_list2[1].href("("+sch_list2[1].tostring()+")")+"" + text.dock = ch4_ship2_halts[1].href("("+ch4_ship2_halts[1].tostring()+")")+"" //sch_list2 text.all_cov = d2_cnr text.load = ship1_load text.wait = get_wait_time_text(ship1_wait) @@ -195,10 +161,10 @@ class tutorial.chapter_04 extends basic_chapter break case 6: - local list = dock_list2 + local list = ch4_ship3_halts local txdoc = "" - local dock_name = translate("Dock") - local ok_tex = translate("OK") + local dock_name = translate("Dock") + local ok_tex = translate("OK") for(local j=0;j=c1_way_lim.a.x && pos.y>=c1_way_lim.a.y && pos.x<=c1_way_lim.b.x && pos.y<=c1_way_lim.b.y){ + } + if (pos.x>=c_cannel_lim.a.x && pos.y>=c_cannel_lim.a.y && pos.x<=c_cannel_lim.b.x && pos.y<=c_cannel_lim.b.y){ if (tool_id == tool_build_way && way && wt == wt_water) return null } } //Cuarto muelle else if(pot0==1 && pot1==0){ - if(my_tile(sch_list2[1]).find_object(mo_building)){ + if(my_tile(ch4_ship2_halts[1]).find_object(mo_building)){ if (tool_id==4097) return null - if (is_station_build(0, sch_list2[1], good_alias.goods)!=null) - return format(translate("Dock No.%d must accept goods"),4)+" ("+sch_list2[1].tostring()+")." + if (is_station_build(0, ch4_ship2_halts[1], good_alias.goods)!=null) + return format(translate("Dock No.%d must accept goods"),4)+" ("+ch4_ship2_halts[1].tostring()+")." } - if(pos.x==sch_list2[1].x && pos.y==sch_list2[1].y){ + if(pos.x==ch4_ship2_halts[1].x && pos.y==ch4_ship2_halts[1].y){ if(tool_id==tool_build_station){ return null } @@ -568,7 +535,7 @@ class tutorial.chapter_04 extends basic_chapter //Enrutar Barcos else if (pot1==1 && pot2==0){ if (tool_id==4108){ - local c_list = sch_list2 //Lista de todas las paradas de autobus + local c_list = ch4_ship2_halts //Lista de todas las paradas de autobus local c_dep = ship_depot //Coordeadas del deposito local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." @@ -579,7 +546,7 @@ class tutorial.chapter_04 extends basic_chapter case 6: - local c_list = dock_list2 + local c_list = ch4_ship3_halts local good = good_alias.passa if((tool_id != 4096)) return is_dock_build(pos, tool_id, c_list, good) @@ -588,7 +555,7 @@ class tutorial.chapter_04 extends basic_chapter case 7: if (tool_id==4108){ - local c_list = sch_list3 //Lista de todas las paradas de autobus + local c_list = ch4_ship3_halts //Lista de todas las paradas de autobus local c_dep = ship_depot //Coordeadas del deposito local siz = c_list.len()//Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." @@ -616,21 +583,22 @@ class tutorial.chapter_04 extends basic_chapter local selc = 0 local load = ship1_load local time = ship1_wait - local c_list = sch_list1 //[sch_list1[1], sch_list1[0]] + local c_list = [coord_fac_4] + c_list.append(ch4_ship1_halts[0]) return compare_schedule(result, pl, schedule, selc, load, time, c_list, false) break case 5: local selc = 0 local load = ship1_load local time = ship1_wait - local c_list = sch_list2 + local c_list = ch4_ship2_halts //sch_list2 return compare_schedule(result, pl, schedule, selc, load, time, c_list, false) break case 7: local selc = 0 local load = ship2_load local time = ship2_wait - local c_list = sch_list3 + local c_list = ch4_ship3_halts //sch_list3 return compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line1_name @@ -660,7 +628,7 @@ class tutorial.chapter_04 extends basic_chapter //Para arracar varios vehiculos local id_start = ch4_cov_lim1.a local id_end = ch4_cov_lim1.b - local cir_nr = get_convoy_number_exp(sch_list1[1], depot, id_start, id_end) + local cir_nr = get_convoy_number_exp(ch4_ship1_halts[0], depot, id_start, id_end) cov -= cir_nr result = is_convoy_correct(depot,cov,veh,good_list,name,st_tile) @@ -674,7 +642,8 @@ class tutorial.chapter_04 extends basic_chapter local selc = 0 local load = ship1_load local time = ship1_wait - local c_list = sch_list1 + local c_list = [coord_fac_4] + c_list.append(ch4_ship1_halts[0]) local siz = c_list.len() return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -693,7 +662,7 @@ class tutorial.chapter_04 extends basic_chapter //Para arracar varios vehiculos local id_start = ch4_cov_lim2.a local id_end = ch4_cov_lim2.b - local cir_nr = get_convoy_number_exp(sch_list2[1], depot, id_start, id_end) + local cir_nr = get_convoy_number_exp(ch4_ship2_halts[1], depot, id_start, id_end) cov -= cir_nr result = is_convoy_correct(depot,cov,veh,good_list,name,st_tile) @@ -705,7 +674,7 @@ class tutorial.chapter_04 extends basic_chapter local selc = 0 local load = ship1_load local time = ship1_wait - local c_list = sch_list2 + local c_list = ch4_ship2_halts local siz = c_list.len() return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -729,7 +698,7 @@ class tutorial.chapter_04 extends basic_chapter local selc = 0 local load = ship2_load local time = ship2_wait - local c_list = sch_list3 + local c_list = ch4_ship3_halts local siz = c_list.len() return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -753,7 +722,7 @@ class tutorial.chapter_04 extends basic_chapter break; case 2: //Para los muelles mrcancias - local c_list = dock_list1 + local c_list = ch4_ship1_halts local name = sc_dock_name1 for(local j =0;j ch4_cov_lim1.a && current_cov< ch4_cov_lim1.b){ local sched = schedule_x(gl_wt, []) - local t_list = is_water_entry(sch_list1) + local c_list = [coord_fac_4] //Lista de todas las paradas de autobus + c_list.append(ch4_ship1_halts[0]) + + local t_list = is_water_entry(c_list) for(local j =0;j Date: Tue, 27 May 2025 01:57:40 +0200 Subject: [PATCH 055/217] CHG chapter 5 mail extension not finish --- class/class_basic_chapter.nut | 50 ++++-- class/class_basic_coords_p64.nut | 26 +++- class/class_basic_data.nut | 13 ++ class/class_chapter_05.nut | 254 ++++++++++++++++--------------- 4 files changed, 200 insertions(+), 143 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index cabaa55..4b02b0e 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -992,7 +992,7 @@ class basic_chapter function get_convoy_number_exp(coord, c_dep, id_start, id_end, in_dep = false) //Permite contar los vehiculos en las estaciones /paradas { local halt = this.my_tile(coord).get_halt() - gui.add_message("("+halt+" .. "+coord.tostring()+") .. ??") + //gui.add_message("("+halt+" .. "+coord.tostring()+") .. ??") local cov_list = halt.get_convoy_list() local cov_nr = 0 foreach(cov in cov_list) { @@ -2537,9 +2537,9 @@ class basic_chapter { local count = 0 for(local j=0;j consumer * * 1 day = 2115 * 1 hour = 88 @@ -1051,6 +1052,9 @@ function set_waiting_time(id) { case 4: return 25369 break + case 5: + return 42282 + break } break case "pak64.german": @@ -1067,6 +1071,9 @@ function set_waiting_time(id) { case 4: return 2115 break + case 5: + return 42282 + break } break case "pak128": @@ -1083,6 +1090,9 @@ function set_waiting_time(id) { case 4: return 25369 break + case 5: + return 42282 + break } break } @@ -1119,6 +1129,9 @@ function get_good_data(id, select = null) { case 5: good_n = "Kohle" break + case 6: + good_n = "Post" + break } local obj = good_desc_x(good_n) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 1558a2e..95ed36d 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -26,31 +26,31 @@ class tutorial.chapter_05 extends basic_chapter //Step 2 ===================================================================================== //Para la carretera //------------------------------------------------------------------------------------------ - c_way_lim1 = {a = coord(127,209), b = coord(136,233)} - c_way1 = {a = coord3d(132,233,0), b = coord3d(131,209,-1), dir = 2} //Inicio, Fin de la via y direccion(fullway) + //c_way_lim1 = {a = coord(127,209), b = coord(136,233)} + //c_way1 = {a = coord3d(132,233,0), b = coord3d(131,209,-1), dir = 2} //Inicio, Fin de la via y direccion(fullway) //Limites del deposito y carretera //-------------------------------------------------------------------------------------------- - c_dep1_lim = {a = coord(131,232), b = coord(132,232)} + //c_dep1_lim = {a = coord(131,232), b = coord(132,232)} //Para el Camion - sch_list1 = [coord(132,233), coord(131,209)] + //sch_list1 = [coord(132,233), coord(131,209)] veh1_obj = get_veh_ch5(1) veh1_load = 100 veh1_wait = 0 d1_cnr = null //auto started - f1_good = good_alias.coal + f1_good = get_good_data(5, 2) //Step 3 ===================================================================================== - transf_list = [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] + //transf_list = [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] f_power = 0 f_pow_list = [0,0,0,0] - pow_lim = [ {a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, + /*pow_lim = [ {a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, {a = coord(106,201), b = coord(127,210)}, {a = coord(127,204), b = coord(140,238)} - ] + ]*/ - label_del = [{a = coord(107,201), b = coord(111,201)}, {a = coord(127,202), b = coord(127,209)}, {a = coord(128,204), b = coord(139,204)}] + //label_del = [{a = coord(107,201), b = coord(111,201)}, {a = coord(127,202), b = coord(127,209)}, {a = coord(128,204), b = coord(139,204)}] //Step 4 ===================================================================================== st_name = get_obj_ch5(6) @@ -118,14 +118,14 @@ class tutorial.chapter_05 extends basic_chapter line3_name = translate("Post") + " " + ta.get_halt().get_name() + " - " + tb.get_halt().get_name() if ( pak_name == "pak128" ) { - c_way_lim1.a = coord(127,211) - c_way1.b = coord3d(132,211,0) - sch_list1[1] = coord(132,211) - transf_list[2] = coord(135,235) + //c_way_lim1.a = coord(127,211) + //c_way1.b = coord3d(132,211,0) + //sch_list1[1] = coord(132,211) + //transf_list[2] = coord(135,235) } if ( pak_name == "pak64.german" ) { - transf_list[2] = coord(133,235) + //transf_list[2] = coord(133,235) tile_x(134,235,0).remove_object(player_x(1), mo_label) } @@ -180,8 +180,8 @@ class tutorial.chapter_05 extends basic_chapter case 1: break case 2: - local c_w1 = coord(c_way1.a.x, c_way1.a.y) - local c_w2 = coord(c_way1.b.x, c_way1.b.y) + local c_w1 = coord(way5_fac7_fac8[0].x, way5_fac7_fac8[0].y) + local c_w2 = coord(way5_fac7_fac8[1].x, way5_fac7_fac8[1].y) text.w1 = c_w1.href("("+c_w1.tostring()+")") text.w2 = c_w2.href("("+c_w2.tostring()+")") @@ -205,12 +205,12 @@ class tutorial.chapter_05 extends basic_chapter text.toolbar = toolbar local tran_tx = "" - for(local j=0;j%s %d ", trf_name, j+1) + transf_list[j].href("("+transf_list[j].tostring()+")") + "
" + tran_tx +=format("%s %d ", trf_name, j+1) + way5_power[j].href("("+way5_power[j].tostring()+")") + "
" } else { - tran_tx +=format("%s %d ",trf_name ,j+1)+"("+transf_list[j].tostring()+") "+ok_tx+"
" + tran_tx +=format("%s %d ",trf_name ,j+1)+"("+way5_power[j].tostring()+") "+ok_tx+"
" } } text.tran = tran_tx @@ -243,15 +243,19 @@ class tutorial.chapter_05 extends basic_chapter text.tx="[1/3]" text.toolbar = toolbar local st_tx = "" - local list = obj_list1 //Lista de build + local list = city1_post_halts //extensions_tiles //Lista de build local siz = list.len() for(local j=0;j%d %s ", j+1, name) + list[j].c.href("("+list[j].c.tostring()+")")+"
" + st_tx +=format("%d %s ", j+1, name) + list[j].href("("+list[j].tostring()+")")+"
" } else { - st_tx +=format("%d %s ", j+1, name)+"("+list[j].c.tostring()+")"+ok_tx+"
" + st_tx +=format("%d %s ", j+1, name)+"("+list[j].tostring()+")"+ok_tx+"
" } } text.st = st_tx @@ -370,7 +374,7 @@ class tutorial.chapter_05 extends basic_chapter local opt = 0 local del = false local text = "X" - label_bord(c_way_lim1.a, c_way_lim1.b, opt, del, text) + label_bord(way5_fac7_fac8_lim.a, way5_fac7_fac8_lim.b, opt, del, text) this.next_step() } @@ -378,8 +382,8 @@ class tutorial.chapter_05 extends basic_chapter break; case 2: if (pot0==0){ - local coora = coord3d(c_way1.a.x,c_way1.a.y,c_way1.a.z) - local coorb = coord3d(c_way1.b.x,c_way1.b.y,c_way1.b.z) + local coora = coord3d(way5_fac7_fac8[0].x,way5_fac7_fac8[0].y,way5_fac7_fac8[0].z) + local coorb = coord3d(way5_fac7_fac8[1].x,way5_fac7_fac8[1].y,way5_fac7_fac8[1].z) local t_start = tile_x(coora.x,coora.y,coora.z) local t_end = tile_x(coorb.x,coorb.y,coorb.z) @@ -404,23 +408,23 @@ class tutorial.chapter_05 extends basic_chapter //Comprueba la conexion de la via local obj = false - local dir = c_way1.dir + local dir = 2//way5_fac7_fac8[0].dir local r_way = get_fullway(coora, coorb, dir, obj) - if (r_way.r){ + if (test_select_way(way5_fac7_fac8[1], way5_fac7_fac8[0], wt_road)){ //elimina el cuadro label local opt = 0 local del = true local text = "X" - label_bord(c_way_lim1.a, c_way_lim1.b, opt, del, text) + label_bord(way5_fac7_fac8_lim.a, way5_fac7_fac8_lim.b, opt, del, text) pot0=1 return 10 } } else if (pot0==1 && pot1==0){ - local siz = sch_list1.len() - local c_list = sch_list1 + local siz = way5_fac7_fac8.len() + local c_list = way5_fac7_fac8 local name = translate("Place Stop here!.") local load = good_alias.goods local all_stop = is_stop_building(siz, c_list, name, load) @@ -431,9 +435,9 @@ class tutorial.chapter_05 extends basic_chapter } } else if (pot1==1 && pot2==0){ - local tile = my_tile(c_dep1_lim.a) + local tile = my_tile(ch5_road_depot.a) if(!tile.find_object(mo_way)){ - label_x.create(c_dep1_lim.a, player_x(pl), translate("Place the Road here!.")) + label_x.create(ch5_road_depot.a, player_x(pl), translate("Place the Road here!.")) } else { if (!tile.find_object(mo_depot_road)){ @@ -457,8 +461,8 @@ class tutorial.chapter_05 extends basic_chapter break; case 3: if (pot0==0){ - for(local j=0;j=c_way_lim1.a.x && pos.y>=c_way_lim1.a.y && pos.x<=c_way_lim1.b.x && pos.y<=c_way_lim1.b.y){ + if(pos.x>=way5_fac7_fac8_lim.a.x && pos.y>=way5_fac7_fac8_lim.a.y && pos.x<=way5_fac7_fac8_lim.b.x && pos.y<=way5_fac7_fac8_lim.b.y){ if (!way && label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." } @@ -654,11 +658,11 @@ class tutorial.chapter_05 extends basic_chapter } } else if(pot0==1 && pot1==0){ - for(local j=0;j=c_dep1_lim.a.x && pos.y>=c_dep1_lim.a.y && pos.x<=c_dep1_lim.b.x && pos.y<=c_dep1_lim.b.y){ + if(pos.x>=ch5_road_depot.a.x && pos.y>=ch5_road_depot.a.y && pos.x<=ch5_road_depot.b.x && pos.y<=ch5_road_depot.b.y){ if(tool_id==tool_build_way || tool_id==tool_build_depot){ return null } @@ -674,7 +678,7 @@ class tutorial.chapter_05 extends basic_chapter } else if(pot2==1 && pot3==0){ if (tool_id==4108) { - local c_list = sch_list1 //Lista de todas las paradas + local c_list = way5_fac7_fac8 //Lista de todas las paradas local c_dep = road_depot_ch5 //Coordeadas del deposito local nr = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." @@ -685,72 +689,72 @@ class tutorial.chapter_05 extends basic_chapter //Conectando los transformadores case 3: - if (pot0==0){ - for(local j=0;j=pow_lim[j].a.x && pos.y>=pow_lim[j].a.y && pos.x<=pow_lim[j].b.x && pos.y<=pow_lim[j].b.y){ - - if(tool_id == tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ - if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." - else - return null - - return result - } - else if (tool_id == tool_remover || tool_id == tool_remove_way){ - if (building && !t.get_halt()) - return null - - else if (powerline) - return null - - return result - } - } - else if (j== pow_lim.len()-1){ - result = translate("You are outside the allowed limits!")+" ("+pos.tostring()+")." - } - } - if(tool_id == tool_build_way) - return result + else + return translate("There is already a transformer here!")+" ("+pos.tostring()+")." + } + else if (glsw[j]==0) + result = translate("Build the transformer here!")+" ("+way5_power[j].tostring()+")." + } + } + if(tool_id == tool_build_transformer) + return result + } + else if (pot0==1 && pot1 == 0){ + for(local j=0;j=way5_power_lim[j].a.x && pos.y>=way5_power_lim[j].a.y && pos.x<=way5_power_lim[j].b.x && pos.y<=way5_power_lim[j].b.y){ + + if (tool_id == tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ + if (label && label.get_text()=="X") + return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + else + return null + + return result + } + else if (tool_id == tool_remover || tool_id == tool_remove_way){ + if (building && !t.get_halt()) + return null + + else if (powerline) + return null + + return result + } + } + else if (j== way5_power_lim.len()-1){ + result = translate("You are outside the allowed limits!")+" ("+pos.tostring()+")." + } + } + if (tool_id == tool_build_way) + return result - } + } break case 4: - if (pot0==1 && pot1==0){ + if (pot0==1 && pot1==0){ //Permite construir paradas if (tool_id==tool_build_station){ - local list = obj_list1 + local list = extensions_tiles local nr = list.len() return build_stop_ex(nr, list, t) } //Permite eliminar paradas if (tool_id==4097){ - local list = obj_list1 + local list = extensions_tiles local nr = list.len() return delete_stop_ex(nr, list, pos) } - } - if (pot1==1 && pot2==0){ + } + if (pot1==1 && pot2==0){ if (tool_id==4108) { local c_list = city1_post_halts //Lista de todas las paradas de autobus local c_dep = city1_road_depot //Coordeadas del deposito @@ -758,8 +762,8 @@ class tutorial.chapter_05 extends basic_chapter result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, nr, c_list, pos) } - } - if (pot2==1 && pot3==0){ + } + if (pot2==1 && pot3==0){ if (tool_id==4108) { local c_list = sch_list3 //Lista de todas las paradas de autobus local c_dep = c_dep3 //Coordeadas del deposito @@ -768,10 +772,10 @@ class tutorial.chapter_05 extends basic_chapter result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed_ex(result, siz, c_list, pos, wt) } - } - break + } + break case 5: - break + break } if (tool_id == 4096){ @@ -799,7 +803,7 @@ class tutorial.chapter_05 extends basic_chapter local selc = 0 local load = veh1_load local time = veh1_wait - local c_list = sch_list1 + local c_list = way5_fac7_fac8 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result != null) reset_tmpsw() return result @@ -843,7 +847,7 @@ class tutorial.chapter_05 extends basic_chapter //Para arracar varios vehiculos local id_start = ch5_cov_lim1.a local id_end = ch5_cov_lim1.b - local c_sch = sch_list1[0] + local c_sch = way5_fac7_fac8[0] local cir_nr = get_convoy_number_exp(c_sch, depot, id_start, id_end) cov -= cir_nr @@ -858,7 +862,7 @@ class tutorial.chapter_05 extends basic_chapter local selc = 0 local load = veh1_load local time = veh1_wait - local c_list = sch_list1 + local c_list = way5_fac7_fac8 local siz = c_list.len() return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) } @@ -927,8 +931,8 @@ class tutorial.chapter_05 extends basic_chapter break; case 2: if (pot0==0){ - local coora = coord3d(c_way1.a.x,c_way1.a.y,c_way1.a.z) - local coorb = coord3d(c_way1.b.x,c_way1.b.y,c_way1.b.z) + local coora = coord3d(way5_fac7_fac8[0].x,way5_fac7_fac8[0].y,way5_fac7_fac8[0].z) + local coorb = coord3d(way5_fac7_fac8[1].x,way5_fac7_fac8[1].y,way5_fac7_fac8[1].z) local t = command_x(tool_build_way) local err = t.work(player, coora, coorb, sc_way_name) @@ -936,8 +940,8 @@ class tutorial.chapter_05 extends basic_chapter if (pot2==0){ //Para la carretera - local t_start = my_tile(c_dep1_lim.a) - local t_end = my_tile(c_dep1_lim.b) + local t_start = my_tile(ch5_road_depot.a) + local t_end = my_tile(ch5_road_depot.b) t_start.remove_object(player_x(1), mo_label) local t = command_x(tool_build_way) @@ -948,8 +952,8 @@ class tutorial.chapter_05 extends basic_chapter } if (pot1==0){ - for(local j=0;j Date: Tue, 27 May 2025 15:57:54 +0200 Subject: [PATCH 056/217] CHG auto find tiles for transformer ADD function search_free_tile(tile_list, r) (class_chapter_05.nut) - not complete ADD function test_tile_is_empty(t_tile) (class_basic_chapter.nut) --- class/class_basic_chapter.nut | 26 ++++++++++++ class/class_basic_coords_p64.nut | 2 +- class/class_chapter_05.nut | 68 ++++++++++++++++++++++++++++++-- 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 4b02b0e..7c647d7 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3385,4 +3385,30 @@ function check_rail_station(tile, rtype, pos = null) { } +/** + * test tile is empty + * removed objects for empty tiles: tree, ground_object, moving_object + * + */ +function test_tile_is_empty(t_tile) { + local tile = tile_x(t_tile.x, t_tile.y, t_tile.z) + + local tile_tree = tile.find_object(mo_tree) + local tile_groundobj = tile.find_object(mo_groundobj) + local tile_moving_object = tile.find_object(mo_moving_object) + + //gui.add_message(" ---=> test_tile " + coord3d_to_string(tile) + " | is_empty " + tile.is_empty() + " | tile_tree " + tile_tree + " | tile_groundobj " + tile_groundobj + " | tile_moving_object " + tile_moving_object) + + if ( tile_tree != null || tile_groundobj != null || tile_moving_object != null ) { + local tool = command_x(tool_remover) + tool.work(player_x(1), tile, "") + + return true + } else if ( tile.is_empty() ) { + return true + } + + return false +} + // END OF FILE diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 164d6ab..cee9255 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -249,7 +249,7 @@ way4_cannal <- [coord3d(140,194,-3), ch4_ship2_halts[1], coord3d(127,194,-1)] c_cannel_lim <- {a = coord(114,194), b = coord(140,194)} way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(131,209,-1)]//{, dir = 2} -way5_power <- [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] +//way5_power <- [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] /** * chapter 5 diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 95ed36d..a450589 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -45,6 +45,7 @@ class tutorial.chapter_05 extends basic_chapter //transf_list = [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] f_power = 0 f_pow_list = [0,0,0,0] + way5_power = [] // coords transformer /*pow_lim = [ {a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, {a = coord(106,201), b = coord(127,210)}, {a = coord(127,204), b = coord(140,238)} @@ -54,7 +55,7 @@ class tutorial.chapter_05 extends basic_chapter //Step 4 ===================================================================================== st_name = get_obj_ch5(6) - obj_list1 = [ + /*obj_list1 = [ {c = coord(111,182), name = get_obj_ch5(6), good = good_alias.mail}, {c = coord(113,191), name = get_obj_ch5(6), good = good_alias.mail}, @@ -64,7 +65,7 @@ class tutorial.chapter_05 extends basic_chapter {c = coord(121,190), name = get_obj_ch5(6), good = good_alias.mail}, {c = coord(127,187), name = get_obj_ch5(6), good = good_alias.mail}, {c = coord(132,190), name = get_obj_ch5(6), good = good_alias.mail} - ] + ]*/ //sch_list2 = city1_post_halts /*[ @@ -117,6 +118,15 @@ class tutorial.chapter_05 extends basic_chapter local tb = this.my_tile(sch_list3[0]) line3_name = translate("Post") + " " + ta.get_halt().get_name() + " - " + tb.get_halt().get_name() + // search free tile for transformer + for ( local i = 0; i < fab_list.len(); i++ ) { + local fac_tiles = fab_list[i].c_list + //local size = fab_list[i].get_desc().get_building_desc ().get_size(), size + local t = search_free_tile(fac_tiles, i+1) + way5_power.append(t) + } + + if ( pak_name == "pak128" ) { //c_way_lim1.a = coord(127,211) //c_way1.b = coord3d(132,211,0) @@ -207,10 +217,10 @@ class tutorial.chapter_05 extends basic_chapter local tran_tx = "" for(local j=0;j%s %d ", trf_name, j+1) + way5_power[j].href("("+way5_power[j].tostring()+")") + "
" + tran_tx +=format("%s %d ", trf_name, j+1) + way5_power[j].href("("+coord3d_to_string(way5_power[j])+")") + "
" } else { - tran_tx +=format("%s %d ",trf_name ,j+1)+"("+way5_power[j].tostring()+") "+ok_tx+"
" + tran_tx +=format("%s %d ",trf_name ,j+1)+"("+coord3d_to_string(way5_power[j])+") "+ok_tx+"
" } } text.tran = tran_tx @@ -1363,4 +1373,54 @@ class tutorial.chapter_05 extends basic_chapter } } // END of class + +/** + * search free tile for transformer on factory + * + * tile_list = factory tile list + * r = start search direction (1 = west, 2 = south, 3 = east, 4 = north) + * + * return tile_x + * + */ +function search_free_tile(tile_list, r) { + + local xl = tile_list[tile_list.len()-1].x - tile_list[0].x + local yl = tile_list[tile_list.len()-1].y - tile_list[0].y + + local tile = null + + gui.add_message("tile search - " + coord3d_to_string(tile_list[0])) + + switch (r) { + case 1: + tile = tile_x(tile_list[0].x-1, tile_list[0].y, tile_list[0].z) + break + + case 2: + tile = tile_x(tile_list[0].x, tile_list[0].y+yl+1, tile_list[tile_list.len()-1].z) + break + + case 3: + tile = tile_x(tile_list[0].x+xl+1, tile_list[0].y, tile_list[0].z) + break + + case 4: + tile = tile_x(tile_list[0].x, tile_list[0].y-1, tile_list[0].z) + break + + default : + + break + } + + if ( test_tile_is_empty(tile) && tile.get_slope() == 0 ) { + gui.add_message("tile found - " + coord3d_to_string(tile)) + return tile + } + + +} + + // END OF FILE From df3d5faea39c7e799f46e20ad9d25155acdcb343 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 27 May 2025 17:11:05 +0200 Subject: [PATCH 057/217] CHG fix errors and set pakset coords --- class/class_basic_coords_p128.nut | 23 +++++++-- class/class_basic_coords_p64.nut | 8 +--- class/class_basic_coords_p64g.nut | 26 +++++++--- class/class_chapter_05.nut | 79 ++++--------------------------- 4 files changed, 49 insertions(+), 87 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index d8a3208..5f08109 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -27,6 +27,12 @@ c_way3_lim <- {a = coord(94,198), b = coord(114,198)} c_bridge3_limit <- {a = coord(90,198), b = coord(94,198)} c_way3_tun_limit <- {b = coord(92,194), a = coord(63,202)} +way5_fac7_fac8_lim <- {a = coord(127,211), b = coord(136,233)} +way5_power_lim <- [{a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, + {a = coord(106,201), b = coord(127,210)}, {a = coord(127,204), b = coord(140,238)} + ] +way5_power_lim_del <- [{a = coord(107,201), b = coord(111,201)}, {a = coord(127,202), b = coord(127,209)}, {a = coord(128,204), b = coord(139,204)}] + /** * set tiles for buildings * @@ -150,7 +156,6 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t */ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) -road_depot_ch5 <- coord(131,232) /** * rail_depot{depot_tile, way_tile} @@ -160,6 +165,7 @@ road_depot_ch5 <- coord(131,232) ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} +ch5_road_depot <- {a = coord(131,232), b = coord(132,232)} /** * define bridges @@ -187,6 +193,10 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way4_cannal = cannel to gas station * + * way5_fac7_fac8 = road coal to power plant + * way5_power1 = powerline fac8 to fac + * + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -236,15 +246,18 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = way3_tun_coord[0], dir = 0, tu way4_cannal <- [coord3d(140,194,-3), coord3d(114,194,1), coord3d(127,193,-1)} c_cannel_lim <- {a = coord(114, 193), b = coord(140, 194)} +way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(132,211,0))]//{, dir = 2} + /** * chapter 5 * - * id = step - * sid = sub step - * hlist = halt list + * extensions_tiles - tiles for post building * */ +extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), + coord(132,190), coord(121,190), coord(118,192), coord(113,191)] + /** * set tiles for pos chapter start * @@ -262,4 +275,4 @@ coord_chapter_7 <- city3_tow // city 3 townhall * coord to arrea * */ -ch4_curiosity = coord(185,135) +ch4_curiosity <- coord(185,135) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index cee9255..e581a61 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -153,15 +153,14 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t /** * define depots - * - * road depot must be located one field next to a road */ city1_road_depot <- coord(115,185) ship_depot <- coord(150, 190) -road_depot_ch5 <- coord(131,232) /** * rail_depot{depot_tile, way_tile} + * + * road depot must be located one field next to a road */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} @@ -197,8 +196,6 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * way5_fac7_fac8 = road coal to power plant * way5_power1 = powerline fac8 to fac * - * - * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -249,7 +246,6 @@ way4_cannal <- [coord3d(140,194,-3), ch4_ship2_halts[1], coord3d(127,194,-1)] c_cannel_lim <- {a = coord(114,194), b = coord(140,194)} way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(131,209,-1)]//{, dir = 2} -//way5_power <- [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] /** * chapter 5 diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index d921ecf..2b6079c 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -27,6 +27,12 @@ c_way3_lim <- {a = coord(93,198), b = coord(114,198)} c_bridge3_limit <- {a = coord(90,198), b = coord(94,198)} c_way3_tun_limit <- {b = coord(92,194), a = coord(63,202)} +way5_fac7_fac8_lim <- {a = coord(127,209), b = coord(136,233)} +way5_power_lim <- [{a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, + {a = coord(106,201), b = coord(127,210)}, {a = coord(127,204), b = coord(140,238)} + ] +way5_power_lim_del <- [{a = coord(107,201), b = coord(111,201)}, {a = coord(127,202), b = coord(127,209)}, {a = coord(128,204), b = coord(139,204)}] + /** * set tiles for buildings * @@ -147,19 +153,19 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t /** * define depots - * - * road depot must be located one field next to a road */ city1_road_depot <- coord(124,188) //115,185 ship_depot <- coord(150, 190) -road_depot_ch5 <- coord(131,232) /** * rail_depot{depot_tile, way_tile} + * + * road depot must be located one field next to a road */ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} +ch5_road_depot <- {a = coord(131,232), b = coord(132,232)} /** * define bridges @@ -187,6 +193,9 @@ bridge3_coords <- {a = coord3d(93,198,5), b = coord3d(91,198,5)} * * way4_cannal = cannel to gas station * + * way5_fac7_fac8 = road coal to power plant + * way5_power1 = powerline fac8 to fac + * */ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} @@ -236,15 +245,18 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = coord3d(90,198,6), dir = 0, tu way4_cannal <- [coord3d(140,194,-3), ch4_ship2_halts[1], coord3d(127,194,-1)] c_cannel_lim <- {a = coord(114, 194), b = coord(140, 194)} +way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(131,209,-1)]//{, dir = 2} + /** * chapter 5 * - * id = step - * sid = sub step - * hlist = halt list + * extensions_tiles - tiles for post building * */ +extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), + coord(132,190), coord(121,190), coord(118,192), coord(113,191)] + /** * set tiles for pos chapter start * @@ -262,4 +274,4 @@ coord_chapter_7 <- city3_tow // city 3 townhall * coord to arrea * */ -ch4_curiosity = coord(185,135) +ch4_curiosity <- coord(185,135) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index a450589..8258c5e 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -21,20 +21,7 @@ class tutorial.chapter_05 extends basic_chapter cov_cir = 0 sch_cov_correct = false - //Step 1 ===================================================================================== - - //Step 2 ===================================================================================== - //Para la carretera - //------------------------------------------------------------------------------------------ - //c_way_lim1 = {a = coord(127,209), b = coord(136,233)} - //c_way1 = {a = coord3d(132,233,0), b = coord3d(131,209,-1), dir = 2} //Inicio, Fin de la via y direccion(fullway) - - //Limites del deposito y carretera - //-------------------------------------------------------------------------------------------- - //c_dep1_lim = {a = coord(131,232), b = coord(132,232)} - //Para el Camion - //sch_list1 = [coord(132,233), coord(131,209)] veh1_obj = get_veh_ch5(1) veh1_load = 100 veh1_wait = 0 @@ -42,40 +29,15 @@ class tutorial.chapter_05 extends basic_chapter f1_good = get_good_data(5, 2) //Step 3 ===================================================================================== - //transf_list = [coord(148,201), coord(110,192), coord(134,235), coord(130,206)] f_power = 0 f_pow_list = [0,0,0,0] way5_power = [] // coords transformer - /*pow_lim = [ {a = coord(127,196), b = coord(151,204)}, {a = coord(106,189), b = coord(112,201)}, - {a = coord(106,201), b = coord(127,210)}, {a = coord(127,204), b = coord(140,238)} - ]*/ - - //label_del = [{a = coord(107,201), b = coord(111,201)}, {a = coord(127,202), b = coord(127,209)}, {a = coord(128,204), b = coord(139,204)}] - //Step 4 ===================================================================================== st_name = get_obj_ch5(6) - /*obj_list1 = [ - - {c = coord(111,182), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(113,191), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(116,182), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(118,192), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(121,183), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(121,190), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(127,187), name = get_obj_ch5(6), good = good_alias.mail}, - {c = coord(132,190), name = get_obj_ch5(6), good = good_alias.mail} - ]*/ - - //sch_list2 = city1_post_halts - /*[ - coord(111,183), coord(116,183), coord(120,183), coord(126,187), - coord(132,189), coord(121,189), coord(118,191), coord(113,190) - ]*/ //Para el Camion veh2_obj = get_veh_ch5(3) - //c_dep2 = coord(115,185) // depot veh2_load = 100 veh2_wait = 10571 d2_cnr = null //auto started @@ -126,19 +88,6 @@ class tutorial.chapter_05 extends basic_chapter way5_power.append(t) } - - if ( pak_name == "pak128" ) { - //c_way_lim1.a = coord(127,211) - //c_way1.b = coord3d(132,211,0) - //sch_list1[1] = coord(132,211) - //transf_list[2] = coord(135,235) - } - - if ( pak_name == "pak64.german" ) { - //transf_list[2] = coord(133,235) - tile_x(134,235,0).remove_object(player_x(1), mo_label) - } - //sch_list2.extend(city1_post_halts) local lim_idx = cv_list[(persistent.chapter - 2)].idx @@ -149,15 +98,7 @@ class tutorial.chapter_05 extends basic_chapter d1_cnr = get_dep_cov_nr(ch5_cov_lim1.a,ch5_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch5_cov_lim2.a,ch5_cov_lim2.b) d3_cnr = get_dep_cov_nr(ch5_cov_lim3.a,ch5_cov_lim3.b) - - /*fab_list = [ - factory_data.rawget("5"), - factory_data.rawget("3"), - factory_data.rawget("7"), - factory_data.rawget("8") - ]*/ - //line3_name = get_good_data(4, 3) + " " + fac_2.name + " - " + fac_3.name - +/* local pl = 0 if(this.step == 4){ //Camion de correo @@ -169,7 +110,7 @@ class tutorial.chapter_05 extends basic_chapter c_dep = this.my_tile(c_dep3) c_list = sch_list3 start_sch_tmpsw(pl,c_dep, c_list) - } + }*/ return 0 } @@ -196,7 +137,7 @@ class tutorial.chapter_05 extends basic_chapter text.w1 = c_w1.href("("+c_w1.tostring()+")") text.w2 = c_w2.href("("+c_w2.tostring()+")") - text.dep = road_depot_ch5.href("("+road_depot_ch5.tostring()+")") + text.dep = ch5_road_depot.a.href("("+ch5_road_depot.a.tostring()+")") text.veh = translate(veh1_obj) text.good = get_good_data(5, 3) //translate_objects_list.good_coal @@ -689,7 +630,7 @@ class tutorial.chapter_05 extends basic_chapter else if(pot2==1 && pot3==0){ if (tool_id==4108) { local c_list = way5_fac7_fac8 //Lista de todas las paradas - local c_dep = road_depot_ch5 //Coordeadas del deposito + local c_dep = ch5_road_depot.a //Coordeadas del deposito local nr = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, nr, c_list, pos) @@ -973,7 +914,7 @@ class tutorial.chapter_05 extends basic_chapter if (current_cov> ch5_cov_lim1.a && current_cov< ch5_cov_lim1.b){ local wt = wt_road - local c_depot = my_tile(road_depot_ch5) + local c_depot = my_tile(ch5_road_depot.a) try { comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito @@ -1038,7 +979,7 @@ class tutorial.chapter_05 extends basic_chapter case 4: if (pot0==0){ local pl = 0 - local list = obj_list1 + local list = extensions_tiles local obj = mo_building local station = false @@ -1058,13 +999,13 @@ class tutorial.chapter_05 extends basic_chapter } if (pot1==0){ local count=0 - local nr = obj_list1.len() - local list = obj_list1 + local nr = extensions_tiles.len() + local list = extensions_tiles for(local j=0;j Date: Tue, 27 May 2025 22:14:53 +0200 Subject: [PATCH 058/217] CHG Progress --- class/class_chapter_04.nut | 32 +++++++++++++++-------- class/class_chapter_05.nut | 53 ++++++++++++++++++++++---------------- class/class_chapter_06.nut | 34 +++++++++++++----------- 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 5a73b7b..5ee3ba3 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -221,7 +221,6 @@ class tutorial.chapter_04 extends basic_chapter } function is_chapter_completed(pl) { - local percentage=0 save_pot() save_glsw() @@ -229,8 +228,14 @@ class tutorial.chapter_04 extends basic_chapter local fac_2 = factory_data.rawget("5") local fac_3 = factory_data.rawget("6") + local chapter_steps = 8 + local chapter_step = persistent.step + local chapter_sub_steps = 0 // count all sub steps + local chapter_sub_step = 0 // actual sub step + switch (this.step) { case 1: + chapter_sub_steps = 2 local next_mark = false local stop_mark = true if(pot0==0 || pot1 == 0){ @@ -246,6 +251,7 @@ class tutorial.chapter_04 extends basic_chapter } } else if (pot2==0 || pot3==0){ + chapter_sub_steps = 1 local list = fac_1.c_list try { next_mark = delay_mark_tile(list) @@ -260,7 +266,7 @@ class tutorial.chapter_04 extends basic_chapter else if (pot3==1 && pot4==0){ this.next_step() } - return 5 + //return 5 break; case 2: //Para los Muelles @@ -275,7 +281,7 @@ class tutorial.chapter_04 extends basic_chapter this.next_step() } - return 5 + //return 5 break; case 3: //Para Astillero @@ -292,7 +298,7 @@ class tutorial.chapter_04 extends basic_chapter if (pot1==1){ this.next_step() } - return 10+percentage + //return 10+percentage break case 4: cov_cir = get_convoy_nr((ch4_cov_lim1.a), d1_cnr) @@ -301,9 +307,11 @@ class tutorial.chapter_04 extends basic_chapter reset_stop_flag() this.next_step() } - return 50 + //return 50 break case 5: + chapter_sub_steps = 3 + //Para el canal acuatico if (pot0==0){ //Inicio del canal @@ -350,6 +358,7 @@ class tutorial.chapter_04 extends basic_chapter } //Para el cuarto muelle else if (pot0==1 && pot1==0){ + chapter_sub_steps = 2 local t = my_tile(ch4_ship2_halts[1]) //sch_list2 local dock4 = t.find_object(mo_building) public_label(t, translate("Build a Dock here!.")) @@ -362,6 +371,7 @@ class tutorial.chapter_04 extends basic_chapter } //Vehiculos en circulacion else if (pot1==1 && pot2==0){ + chapter_sub_steps = 1 cov_cir = get_convoy_nr((ch4_cov_lim2.a ), d2_cnr) if (cov_cir==d2_cnr) @@ -371,7 +381,7 @@ class tutorial.chapter_04 extends basic_chapter reset_stop_flag() this.next_step() } - return 65 + //return 65 break case 6: //Para los Muelles @@ -386,7 +396,7 @@ class tutorial.chapter_04 extends basic_chapter this.next_step() } - return 0 + //return 0 break case 7: @@ -396,23 +406,23 @@ class tutorial.chapter_04 extends basic_chapter if(current_cov == ch4_cov_lim3.b){ this.next_step() } - return 0 + //return 0 break case 8: reset_stop_flag() this.next_step() - return 0 + //return 0 break case 9: this.step=1 persistent.step=1 persistent.status.step = 1 - return 100 + //return 100 break } - percentage=(this.step-1)+1 + local percentage = chapter_percentage(chapter_steps, chapter_step, chapter_sub_steps, chapter_sub_step) return percentage } diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 8258c5e..297facf 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -39,7 +39,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh2_obj = get_veh_ch5(3) veh2_load = 100 - veh2_wait = 10571 + veh2_wait = set_waiting_time(6) d2_cnr = null //auto started line1_name = "ch5_l1" @@ -50,8 +50,8 @@ class tutorial.chapter_05 extends basic_chapter sch_list3 = [coord(133,189), coord(168,189)] veh3_obj = get_veh_ch5(4) veh3_load = 100 - veh3_wait = 42282 - c_dep3 = coord(150,190) // depot + veh3_wait = set_waiting_time(7) + //c_dep3 = coord(150,190) // depot d3_cnr = null //auto started //Script @@ -271,7 +271,7 @@ class tutorial.chapter_05 extends basic_chapter text.stnam = "1) "+tile.get_halt().get_name()+" ("+c.tostring()+")" text.list = list_tx - text.dep = c_dep3.href("("+c_dep3.tostring()+")") + text.dep = ship_depot.href("("+ship_depot.tostring()+")") text.ship = translate(veh3_obj) text.load = veh3_load text.wait = get_wait_time_text(veh3_wait) @@ -307,7 +307,6 @@ class tutorial.chapter_05 extends basic_chapter } function is_chapter_completed(pl) { - local percentage=0 save_glsw() save_pot() @@ -318,6 +317,11 @@ class tutorial.chapter_05 extends basic_chapter factory_data.rawget("8") ] + local chapter_steps = 4 + local chapter_step = persistent.step + local chapter_sub_steps = 0 // count all sub steps + local chapter_sub_step = 0 // actual sub step + switch (this.step) { case 1: if(pot0==1){ @@ -329,8 +333,8 @@ class tutorial.chapter_05 extends basic_chapter this.next_step() } - return 0 - break; + //return 0 + break; case 2: if (pot0==0){ local coora = coord3d(way5_fac7_fac8[0].x,way5_fac7_fac8[0].y,way5_fac7_fac8[0].z) @@ -370,7 +374,7 @@ class tutorial.chapter_05 extends basic_chapter label_bord(way5_fac7_fac8_lim.a, way5_fac7_fac8_lim.b, opt, del, text) pot0=1 - return 10 + //return 10 } } else if (pot0==1 && pot1==0){ @@ -408,9 +412,10 @@ class tutorial.chapter_05 extends basic_chapter this.next_step() } } - return 0 - break; + //return 0 + break; case 3: + chapter_sub_steps = 2 if (pot0==0){ for(local j=0;j ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b)){ local wt = wt_water - local c_depot = my_tile(c_dep3) + local c_depot = my_tile(ship_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito local sched = schedule_x(wt, []) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 6b019e2..8b5a808 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -199,11 +199,15 @@ class tutorial.chapter_06 extends basic_chapter } function is_chapter_completed(pl) { - local percentage=0 save_glsw() save_pot() + local chapter_steps = 4 + local chapter_step = persistent.step + local chapter_sub_steps = 0 // count all sub steps + local chapter_sub_step = 0 // actual sub step + switch (this.step) { case 1: if (pot0==0){ @@ -223,7 +227,7 @@ class tutorial.chapter_06 extends basic_chapter else c_way = fullway.c - return 5 + //return 5 } else if (pot0==1 && pot1==0){ @@ -243,7 +247,7 @@ class tutorial.chapter_06 extends basic_chapter else c_way = fullway.c - return 10 + //return 10 } else if (pot1==1 && pot2==0){ @@ -256,7 +260,7 @@ class tutorial.chapter_06 extends basic_chapter tile.remove_object(player_x(1), mo_label) pot2 = 1 } - return 15 + //return 15 } else if (pot2==1 && pot3==0){ @@ -268,7 +272,7 @@ class tutorial.chapter_06 extends basic_chapter tile.remove_object(player_x(1), mo_label) pot3 = 1 } - return 20 + //return 20 } else if (pot3==1 && pot4==0){ @@ -282,7 +286,7 @@ class tutorial.chapter_06 extends basic_chapter tile.remove_object(player_x(1), mo_label) pot4 = 1 } - return 25 + //return 25 } else if (pot4==1 && pot5==0){ local tile = my_tile(st1_pos) @@ -290,7 +294,7 @@ class tutorial.chapter_06 extends basic_chapter if(buil && buil.get_owner().nr == 1){ pot5 = 1 } - return 30 + //return 30 } else if (pot5==1 && pot6==0){ this.next_step() @@ -304,7 +308,7 @@ class tutorial.chapter_06 extends basic_chapter this.next_step() } - return 50 + //return 50 break; case 3: @@ -325,7 +329,7 @@ class tutorial.chapter_06 extends basic_chapter sch_cov_correct = false this.next_step() } - return 65 + //return 65 break; case 4: @@ -336,7 +340,7 @@ class tutorial.chapter_06 extends basic_chapter if(way && depot){ pot0 = 1 } - return 25 + //return 25 } else if (pot0==1 && pot1==0){ local c_dep = my_tile(c_dep3) @@ -357,18 +361,18 @@ class tutorial.chapter_06 extends basic_chapter this.next_step() } } - return 80 + //return 80 break; case 5: this.step=1 persistent.step=1 persistent.status.step = 1 - return 100 + //return 100 break; - } - percentage=(this.step-1)+1 - return percentage + } + local percentage = chapter_percentage(chapter_steps, chapter_step, chapter_sub_steps, chapter_sub_step) + return percentage } function is_work_allowed_here(pl, tool_id, name, pos, tool) { From 6c6bf7b4fad1921ef62b52a014c4c44e4deffeb4 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 16:24:09 +0200 Subject: [PATCH 059/217] CHG chapter 5 data --- class/class_basic_data.nut | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index d559b7a..0b638c0 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1026,11 +1026,13 @@ function set_loading_capacity(id) { /* * set waiting time * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby * id 4 - chapter 3 step 11 : city train - * id 5 - chapter 4 step 7 : good ship produser -> consumer + * id 5 - chapter 4 step 7 : good ship produser -> consumer + * id 6 - chapter 5 step 4 : road mail + * id 7 - chapter 5 step 4 : ship oil rig * * 1 day = 2115 * 1 hour = 88 @@ -1055,6 +1057,12 @@ function set_waiting_time(id) { case 5: return 42282 break + case 6: + return 10571 + break + case 7: + return 42282 + break } break case "pak64.german": @@ -1074,6 +1082,12 @@ function set_waiting_time(id) { case 5: return 42282 break + case 6: + return 10571 + break + case 7: + return 42282 + break } break case "pak128": @@ -1093,6 +1107,12 @@ function set_waiting_time(id) { case 5: return 42282 break + case 6: + return 10571 + break + case 7: + return 42282 + break } break } From 472ed8ff27f9a7dcfa8745e1268b7c62ac6aacaf Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 17:15:48 +0200 Subject: [PATCH 060/217] FIX chapter 2 step 6 1/2 text file output (new textfile download) --- class/class_chapter_02.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 3bfcc30..5bc6ccc 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -181,7 +181,7 @@ class tutorial.chapter_02 extends basic_chapter text.list = create_schedule_list(city1_halt_2) local tile = my_tile(city1_halt_2[0]) - text.stnam = "1) "+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" + text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" local halt = my_tile(city1_halt_2[0]).get_halt() text.line = get_line_name(halt) @@ -400,7 +400,7 @@ class tutorial.chapter_02 extends basic_chapter } if (cov_valid && current_cov == ch2_cov_lim1.b){ - pot2=1 + pot2=1 } if (pot2 == 1 ){ @@ -602,7 +602,7 @@ class tutorial.chapter_02 extends basic_chapter backward_pot(3) break } - } + } else if (pot4==1 && pot5==0){ //Desmarca la via en la parada local way_mark = my_tile(line_connect_halt).find_object(mo_way) From 34656018fafeb4d527ec34fafcde6fa4ae5c74f3 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 19:42:47 +0200 Subject: [PATCH 061/217] FIX text errors --- class/class_chapter_02.nut | 4 ++-- class/class_chapter_03.nut | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 5bc6ccc..235e0af 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -224,10 +224,10 @@ class tutorial.chapter_02 extends basic_chapter text.tx = ttext("[3/4]") local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) - text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" + text.stnam = ""+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" text.list = create_schedule_list(city2_halt_1) - text.nr = city1_halt_2.len() + text.nr = city2_halt_1.len() } else if (pot4==0){ text = ttextfile("chapter_02/07_4-4.txt") diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 936dc75..5f13cf4 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -210,7 +210,7 @@ class tutorial.chapter_03 extends basic_chapter break case 5: text.reached = reached - text.t_reach = f1_reached + text.t_reach = f1_reached + " " + get_good_data(1, 1) text.loc1 = translate(loc1_name_obj) text.wag = sc_wag1_nr text.tile = loc1_tile From 98a06b0cf9236d9d8fbc0bbf350085c88f2cce36 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 19:48:00 +0200 Subject: [PATCH 062/217] CHG update translate files --- de.tab | 176 +++++++++++------------ de/about.txt | 2 +- de/chapter_01/goal.txt | 2 +- de/chapter_01/goal_step_01.txt | 2 +- de/chapter_01/goal_step_02.txt | 2 +- de/chapter_01/goal_step_03.txt | 2 +- de/chapter_01/goal_step_04.txt | 2 +- de/chapter_02/06_1-2.txt | 2 +- de/chapter_02/06_2-2.txt | 2 +- de/chapter_02/07_1-4.txt | 2 +- de/chapter_02/07_2-4.txt | 2 +- de/chapter_02/07_3-4.txt | 2 +- de/chapter_02/07_4-4.txt | 2 +- de/chapter_02/goal.txt | 2 +- de/chapter_02/goal_step_01.txt | 2 +- de/chapter_02/goal_step_02.txt | 2 +- de/chapter_02/goal_step_03.txt | 2 +- de/chapter_02/goal_step_04.txt | 2 +- de/chapter_02/goal_step_05.txt | 2 +- de/chapter_02/goal_step_08.txt | 2 +- de/chapter_03/01_1-2.txt | 2 +- de/chapter_03/01_2-2.txt | 2 +- de/chapter_03/02_1-3.txt | 2 +- de/chapter_03/02_2-3.txt | 2 +- de/chapter_03/02_3-3.txt | 2 +- de/chapter_03/03_1-2.txt | 2 +- de/chapter_03/03_2-2.txt | 2 +- de/chapter_03/04_1-3.txt | 2 +- de/chapter_03/04_2-3.txt | 2 +- de/chapter_03/04_3-3.txt | 2 +- de/chapter_03/06_1-5.txt | 2 +- de/chapter_03/06_2-5.txt | 2 +- de/chapter_03/06_3-5.txt | 2 +- de/chapter_03/06_4-5.txt | 2 +- de/chapter_03/06_5-5.txt | 2 +- de/chapter_03/08_1-5.txt | 2 +- de/chapter_03/08_2-5.txt | 2 +- de/chapter_03/08_3-5.txt | 2 +- de/chapter_03/08_4-5.txt | 2 +- de/chapter_03/08_5-5.txt | 2 +- de/chapter_03/09_1-2.txt | 2 +- de/chapter_03/09_2-2.txt | 2 +- de/chapter_03/10_1-4.txt | 2 +- de/chapter_03/10_2-4.txt | 2 +- de/chapter_03/10_3-4.txt | 2 +- de/chapter_03/10_4-4.txt | 2 +- de/chapter_03/goal.txt | 2 +- de/chapter_03/goal_step_05.txt | 2 +- de/chapter_03/goal_step_07.txt | 2 +- de/chapter_03/goal_step_11.txt | 2 +- de/chapter_03/step_1-4_hinfo.txt | 2 +- de/chapter_03/step_8-10_hinfo.txt | 2 +- de/chapter_04/01_2-2.txt | 2 +- de/chapter_04/05_1-3.txt | 2 +- de/chapter_04/05_2-3.txt | 2 +- de/chapter_04/05_3-3.txt | 2 +- de/chapter_04/goal.txt | 2 +- de/chapter_04/goal_step_02.txt | 2 +- de/chapter_04/goal_step_03.txt | 2 +- de/chapter_04/goal_step_04.txt | 2 +- de/chapter_04/goal_step_06.txt | 2 +- de/chapter_04/goal_step_07.txt | 2 +- de/chapter_05/03_1-2.txt | 2 +- de/chapter_05/03_2-2.txt | 2 +- de/chapter_05/04_1-3.txt | 2 +- de/chapter_05/04_2-3.txt | 2 +- de/chapter_05/04_3-3.txt | 2 +- de/chapter_05/goal.txt | 2 +- de/chapter_05/goal_step_01.txt | 2 +- de/chapter_05/goal_step_02.txt | 2 +- de/chapter_06/goal_step_01.txt | 2 +- de/chapter_06/goal_step_02.txt | 2 +- de/chapter_06/goal_step_03.txt | 2 +- de/chapter_06/goal_step_04.txt | 2 +- de/chapter_07/goal_step_01.txt | 1 - de/chapter_07/goal_step_01x04.txt | 2 +- de/chapter_07/goal_step_02.txt | 1 - de/chapter_07/goal_step_03.txt | 1 - de/chapter_07/goal_step_04.txt | 1 - de/finished.txt | 2 +- de/info.txt | 2 +- de/info/info_pak64perman.txt | 2 +- de/rule.txt | 2 +- en/chapter_02/06_1-2.txt | 2 +- en/chapter_02/06_2-2.txt | 2 +- en/chapter_02/07_1-4.txt | 2 +- en/chapter_02/07_2-4.txt | 2 +- en/chapter_02/07_3-4.txt | 2 +- en/chapter_02/07_4-4.txt | 2 +- en/chapter_02/goal_step_04.txt | 19 +-- en/chapter_03/goal_step_05.txt | 2 +- en/chapter_05/04_1-3.txt | 2 +- en/chapter_06/goal_step_04.txt | 2 +- es.tab | 224 +++++++++++++++--------------- es/about.txt | 2 +- es/chapter_00/goal_step_01.txt | 2 +- es/chapter_01/goal.txt | 2 +- es/chapter_01/goal_step_01.txt | 2 +- es/chapter_01/goal_step_02.txt | 2 +- es/chapter_01/goal_step_03.txt | 2 +- es/chapter_01/goal_step_04.txt | 2 +- es/chapter_02/06_1-2.txt | 2 +- es/chapter_02/06_2-2.txt | 2 +- es/chapter_02/07_1-4.txt | 2 +- es/chapter_02/07_2-4.txt | 2 +- es/chapter_02/07_3-4.txt | 2 +- es/chapter_02/07_4-4.txt | 2 +- es/chapter_02/goal.txt | 2 +- es/chapter_02/goal_step_01.txt | 2 +- es/chapter_02/goal_step_02.txt | 2 +- es/chapter_02/goal_step_03.txt | 2 +- es/chapter_02/goal_step_04.txt | 19 +-- es/chapter_02/goal_step_05.txt | 2 +- es/chapter_02/goal_step_08.txt | 2 +- es/chapter_03/01_1-2.txt | 2 +- es/chapter_03/01_2-2.txt | 2 +- es/chapter_03/02_1-3.txt | 2 +- es/chapter_03/02_3-3.txt | 2 +- es/chapter_03/03_1-2.txt | 2 +- es/chapter_03/03_2-2.txt | 2 +- es/chapter_03/04_1-3.txt | 2 +- es/chapter_03/04_2-3.txt | 2 +- es/chapter_03/04_3-3.txt | 2 +- es/chapter_03/06_1-5.txt | 2 +- es/chapter_03/06_2-5.txt | 2 +- es/chapter_03/06_3-5.txt | 2 +- es/chapter_03/06_4-5.txt | 2 +- es/chapter_03/06_5-5.txt | 2 +- es/chapter_03/08_1-5.txt | 2 +- es/chapter_03/08_2-5.txt | 2 +- es/chapter_03/08_3-5.txt | 2 +- es/chapter_03/08_4-5.txt | 2 +- es/chapter_03/08_5-5.txt | 2 +- es/chapter_03/09_1-2.txt | 2 +- es/chapter_03/09_2-2.txt | 2 +- es/chapter_03/10_1-4.txt | 2 +- es/chapter_03/10_2-4.txt | 2 +- es/chapter_03/10_3-4.txt | 2 +- es/chapter_03/10_4-4.txt | 2 +- es/chapter_03/goal.txt | 2 +- es/chapter_03/goal_step_05.txt | 2 +- es/chapter_03/goal_step_07.txt | 2 +- es/chapter_03/goal_step_11.txt | 2 +- es/chapter_03/step_1-4_hinfo.txt | 2 +- es/chapter_03/step_8-10_hinfo.txt | 2 +- es/chapter_04/01_1-2.txt | 2 +- es/chapter_04/01_2-2.txt | 2 +- es/chapter_04/05_2-3.txt | 2 +- es/chapter_04/05_3-3.txt | 2 +- es/chapter_04/goal.txt | 2 +- es/chapter_04/goal_step_02.txt | 2 +- es/chapter_04/goal_step_03.txt | 2 +- es/chapter_04/goal_step_04.txt | 2 +- es/chapter_04/goal_step_06.txt | 2 +- es/chapter_04/goal_step_07.txt | 2 +- es/chapter_05/03_1-2.txt | 2 +- es/chapter_05/03_2-2.txt | 2 +- es/chapter_05/04_1-3.txt | 2 +- es/chapter_05/04_2-3.txt | 2 +- es/chapter_05/04_3-3.txt | 2 +- es/chapter_05/goal.txt | 2 +- es/chapter_05/goal_step_01.txt | 2 +- es/chapter_05/goal_step_02.txt | 2 +- es/chapter_06/goal.txt | 2 +- es/chapter_06/goal_step_01.txt | 2 +- es/chapter_06/goal_step_02.txt | 2 +- es/chapter_06/goal_step_03.txt | 2 +- es/chapter_06/goal_step_04.txt | 2 +- es/chapter_07/goal_step_01x04.txt | 2 +- es/finished.txt | 2 +- es/info.txt | 2 +- es/info/info_pak128.txt | 2 +- es/info/info_pak64.txt | 2 +- es/info/info_pak64perman.txt | 2 +- es/result.txt | 2 +- es/rule.txt | 2 +- 176 files changed, 370 insertions(+), 408 deletions(-) delete mode 100644 de/chapter_07/goal_step_01.txt delete mode 100644 de/chapter_07/goal_step_02.txt delete mode 100644 de/chapter_07/goal_step_03.txt delete mode 100644 de/chapter_07/goal_step_04.txt diff --git a/de.tab b/de.tab index 05caeb2..4d0f650 100644 --- a/de.tab +++ b/de.tab @@ -1,23 +1,23 @@ -################################################################################# +§################################################################################# # for translate see # # https://simutrans-germany.com/translator_page/scenarios/scenario_5/ # ################################################################################# Action not allowed Aktion nicht erlaubt Advance is not allowed with the game paused. -Kein Fortschritt möglich während das Spiel in Pause ist. +Kein Fortschritt möglich während das Spiel in Pause ist. Advance not allowed Fortschritt nicht erlaubt Advanced Topics Fortgeschrittene Themen All wagons must be for [%s]. -Alle Wagen müssen für [%s] geeignet sein. +Alle Wagen müssen für [%s] geeignet sein. All wagons must be for: -Alle Wagen müssen geeignet sein für +Alle Wagen müssen geeignet sein für Are you lost ?, see the instructions shown below. Sind Sie verloren? Siehe die unten gezeigten Anweisungen. Build a Bridge here!. -Baue eine Brücke hier +Baue eine Brücke hier Build a Depot here!. Baue hier ein Depot! Build a Dock here!. @@ -47,19 +47,19 @@ Bus-Netzwerk Chapter Kapitel Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}). -Kapitel {number} - {cname} abgeschlossen, nächstes Kapitel {nextcname} beginnt hier: ({coord}). +Kapitel {number} - {cname} abgeschlossen, nächstes Kapitel {nextcname} beginnt hier: ({coord}). Checking Compatibility -Versionsprüfung +Versionsprüfung Choose a different stop. -Wählen Sie eine andere Haltestelle. +Wählen Sie eine andere Haltestelle. Click on the stop Klicken Sie auf die Haltestelle Connect the road here -Verbinde die Straße hier +Verbinde die Straße hier Connect the Track here Verbinde den Weg hier Creating Schedules is currently not allowed -Das Erstellen von Fahrplänen ist derzeit nicht zulässig +Das Erstellen von Fahrplänen ist derzeit nicht zulässig Dock No.%d must accept [%s] Dock Nr.%d muss %s akzeptieren empty chapter @@ -69,37 +69,37 @@ Erweiterungen sind nicht erlaubt. First buy an Airplane [%s]. Kaufen Sie zuerst ein Flugzeug [%s]. First create a line for the vehicle. -Erstellen Sie zunächst eine Linie für das Fahrzeug. +Erstellen Sie zunächst eine Linie für das Fahrzeug. First you must build a tunnel section. -Zuerst müssen Sie einen Tunnelabschnitt bauen. +Zuerst müssen Sie einen Tunnelabschnitt bauen. First you must lower the layer level. -Zuerst müssen Sie die Ebene absenken. +Zuerst müssen Sie die Ebene absenken. First you must Upper the layer level. -Zuerst müssen Sie den Grund erhöhen. +Zuerst müssen Sie den Grund erhöhen. First you need to activate the underground view / sliced map view. -Zuerst müssen Sie die Untergrundansicht / Ebene durch Karte aktivieren. +Zuerst müssen Sie die Untergrundansicht / Ebene durch Karte aktivieren. Flat slope here!. Flache Ebene hier! Getting Started Anfangen Go to next step -weiter zum nächsten Schritt +weiter zum nächsten Schritt Here Hier Incorrect vehicle configuration, check vehicle status. -Falsche Fahrzeugkonfiguration, Fahrzeugstatus prüfen. +Falsche Fahrzeugkonfiguration, Fahrzeugstatus prüfen. Indicates the limits for using construction tools -Gibt die Grenzwerte für die Verwendung von Konstruktionswerkzeugen an. +Gibt die Grenzwerte für die Verwendung von Konstruktionswerkzeugen an. Industrial Efficiency Produktion steigern bei Industrien It is not a slope. Dies ist kein Hang. It is not allowed to start vehicles. -Fahrzeuge dürfen nicht gestartet werden. +Fahrzeuge dürfen nicht gestartet werden. It is not flat terrain. Dies ist keine flache Ebene. It is not possible to build stops at intersections -Es ist nicht möglich, Haltestellen an Kreuzungen zu bauen +Es ist nicht möglich, Haltestellen an Kreuzungen zu bauen It must be a block signal! Es muss ein Blocksignal sein! It must be a slope. @@ -113,15 +113,15 @@ Lasst uns beginnen! Mail Extension Here!. Post-Erweiterung hier Modify the terrain here -Ändern Sie hier das Gelände +Ändern Sie hier das Gelände Must choose a locomotive [%s]. -Muss eine Lok wählen [%s]. +Muss eine Lok wählen [%s]. Must choose a locomotive: -Wählen Sie eine Lok vom Typ: +Wählen Sie eine Lok vom Typ: Must not use trailers [%d]. -Darf keine Anhänger [%d] verwenden. +Darf keine Anhänger [%d] verwenden. No barges allowed. -Keine Lastkähne erlaubt. +Keine Lastkähne erlaubt. No intersections allowed Keine Kreuzungen erlaubt Number of convoys in the depot: @@ -129,13 +129,13 @@ Anzahl der Konvois im Depot: Only %d stops are necessary. Es sind nur %d Stopps erforderlich. Only delete signals. -Nur Signale löschen. +Nur Signale löschen. Only one train is allowed, press the [Sell] button. -Es ist nur ein Zug zulässig. Drücken Sie die Taste [Verkaufen]. +Es ist nur ein Zug zulässig. Drücken Sie die Taste [Verkaufen]. Only railway schedules allowed -Nur Bahnfahrpläne erlaubt +Nur Bahnfahrpläne erlaubt Only road schedules allowed -Nur Straßenfahrpläne erlaubt +Nur Straßenfahrpläne erlaubt Place a block signal here Platzieren Sie hier ein Blocksignal Place a Tunnel here!. @@ -145,39 +145,39 @@ Platziere hier ein Singnal! Place Stop here!. Hier Halt platzieren Place the Road here!. -Platzieren Sie die Straße hier +Platzieren Sie die Straße hier Place the shipyard here Platzieren Sie die Werft hier Place the stops at the marked points Platzieren Sie die Stationen an den markierten Stellen Press [Ctrl] to build a tunnel entrance here -Drücken Sie [Strg], um hier einen Tunneleingang zu erstellen +Drücken Sie [Strg], um hier einen Tunneleingang zu erstellen Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time at the first stop!. -Drücken Sie den Button [Rückfahrkarte] und stellen Sie die Mindestladung und die maximale monatliche Wartezeit beim ersten Stopp ein!. +Drücken Sie den Button [Rückfahrkarte] und stellen Sie die Mindestladung und die maximale monatliche Wartezeit beim ersten Stopp ein!. Raise ground here -Ebene hier erhöhen +Ebene hier erhöhen Riding the Rails Auf der Schiene fahren Ruling the Roads -Die Straßen regieren +Die Straßen regieren Savegame has a different {more_info} script version! Maybe, it will work. Spielstand hat eine andere {more_info} Skriptversion! Vielleicht wird es funktionieren. Select station No.%d -Station Nr. %d auswählen +Station Nr. %d auswählen Select station No.%d [%s] -Wählen Sie die Station Nr. %d +Wählen Sie die Station Nr. %d Select the Bus [%s]. -Wählen Sie den Bus [%s] aus +Wählen Sie den Bus [%s] aus Select the dock No.%d -Wählen Sie das Dock Nr. %d aus +Wählen Sie das Dock Nr. %d aus Select the other station -Wählen Sie die Station +Wählen Sie die Station Select the other station first -Wählen Sie zuerst die Station +Wählen Sie zuerst die Station Setting Sail Segel setzen Slope Height. -Hanghöhe +Hanghöhe Station No.%d here Station Nr. %d hier Station No.%d must accept goods @@ -193,9 +193,9 @@ In die Luft gehen Text label Textmarker The %s stop must be for %s -Stop [%s] muss für [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' +Stop [%s] muss für [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' The bus must be [Passengers]. -Der Bus muss [Passagiere] befördern können. +Der Bus muss [Passagiere] befördern können. The cabin: Die Kabine: The convoy is not correct. @@ -203,9 +203,9 @@ Der Konvoi ist nicht korrekt. The Depot is correct. Das Depot ist korrekt. The extension building for station [%s] must be a [%s], use the 'Remove' tool -Das Erweiterungsgebäude für Station [%s] muss ein [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' +Das Erweiterungsgebäude für Station [%s] muss ein [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' The extension building for station [%s] must be for [%s], use the 'Remove' tool -Das Erweiterungsgebäude für Station [%s] muss für [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' +Das Erweiterungsgebäude für Station [%s] muss für [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' The first train Der erste Zug The forgotten Air transport @@ -223,11 +223,11 @@ Die Anzahl der Flugzeuge im Hangar muss [%d] betragen. The number of bus must be [%d]. Die Anzahl der Busse muss [%d] sein. The number of convoys must be [%d], press the [Sell] button. -Die Anzahl der Konvois muss [%d] betragen, drücken Sie die Schaltfläche [Verkaufen]. +Die Anzahl der Konvois muss [%d] betragen, drücken Sie die Schaltfläche [Verkaufen]. The number of convoys must be [%d]. Die Anzahl der Konvois muss [%d] betragen. The number of planes in the hangar must be [%d], use the [sell] button. -Die Anzahl an Flugzeugen im Hangar darf [%d] nicht überschreiten. Verwende die [Verkaufen]-Taste +Die Anzahl an Flugzeugen im Hangar darf [%d] nicht überschreiten. Verwende die [Verkaufen]-Taste The number of ships must be [%d]. Die Anzahl der Schiffe muss [%d] betragen. The number of trucks must be [%d]. @@ -237,25 +237,25 @@ Die Anzahl der Wagons muss [%d] betragen. The number of wagons must be: Die Anzahl an Waggons muss betragen: The Plane must be for [%s]. -Das Flugzeug muss für [%s] sein. +Das Flugzeug muss für [%s] sein. The route is complete, now you may dispatch the vehicle from the depot -Die Route ist fertiggestellt. Sie mögen nun die Fahrzeuge aus dem Depot lassen. +Die Route ist fertiggestellt. Sie mögen nun die Fahrzeuge aus dem Depot lassen. The schedule is not correct. Der Fahrplan ist falsch. The schedule list must not be empty. Der Fahrplan darf nicht leer sein. The schedule needs to have %d waystops, but there are %d. -Der Fahrplan sollte %d Halte beinhalten, gezählt wurden jedoch %d. +Der Fahrplan sollte %d Halte beinhalten, gezählt wurden jedoch %d. The second train Der zweite Zug The ship must be for [%s]. -Das Schiff muss für [%s] sein. +Das Schiff muss für [%s] sein. The signal does not point in the correct direction Das Signal zeigt in die falsche Richtung The signal is ready! Das Signal ist bereit! The slope is ready. -Die Aufschüttung ist bereit. +Die Aufschüttung ist bereit. The slope points to the [%s]. Der Hang zeigt nach [%s]. The slope points to the Northeast. @@ -273,19 +273,19 @@ Die Strecke ist falsch, es muss sein: %s. Verwende das Abrisswerkzeug. The track is stuck, use the [Remove] tool here! Die Strecke ist blockiert. Verwende das Abrisswerkzeug. The trailers numbers must be [%d]. -Die Anzahl von Anhängern muss [%d] sein. +Die Anzahl von Anhängern muss [%d] sein. The train cannot be shorter than [%d] tiles. -Der Zug darf nicht kürzer als [%d] Kacheln sein. +Der Zug darf nicht kürzer als [%d] Kacheln sein. The train may not be longer than [%d] tiles. -Der Zug darf nicht kürzer als [%d] Kacheln sein. +Der Zug darf nicht kürzer als [%d] Kacheln sein. The truck must be for [%s]. -Der LKW muss für [%s] sein. +Der LKW muss für [%s] sein. The tunnel is already at the correct level Der Tunnel ist schon auf der richtigen Ebene. The tunnel is not correct, use the [Remove] tool here -Der Tunnel ist nicht korrekt, verwenden Sie die Schaltfläche [Entfernen] hier. +Der Tunnel ist nicht korrekt, verwenden Sie die Schaltfläche [Entfernen] hier. The vehicle must be [%s]. -Das Fahrzeug muss [%s] heißen. +Das Fahrzeug muss [%s] heißen. The waittime in waystop {nr} '{name}' isn't {wait} {pos} Die max. Wartezeit bei Halt {name} {pos} ist nicht {wait} There is already a station. @@ -297,7 +297,7 @@ Hier gibt es schon ein Umspannwerk! This is a factory Das ist eine Fabrik This is a link -Das ist eine Verknüpfung +Das ist eine Verknüpfung This is a station Das ist eine Station This is a town centre @@ -313,62 +313,62 @@ Tutorial Scenario beendet. Updating text ... Waiting ... Text aktualisieren ... Bitte warten ... You are outside the allowed limits! -Sie befinden sich außerhalb der zulässigen Grenzen! +Sie befinden sich außerhalb der zulässigen Grenzen! You can only build on a straight road -Sie können nur auf einer geraden Straße bauen +Sie können nur auf einer geraden Straße bauen You can only build stops on flat ground -Sie können Halte nur auf ebenem Boden bauen +Sie können Halte nur auf ebenem Boden bauen You can only build stops on roads -Sie können nur auf Straßen Haltestellen bauen +Sie können nur auf Straßen Haltestellen bauen You can only delete the stations. -Sie können nur den Bahnhof löschen +Sie können nur den Bahnhof löschen You can only delete the stops. -Sie können nur die Halte löschen +Sie können nur die Halte löschen You can only use this tool in the city -Sie können dieses Tool nur in der Stadt verwenden +Sie können dieses Tool nur in der Stadt verwenden You can only use vehicles: -Sie können nur folgende Fahrzeuge benutzen: +Sie können nur folgende Fahrzeuge benutzen: You didn't build a station at {pos} Du hast noch keine Haltestelle an {pos} gebaut You must build a stop in [%s] -Sie müssen einen Stopp in [%s] bauen +Sie müssen einen Stopp in [%s] bauen You must build a stop in [%s] first -Sie müssen zuerst den Halt in [%s] bauen +Sie müssen zuerst den Halt in [%s] bauen You must build the %d stops first. -Sie müssen zuerst den Halt %d bauen +Sie müssen zuerst den Halt %d bauen You must build the bridge here -Sie müssen hier eine Brücke bauen +Sie müssen hier eine Brücke bauen You must build the depot in -Sie müssen ein Depot bauen in +Sie müssen ein Depot bauen in You must build the train depot in -Sie müssen ein Eisenbahndepot bauen in +Sie müssen ein Eisenbahndepot bauen in You must build track in -Sie müssen zuerst Schienen bauen in +Sie müssen zuerst Schienen bauen in You must click on the stops -Sie müssen auf die Haltestellen klicken +Sie müssen auf die Haltestellen klicken You must connect the two cities first. -Sie müssen zuerst die beiden Städte verbinden +Sie müssen zuerst die beiden Städte verbinden You must first build a stretch of road -Sie müssen zuerst einen Straßenabschnitt bauen +Sie müssen zuerst einen Straßenabschnitt bauen You must first buy a bus [%s]. -Sie müssen erst den Bus [%s] kaufen +Sie müssen erst den Bus [%s] kaufen You must first buy a locomotive [%s]. -Sie müssen erst die Lokomotive [%s] kaufen +Sie müssen erst die Lokomotive [%s] kaufen You must first buy a ship [%s]. -Sie müssen erst das Schiff [%s] kaufen +Sie müssen erst das Schiff [%s] kaufen You must lift the land with a flat slope first -Sie müssen den Grund zuerst eben anheben +Sie müssen den Grund zuerst eben anheben You must lower the ground first -Sie müssen zuerst den Boden absenken +Sie müssen zuerst den Boden absenken You must press the [Copy backward] button to complete the route. -Sie müssen die Taste [Rückfahrkarte] drücken, um die Route abzuschließen. +Sie müssen die Taste [Rückfahrkarte] drücken, um die Route abzuschließen. You must select a [%s]. -Sie müssen erst [%s] auswählen +Sie müssen erst [%s] auswählen You must select the deposit located in -Sie müssen das Depot auswählen in +Sie müssen das Depot auswählen in You must upper the ground first -Sie müssen zuerst den Boden anheben +Sie müssen zuerst den Boden anheben You must use the inspection tool -Sie müssen das Abfragewerkzeug (Taste a) benutzen +Sie müssen das Abfragewerkzeug (Taste a) benutzen You must use the tool to raise the ground here -Sie müssen das Werkzeug verwenden, um den Boden hier anzuheben +Sie müssen das Werkzeug verwenden, um den Boden hier anzuheben diff --git a/de/about.txt b/de/about.txt index 4f361a1..d1585e8 100644 --- a/de/about.txt +++ b/de/about.txt @@ -1 +1 @@ -

Scenario: {short_description}
Version: {version}
Author: {author}
Übersetzung: {translation}

\ No newline at end of file +

Scenario: {short_description}
Version: {version}
Author: {author}
Übersetzung: {translation}

\ No newline at end of file diff --git a/de/chapter_01/goal.txt b/de/chapter_01/goal.txt index 364ba0a..dc058ee 100644 --- a/de/chapter_01/goal.txt +++ b/de/chapter_01/goal.txt @@ -1 +1 @@ -

{scr}

{txtst_01}Schritt A - Über das Tutorial-Szenario
{step_01}

{txtst_02}Schritt B - Sich bewegen
{step_02}

{txtst_03}Schritt C - Die Details sehen
{step_03}

{txtst_04}Schritt D - Die Minikarte und andere Fenster
{step_04}

\ No newline at end of file +

{scr}

{txtst_01}Schritt A - Über das Tutorial-Szenario
{step_01}

{txtst_02}Schritt B - Sich bewegen
{step_02}

{txtst_03}Schritt C - Die Details sehen
{step_03}

{txtst_04}Schritt D - Die Minikarte und andere Fenster
{step_04}

\ No newline at end of file diff --git a/de/chapter_01/goal_step_01.txt b/de/chapter_01/goal_step_01.txt index 40e5718..e0e72c7 100644 --- a/de/chapter_01/goal_step_01.txt +++ b/de/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link 'Schritt überspringen'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Szenariomeldungen

Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Mailbox und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file +

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link 'Schritt überspringen'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Szenariomeldungen

Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Mailbox und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_02.txt b/de/chapter_01/goal_step_02.txt index 0f849a1..f43345c 100644 --- a/de/chapter_01/goal_step_02.txt +++ b/de/chapter_01/goal_step_02.txt @@ -1 +1 @@ -

Wir empfehlen Ihnen, das Raster für dieses Tutorial durch Drücken der Taste # zu aktivieren. Darüber hinaus wird dringend empfohlen, die Bäume entweder über das Menü Einstellungen - Anzeige so zu konfigurieren, dass sie transparent oder minimiert sind. Das Umschalten zwischen Groß und Klein/Transparent ist durch Drücken der Taste % möglich.

Sie können die Kartenansicht mit dem Mausrad oder den Tasten Bild runter/Bild hoch vergrößern oder verkleinern.

Sie können sich auf der Karte bewegen, indem Sie die Maus mit gedrückter Maustaste (rechts/links) bewegen. Die Cursortasten oder die Tasten des Ziffernblocks (wenn aktiv) können ebenfalls verwendet werden.

Sie können die Karte drehen, indem Sie Umschalt+r (Großbuchstabe R) drücken oder das Werkzeug Karte drehen aus dem Hauptmenü auswählen.

Versuchen Sie, in die Kamera hinein- und heraus zu zoomen und sich auf der Karte zu bewegen.

Um mit dem nächsten Schritt fortzufahren, drehen Sie die Karte.

\ No newline at end of file +

Wir empfehlen Ihnen, das Raster für dieses Tutorial durch Drücken der Taste # zu aktivieren. Darüber hinaus wird dringend empfohlen, die Bäume entweder über das Menü Einstellungen - Anzeige so zu konfigurieren, dass sie transparent oder minimiert sind. Das Umschalten zwischen Groß und Klein/Transparent ist durch Drücken der Taste % möglich.

Sie können die Kartenansicht mit dem Mausrad oder den Tasten Bild runter/Bild hoch vergrößern oder verkleinern.

Sie können sich auf der Karte bewegen, indem Sie die Maus mit gedrückter Maustaste (rechts/links) bewegen. Die Cursortasten oder die Tasten des Ziffernblocks (wenn aktiv) können ebenfalls verwendet werden.

Sie können die Karte drehen, indem Sie Umschalt+r (Großbuchstabe R) drücken oder das Werkzeug Karte drehen aus dem Hauptmenü auswählen.

Versuchen Sie, in die Kamera hinein- und heraus zu zoomen und sich auf der Karte zu bewegen.

Um mit dem nächsten Schritt fortzufahren, drehen Sie die Karte.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_03.txt b/de/chapter_01/goal_step_03.txt index f72e279..1c6a4d2 100644 --- a/de/chapter_01/goal_step_03.txt +++ b/de/chapter_01/goal_step_03.txt @@ -1 +1 @@ -

Da Sie nun wissen, wie Sie sich auf der Karte bewegen, besteht der nächste Schritt darin, Informationen über Elemente auf der Karte zu erhalten.

Abfragewerkzeug

Dies ist das Hauptwerkzeug des Spiels. Es kann kostenlos verwendet werden und ermöglicht die Anzeige des Informationsfensters für jedes Element auf der Karte, sofern vorhanden und aktiviert. Es ist auch das standardmäßig ausgewählte Werkzwug. Ist dies nicht der Fall, kann es über das Hauptmenü (das Lupensymbol) oder durch drücken der Taste a aktiviert werden.

Rechts in der Statuszeile werden die Koordinaten der Position (x,y,z) des Cursors angezeigt. Die Statuszeile befindet sich standardmäßig am unteren Rand.

Klicken Sie zunächst mit dem {tool1} auf {pos}. Nachdem Sie auf das Monument geklickt haben, müssen Sie das Informationsfenster schließen, indem Sie oben auf X klicken. Drücken Sie Esc, um das aktive geöffnete Fenster zu schließen oder indem Sie die Löschtaste drücken, um alle Fenster zu schließen.

Abschließend klicken Sie mit dem {tool1} auf die {buld_name} und schließen das Informationsfenster.

Tipp: Sie können im Informationsfenster auf das Bild des Objekts klicken und die Karte wird auf dessen Position zentriert.

\ No newline at end of file +

Da Sie nun wissen, wie Sie sich auf der Karte bewegen, besteht der nächste Schritt darin, Informationen über Elemente auf der Karte zu erhalten.

Abfragewerkzeug

Dies ist das Hauptwerkzeug des Spiels. Es kann kostenlos verwendet werden und ermöglicht die Anzeige des Informationsfensters für jedes Element auf der Karte, sofern vorhanden und aktiviert. Es ist auch das standardmäßig ausgewählte Werkzwug. Ist dies nicht der Fall, kann es über das Hauptmenü (das Lupensymbol) oder durch drücken der Taste a aktiviert werden.

Rechts in der Statuszeile werden die Koordinaten der Position (x,y,z) des Cursors angezeigt. Die Statuszeile befindet sich standardmäßig am unteren Rand.

Klicken Sie zunächst mit dem {tool1} auf {pos}. Nachdem Sie auf das Monument geklickt haben, müssen Sie das Informationsfenster schließen, indem Sie oben auf X klicken. Drücken Sie Esc, um das aktive geöffnete Fenster zu schließen oder indem Sie die Löschtaste drücken, um alle Fenster zu schließen.

Abschließend klicken Sie mit dem {tool1} auf die {buld_name} und schließen das Informationsfenster.

Tipp: Sie können im Informationsfenster auf das Bild des Objekts klicken und die Karte wird auf dessen Position zentriert.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_04.txt b/de/chapter_01/goal_step_04.txt index d45c793..6bb706e 100644 --- a/de/chapter_01/goal_step_04.txt +++ b/de/chapter_01/goal_step_04.txt @@ -1 +1 @@ -

Es gibt eine Reihe von Fenstern mit wichtigen Informationen.

Die Minikarte kann durch Drücken der Taste m angezeigt werden.
Das Fenster Finanzen kann durch Drücken der Taste f angezeigt werden.
Die Meldungen können durch drücken von Umschalt+b angezeigt werden.
Weitere Informationen über die Stadt erhalten Sie, indem Sie mit dem {tool1} auf das Rathaus klicken.

Um zum nächsten Kapitel zu gelangen, klicken Sie mit dem {tool1} auf das {pos2} von {town}.

\ No newline at end of file +

Es gibt eine Reihe von Fenstern mit wichtigen Informationen.

Die Minikarte kann durch Drücken der Taste m angezeigt werden.
Das Fenster Finanzen kann durch Drücken der Taste f angezeigt werden.
Die Meldungen können durch drücken von Umschalt+b angezeigt werden.
Weitere Informationen über die Stadt erhalten Sie, indem Sie mit dem {tool1} auf das Rathaus klicken.

Um zum nächsten Kapitel zu gelangen, klicken Sie mit dem {tool1} auf das {pos2} von {town}.

\ No newline at end of file diff --git a/de/chapter_02/06_1-2.txt b/de/chapter_02/06_1-2.txt index 9ab61ad..dbab124 100644 --- a/de/chapter_02/06_1-2.txt +++ b/de/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:

[1] Wählen Sie die Haltestelle {st1} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.
[2] Wählen Sie die Haltestelle {st2}
[3] Wählen Sie die Haltestelle {st3}
[4] Wählen Sie die Haltestelle {st4}
[5] Wählen Sie die Haltestelle {st5}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:


{list}
[*] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/06_2-2.txt b/de/chapter_02/06_2-2.txt index e39de02..68253a7 100644 --- a/de/chapter_02/06_2-2.txt +++ b/de/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Mehrere Fahrzeuge auf der selben Route

Linien zuordnen:

Bestehende Linien können neuen Fahrzeugen zugewiesen werden, sofern es sich um Fahrzeuge derselben Kategorie handelt. In diesem Beispiel werden wir unseren neuen Fahrzeugen die Linie {line} zuweisen.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

[1] Kaufen Sie zuerst einen Bus {bus1}.
[2] Wenn die Linie korrekt erstellt wurde, können Sie bei Bedient Linie: klicken und dann die Zeile {line} auswählen.
[3] Klicken Sie abschließend auf Starten.

Busse im Umlauf: {cir}/3

Um zum nächsten Schritt zu gelangen, starten Sie alle 3 Busse.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Mehrere Fahrzeuge auf der selben Route

Linien zuordnen:

Bestehende Linien können neuen Fahrzeugen zugewiesen werden, sofern es sich um Fahrzeuge derselben Kategorie handelt. In diesem Beispiel werden wir unseren neuen Fahrzeugen die Linie {line} zuweisen.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

[1] Kaufen Sie zuerst einen Bus {bus1}.
[2] Wenn die Linie korrekt erstellt wurde, können Sie bei Bedient Linie: klicken und dann die Zeile {line} auswählen.
[3] Klicken Sie abschließend auf Starten.

Busse im Umlauf: {cir}/3

Um zum nächsten Schritt zu gelangen, starten Sie alle 3 Busse.

\ No newline at end of file diff --git a/de/chapter_02/07_1-4.txt b/de/chapter_02/07_1-4.txt index c521565..1538c80 100644 --- a/de/chapter_02/07_1-4.txt +++ b/de/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Sie mé»¶sen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Sie müssen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/07_2-4.txt b/de/chapter_02/07_2-4.txt index 9bc88e9..54e81cf 100644 --- a/de/chapter_02/07_2-4.txt +++ b/de/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} 謋fnen Sie {tool2} und bauen Sie eine Straé von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedr點kt, um gerade Abschnitte zu bauen.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Öffnen Sie {tool2} und bauen Sie eine Straße von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedrückt, um gerade Abschnitte zu bauen.

Um zum nächsten Schritt zu gelangen, bauen Sie die Straße.

\ No newline at end of file diff --git a/de/chapter_02/07_3-4.txt b/de/chapter_02/07_3-4.txt index ab5d5dc..20aa462 100644 --- a/de/chapter_02/07_3-4.txt +++ b/de/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straéndepot{dep}, wé‹’len Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wé‹’len Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugef黦t haben, w鋒len Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straßendepot{dep}, wählen Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wählen Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/07_4-4.txt b/de/chapter_02/07_4-4.txt index a8f3f12..4f77072 100644 --- a/de/chapter_02/07_4-4.txt +++ b/de/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Da die Br點ke nun repariert ist, bené°igt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Jetzt müssen Sie dem Konvoi folgen.

Fahrzeugen folgen

Mit dieser Option ké°Šnen Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum né‹hsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Fahrzeug befindet sich bei: {covpos}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Jetzt müssen Sie dem Konvoi folgen.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Fahrzeug befindet sich bei: {covpos}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/goal.txt b/de/chapter_02/goal.txt index f3ea7f4..9ce7b8c 100644 --- a/de/chapter_02/goal.txt +++ b/de/chapter_02/goal.txt @@ -1 +1 @@ -

{scr}

{txtst_01}Schritt A - Bau eines Straßenabschnitts
{step_01}

{txtst_02}Schritt B - Bau eines Straßendepots
{step_02}

{txtst_03}Schritt C - Platzierung von Bushaltestellen
{step_03}

{txtst_04}Schritt D - Erster Bus gestartet
{step_04}

{txtst_05}Schritt E - Eine Brücke bauen
{step_05}

{txtst_06}Schritt F - Verbindung des im Bau befindlichen Docks
{step_06}

{txtst_07}Schritt G - Verbindung der Städte
{step_07}

{txtst_08}Schritt H - Öffentliche Haltestellen erstellen
{step_08}

\ No newline at end of file +

{scr}

{txtst_01}Schritt A - Bau eines Straßenabschnitts
{step_01}

{txtst_02}Schritt B - Bau eines Straßendepots
{step_02}

{txtst_03}Schritt C - Platzierung von Bushaltestellen
{step_03}

{txtst_04}Schritt D - Erster Bus gestartet
{step_04}

{txtst_05}Schritt E - Eine Brücke bauen
{step_05}

{txtst_06}Schritt F - Verbindung des im Bau befindlichen Docks
{step_06}

{txtst_07}Schritt G - Verbindung der Städte
{step_07}

{txtst_08}Schritt H - Öffentliche Haltestellen erstellen
{step_08}

\ No newline at end of file diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index 3a60d3b..aa7aafa 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_02.txt b/de/chapter_02/goal_step_02.txt index 964b1c7..4b1ca46 100644 --- a/de/chapter_02/goal_step_02.txt +++ b/de/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} starten

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {pos}. Sie finden dieses Tool im Menü {tool2}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {pos}.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} starten

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {pos}. Sie finden dieses Tool im Menü {tool2}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {pos}.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_03.txt b/de/chapter_02/goal_step_03.txt index 89d00b3..443ee11 100644 --- a/de/chapter_02/goal_step_03.txt +++ b/de/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file +

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_04.txt b/de/chapter_02/goal_step_04.txt index bb8a660..ef2ea3a 100644 --- a/de/chapter_02/goal_step_04.txt +++ b/de/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Da nun die Haltestellen vorhanden sind, mé»¶sen Sie einen Bus kaufen, um den Service anbieten zu ké°Šnen.

[1] Klicken Sie mit dem {tool1} auf das Straéndepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, mé»¶sen Sie zuné‹hst auf die Schaltflé‹he Fahrplan klicken um das Fahrzeugfenster zu é°‚fnen.
Hinweis: Das Depot-Fenster ké°Šnen Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan m黶sen Sie nun alle Haltestellen in der Stadt ausw鋒len, um sie zur Liste hinzuzuf黦en:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugef黦t haben, w鋒len Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schlieén Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlé‹st.

Tipp: Dr點ken Sie die Taste ", um st鋎tische Geb鋟de auszublenden.

Das Tutorial geht zum nächsten Schritt über, wenn der Konvoi das Depot verlässt.

\ No newline at end of file +

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Klicken Sie auf das bereits fahrende Fahrzeug, um das Konvoi-Fenster anzuzeigen. Suchen Sie in der Titelleiste des Konvoi-Fensters nach dem vierten Symbol (dem Augensymbol) und drücken Sie darauf, um dem Konvoi zu folgen.

Das Tutorial fährt mit dem nächsten Schritt fort, sobald Sie dem Konvoi folgen.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_05.txt b/de/chapter_02/goal_step_05.txt index d1aa710..eb057e0 100644 --- a/de/chapter_02/goal_step_05.txt +++ b/de/chapter_02/goal_step_05.txt @@ -1 +1 @@ -

Die Brücke zu einem der äußeren Vororte wurde kürzlich weggespült.
Die Stadt {name} möchte, dass Sie diesen Vorort durch den Bau einer Brücke zwischen {bpos1} und {bpos2} wieder verbinden.

Es gibt zwei Möglichkeiten, dies zu erreichen. Wählen Sie zuerst eine Brücke im Menü {tool2} aus und dann...
[1] Sie können die Brücke bauen, indem Sie auf eine der gegenüberliegenden geraden Hangfeldern klicken.
[2] Sie können die Brücke bauen, indem Sie den Cursor von Hang auf einer Seite zum gegenüberliegenden Hang mit gedrückter linken Maustaste ziehen.

Um zum nächsten Schritt zu gelangen, bauen Sie eine Brücke auf Feld {bpos1}.

{bridge_info} \ No newline at end of file +

Die Brücke zu einem der äußeren Vororte wurde kürzlich weggespült.
Die Stadt {name} möchte, dass Sie diesen Vorort durch den Bau einer Brücke zwischen {bpos1} und {bpos2} wieder verbinden.

Es gibt zwei Möglichkeiten, dies zu erreichen. Wählen Sie zuerst eine Brücke im Menü {tool2} aus und dann...
[1] Sie können die Brücke bauen, indem Sie nacheinander auf die gegenüberliegenden geraden Hangfeldern klicken.
[2] Sie können die Brücke bauen, indem Sie den Cursor vom Hang auf einer Seite zum gegenüberliegenden Hang mit gedrückter linken Maustaste ziehen.

Um zum nächsten Schritt zu gelangen, bauen Sie eine Brücke auf Feld {bpos1}.

{bridge_info} \ No newline at end of file diff --git a/de/chapter_02/goal_step_08.txt b/de/chapter_02/goal_step_08.txt index f6d8bb9..c8c91bb 100644 --- a/de/chapter_02/goal_step_08.txt +++ b/de/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.

Wählen Sie in der Symbolleiste {tool3} und wählen Sie das Werkzeug In öffentliche Haltestelle umwande.

In eine öffentliche Haltestelle umwandeln

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Warnung: Die Verwendung dieses Tools ist sehr teuer. Die Kosten sind das 60-fache der Instandhaltung.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug In öffentliche Haltestelle umwande und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file +

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.

Wählen Sie in der Symbolleiste {tool3} und wählen Sie das Werkzeug In öffentliche Haltestelle umwande.

In eine öffentliche Haltestelle umwandeln

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Warnung: Die Verwendung dieses Tools ist sehr teuer. Die Kosten sind das 60-fache der Instandhaltung.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug In öffentliche Haltestelle umwande und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file diff --git a/de/chapter_03/01_1-2.txt b/de/chapter_03/01_1-2.txt index 62e3b96..d93d6a7 100644 --- a/de/chapter_03/01_1-2.txt +++ b/de/chapter_03/01_1-2.txt @@ -1 +1 @@ -

Um {good2} herzustellen, müssen Sie {good1} von {f1} nach {f2} transportieren.

{tx} Verwenden Sie {tool1} auf {f2}, um Details anzuzeigen

\ No newline at end of file +

Um {good2} herzustellen, müssen Sie {good1} von {f1} nach {f2} transportieren.

{tx} Verwenden Sie {tool1} auf {f2}, um Details anzuzeigen

\ No newline at end of file diff --git a/de/chapter_03/01_2-2.txt b/de/chapter_03/01_2-2.txt index 663122b..646762c 100644 --- a/de/chapter_03/01_2-2.txt +++ b/de/chapter_03/01_2-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Die Details sind:

Maximale Produktion pro Monat:
Zeigt die Produktionskapazität an, über die die Fabrik verfügt. Die Produktion kann je nach Bedarf durch den Transport von Passagieren, Post oder Strom zur Fabrik gesteigert werden.

Produktion:
Zeigt, was die Fabrik produziert, wie viel auf Lager ist und wie viel sie aus einer Einheit Rohstoffe herstellt.
Beispiel: {f2} verbraucht {g1_factor}% von {good1} und produziert {g2_factor}% von {good2}. Die maximale Produktion beträgt {prod_out} Einheiten pro Monat. Das bedeutet, dass es bis zu {g1_consum} {g1_metric} {good1} pro Monat verbraucht und daraus {g2_prod} {g2_metric} {good2} produziert.
Hinweis: Die oben angezeigte Produktion entspricht dem Verbrauch und der Produktion von 100% Ware. Weicht der Prozentsatz bei der Ware ab, dann ist der Verbrauch/die Produktion für die Ware der entsprechende Prozentsatz.

Verbrauch:
Zeigt die Rohstoffe an, die die Fabrik benötigt, die gelagerte oder unterwegs befindliche Menge und wie viel Rohstoff zur Herstellung einer Produkteinheit benötigt wird.

Verbraucher/Lieferanten:
Zeigt verbundene Fabriken an. Sie können Waren nur zwischen verbundenen Industrien transportieren.

Arbeiter wohnen in:
Zeigt die Städte an, aus denen die Arbeiter kommen mit Passagier- und Postrate.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file +{step_hinfo}

{tx} Die Details sind:

Maximale Produktion pro Monat:
Zeigt die Produktionskapazität an, über die die Fabrik verfügt. Die Produktion kann je nach Bedarf durch den Transport von Passagieren, Post oder Strom zur Fabrik gesteigert werden.

Produktion:
Zeigt, was die Fabrik produziert, wie viel auf Lager ist und wie viel sie aus einer Einheit Rohstoffe herstellt.
Beispiel: {f2} verbraucht {g1_factor}% von {good1} und produziert {g2_factor}% von {good2}. Die maximale Produktion beträgt {prod_out} Einheiten pro Monat. Das bedeutet, dass es bis zu {g1_consum} {g1_metric} {good1} pro Monat verbraucht und daraus {g2_prod} {g2_metric} {good2} produziert.
Hinweis: Die oben angezeigte Produktion entspricht dem Verbrauch und der Produktion von 100% Ware. Weicht der Prozentsatz bei der Ware ab, dann ist der Verbrauch/die Produktion für die Ware der entsprechende Prozentsatz.

Verbrauch:
Zeigt die Rohstoffe an, die die Fabrik benötigt, die gelagerte oder unterwegs befindliche Menge und wie viel Rohstoff zur Herstellung einer Produkteinheit benötigt wird.

Verbraucher/Lieferanten:
Zeigt verbundene Fabriken an. Sie können Waren nur zwischen verbundenen Industrien transportieren.

Arbeiter wohnen in:
Zeigt die Städte an, aus denen die Arbeiter kommen mit Passagier- und Postrate.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file diff --git a/de/chapter_03/02_1-3.txt b/de/chapter_03/02_1-3.txt index 71983f4..4557624 100644 --- a/de/chapter_03/02_1-3.txt +++ b/de/chapter_03/02_1-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Bahnstrecke, die die beiden Punkte {w1} und {w2} verbindet.

Bahngleise

Es gibt verschiedene Arten von Bahngleisen für unterschiedliche Geschwindigkeiten. Sie sollten bedenken, das schneller Bahngleise auch teurer im Bau und Unterhalt sind. Da langsame Bahngleise leicht durch schnellere überbaut werden können, wird empfohlen am Anfang mit langsamen Bahngleisen anzufangen.

Bauen Sie das Bahngleis von {cbor} nach {w2}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Bahnstrecke, die die beiden Punkte {w1} und {w2} verbindet.

Bahngleise

Es gibt verschiedene Arten von Bahngleisen für unterschiedliche Geschwindigkeiten. Sie sollten bedenken, das schneller Bahngleise auch teurer im Bau und Unterhalt sind. Da langsame Bahngleise leicht durch schnellere überbaut werden können, wird empfohlen am Anfang mit langsamen Bahngleisen anzufangen.

Bauen Sie das Bahngleis von {cbor} nach {w2}.

\ No newline at end of file diff --git a/de/chapter_03/02_2-3.txt b/de/chapter_03/02_2-3.txt index 4b6cfcc..6ea8902 100644 --- a/de/chapter_03/02_2-3.txt +++ b/de/chapter_03/02_2-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Brücke zu {br}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Brücke zu {br}.

\ No newline at end of file diff --git a/de/chapter_03/02_3-3.txt b/de/chapter_03/02_3-3.txt index 66a8b75..dd2fecb 100644 --- a/de/chapter_03/02_3-3.txt +++ b/de/chapter_03/02_3-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis, das die beiden Punkte {cbor} und {w4} verbindet.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis, das die beiden Punkte {cbor} und {w4} verbindet.

\ No newline at end of file diff --git a/de/chapter_03/03_1-2.txt b/de/chapter_03/03_1-2.txt index 5197dbd..2a48898 100644 --- a/de/chapter_03/03_1-2.txt +++ b/de/chapter_03/03_1-2.txt @@ -1 +1 @@ -{step_hinfo}

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.

{tx} Wählen Sie {tool2} und bauen Sie eine Warenstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file +{step_hinfo}

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.

{tx} Wählen Sie {tool2} und bauen Sie eine Warenstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file diff --git a/de/chapter_03/03_2-2.txt b/de/chapter_03/03_2-2.txt index c80e6d3..eea7b4e 100644 --- a/de/chapter_03/03_2-2.txt +++ b/de/chapter_03/03_2-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f1}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f1}.

\ No newline at end of file diff --git a/de/chapter_03/04_1-3.txt b/de/chapter_03/04_1-3.txt index 6faae78..171e48e 100644 --- a/de/chapter_03/04_1-3.txt +++ b/de/chapter_03/04_1-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis von {w1} nach {w2}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis von {w1} nach {w2}.

\ No newline at end of file diff --git a/de/chapter_03/04_2-3.txt b/de/chapter_03/04_2-3.txt index cc38ad3..28d1dcc 100644 --- a/de/chapter_03/04_2-3.txt +++ b/de/chapter_03/04_2-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahndepot auf Feld {dep}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahndepot auf Feld {dep}.

\ No newline at end of file diff --git a/de/chapter_03/04_3-3.txt b/de/chapter_03/04_3-3.txt index 82e24f7..4d02bb1 100644 --- a/de/chapter_03/04_3-3.txt +++ b/de/chapter_03/04_3-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Um zum nächsten Schritt zu gelangen, klicken Sie mit dem {tool1} auf das Bahndepot {dep}.

\ No newline at end of file +{step_hinfo}

{tx} Um zum nächsten Schritt zu gelangen, klicken Sie mit dem {tool1} auf das Bahndepot {dep}.

\ No newline at end of file diff --git a/de/chapter_03/06_1-5.txt b/de/chapter_03/06_1-5.txt index 2c81812..a550251 100644 --- a/de/chapter_03/06_1-5.txt +++ b/de/chapter_03/06_1-5.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen sie ein Bahngleis zwischen {w1} und {w2}.

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen sie ein Bahngleis zwischen {w1} und {w2}.

\ No newline at end of file diff --git a/de/chapter_03/06_2-5.txt b/de/chapter_03/06_2-5.txt index b72c99f..553e08f 100644 --- a/de/chapter_03/06_2-5.txt +++ b/de/chapter_03/06_2-5.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen Sie einen Tunnel auf Feld {tu}.

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen Sie einen Tunnel auf Feld {tu}.

\ No newline at end of file diff --git a/de/chapter_03/06_3-5.txt b/de/chapter_03/06_3-5.txt index 363b8e9..ce2d838 100644 --- a/de/chapter_03/06_3-5.txt +++ b/de/chapter_03/06_3-5.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} bauen eine Bahngleis zwischen {w3} und {w4}.

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} bauen eine Bahngleis zwischen {w3} und {w4}.

\ No newline at end of file diff --git a/de/chapter_03/06_4-5.txt b/de/chapter_03/06_4-5.txt index 7dfcf6f..7221f37 100644 --- a/de/chapter_03/06_4-5.txt +++ b/de/chapter_03/06_4-5.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f3}.

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f3}.

\ No newline at end of file diff --git a/de/chapter_03/06_5-5.txt b/de/chapter_03/06_5-5.txt index f9f9ece..ddb602c 100644 --- a/de/chapter_03/06_5-5.txt +++ b/de/chapter_03/06_5-5.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

{tx} Wählen Sie {tool2} und bauen Sie eine Frachtstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file diff --git a/de/chapter_03/08_1-5.txt b/de/chapter_03/08_1-5.txt index 82799f0..61aae3f 100644 --- a/de/chapter_03/08_1-5.txt +++ b/de/chapter_03/08_1-5.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen sie ein Bahngleis von {w1} nach {w2}.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen sie ein Bahngleis von {w1} nach {w2}.

\ No newline at end of file diff --git a/de/chapter_03/08_2-5.txt b/de/chapter_03/08_2-5.txt index 4cac6ff..ac7185f 100644 --- a/de/chapter_03/08_2-5.txt +++ b/de/chapter_03/08_2-5.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Brücke auf Feld {br}.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Brücke auf Feld {br}.

\ No newline at end of file diff --git a/de/chapter_03/08_3-5.txt b/de/chapter_03/08_3-5.txt index 53eb984..6a62aea 100644 --- a/de/chapter_03/08_3-5.txt +++ b/de/chapter_03/08_3-5.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Untergundansicht

Es gibt 2 Arten von Untergrundansichten. Die komplette Ansicht (Umschalt+u) und die Ebenenansicht (Strg+u). Durch erneutes drücken der Tastenkombination wird die jeweilige Ansicht wieder ausgeschalten.

Ebenenansicht
Durch drücken der Tasten {plus} und {minus} kann die angezeigte Ebene gewechselt werden.
Aus der Ebenenansicht kann mit Umschalt+u in die komplette Ansicht gewechselt werden. Durch erneutes drücken von Umschalt+u wird zurück zur Ebenenansicht gewechselt.

Hinweis: In der Ebenenansicht des Untergrundes lässt es sich leichter bauen, da dort das Feldraster auf der Ebene angezeigt wird. In der Kompletten Ansich ist es leichter sich einen Überblick zu verschaffen. Vor allem dann, wenn die Strecken über mehrere Ebenen verlaufen.
Für die Umschaltung der Ansichten können in den Menüs Buttons vorhanden sein.

Bauen im Untergrund

Strecken im Untergrund werden mit den Tunnel-Werkzeugen gebaut. Ausnahme sind Straßenbahnschienen auf Straßen. Desweiteren müssen Strecken immer an vorhandenen Strecken anschließen.
Höhenwechsel für Strecken
Nur Streckenenden können so verändert werden das die Höhe der Ebene geändert wird. Dafür muss mit den Feldwerkzeugen Feldeben anheben und Feldeben absenken (ganz rechts in den Geländewerkzeugen) auf das jeweilige Streckenende geklickt werden.

{tx} Wählen Sie {tool2} und bauen Sie ein Tunnelportal auf das Feld {t1}, indem Sie die Taste Strg gedrückt halten beim klicken.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Untergundansicht

Es gibt 2 Arten von Untergrundansichten. Die komplette Ansicht (Umschalt+u) und die Ebenenansicht (Strg+u). Durch erneutes drücken der Tastenkombination wird die jeweilige Ansicht wieder ausgeschalten.

Ebenenansicht
Durch drücken der Tasten {plus} und {minus} kann die angezeigte Ebene gewechselt werden.
Aus der Ebenenansicht kann mit Umschalt+u in die komplette Ansicht gewechselt werden. Durch erneutes drücken von Umschalt+u wird zurück zur Ebenenansicht gewechselt.

Hinweis: In der Ebenenansicht des Untergrundes lässt es sich leichter bauen, da dort das Feldraster auf der Ebene angezeigt wird. In der Kompletten Ansich ist es leichter sich einen Überblick zu verschaffen. Vor allem dann, wenn die Strecken über mehrere Ebenen verlaufen.
Für die Umschaltung der Ansichten können in den Menüs Buttons vorhanden sein.

Bauen im Untergrund

Strecken im Untergrund werden mit den Tunnel-Werkzeugen gebaut. Ausnahme sind Straßenbahnschienen auf Straßen. Desweiteren müssen Strecken immer an vorhandenen Strecken anschließen.
Höhenwechsel für Strecken
Nur Streckenenden können so verändert werden das die Höhe der Ebene geändert wird. Dafür muss mit den Feldwerkzeugen Feldeben anheben und Feldeben absenken (ganz rechts in den Geländewerkzeugen) auf das jeweilige Streckenende geklickt werden.

{tx} Wählen Sie {tool2} und bauen Sie ein Tunnelportal auf das Feld {t1}, indem Sie die Taste Strg gedrückt halten beim klicken.

\ No newline at end of file diff --git a/de/chapter_03/08_4-5.txt b/de/chapter_03/08_4-5.txt index 88e9e32..297d922 100644 --- a/de/chapter_03/08_4-5.txt +++ b/de/chapter_03/08_4-5.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Bau von Tunneln mit Höhenwechsel:
[1] Aktivieren Sie die Untergrundansicht nach Ebenen und setzen Sie die angezeigte Ebene auf Höhe {lev}.
[2] Bauen Sie nun ein Tunnelsegment nach {tunn}.
[3] Erhöhen Sie das Gelände mit {tool3} auf Feld {tunn}.

Sie müssen diesen Vorgang wiederholen, bis Sie Höhe [Z = {mx_lvl}] erreichen:

Liste der Bauabschnitte:
{list}

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Bau von Tunneln mit Höhenwechsel:
[1] Aktivieren Sie die Untergrundansicht nach Ebenen und setzen Sie die angezeigte Ebene auf Höhe {lev}.
[2] Bauen Sie nun ein Tunnelsegment nach {tunn}.
[3] Erhöhen Sie das Gelände mit {tool3} auf Feld {tunn}.

Sie müssen diesen Vorgang wiederholen, bis Sie Höhe [Z = {mx_lvl}] erreichen:

Liste der Bauabschnitte:
{list}

\ No newline at end of file diff --git a/de/chapter_03/08_5-5.txt b/de/chapter_03/08_5-5.txt index 0e64e02..4bb97a1 100644 --- a/de/chapter_03/08_5-5.txt +++ b/de/chapter_03/08_5-5.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Verbinden Sie die Tunnelenden der beiden Tunneleingänge auf Feld {t1} und Feld {t2} im Untergrund.

Tipp: Die Verbindung erfolgt auf Ebene 8.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Verbinden Sie die Tunnelenden der beiden Tunneleingänge auf Feld {t1} und Feld {t2} im Untergrund.

Tipp: Die Verbindung erfolgt auf Ebene 8.

\ No newline at end of file diff --git a/de/chapter_03/09_1-2.txt b/de/chapter_03/09_1-2.txt index cf2d78f..0506f53 100644 --- a/de/chapter_03/09_1-2.txt +++ b/de/chapter_03/09_1-2.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis zwischen {w2} und {w1}.

Liste der Verbindungen:
{list}

Tipp: Sie können sie einfach verbinden, indem Sie auf {w2} und {w1} klicken.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie ein Bahngleis zwischen {w2} und {w1}.

Liste der Verbindungen:
{list}

Tipp: Sie können sie einfach verbinden, indem Sie auf {w2} und {w1} klicken.

\ No newline at end of file diff --git a/de/chapter_03/09_2-2.txt b/de/chapter_03/09_2-2.txt index 410dc5c..49b919d 100644 --- a/de/chapter_03/09_2-2.txt +++ b/de/chapter_03/09_2-2.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie Signale auf den angegebenen Feldern.
Die Fahrtrichtung ist rechts, weswegen die Signale auf der in Fahrtrichtung rechten Seite stehen müssen.

{sig}

Hinweis: Klicken Sie mehrmals mit dem Signalwerkzeug auf das gleiche Feld, um die Richtung entsprechend festzulegen.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie Signale auf den angegebenen Feldern.
Die Fahrtrichtung ist rechts, weswegen die Signale auf der in Fahrtrichtung rechten Seite stehen müssen.

{sig}

Hinweis: Klicken Sie mehrmals mit dem Signalwerkzeug auf das gleiche Feld, um die Richtung entsprechend festzulegen.

\ No newline at end of file diff --git a/de/chapter_03/10_1-4.txt b/de/chapter_03/10_1-4.txt index 802263e..ce86b62 100644 --- a/de/chapter_03/10_1-4.txt +++ b/de/chapter_03/10_1-4.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Gleis vom Bahnhof {co2} in {cy2} zum Bahnhof in {cy5} {co5}.

Hinweis: Sie können längere Strecken elektrifizieren, indem Sie einen Startpunkt und einen Endpunkt anklicken. Zu beachten ist, das beim Bau von Oberleitungen die Richtung der Signale berücksichtigt wird.

Nicht elektrifizierte Gleise:
{cbor}

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Gleis vom Bahnhof {co2} in {cy2} zum Bahnhof in {cy5} {co5}.

Hinweis: Sie können längere Strecken elektrifizieren, indem Sie einen Startpunkt und einen Endpunkt anklicken. Zu beachten ist, das beim Bau von Oberleitungen die Richtung der Signale berücksichtigt wird.

Nicht elektrifizierte Gleise:
{cbor}

\ No newline at end of file diff --git a/de/chapter_03/10_2-4.txt b/de/chapter_03/10_2-4.txt index 7ed313e..e14baeb 100644 --- a/de/chapter_03/10_2-4.txt +++ b/de/chapter_03/10_2-4.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Gleis vom Bahnhof {co5} in {cy5} zum Bahnhof in {cy2} {co2}.

Hinweis: Beim Bau von Oberleitungen wird die Richtung der Signale berücksichtigt.

Nicht elektrifizierte Gleise:
{cbor}

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Gleis vom Bahnhof {co5} in {cy5} zum Bahnhof in {cy2} {co2}.

Hinweis: Beim Bau von Oberleitungen wird die Richtung der Signale berücksichtigt.

Nicht elektrifizierte Gleise:
{cbor}

\ No newline at end of file diff --git a/de/chapter_03/10_3-4.txt b/de/chapter_03/10_3-4.txt index 8444efc..2d4af3d 100644 --- a/de/chapter_03/10_3-4.txt +++ b/de/chapter_03/10_3-4.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Feld {dep} für das Bahndepot.

Hinweis: Elektrofahrzeuge (ausser Akkufahrzeuge) werden nur dann angezeigt, wenn das Depot elektrifiziert ist. Depots können auch nachträglich elektrifiziert werden.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Wählen Sie {tool2} und bauen Sie eine Oberleitung auf das Feld {dep} für das Bahndepot.

Hinweis: Elektrofahrzeuge (ausser Akkufahrzeuge) werden nur dann angezeigt, wenn das Depot elektrifiziert ist. Depots können auch nachträglich elektrifiziert werden.

\ No newline at end of file diff --git a/de/chapter_03/10_4-4.txt b/de/chapter_03/10_4-4.txt index cc38ad3..28d1dcc 100644 --- a/de/chapter_03/10_4-4.txt +++ b/de/chapter_03/10_4-4.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahndepot auf Feld {dep}.

\ No newline at end of file +{step_hinfo}

{tx} Wählen Sie {tool2} und bauen Sie ein Bahndepot auf Feld {dep}.

\ No newline at end of file diff --git a/de/chapter_03/goal.txt b/de/chapter_03/goal.txt index c4e724a..0b396ba 100644 --- a/de/chapter_03/goal.txt +++ b/de/chapter_03/goal.txt @@ -1 +1 @@ -

In diesem Kapitel sind die Züge die Protagonisten und mit ihnen lernen wir, Güter und Passagiere zu transportieren.

{scr}

{txtst_01}Schritt A - Ein Blick auf die Fabriken
{step_01}

{txtst_02}Schritt B - Lieferanten verbinden
{step_02}

{txtst_03}Schritt C - Stationen bauen
{step_03}

{txtst_04}Schritt D - Bau eines Depots
{step_04}

{txtst_05}Schritt E - Der erste Zug
{step_05}

{txtst_06}Schritt F - Den Verbraucher verbinden
{step_06}

{txtst_07}Schritt G - Der zweite Zug
{step_07}

{txtst_08}Schritt H - Bauen im Untergrund
{step_08}

{txtst_09}Schritt I - Verbinden der Stationen
{step_09}

{txtst_10}Schritt J - Elektrifizierte Gleise
{step_10}

{txtst_11}Schritt K - elektrische Züge
{step_11}

\ No newline at end of file +

In diesem Kapitel sind die Züge die Protagonisten und mit ihnen lernen wir, Güter und Passagiere zu transportieren.

{scr}

{txtst_01}Schritt A - Ein Blick auf die Fabriken
{step_01}

{txtst_02}Schritt B - Lieferanten verbinden
{step_02}

{txtst_03}Schritt C - Stationen bauen
{step_03}

{txtst_04}Schritt D - Bau eines Depots
{step_04}

{txtst_05}Schritt E - Der erste Zug
{step_05}

{txtst_06}Schritt F - Den Verbraucher verbinden
{step_06}

{txtst_07}Schritt G - Der zweite Zug
{step_07}

{txtst_08}Schritt H - Bauen im Untergrund
{step_08}

{txtst_09}Schritt I - Verbinden der Stationen
{step_09}

{txtst_10}Schritt J - Elektrifizierte Gleise
{step_10}

{txtst_11}Schritt K - elektrische Züge
{step_11}

\ No newline at end of file diff --git a/de/chapter_03/goal_step_05.txt b/de/chapter_03/goal_step_05.txt index 60ad32a..846c2b6 100644 --- a/de/chapter_03/goal_step_05.txt +++ b/de/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good1} nach {f2} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc1} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good1} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f1} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f2} aus.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach}t {good1} an {f2} geliefert werden.

Tipp: Drücken Sie die Taste W (Umschalttaste+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good1}

\ No newline at end of file +

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good1} nach {f2} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc1} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good1} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f1} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f2} aus.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {good1} an {f2} geliefert werden.

Tipp: Drücken Sie die Taste W (Umschalttaste+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good1}

\ No newline at end of file diff --git a/de/chapter_03/goal_step_07.txt b/de/chapter_03/goal_step_07.txt index 5527b38..bc852b5 100644 --- a/de/chapter_03/goal_step_07.txt +++ b/de/chapter_03/goal_step_07.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

[1] Bauen Sie eine Bahnstrecke zwischen {w1} und {w2}.
[2] Platzieren Sie das Zugdepot auf Feld {way1}.

Sie müssen nun einen geeigneten Zug zusammen stellen, um {good2} nach {f3} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc2} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good2} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f2} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f3} aus.
[5] Geben Sie der Linie einen aussagekräftigen Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {g1_metric} {good2} an {f3} geliefert werden.

Tipp: Drücken Sie die Taste W ([Umschalt]+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good2}

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

[1] Bauen Sie eine Bahnstrecke zwischen {w1} und {w2}.
[2] Platzieren Sie das Zugdepot auf Feld {way1}.

Sie müssen nun einen geeigneten Zug zusammen stellen, um {good2} nach {f3} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc2} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good2} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f2} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f3} aus.
[5] Geben Sie der Linie einen aussagekräftigen Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {g1_metric} {good2} an {f3} geliefert werden.

Tipp: Drücken Sie die Taste W ([Umschalt]+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good2}

\ No newline at end of file diff --git a/de/chapter_03/goal_step_11.txt b/de/chapter_03/goal_step_11.txt index 7bee4e6..6cbd680 100644 --- a/de/chapter_03/goal_step_11.txt +++ b/de/chapter_03/goal_step_11.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Vorbereitung der elektrischen Züge.

Die elektrischen Züge:


Der erste Schritt zur Nutzung dieser Züge besteht darin, alle zu befahrenden Gleise und ein angeschlossenes Depot zu elektrifizieren.

Jetzt müssen Sie einen Personenzug zusammenstellen.
[1] Nachdem Sie das Depotfenster geöffnet haben, wählen Sie eine Lok {loc3} im Reiter Loks.
[2] Wählen Sie nun 6 Waggons für Passagiere im Reiter Passagierzüge (der Zug darf 4 Haltfelder nicht überschreiten).
Tipp: Verwenden Sie den Filter, um nur Personenfahrzeuge anzuzeigen.
Hinweis: Elektrofahrzeuge (ausser Akkufahrzeuge) erscheinen nur, wenn das Depot elektrifiziert ist.
[3] Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.
Fügen Sie folgende Halte in der angegebenen Reihenfolge zum Fahrplan hinzu:
{list}
[4] Nachdem Sie alle Stationen hinzugefügt haben, wählen Sie die Station {stnam} in der Liste aus und konfigurieren Sie sie wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Geben Sie der Linie einen Namen und schließen den Linienplan.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden. Bei Fahrweggebundenen Fahrzeugen wie Zügen sind dabei die Richtungen von Signalen zu beachten.

Fahrzeug kopieren:

Durch klicken auf die Schaltfläche Kopieren wird die Zusammenstellung oben kopiert. Inklusive Fahrplan bzw. zugewiesener Linie.

- Klicken Sie so oft auf die Schaltfläche Kopieren, bis Sie {cnr} Züge haben.

Starten Sie die Züge:

Sobald Sie die {cnr} Züge erstellt haben, ist es Zeit, mit anklicken von Starten die Züge auf ihre Fahrt zu schicken.

Sie gelangen zum nächsten Kapitel, wenn alle Züge im Umlauf sind.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die Städte führt:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Vorbereitung der elektrischen Züge.

Die elektrischen Züge:


Der erste Schritt zur Nutzung dieser Züge besteht darin, alle zu befahrenden Gleise und ein angeschlossenes Depot zu elektrifizieren.

Jetzt müssen Sie einen Personenzug zusammenstellen.
[1] Nachdem Sie das Depotfenster geöffnet haben, wählen Sie eine Lok {loc3} im Reiter Loks.
[2] Wählen Sie nun 6 Waggons für Passagiere im Reiter Passagierzüge (der Zug darf 4 Haltfelder nicht überschreiten).
Tipp: Verwenden Sie den Filter, um nur Personenfahrzeuge anzuzeigen.
Hinweis: Elektrofahrzeuge (ausser Akkufahrzeuge) erscheinen nur, wenn das Depot elektrifiziert ist.
[3] Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.
Fügen Sie folgende Halte in der angegebenen Reihenfolge zum Fahrplan hinzu:
{list}
[4] Nachdem Sie alle Stationen hinzugefügt haben, wählen Sie die Station {stnam} in der Liste aus und konfigurieren Sie sie wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Geben Sie der Linie einen Namen und schließen den Linienplan.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden. Bei Fahrweggebundenen Fahrzeugen wie Zügen sind dabei die Richtungen von Signalen zu beachten.

Fahrzeug kopieren:

Durch klicken auf die Schaltfläche Kopieren wird die Zusammenstellung oben kopiert. Inklusive Fahrplan bzw. zugewiesener Linie.

- Klicken Sie so oft auf die Schaltfläche Kopieren, bis Sie {cnr} Züge haben.

Starten Sie die Züge:

Sobald Sie die {cnr} Züge erstellt haben, ist es Zeit, mit anklicken von Starten die Züge auf ihre Fahrt zu schicken.

Sie gelangen zum nächsten Kapitel, wenn alle Züge im Umlauf sind.

\ No newline at end of file diff --git a/de/chapter_03/step_1-4_hinfo.txt b/de/chapter_03/step_1-4_hinfo.txt index 31e7bf5..2b48984 100644 --- a/de/chapter_03/step_1-4_hinfo.txt +++ b/de/chapter_03/step_1-4_hinfo.txt @@ -1 +1 @@ -

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

\ No newline at end of file +

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

\ No newline at end of file diff --git a/de/chapter_03/step_8-10_hinfo.txt b/de/chapter_03/step_8-10_hinfo.txt index 3a30868..be557fd 100644 --- a/de/chapter_03/step_8-10_hinfo.txt +++ b/de/chapter_03/step_8-10_hinfo.txt @@ -1 +1 @@ -

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

\ No newline at end of file +

Der Öffentliche Dienst benötigt Sie, um das Eisenbahnnetz fertigzustellen, das durch die folgenden Städte verläuft:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

\ No newline at end of file diff --git a/de/chapter_04/01_2-2.txt b/de/chapter_04/01_2-2.txt index 0f14540..b007196 100644 --- a/de/chapter_04/01_2-2.txt +++ b/de/chapter_04/01_2-2.txt @@ -1 +1 @@ -

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

{tx} Die Beschreibung Details finden Sie in der Hilfe, die Sie über das ? in der Titelzeile des Fabrikfensters aufrufen können.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file +

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

{tx} Die Beschreibung Details finden Sie in der Hilfe, die Sie über das ? in der Titelzeile des Fabrikfensters aufrufen können.

Hinweis: Der Transport von Passagieren und Post zur Fabrik ist für die Produktion der Fabrik nicht erforderlich. Ob der Transport von Passagieren und Post sowie die Versorgung mit Strom die Produktion erhöht wird im Reiter Produktionskennzahlen angezeigt.

Um zum nächsten Schritt zu gelangen, klicken Sie auf {f1}.

\ No newline at end of file diff --git a/de/chapter_04/05_1-3.txt b/de/chapter_04/05_1-3.txt index 27d6ea0..9443e4f 100644 --- a/de/chapter_04/05_1-3.txt +++ b/de/chapter_04/05_1-3.txt @@ -1 +1 @@ -

{good2} muss von {f3} nach {f4} transportiert werden.

Flüsse und Kanäle

Es gibt in Simutrans schiffbare und unschiffbare Flüsse. Weiterhin können Kanäle gebaut werden. Diese können über Land gebaut werden oder zum Ausbau von Flüssen genutzt werden. Aber Vorsicht, die Baukosten für Kanäle sind sehr hoch, weshalb Sie die Baukosten unbedingt vorher überschlagen sollten, um den Bankrott Ihrer Firma zu vermeiden.

{tx} Bauen sie den Fluss von {w1} nach {w2} mit einem Kanal aus.

\ No newline at end of file +

{good2} muss von {f3} nach {f4} transportiert werden.

Flüsse und Kanäle

Es gibt in Simutrans schiffbare und unschiffbare Flüsse. Weiterhin können Kanäle gebaut werden. Diese können über Land gebaut werden oder zum Ausbau von Flüssen genutzt werden. Aber Vorsicht, die Baukosten für Kanäle sind sehr hoch, weshalb Sie die Baukosten unbedingt vorher überschlagen sollten, um den Bankrott Ihrer Firma zu vermeiden.

{tx} Bauen sie den Fluss von {w1} nach {w2} mit einem Kanal aus.

\ No newline at end of file diff --git a/de/chapter_04/05_2-3.txt b/de/chapter_04/05_2-3.txt index e95aa1f..2142167 100644 --- a/de/chapter_04/05_2-3.txt +++ b/de/chapter_04/05_2-3.txt @@ -1 +1 @@ -

{good2} muss von {f3} nach {f4} transportiert werden.

{tx} Bauen Sie einen Binnenhafen für Waren auf Feld {dock}.

\ No newline at end of file +

{good2} muss von {f3} nach {f4} transportiert werden.

{tx} Bauen Sie einen Binnenhafen für Waren auf Feld {dock}.

\ No newline at end of file diff --git a/de/chapter_04/05_3-3.txt b/de/chapter_04/05_3-3.txt index 5ce6e1e..d75cef5 100644 --- a/de/chapter_04/05_3-3.txt +++ b/de/chapter_04/05_3-3.txt @@ -1 +1 @@ -

{tx} Verbindung zum Verbraucher {f4}

{all_cov} Schiffe werden benötigt, um {f4} mit {good2} zu versorgen.

[1] Klicken Sie im Fenster Schiffdepot {dep1} auf die Registerkarte Schiffe und wählen Sie dann das {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.
[3] Wählen Sie die Feder bei {f3} aus und stellen Sie die Mindestlast auf {load}%
[4] Wählen Sie das Dock bei {f4}.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis alle {all_cov} Schiffe unterwegs sind.
[7] Klicken Sie abschließend Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

{tx} Verbindung zum Verbraucher {f4}

{all_cov} Schiffe werden benötigt, um {f4} mit {good2} zu versorgen.

[1] Klicken Sie im Fenster Schiffdepot {dep1} auf die Registerkarte Schiffe und wählen Sie dann das {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.
[3] Wählen Sie ein Wasserfeld beim Hafen an der {f3} aus und stellen Sie die Mindestlast auf {load}%
[4] Wählen Sie den Binnenhafen bei {f4}.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis alle {all_cov} Schiffe unterwegs sind.
[7] Klicken Sie abschließend Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/de/chapter_04/goal.txt b/de/chapter_04/goal.txt index ec5f8f3..cd05fa9 100644 --- a/de/chapter_04/goal.txt +++ b/de/chapter_04/goal.txt @@ -1 +1 @@ -

In diesem Kapitel sind die Schiffe die Protagonisten und mit ihnen werden wir Güter, Passagiere und Post transportieren.

{scr}

{txtst_01}Schritt A - Ein Blick auf die Fabriken
{step_01}

{txtst_02}Schritt B - Docks platzieren
{step_02}

{txtst_03}Schritt C - Werften platzieren
{step_03}

{txtst_04}Schritt D - Die Lieferanten verbinden
{step_04}

{txtst_05}Schritt E - Den Verbraucher verbinden
{step_05}

{txtst_06}Schritt F - Passagierpiers
{step_06}

{txtst_07}Schritt G - Verbindung von Touristenattraktionen
{step_07}

\ No newline at end of file +

In diesem Kapitel sind die Schiffe die Protagonisten und mit ihnen werden wir Güter, Passagiere und Post transportieren.

{scr}

{txtst_01}Schritt A - Ein Blick auf die Fabriken
{step_01}

{txtst_02}Schritt B - Docks platzieren
{step_02}

{txtst_03}Schritt C - Werften platzieren
{step_03}

{txtst_04}Schritt D - Die Lieferanten verbinden
{step_04}

{txtst_05}Schritt E - Den Verbraucher verbinden
{step_05}

{txtst_06}Schritt F - Passagierpiers
{step_06}

{txtst_07}Schritt G - Verbindung von Touristenattraktionen
{step_07}

\ No newline at end of file diff --git a/de/chapter_04/goal_step_02.txt b/de/chapter_04/goal_step_02.txt index 3effed9..2409e4c 100644 --- a/de/chapter_04/goal_step_02.txt +++ b/de/chapter_04/goal_step_02.txt @@ -1 +1 @@ -

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Werkzeuge für den Schiffsverkehr finden Sie im Menü Kanäle, Häfen und Werfeten.

Bauen Sie {nr} Hafen für Waren auf das angegebene Feld:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie den Hafen.

\ No newline at end of file +

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Werkzeuge für den Schiffsverkehr finden Sie im Menü Kanäle, Häfen und Werfeten.

Bauen Sie {nr} Hafen für Waren auf das angegebene Feld:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie den Hafen.

\ No newline at end of file diff --git a/de/chapter_04/goal_step_03.txt b/de/chapter_04/goal_step_03.txt index 82f2f59..6ef68c4 100644 --- a/de/chapter_04/goal_step_03.txt +++ b/de/chapter_04/goal_step_03.txt @@ -1 +1 @@ -

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Bauen Sie ein Schiffdepot auf Feld {dep1}.

Um zum nächsten Schritt zu gelangen, klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep1}.

\ No newline at end of file +

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Bauen Sie ein Schiffdepot auf Feld {dep1}.

Um zum nächsten Schritt zu gelangen, klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep1}.

\ No newline at end of file diff --git a/de/chapter_04/goal_step_04.txt b/de/chapter_04/goal_step_04.txt index 61feb8c..4c029ee 100644 --- a/de/chapter_04/goal_step_04.txt +++ b/de/chapter_04/goal_step_04.txt @@ -1 +1 @@ -

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Verbindung zum Lieferanten herstellen {f1}

{all_cov} Schiffe werden benötigt, um {f3} mit {good1} zu versorgen.

Hinweis: Bei Häfen und Docks müssen Sie für den Fahrplanhalt auf die Wasserfläche davor in das Einzugsgebiet (Taste v) klicken. Bei Kanalhäfen hingegen müssen sie auf den Kanalhafen klicken. Bei Wasserindustrien reicht ebenfalls ein Klick in das Einzugsgebiet.

[1] Klicken Sie im Fenster Schiffdepot auf die Registerkarte Schiffe und wählen Sie dann das Symbol {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen
[3] Wählen Sie die Bohrinsel {f1} aus und stellen Sie die Mindestladung auf {load}%
[4] Wählen Sie den Hafen bei {f3}
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis Sie {all_cov} Konvois/Schiffe erreichen.
[7] Drücken Sie abschließend die Schaltfläche Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

Um {good2} zu produzieren, muss {good1} von {f1} nach {f3} transportiert werden.

Verbindung zum Lieferanten herstellen {f1}

{all_cov} Schiffe werden benötigt, um {f3} mit {good1} zu versorgen.

Hinweis: Bei Häfen und Docks müssen Sie für den Fahrplanhalt auf die Wasserfläche davor in das Einzugsgebiet (Taste v) klicken. Bei Kanalhäfen hingegen müssen sie auf den Kanalhafen klicken. Bei Wasserindustrien reicht ebenfalls ein Klick in das Einzugsgebiet.

[1] Klicken Sie im Fenster Schiffdepot auf die Registerkarte Schiffe und wählen Sie dann das Symbol {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen
[3] Wählen Sie ein Wasserfeld bei der Bohrinsel {f1} aus und stellen Sie die Mindestladung auf {load}%
[4] Wählen Sie ein Wasserfeld am Hafen bei {f3}
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis Sie {all_cov} Konvois/Schiffe erreichen.
[7] Drücken Sie abschließend die Schaltfläche Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/de/chapter_04/goal_step_06.txt b/de/chapter_04/goal_step_06.txt index 67b2558..27d603d 100644 --- a/de/chapter_04/goal_step_06.txt +++ b/de/chapter_04/goal_step_06.txt @@ -1 +1 @@ -

Es ist notwendig, Passagiere in touristische Gebiete {tur} zu transportieren.

Platzieren Sie {nr} Häfen für Passagiere auf den angegebenen Feldern:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Häfen.

\ No newline at end of file +

Es ist notwendig, Passagiere in touristische Gebiete {tur} zu transportieren.

Platzieren Sie {nr} Häfen für Passagiere auf den angegebenen Feldern:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Häfen.

\ No newline at end of file diff --git a/de/chapter_04/goal_step_07.txt b/de/chapter_04/goal_step_07.txt index 7189068..1a8ac20 100644 --- a/de/chapter_04/goal_step_07.txt +++ b/de/chapter_04/goal_step_07.txt @@ -1 +1 @@ -

Es ist notwendig, Passagiere in touristische Gebiete {tur} zu transportieren.

Klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep1}. Kaufen Sie im Reiter Fähren ein {ship}.

Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und fügen sie folgende Haltestellen hinzu:
{list}

Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus und konfigurieren Sie wie folgt:
--> [a] Setzen Sie Mindestladung auf {load}% .
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
Klicken Sie abschließend auf Starten.

Um zum nächsten Kapitel zu gelangen, starten Sie das Schiff.

\ No newline at end of file +

Es ist notwendig, Passagiere in touristische Gebiete {tur} zu transportieren.

Klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep1}. Kaufen Sie im Reiter Fähren ein {ship}.

Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und fügen sie folgende Haltestellen hinzu:
{list}

Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus und konfigurieren Sie wie folgt:
--> [a] Setzen Sie Mindestladung auf {load}% .
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
Klicken Sie abschließend auf Starten.

Um zum nächsten Kapitel zu gelangen, starten Sie das Schiff.

\ No newline at end of file diff --git a/de/chapter_05/03_1-2.txt b/de/chapter_05/03_1-2.txt index ce4ae76..78b80e7 100644 --- a/de/chapter_05/03_1-2.txt +++ b/de/chapter_05/03_1-2.txt @@ -1 +1 @@ -

{tx} Im Menü {toolbar} wählen Sie {trf_name} aus, um Umspannwerke an den Fabriken zu bauen:
{tran}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Umspannwerke.

\ No newline at end of file +

{tx} Im Menü {toolbar} wählen Sie {trf_name} aus, um Umspannwerke an den Fabriken zu bauen:
{tran}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Umspannwerke.

\ No newline at end of file diff --git a/de/chapter_05/03_2-2.txt b/de/chapter_05/03_2-2.txt index 94c74d5..14bf551 100644 --- a/de/chapter_05/03_2-2.txt +++ b/de/chapter_05/03_2-2.txt @@ -1 +1 @@ -

{tx} Im Menü {toolbar} wählen Sie {powerline_tool}, um alle Fabriken an das Stromnetz anzuschließen:
{tran}

Um zum nächsten Schritt zu gelangen, verbinden Sie alle Umspannwerke.

\ No newline at end of file +

{tx} Im Menü {toolbar} wählen Sie {powerline_tool}, um alle Fabriken an das Stromnetz anzuschließen:
{tran}

Um zum nächsten Schritt zu gelangen, verbinden Sie alle Umspannwerke.

\ No newline at end of file diff --git a/de/chapter_05/04_1-3.txt b/de/chapter_05/04_1-3.txt index 451063b..7fb6054 100644 --- a/de/chapter_05/04_1-3.txt +++ b/de/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} Im Menü {toolbar} wählen Sie Erweiterungsgebäude für die Post aus und platzieren Sie eines an jedem der folgenden Orte:
{st}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Gebäude.

\ No newline at end of file +

{tx} Im Menü {toolbar} wählen Sie Erweiterungsgebäude für die Post aus und platzieren Sie eines an jedem der folgenden Halte:
{st}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Gebäude.

\ No newline at end of file diff --git a/de/chapter_05/04_2-3.txt b/de/chapter_05/04_2-3.txt index 4ee1fc2..ddb8812 100644 --- a/de/chapter_05/04_2-3.txt +++ b/de/chapter_05/04_2-3.txt @@ -1 +1 @@ -

{tx} Wählen Sie im Straßendepot {dep} einen {veh} aus.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Haltestellen aus:
{list}

Nachdem Sie alle {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} und konfigurieren Sie es wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Klicken Sie auf Kopieren, bis Sie {all_cov} Fahrzeuge haben.
Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie alle Lkw.

Konvois im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

{tx} Wählen Sie im Straßendepot {dep} einen {veh} aus.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Haltestellen aus:
{list}

Nachdem Sie alle {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} und konfigurieren Sie es wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Klicken Sie auf Kopieren, bis Sie {all_cov} Fahrzeuge haben.
Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie alle Lkw.

Konvois im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/de/chapter_05/04_3-3.txt b/de/chapter_05/04_3-3.txt index 4c6ac45..2f5dc89 100644 --- a/de/chapter_05/04_3-3.txt +++ b/de/chapter_05/04_3-3.txt @@ -1 +1 @@ -

Klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep}. Kaufen Sie im Reiter Fähren ein {ship}.

Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und fügen sie folgende Haltestellen hinzu:
{list}

Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus und konfigurieren Sie wie folgt:
--> [a] Setzen Sie Mindestladung auf {load}% .
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
Klicken Sie abschließend auf Starten.

Um zum nächsten Kapitel zu gelangen, starten Sie das Schiff.

\ No newline at end of file +

Klicken Sie mit dem Abfragewerkzeug auf das Schiffdepot {dep}. Kaufen Sie im Reiter Fähren ein {ship}.

Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und fügen sie folgende Haltestellen hinzu:
{list}

Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus und konfigurieren Sie wie folgt:
--> [a] Setzen Sie Mindestladung auf {load}% .
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
Klicken Sie abschließend auf Starten.

Um zum nächsten Kapitel zu gelangen, starten Sie das Schiff.

\ No newline at end of file diff --git a/de/chapter_05/goal.txt b/de/chapter_05/goal.txt index 9cec9cf..7457a7f 100644 --- a/de/chapter_05/goal.txt +++ b/de/chapter_05/goal.txt @@ -1 +1 @@ -

In diesem Kapitel werden wir die Effizienz unserer Industrieketten verbessern und Passagiere sowie Post transportieren sowie eine Stromversorung aufbauen.

{scr}

{txtst_01}Schritt A - Stromproduktion und -verbrauch
{step_01}

{txtst_02}Schritt B - Kohlelastwagen
{step_02}

{txtst_03}Schritt C - Anschließen des elektrischen Systems
{step_03}

{txtst_04}Schritt D - Zustellung der Post
{step_04}

\ No newline at end of file +

In diesem Kapitel werden wir die Effizienz unserer Industrieketten verbessern und Passagiere sowie Post transportieren sowie eine Stromversorung aufbauen.

{scr}

{txtst_01}Schritt A - Stromproduktion und -verbrauch
{step_01}

{txtst_02}Schritt B - Kohlelastwagen
{step_02}

{txtst_03}Schritt C - Anschließen des elektrischen Systems
{step_03}

{txtst_04}Schritt D - Zustellung der Post
{step_04}

\ No newline at end of file diff --git a/de/chapter_05/goal_step_01.txt b/de/chapter_05/goal_step_01.txt index ef57cb8..44a771d 100644 --- a/de/chapter_05/goal_step_01.txt +++ b/de/chapter_05/goal_step_01.txt @@ -1 +1 @@ -

Elektrifizierte Fabriken

Einige der Fabriken benötigen elektrische Energie, um ihre Produktion zu steigern. Dies wird dadurch erreicht, dass an jeder Fabrik/Industrie ein Umspannwerk gebaut und dieser dann an eine Kraftwerk angeschlossen wird.
Nicht alle Industrien benötigen elektrische Energie. Dies kann anhand des kleinen Symbols oder ?Blitz?-Symbols überprüft werden, das in erscheint Das Fabrikfenster. Dieses Symbol zeigt an, dass die Fabrik elektrische Energie benötigt, um ihre Produktion/Effizienz zu verbessern.

In diesem Kapitel werden wir die folgenden Fabriken elektrifizieren:
{f1}
{f2}
{f3}

Das Stromerzeugungskraftwerk muss ebenfalls angeschlossen sein:
{f4}

Um zum nächsten Schritt zu gelangen, klicken Sie auf eine der Fabriken in der Liste.

\ No newline at end of file +

Elektrifizierte Fabriken

Einige der Fabriken benötigen elektrische Energie, um ihre Produktion zu steigern. Dies wird dadurch erreicht, dass an jeder Fabrik/Industrie ein Umspannwerk gebaut und dieser dann an eine Kraftwerk angeschlossen wird.
Nicht alle Industrien benötigen elektrische Energie. Dies kann anhand des kleinen Symbols oder „Blitz“-Symbols überprüft werden, das in erscheint Das Fabrikfenster. Dieses Symbol zeigt an, dass die Fabrik elektrische Energie benötigt, um ihre Produktion/Effizienz zu verbessern.

In diesem Kapitel werden wir die folgenden Fabriken elektrifizieren:
{f1}
{f2}
{f3}

Das Stromerzeugungskraftwerk muss ebenfalls angeschlossen sein:
{f4}

Um zum nächsten Schritt zu gelangen, klicken Sie auf eine der Fabriken in der Liste.

\ No newline at end of file diff --git a/de/chapter_05/goal_step_02.txt b/de/chapter_05/goal_step_02.txt index 3abfcb2..df1c272 100644 --- a/de/chapter_05/goal_step_02.txt +++ b/de/chapter_05/goal_step_02.txt @@ -1 +1 @@ -

Sie müssen {good} transportieren, um das Stromerzeugungswerk {f4} zu betreiben.

[1] Die Straße verbinden:
Wählen Sie {tool2} und bauen Sie eine Straße zwischen Feld {w1} bei {f3} und Feld {w2} bei {f4}.

[2] LKW-Stationen:
Bauen Sie die Frachtstationen auf Feld {w1} und Feld {w2}.

[3] Das Straßendepot:
Bauen Sie eine Straße auf Feld {dep} und darauf ein Straßendepot.

[4] Vorbereitung der LKWs:
Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good} nach {f4} zu transportieren.
[a] Öffnen Sie das Straßendepot und wählen Sie einen Lkw {veh} im Reiter LKW.
[b] Wählen Sie nun im Reiter Anhänger einen Anhänger für {good} aus.
[c] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Lkw-Halt in der Nähe von {f3} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[d] Wählen Sie den Lkw-Halt in der Nähe von {f4} aus.
[e] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[f] Klicken Sie so oft auf Kopieren, bis Sie {all_cov} Lkws haben.
[g] Starten Sie die Lkw.

Um zum nächsten Schritt zu gelangen, starten Sie alle Fahrzeuge.

Fahrzeuge im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

Sie müssen {good} transportieren, um das Stromerzeugungswerk {f4} zu betreiben.

[1] Die Straße verbinden:
Wählen Sie {tool2} und bauen Sie eine Straße zwischen Feld {w1} bei {f3} und Feld {w2} bei {f4}.

[2] LKW-Stationen:
Bauen Sie die Frachtstationen auf Feld {w1} und Feld {w2}.

[3] Das Straßendepot:
Bauen Sie eine Straße auf Feld {dep} und darauf ein Straßendepot.

[4] Vorbereitung der LKWs:
Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good} nach {f4} zu transportieren.
[a] Öffnen Sie das Straßendepot und wählen Sie einen Lkw {veh} im Reiter LKW.
[b] Wählen Sie nun im Reiter Anhänger einen Anhänger für {good} aus.
[c] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Lkw-Halt in der Nähe von {f3} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[d] Wählen Sie den Lkw-Halt in der Nähe von {f4} aus.
[e] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[f] Klicken Sie so oft auf Kopieren, bis Sie {all_cov} Lkws haben.
[g] Starten Sie die Lkw.

Um zum nächsten Schritt zu gelangen, starten Sie alle Fahrzeuge.

Fahrzeuge im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/de/chapter_06/goal_step_01.txt b/de/chapter_06/goal_step_01.txt index eafd703..aefa2bb 100644 --- a/de/chapter_06/goal_step_01.txt +++ b/de/chapter_06/goal_step_01.txt @@ -1 +1 @@ -

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Flughafen im Bau


Schritte:
1 - Bauen Sie {w1name} zwischen {c1_a} und {c1_b}.
2 - Bauen Sie {w2name} zwischen {c2_a} und {c2_b}.
3 - Bauen Sie den Halt auf das Feld: {st1}.
4 - Bauen Sie ein Passagierterminal auf das Feld: {st2}.
5 - Bauen Sie den Hangar auf Feld: {dep1}.
6 - Machen Sie den Halt öffentlich: {st1}.

Um zum nächsten Schritt zu gelangen, bauen Sie den Flughafen und machen Sie ihn öffentlich.

\ No newline at end of file +

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Flughafen im Bau


Schritte:
1 - Bauen Sie {w1name} zwischen {c1_a} und {c1_b}.
2 - Bauen Sie {w2name} zwischen {c2_a} und {c2_b}.
3 - Bauen Sie den Halt auf das Feld: {st1}.
4 - Bauen Sie ein Passagierterminal auf das Feld: {st2}.
5 - Bauen Sie den Hangar auf Feld: {dep1}.
6 - Machen Sie den Halt öffentlich: {st1}.

Um zum nächsten Schritt zu gelangen, bauen Sie den Flughafen und machen Sie ihn öffentlich.

\ No newline at end of file diff --git a/de/chapter_06/goal_step_02.txt b/de/chapter_06/goal_step_02.txt index 47e2eb3..39f0cb0 100644 --- a/de/chapter_06/goal_step_02.txt +++ b/de/chapter_06/goal_step_02.txt @@ -1 +1 @@ -

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

[1] Wählen Sie den Halt {sch1} und konfigurieren Sie den Halt wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%
--> [b] Setzen Sie maximale Wartezeit auf {wait}
[2] Wählen Sie den Halt {sch2}. Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[3] Starten Sie das Flugzeug mit Klick auf Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file +

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

[1] Wählen Sie den Halt {sch1} und konfigurieren Sie den Halt wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%
--> [b] Setzen Sie maximale Wartezeit auf {wait}
[2] Wählen Sie den Halt {sch2}. Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[3] Starten Sie das Flugzeug mit Klick auf Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file diff --git a/de/chapter_06/goal_step_03.txt b/de/chapter_06/goal_step_03.txt index c3af40e..749ab47 100644 --- a/de/chapter_06/goal_step_03.txt +++ b/de/chapter_06/goal_step_03.txt @@ -1 +1 @@ -

Verbindung der Stadt {cit1} mit dem Flughafen {sch1} mithilfe von {cnr} Bussen.

Klicken Sie auf das Straßendepot {dep2} und wählen Sie einen Bus {bus1}.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen

[1] Wählen Sie alle Haltestellen der Reihe nach aus:
{stx}

[2] Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie den Halt wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}% und maximale Wartezeit auf {wait}
[3] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[4] Verwenden Sie die Schaltfläche Kopieren, um die erforderlichen {cnr} Busse zu erhalten.
[5] Klicken Sie auf Starten, bis alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, starten Sie alle Busse.

\ No newline at end of file +

Verbindung der Stadt {cit1} mit dem Flughafen {sch1} mithilfe von {cnr} Bussen.

Klicken Sie auf das Straßendepot {dep2} und wählen Sie einen Bus {bus1}.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen

[1] Wählen Sie alle Haltestellen der Reihe nach aus:
{stx}

[2] Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie den Halt wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}% und maximale Wartezeit auf {wait}
[3] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[4] Verwenden Sie die Schaltfläche Kopieren, um die erforderlichen {cnr} Busse zu erhalten.
[5] Klicken Sie auf Starten, bis alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, starten Sie alle Busse.

\ No newline at end of file diff --git a/de/chapter_06/goal_step_04.txt b/de/chapter_06/goal_step_04.txt index 9f67f7e..162beea 100644 --- a/de/chapter_06/goal_step_04.txt +++ b/de/chapter_06/goal_step_04.txt @@ -1 +1 @@ -

Verbindung der Stadt {cit1} mit dem Flughafen {sch2} mithilfe von {cnr} Bussen.

Das Straßendepot

Gehen Sie zum Standort {cit2}, suchen Sie die Position {dep3} und bauen Sie ein Straßendepot.

Die Busse

Klicken Sie auf das Straßendepot {dep3} und wählen Sie einen Bus {bus2}.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen

[1] Wählen Sie alle Haltestellen der Reihe nach aus:
{stx}

[2] Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie den Halt {stnam} aus der Liste und konfigurieren Sie den Halt wie folgt:
--> Konfigurieren Sie Mindestladung auf {load}% und maximale Wartezeit auf {wait}
[3] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[4] Verwenden Sie die Schaltfläche Kopieren, um die erforderlichen {cnr} Busse zu erhalten.
[5] Klicken Sie auf Starten, bis alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, starten Sie alle Busse.

\ No newline at end of file +

Verbindung der Stadt {cit1} mit dem Flughafen {sch2} mithilfe von {cnr} Bussen.

Das Straßendepot

Gehen Sie zum Standort {cit2}, suchen Sie die Position {dep3} und bauen Sie ein Straßendepot.

Die Busse

Klicken Sie auf das Straßendepot {dep3} und wählen Sie einen Bus {bus2}.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen

[1] Wählen Sie alle Haltestellen der Reihe nach aus:
{stx}

[2] Nachdem Sie die Haltestellen hinzugefügt haben, wählen Sie den Halt {stnam} aus der Liste und konfigurieren Sie den Halt wie folgt:
--> Konfigurieren Sie Mindestladung auf {load}% und maximale Wartezeit auf {wait}
[3] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[4] Verwenden Sie die Schaltfläche Kopieren, um die erforderlichen {cnr} Busse zu erhalten.
[5] Klicken Sie auf Starten, bis alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, starten Sie alle Busse.

\ No newline at end of file diff --git a/de/chapter_07/goal_step_01.txt b/de/chapter_07/goal_step_01.txt deleted file mode 100644 index 223e5d5..0000000 --- a/de/chapter_07/goal_step_01.txt +++ /dev/null @@ -1 +0,0 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

[1] Platzieren Sie eine Bushaltestelle auf Feld {stop}.
[2] Machen Sie die Haltestelle {stop} öffentlich.
[3] Richten Sie ein Busnetz in der Stadt {city} ein.
[4] Stellen Sie sicher, dass alle Busse mit der Haltestelle {name} verbunden sind..

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/chapter_07/goal_step_01x04.txt b/de/chapter_07/goal_step_01x04.txt index 6a43ece..3e6180a 100644 --- a/de/chapter_07/goal_step_01x04.txt +++ b/de/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass ein Bushalt mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

TIPP: Mit dem schnellen Vorlauf kann die Wartezeit verkürzt werden.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file +

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

Bauen Sie in der Stadt so viele Bushaltestellen wie Sie benötigen, um die Stadt abzudecken. Stellen Sie sicher, dass ein Bushalt mit dem Bahnhof {name} verbunden ist, damit die Fahrgäste gezählt werden.

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

TIPP: Mit dem schnellen Vorlauf kann die Wartezeit verkürzt werden.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/chapter_07/goal_step_02.txt b/de/chapter_07/goal_step_02.txt deleted file mode 100644 index 223e5d5..0000000 --- a/de/chapter_07/goal_step_02.txt +++ /dev/null @@ -1 +0,0 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

[1] Platzieren Sie eine Bushaltestelle auf Feld {stop}.
[2] Machen Sie die Haltestelle {stop} öffentlich.
[3] Richten Sie ein Busnetz in der Stadt {city} ein.
[4] Stellen Sie sicher, dass alle Busse mit der Haltestelle {name} verbunden sind..

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/chapter_07/goal_step_03.txt b/de/chapter_07/goal_step_03.txt deleted file mode 100644 index 223e5d5..0000000 --- a/de/chapter_07/goal_step_03.txt +++ /dev/null @@ -1 +0,0 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

[1] Platzieren Sie eine Bushaltestelle auf Feld {stop}.
[2] Machen Sie die Haltestelle {stop} öffentlich.
[3] Richten Sie ein Busnetz in der Stadt {city} ein.
[4] Stellen Sie sicher, dass alle Busse mit der Haltestelle {name} verbunden sind..

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/chapter_07/goal_step_04.txt b/de/chapter_07/goal_step_04.txt deleted file mode 100644 index 223e5d5..0000000 --- a/de/chapter_07/goal_step_04.txt +++ /dev/null @@ -1 +0,0 @@ -

Die Stadt {city} muss ein Busnetz erhalten, das es den Fahrgästen ermöglicht, zum Bahnhof {name} zu gelangen.

[1] Platzieren Sie eine Bushaltestelle auf Feld {stop}.
[2] Machen Sie die Haltestelle {stop} öffentlich.
[3] Richten Sie ein Busnetz in der Stadt {city} ein.
[4] Stellen Sie sicher, dass alle Busse mit der Haltestelle {name} verbunden sind..

Um zum nächsten Schritt zu gelangen, befördern Sie mehr als {load} Passagiere in einem Monat.

Es wurden diesen Monat befördert: {get_load}/{load}

\ No newline at end of file diff --git a/de/finished.txt b/de/finished.txt index 05f48f3..4211ad7 100644 --- a/de/finished.txt +++ b/de/finished.txt @@ -1 +1 @@ -

Das ist für den Moment alles, vielen Dank, dass Sie das mythische Simutrans spielen.

Sie können hier folgen: www.facebook.com/Simutrans
Bei Fragen helfen wir Ihnen gerne im internationalem Forum forum.simutrans.com oder im deutschen Forum simutrans-forum.de
Weitere Informationen finden sie auch unter wiki.simutrans.com

Dank an die gesamte Simutrans-Community und insbesondere an:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Grüße!! @Yona-TYT.

\ No newline at end of file +

Das ist für den Moment alles, vielen Dank, dass Sie das mythische Simutrans spielen.

Sie können hier folgen: www.facebook.com/Simutrans
Bei Fragen helfen wir Ihnen gerne im internationalem Forum forum.simutrans.com oder im deutschen Forum simutrans-forum.de
Weitere Informationen finden sie auch unter wiki.simutrans.com

Dank an die gesamte Simutrans-Community und insbesondere an:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Grüße!! @Yona-TYT.

\ No newline at end of file diff --git a/de/info.txt b/de/info.txt index 4160981..6f0875c 100644 --- a/de/info.txt +++ b/de/info.txt @@ -1 +1 @@ -

Simutrans-Tutorial


Dieses Tutorial erklärt die ersten Schritte beim Aufbau Ihres Transportimperiums in Simutrans. Der Schwerpunkt liegt auf den notwendigen Maßnahmen rund um die Transportketten in Simutrans.

Das Tutorial besteht aus mehreren Kapiteln, in denen jeweils eine Reihe von Schritten zum Abschließen des Kapitels enthalten sind.

Wirtschaftliche Aspekte werden im Tutorial nur kurz behandelt.

{list_of_chapters}

Ausführlichere Hilfe erhalten Sie, indem Sie die Taste F1 drücken. In vielen Fenstern gibt es im Fenstertitel das ?, das beim anklicken direkt zum passenden Hilfetext springt.

{first_link}

Hinweis: In manchen Fällen kann es bis zu 15 Sekunden Verzögerung zwischen der Ausführung einer Aktion und der Aktualisierung des Tutorialtextes geben.


{pakset_info} \ No newline at end of file +

Simutrans-Tutorial


Dieses Tutorial erklärt die ersten Schritte beim Aufbau Ihres Transportimperiums in Simutrans. Der Schwerpunkt liegt auf den notwendigen Maßnahmen rund um die Transportketten in Simutrans.

Das Tutorial besteht aus mehreren Kapiteln, in denen jeweils eine Reihe von Schritten zum Abschließen des Kapitels enthalten sind.

Wirtschaftliche Aspekte werden im Tutorial nur kurz behandelt.

{list_of_chapters}

Ausführlichere Hilfe erhalten Sie, indem Sie die Taste F1 drücken. In vielen Fenstern gibt es im Fenstertitel das ?, das beim anklicken direkt zum passenden Hilfetext springt.

{first_link}

Hinweis: In manchen Fällen kann es bis zu 15 Sekunden Verzögerung zwischen der Ausführung einer Aktion und der Aktualisierung des Tutorialtextes geben.


{pakset_info} \ No newline at end of file diff --git a/de/info/info_pak64perman.txt b/de/info/info_pak64perman.txt index 3477dc4..7bebde8 100644 --- a/de/info/info_pak64perman.txt +++ b/de/info/info_pak64perman.txt @@ -1 +1 @@ -

Beschreibung pak64.german

Das pak64.german ist ein Grafikset was nur eine Höhe verwendet.

Im pak64.german gibt es auch keinen Bonus auf Geschwindigkeit. Diese ist aber trotzdem wichtig, weil Stationen nicht überfüllen dürfen. Überfüllen Stationen, dann bricht das Transportaufkommen ein.
Wenn Mindestladung benutzt wird, dann achten Sie darauf, das dann keine Stationen überfüllen.

Magnetbahn und die S-/U-Bahn sollten erst bei sehr hohem Passagieraufkommen genutzt werden.

\ No newline at end of file +

Beschreibung pak64.german

Das pak64.german ist ein Grafikset was nur eine Höhe verwendet.

Im pak64.german gibt es auch keinen Bonus auf Geschwindigkeit. Diese ist aber trotzdem wichtig, weil Stationen nicht überfüllen dürfen. Überfüllen Stationen, dann bricht das Transportaufkommen ein.
Wenn Mindestladung benutzt wird, dann achten Sie darauf, das dann keine Stationen überfüllen.

Magnetbahn und die S-/U-Bahn sollten erst bei sehr hohem Passagieraufkommen genutzt werden.

\ No newline at end of file diff --git a/de/rule.txt b/de/rule.txt index 054bd06..2d68066 100644 --- a/de/rule.txt +++ b/de/rule.txt @@ -1 +1 @@ -

Es werden nicht alle Werkzeuge angezeigt. Es stehen nur die für den aktuellen Schritt notwendigen Aktionen zur Verfügung.

· Regeln beschreiben
· Ratschläge geben
· Anleitungen zu bekannten Problemen

\ No newline at end of file +

Es werden nicht alle Werkzeuge angezeigt. Es stehen nur die für den aktuellen Schritt notwendigen Aktionen zur Verfügung.

· Regeln beschreiben
· Ratschläge geben
· Anleitungen zu bekannten Problemen

\ No newline at end of file diff --git a/en/chapter_02/06_1-2.txt b/en/chapter_02/06_1-2.txt index b2e4199..3ee4ddd 100644 --- a/en/chapter_02/06_1-2.txt +++ b/en/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:

[1] Select the stop {st1} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[2] Select the stop {st2} and leave everything as this.
[3] Select the stop {st3} and leave everything as this.
[4] Select the stop {st4} and leave everything as this.
[5] Select the stop {st5} and leave everything as this.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:


{list}
[*] Select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file diff --git a/en/chapter_02/06_2-2.txt b/en/chapter_02/06_2-2.txt index fac7ce5..6d86e33 100644 --- a/en/chapter_02/06_2-2.txt +++ b/en/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file diff --git a/en/chapter_02/07_1-4.txt b/en/chapter_02/07_1-4.txt index ad6d428..1a9ee4f 100644 --- a/en/chapter_02/07_1-4.txt +++ b/en/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} First you must build all stops in {name2}.

Stops list:
{list}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} First you must build all stops in {name2}.

Stops list:
{list}

It takes to the next step when the bus starts from the depot.

\ No newline at end of file diff --git a/en/chapter_02/07_2-4.txt b/en/chapter_02/07_2-4.txt index 1e5c1c1..fa35e46 100644 --- a/en/chapter_02/07_2-4.txt +++ b/en/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{tool2}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{tool2}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

It takes to the next step when the bus starts from the depot.

\ No newline at end of file diff --git a/en/chapter_02/07_3-4.txt b/en/chapter_02/07_3-4.txt index 52db0aa..4a851dd 100644 --- a/en/chapter_02/07_3-4.txt +++ b/en/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Click on the Garage {dep} and choose a bus {bus1} and click on 'Schedule'.

Now select stops:.
{list}
- After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Click on the Garage {dep} and choose a bus {bus1} and click on 'Schedule'.

Now select stops:.
{list}
- After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

It takes to the next chapter when the bus starts from the depot.

\ No newline at end of file diff --git a/en/chapter_02/07_4-4.txt b/en/chapter_02/07_4-4.txt index 03fa026..aeff1e0 100644 --- a/en/chapter_02/07_4-4.txt +++ b/en/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Now you must follow the Convoy.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The vehicle is located at: {covpos}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Now you must follow the Convoy.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The vehicle is located at: {covpos}

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_04.txt b/en/chapter_02/goal_step_04.txt index cdad529..17984da 100644 --- a/en/chapter_02/goal_step_04.txt +++ b/en/chapter_02/goal_step_04.txt @@ -1,18 +1 @@ -

-Now you need to purchase a {bus1} Bus to run the service. -

-

-[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
-[2] To configure the route of the vehicle, you must first click on the Schedule button.
-[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
-{list}
-[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
---> [a] Set Minimum load to {load}%.
---> [b] Set Depart after to {wait}.
-[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

-

-Tip: Press the ["] key to hide the urban buildings. -

-

-The tutorial will move to the next step when the convoy leave the depot. -

+

Now you need to purchase a {bus1} Bus to run the service.

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] To configure the route of the vehicle, you must first click on the Schedule button.
[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
{list}
[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

Tip: Press the ["] key to hide the urban buildings.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/en/chapter_03/goal_step_05.txt b/en/chapter_03/goal_step_05.txt index dc15067..99e08cd 100644 --- a/en/chapter_03/goal_step_05.txt +++ b/en/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Now you may assemble a convoy that can transport {good1} to {f2}.
[1] After opening the train depot's window, select the locomotive {loc1} in the Locomotives tab.
[2] Now select {wag} Wagons for {good1} in the Cars tab (The train may not be longer than {tile} tiles).
[3] In the field next to "Serves line", select create new line and select the station near {f1}.
--> Set Minimum load at {load}%."
[4] Select the station near {f2} and select Start.

Tip: You can set the Filter in the depot's window to only show vehicles that can transport {good1}.

It takes to the next step when the {f2} receive {t_reach}t of {good1}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good1}

\ No newline at end of file +

Now you may assemble a convoy that can transport {good1} to {f2}.
[1] After opening the train depot's window, select the locomotive {loc1} in the Locomotives tab.
[2] Now select {wag} Wagons for {good1} in the Cars tab (The train may not be longer than {tile} tiles).
[3] In the field next to "Serves line", select create new line and select the station near {f1}.
--> Set Minimum load at {load}%."
[4] Select the station near {f2} and select Start.

Tip: You can set the Filter in the depot's window to only show vehicles that can transport {good1}.

It takes to the next step when the {f2} receive {t_reach} of {good1}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good1}

\ No newline at end of file diff --git a/en/chapter_05/04_1-3.txt b/en/chapter_05/04_1-3.txt index 4fe9913..b1854b4 100644 --- a/en/chapter_05/04_1-3.txt +++ b/en/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} In the {toolbar} menu, select one of the "Extension Buildings" for mail and place one in each of the following positions:

{st}

Advances to the next step when the mail truck leaves the depot.

\ No newline at end of file +

{tx} In the {toolbar} menu, select one of the "Extension Buildings" for mail and place one in each of the following halts:

{st}

Advances to the next step when the mail truck leaves the depot.

\ No newline at end of file diff --git a/en/chapter_06/goal_step_04.txt b/en/chapter_06/goal_step_04.txt index dfa0993..b7c51b4 100644 --- a/en/chapter_06/goal_step_04.txt +++ b/en/chapter_06/goal_step_04.txt @@ -1 +1 @@ -

Connected the city {cit2} with the Airport {sch2} using {cnr} buses.

The Road Depot

You must go to the city location {cit2} and locate the position {dep3}, then build the depot/garage there.

The Buses

Click on the Road depot {dep3} and select a bus {bus2} and press [Schedule].

[1] Select all stops in order:
{stx}

[2] After adding the stops, select the stop {stnam} from the list and configure as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[3] Use the [Copy Convoy] button to get the {cnr} buses needed.
[4] Now click the [Start] button to make all vehicles leave the depot/garage.

Advance to the next chapter when all buses leave the depot/garage.

\ No newline at end of file +

Connected the city {cit2} with the Airport {sch2} using {cnr} buses.

The Road Depot

You must go to the city location {cit2} and locate the position {dep3}, then build the depot/garage there.

The Buses

Click on the Road depot {dep3} and select a bus {bus2} and press [Schedule].

[1] Select all stops in order:
{stx}

[2] After adding the stops, select the stop {stnam} from the list and configure as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[3] Use the [Copy Convoy] button to get the {cnr} buses needed.
[4] Now click the [Start] button to make all vehicles leave the depot/garage.

Advance to the next chapter when all buses leave the depot/garage.

\ No newline at end of file diff --git a/es.tab b/es.tab index 2c59d6f..894c002 100644 --- a/es.tab +++ b/es.tab @@ -1,13 +1,13 @@ -################################################################################# +§################################################################################# # for translate see # # https://simutrans-germany.com/translator_page/scenarios/scenario_5/ # ################################################################################# Action not allowed -Acción no permitida +Acción no permitida Advance is not allowed with the game paused. -Avanzar no está permitido con el juego en pausa. +Avanzar no está permitido con el juego en pausa. Advance not allowed -Avanzar no está disponible +Avanzar no está disponible Advanced Topics Conceptos Avanzados All wagons must be for [%s]. @@ -15,39 +15,39 @@ Todos los vagones deben ser para [%s]. All wagons must be for: Todos los vagones deben ser para: Are you lost ?, see the instructions shown below. -¿Estás perdido?, mira las instrucciones que se muestran a continuación. +¿Estás perdido?, mira las instrucciones que se muestran a continuación. Build a Bridge here!. -Construye un Puente aquí. +Construye un Puente aquí. Build a Depot here!. -Construye el Depósito aquí. +Construye el Depósito aquí. Build a Dock here!. -Construye un Muelle aquí. +Construye un Muelle aquí. Build a tunnel here -Construye un túnel aquí +Construye un túnel aquí Build Canal here!. -¡Construye el Canal aquí! +¡Construye el Canal aquí! Build here -Construye aquí +Construye aquí Build Rails form here -Construye las Vías de Tren por aquí. +Construye las Vías de Tren por aquí. Build Shipyard here!. -Construye el Astillero aquí. +Construye el Astillero aquí. Build station No.%d here!. -Construye estación Nr.%d aquí. +Construye estación Nr.%d aquí. Build Stop here: -Construye Parada de Autobús aquí: +Construye Parada de Autobús aquí: Build the track from here -Construye la vía desde aquí +Construye la vía desde aquí Build the transformer here! -¡Construye el transformador aquí! +¡Construye el transformador aquí! Build Train Depot here!. -Construye Depósito de Trenes aquí. +Construye Depósito de Trenes aquí. Bus networks Redes de Autobuses Chapter -Capítulo +Capítulo Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}). -Felicitaciones, has completado el Capítulo {number} - {cname}, el siguiente Capítulo '{nextcname}' empieza aqui: ({coord}). +Felicitaciones, has completado el Capítulo {number} - {cname}, el siguiente Capítulo '{nextcname}' empieza aqui: ({coord}). Checking Compatibility Comprobando Compatibilidad Choose a different stop. @@ -55,65 +55,65 @@ Elige una parada diferente. Click on the stop Pulse sobre la parada Connect the road here -Conecte la carretera aquí +Conecte la carretera aquí Connect the Track here -Conecte la vía aquí +Conecte la vía aquí Creating Schedules is currently not allowed -La creación de Itineararios no está permitida actualmente +La creación de Itineararios no está permitida actualmente Dock No.%d must accept [%s] El muelle Nr. %d debe aceptar [%s] empty chapter -capítulo vacío +capítulo vacío Extensions are not allowed. No se permiten extensiones. First buy an Airplane [%s]. -Primero compra un Avión [%s]. +Primero compra un Avión [%s]. First create a line for the vehicle. -Primero debes crear una línea para el vehículo. +Primero debes crear una línea para el vehículo. First you must build a tunnel section. -Primero debes construir un tramo de túnel. +Primero debes construir un tramo de túnel. First you must lower the layer level. Primero debes baja el nivel de la capa. First you must Upper the layer level. Primero debes subir el nivel de la capa. First you need to activate the underground view / sliced map view. -Primero necesitas activar la vista subterránea / vista subterránea por capas. +Primero necesitas activar la vista subterránea / vista subterránea por capas. Flat slope here!. -Pendiente plana aquí. +Pendiente plana aquí. Getting Started Empezando Go to next step Avanzar al siguiente paso Here -Aquí +Aquí Incorrect vehicle configuration, check vehicle status. -Configuración incorrecta del vehículo, comprueba el estado del vehículo. +Configuración incorrecta del vehículo, comprueba el estado del vehículo. Indicates the limits for using construction tools -Indica los limites para usar herramientas de construcción +Indica los limites para usar herramientas de construcción Industrial Efficiency Eficiencia Industrial It is not a slope. No es una pendiente. It is not allowed to start vehicles. -No está permitido arrancar vehículos. +No está permitido arrancar vehículos. It is not flat terrain. No es terreno llano. It is not possible to build stops at intersections No es posible construir paradas en intersecciones It must be a block signal! -Debe ser una señal de bloqueo +Debe ser una señal de bloqueo It must be a slope. Debe ser una pendiente. Layer level in sliced map view should be: %d -El nivel de capa en la vista subterránea por capas debe ser: %d +El nivel de capa en la vista subterránea por capas debe ser: %d Let's go on! -¡Sigamos adelante! +¡Sigamos adelante! Let's start! -¡Empecemos! +¡Empecemos! Mail Extension Here!. -¡Extensión de correo aquí!. +¡Extensión de correo aquí!. Modify the terrain here -Modifique el terreno aquí +Modifique el terreno aquí Must choose a locomotive [%s]. Debes seleccionar una locomotora [%s]. Must choose a locomotive: @@ -125,73 +125,73 @@ No se permiten barcazas. No intersections allowed No se permiten intersecciones Number of convoys in the depot: -Número de convoyes en el depósito: +Número de convoyes en el depósito: OK Correcto Only %d stops are necessary. -Sólo son necesarias %d paradas. +Sólo son necesarias %d paradas. Only delete signals. -Solo puedes eliminar señales. +Solo puedes eliminar señales. Only one train is allowed, press the [Sell] button. -Solo se permite un tren. presiona el botón [Vender]. +Solo se permite un tren. presiona el botón [Vender]. Only railway schedules allowed -Sólo se permiten itinerarios de tren +Sólo se permiten itinerarios de tren Only road schedules allowed Solo se permiten rutas por carretera Place a block signal here -Coloca señal de bloqueo aquí +Coloca señal de bloqueo aquí Place a Tunnel here!. -¡Coloca el Túnel aquí! +¡Coloca el Túnel aquí! Place Singnal here!. -Coloca Señal aquí. +Coloca Señal aquí. Place Stop here!. -Coloca Parada aquí. +Coloca Parada aquí. Place the Road here!. -Coloca la Carretera aquí. +Coloca la Carretera aquí. Place the shipyard here -Coloca el astillero aquí +Coloca el astillero aquí Place the stops at the marked points Coloca las paradas en los puntos marcados Press [Ctrl] to build a tunnel entrance here -Presiona [Ctrl] para construir la entrada del Túnel aquí: +Presiona [Ctrl] para construir la entrada del Túnel aquí: Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time at the first stop!. -¡Presione el botón [Viaje de Vuelta], luego configure Carga mínima y Salir después de en la primera parada en la lista! +¡Presione el botón [Viaje de Vuelta], luego configure Carga mínima y Salir después de en la primera parada en la lista! Raise ground here -Eleva el terreno aquí +Eleva el terreno aquí Riding the Rails Transporte por Rieles Ruling the Roads Transporte por carretera Savegame has a different {more_info} script version! Maybe, it will work. -¡La partida guardada tiene una versión {more_info} diferente del script! Tal vez no funcione... +¡La partida guardada tiene una versión {more_info} diferente del script! Tal vez no funcione... Select station No.%d -Selecciona la Estación Nr. %d +Selecciona la Estación Nr. %d Select station No.%d [%s] -Selecciona la Estación Nr. %d [%s] +Selecciona la Estación Nr. %d [%s] Select the Bus [%s]. -Selecciona el Autobús [%s]. +Selecciona el Autobús [%s]. Select the dock No.%d Seleccione el muelle Nr. %d Select the other station -Seleccione la otra estación +Seleccione la otra estación Select the other station first -Seleccione la otra estación primero +Seleccione la otra estación primero Setting Sail Izando Velas Signal Nr.%d -Señal Número: %d +Señal Número: %d Slope Height. Altura de la Pendiente. Station No.%d here -Estación Nr.%d aquí +Estación Nr.%d aquí Station No.%d must accept goods -La estación Nr.%d debe ser para mercancía +La estación Nr.%d debe ser para mercancía Stop Parada Stops should be built in [%s] Las paradas deben construirse en [%s] Straight slope here -Pendiente recta aquí. +Pendiente recta aquí. Taking to the Air Ascendiendo a los Cielos Text label @@ -199,55 +199,55 @@ Marcador de texto The %s stop must be for %s La parada (%s) debe ser para %s, usa la herramienta [Eliminar] para quitarla The bus must be [Passengers]. -El Autobús debe ser para [Pasajeros]. +El Autobús debe ser para [Pasajeros]. The cabin: La cabina: The convoy is not correct. El convoy no es correcto. The Depot is correct. -El Depósito es correcto. +El Depósito es correcto. The extension building for station [%s] must be a [%s], use the 'Remove' tool -El edificio de extensión para la estacion [%s] debe ser [%s], usa la heramienta de 'Eliminar' +El edificio de extensión para la estacion [%s] debe ser [%s], usa la heramienta de 'Eliminar' The extension building for station [%s] must be for [%s], use the 'Remove' tool -El edificio de extensión para la estacion [%s] debe ser para [%s], usa la heramienta de 'Eliminar' +El edificio de extensión para la estacion [%s] debe ser para [%s], usa la heramienta de 'Eliminar' The first train El primer tren The forgotten Air transport -El olvidado transporte Aéreo +El olvidado transporte Aéreo The Hangar is correct. El Hangar es correcto. The land is already prepared. -El terreno está preparado. +El terreno está preparado. The line is not correct. La linea no es correcta. The load of waystop {nr} '{name}' isn't {load}% {pos} -La carga mínima en la parada [{nr}] {name} debe ser de {load}% {pos} +La carga mínima en la parada [{nr}] {name} debe ser de {load}% {pos} The number of aircraft in the hangar must be [%d]. -El número de aviones en el hangar debe ser de [%d]. +El número de aviones en el hangar debe ser de [%d]. The number of bus must be [%d]. -El número de Autobuses debe ser de [%d]. +El número de Autobuses debe ser de [%d]. The number of convoys must be [%d], press the [Sell] button. El numero de convoys debe ser de [%d], pulsa el boton [Vender]. The number of convoys must be [%d]. -The el número de convoys debe ser: [%d]. +The el número de convoys debe ser: [%d]. The number of planes in the hangar must be [%d], use the [sell] button. -El número de aviones en el hangar debe ser de [%d], usa el boton [vender]. +El número de aviones en el hangar debe ser de [%d], usa el boton [vender]. The number of ships must be [%d]. -El número de barcos debe ser [%d]. +El número de barcos debe ser [%d]. The number of trucks must be [%d]. -El número de camiones debe ser de [%d]. +El número de camiones debe ser de [%d]. The number of wagons must be [%d]. -El número de vagones debe ser: [%d]. +El número de vagones debe ser: [%d]. The number of wagons must be: -El número de vagones debe ser: +El número de vagones debe ser: The Plane must be for [%s]. -El Avión debe ser para [%s]. +El Avión debe ser para [%s]. The route is complete, now you may dispatch the vehicle from the depot -La ruta está completa, ahora debe arrancar el vehículo desde el depósito +La ruta está completa, ahora debe arrancar el vehículo desde el depósito The schedule is not correct. El itinerario no es correcto. The schedule list must not be empty. -La lista de itinerario no debe estar vacía. +La lista de itinerario no debe estar vacía. The schedule needs to have %d waystops, but there are %d. La lista de itinerario necesita %d paradas, pero son %d. The second train @@ -255,61 +255,61 @@ El segundo tren The ship must be for [%s]. El barco debe ser para [%s]. The signal does not point in the correct direction -La señal no apunta hacia la dirección correcta +La señal no apunta hacia la dirección correcta The signal is ready! -¡La señal esta lista! +¡La señal esta lista! The slope is ready. -La pendiente está lista. +La pendiente está lista. The slope points to the [%s]. La pendiente apunta hacia el [%s]. The slope points to the Northeast. La pendiente apunta hacia el Noroeste. The station at {pos} doesn't accept freight -La estación en {pos} no acepta la mercancía +La estación en {pos} no acepta la mercancía The station at {pos} isn't your station -La estación en {pos} no es tu estación +La estación en {pos} no es tu estación The terrain must be flat. El terreno debe ser plano. The track is correct. -La vía es correcta. +La vía es correcta. The track is not correct it must be: %s, use the 'Remove' tool -La vía no es correcta, debe ser: %s, usa la herramienta 'Eliminar' +La vía no es correcta, debe ser: %s, usa la herramienta 'Eliminar' The track is stuck, use the [Remove] tool here! -La vía está atascada, ¡usa la herramienta [Eliminar] aquí! +La vía está atascada, ¡usa la herramienta [Eliminar] aquí! The trailers numbers must be [%d]. -El número de remolques debe ser de [%d]. +El número de remolques debe ser de [%d]. The train cannot be shorter than [%d] tiles. El tren no puede ser menor a [%d] casillas. The train may not be longer than [%d] tiles. El tren no puede exceder las [%d] casillas. The truck must be for [%s]. -El camión debe ser para [%s]. +El camión debe ser para [%s]. The tunnel is already at the correct level -El túnel ya está a un nivel adecuado. +El túnel ya está a un nivel adecuado. The tunnel is not correct, use the [Remove] tool here -El túnel no es correcto, usa la herramienta [Eliminar] aquí +El túnel no es correcto, usa la herramienta [Eliminar] aquí The vehicle must be [%s]. -El vehículo debe ser [%s]. +El vehículo debe ser [%s]. The waittime in waystop {nr} '{name}' isn't {wait} {pos} -Salir después de en la parada [{nr}] {name} debe ser {wait} {pos} +Salir después de en la parada [{nr}] {name} debe ser {wait} {pos} There is already a station. -Ya existe una Estacion aquí. +Ya existe una Estacion aquí. There is already a stop here -Ya existe una parada aquí +Ya existe una parada aquí There is already a transformer here! -¡Ya hay un transformador aquí! +¡Ya hay un transformador aquí! This is a factory Esto es una fabrica This is a link Esto es un enlace This is a station -Esto es una estación +Esto es una estación This is a town centre Esto es un ayuntamiento Town Centre Ayuntamiento Transformer Here!. -¡Transformador aquí! +¡Transformador aquí! Translator Yona-TYT, Roboron Tutorial Scenario complete. @@ -317,7 +317,7 @@ Escenario Tutorial completado. Updating text ... Waiting ... Actualizando texto ... Esperando ... You are outside the allowed limits! -¡Estás fuera de los límites permitidos! +¡Estás fuera de los límites permitidos! You can only build on a straight road Solo puedes construir paradas en carreteras rectas You can only build stops on flat ground @@ -331,9 +331,9 @@ Solo se permite eliminar paradas. You can only use this tool in the city Solo puedes usar esta herramienta en la ciudad You can only use vehicles: -Solo puede usar vehículos: +Solo puede usar vehículos: You didn't build a station at {pos} -No has construido una estación en {pos} +No has construido una estación en {pos} You must build a stop in [%s] Debe construir una parada en [%s] You must build a stop in [%s] first @@ -341,13 +341,13 @@ Primero debes construir una parada en [%s] You must build the %d stops first. Primero debes construir las %d paradas. You must build the bridge here -Debes construir el puente aquí +Debes construir el puente aquí You must build the depot in -Debes construir el depósito en +Debes construir el depósito en You must build the train depot in -Debes construir el depósito de trenes en +Debes construir el depósito de trenes en You must build track in -Debes construir la vía aquí +Debes construir la vía aquí You must click on the stops Debes pulsar en las paradas You must connect the two cities first. @@ -355,7 +355,7 @@ Primero debes conectar las dos ciudades primero. You must first build a stretch of road Primero debes construir un tramo de carretera You must first buy a bus [%s]. -Primero debes comprar un Autobús [%s]. +Primero debes comprar un Autobús [%s]. You must first buy a locomotive [%s]. Primero debes comprar una locomotora [%s]. You must first buy a ship [%s]. @@ -365,14 +365,14 @@ Primero debes levantar el terreno con una pendiente artificial plana You must lower the ground first Primero debes bajar el terreno. You must press the [Copy backward] button to complete the route. -Debes presionar el botón [Viaje de vuelta] para completar la ruta. +Debes presionar el botón [Viaje de vuelta] para completar la ruta. You must select a [%s]. Debes seleccionar un [%s]. You must select the deposit located in -Seleccione el depósito ubicado en: +Seleccione el depósito ubicado en: You must upper the ground first Primero debes subir el terreno. You must use the inspection tool -Debes usar la herramienta de inspección +Debes usar la herramienta de inspección You must use the tool to raise the ground here -Debes usar la herramienta para elevar el terreno aquí. +Debes usar la herramienta para elevar el terreno aquí. diff --git a/es/about.txt b/es/about.txt index 647f36f..444902d 100644 --- a/es/about.txt +++ b/es/about.txt @@ -1 +1 @@ -

Escenario: {short_description}
Versión: {version}
Autor: {author}
Traducciones: {translation}

\ No newline at end of file +

Escenario: {short_description}
Versión: {version}
Autor: {author}
Traducciones: {translation}

\ No newline at end of file diff --git a/es/chapter_00/goal_step_01.txt b/es/chapter_00/goal_step_01.txt index ec5d332..860b7f1 100644 --- a/es/chapter_00/goal_step_01.txt +++ b/es/chapter_00/goal_step_01.txt @@ -1 +1 @@ -

El Escenario no es compatible con tu pakset o versión de Simutrans:

Versión de Simutrans: v{current_stv} -> {stv}.
Nombre del Pakset: {current_pak} -> {pak}.

\ No newline at end of file +

El Escenario no es compatible con tu pakset o versión de Simutrans:

Versión de Simutrans: v{current_stv} -> {stv}.
Nombre del Pakset: {current_pak} -> {pak}.

\ No newline at end of file diff --git a/es/chapter_01/goal.txt b/es/chapter_01/goal.txt index dc1b101..a194535 100644 --- a/es/chapter_01/goal.txt +++ b/es/chapter_01/goal.txt @@ -1 +1 @@ -

{scr}

{txtst_01}Paso A - Sobre el Escenario Tutorial
{step_01}

{txtst_02}Paso B - Moviéndose alrededor
{step_02}

{txtst_03}Paso C - Viendo los detalles
{step_03}

{txtst_04}Paso D - El minimapa y otras ventanas
{step_04}

\ No newline at end of file +

{scr}

{txtst_01}Paso A - Sobre el Escenario Tutorial
{step_01}

{txtst_02}Paso B - Moviéndose alrededor
{step_02}

{txtst_03}Paso C - Viendo los detalles
{step_03}

{txtst_04}Paso D - El minimapa y otras ventanas
{step_04}

\ No newline at end of file diff --git a/es/chapter_01/goal_step_01.txt b/es/chapter_01/goal_step_01.txt index 678ed74..a8c4c9c 100644 --- a/es/chapter_01/goal_step_01.txt +++ b/es/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace para Saltar Pasos

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file +

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace para Saltar Pasos

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_02.txt b/es/chapter_01/goal_step_02.txt index 80a2ec1..2e9867b 100644 --- a/es/chapter_01/goal_step_02.txt +++ b/es/chapter_01/goal_step_02.txt @@ -1 +1 @@ -

Te recomendamos activar la cuadrícula para este tutorial pulsando la tecla "#". Además, es muy recomendable que los Árboles hayan sido configurados para ser transparentes, ya sea a través del menú de opciones o presionando la tecla "%".

Puedes acercar o alejar la cámara usando la rueda del ratón, o las teclas [AvPág/RePág].

Puedes moverte alrededor del mapa usando el Botón Derecho del ratón y arrastrando, usando las teclas de dirección, o el teclado numérico (si no está bloqueado).

Puedes rotar el mapa pulsando "[Mayús]+r" ("R" mayúscula) o seleccionando la herramienta "Rotar Mapa" desde el menú de herramientas.

Intenta acercar y alejar la cámara y moverte por el mapa.

Para continuar al siguiente paso, rota el mapa.

\ No newline at end of file +

Te recomendamos activar la cuadrícula para este tutorial pulsando la tecla "#". Además, es muy recomendable que los Ãrboles hayan sido configurados para ser transparentes, ya sea a través del menú de opciones o presionando la tecla "%".

Puedes acercar o alejar la cámara usando la rueda del ratón, o las teclas [AvPág/RePág].

Puedes moverte alrededor del mapa usando el Botón Derecho del ratón y arrastrando, usando las teclas de dirección, o el teclado numérico (si no está bloqueado).

Puedes rotar el mapa pulsando "[Mayús]+r" ("R" mayúscula) o seleccionando la herramienta "Rotar Mapa" desde el menú de herramientas.

Intenta acercar y alejar la cámara y moverte por el mapa.

Para continuar al siguiente paso, rota el mapa.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_03.txt b/es/chapter_01/goal_step_03.txt index b957ae0..9be82d7 100644 --- a/es/chapter_01/goal_step_03.txt +++ b/es/chapter_01/goal_step_03.txt @@ -1 +1 @@ -

Ahora que ya sabes cómo moverte por el mapa, el siguiente paso es obtener información de elementos en el mapa.

Herramienta de Inspección

Esta es la herramienta principal del juego, puede usarse sin coste alguno y permite mostrar la ventana de informacion sobre cualquier elemento del mapa. También es la seleccionada por defecto. Si no lo está, puede ser seleccionada desde la barra de herramientas (el icono de la lupa) o presionando la tecla "A".

En la esquina inferior derecha de la pantalla se muestra las coordenadas o posición (x,y,z) del cursor.

Primero pulse sobre {pos} usando la '{tool1}'. Después de pulsar sobre la estatua, debes cerrar la ventana de información haciendo click en "[X]" en la parte superior, presionar "[Esc]" para cerrar la última ventana abierta o presionando "[Retroceso]" para cerrar todas las ventanas.

Por último use la '{tool1}' sobre {buld_name} y cierre la ventana de información.

Consejo: Puedes pulsar en la vista previa del objeto en la ventana emergente de información, y te llevará directamente a su ubicación en el mapa.

Nota: Presionando "[Retroceso]" se cerrarán todas las ventanas, incluyendo la ventana del tutorial.

\ No newline at end of file +

Ahora que ya sabes cómo moverte por el mapa, el siguiente paso es obtener información de elementos en el mapa.

Herramienta de Inspección

Esta es la herramienta principal del juego, puede usarse sin coste alguno y permite mostrar la ventana de informacion sobre cualquier elemento del mapa. También es la seleccionada por defecto. Si no lo está, puede ser seleccionada desde la barra de herramientas (el icono de la lupa) o presionando la tecla "A".

En la esquina inferior derecha de la pantalla se muestra las coordenadas o posición (x,y,z) del cursor.

Primero pulse sobre {pos} usando la '{tool1}'. Después de pulsar sobre la estatua, debes cerrar la ventana de información haciendo click en "[X]" en la parte superior, presionar "[Esc]" para cerrar la última ventana abierta o presionando "[Retroceso]" para cerrar todas las ventanas.

Por último use la '{tool1}' sobre {buld_name} y cierre la ventana de información.

Consejo: Puedes pulsar en la vista previa del objeto en la ventana emergente de información, y te llevará directamente a su ubicación en el mapa.

Nota: Presionando "[Retroceso]" se cerrarán todas las ventanas, incluyendo la ventana del tutorial.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_04.txt b/es/chapter_01/goal_step_04.txt index 55f6f06..2d73a3f 100644 --- a/es/chapter_01/goal_step_04.txt +++ b/es/chapter_01/goal_step_04.txt @@ -1 +1 @@ -

Hay una serie de ventanas contiene información esencial.

El 'Minimapa' se puede mostrar presionando la tecla "m".
La ventana de 'Finanzas' se puede mostrar presionando la tecla "f".
El 'Buzón' se puede mostrar pulsando "[Mayús]+b".
Más información sobre la ciudad está disponible pulsando sobre el 'Ayuntamiento' con la '{tool1}'.

Para avanzar al siguiente capítulo, pulsa en {pos2} de {town} usando la '{tool1}'.

\ No newline at end of file +

Hay una serie de ventanas contiene información esencial.

El 'Minimapa' se puede mostrar presionando la tecla "m".
La ventana de 'Finanzas' se puede mostrar presionando la tecla "f".
El 'Buzón' se puede mostrar pulsando "[Mayús]+b".
Más información sobre la ciudad está disponible pulsando sobre el 'Ayuntamiento' con la '{tool1}'.

Para avanzar al siguiente capítulo, pulsa en {pos2} de {town} usando la '{tool1}'.

\ No newline at end of file diff --git a/es/chapter_02/06_1-2.txt b/es/chapter_02/06_1-2.txt index 64bf13d..da0b8f7 100644 --- a/es/chapter_02/06_1-2.txt +++ b/es/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:

[1] Selecciona la parada {st1} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[2] Selecciona la parada {st2} y deja todo como está.
[3] Seleccione la parada {st3} y deja todo como esta.
[4] Seleccione la parada {st4} y deja todo como esta.
[5] Seleccione la parada {st5} y deja todo como esta.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:


{list}
[*] Selecciona la parada {stnam} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file diff --git a/es/chapter_02/06_2-2.txt b/es/chapter_02/06_2-2.txt index bf4226b..958a6e8 100644 --- a/es/chapter_02/06_2-2.txt +++ b/es/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulaci¨®n: {cir}/{cov}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulación: {cir}/3

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file diff --git a/es/chapter_02/07_1-4.txt b/es/chapter_02/07_1-4.txt index 6d9d9d7..21147d0 100644 --- a/es/chapter_02/07_1-4.txt +++ b/es/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file diff --git a/es/chapter_02/07_2-4.txt b/es/chapter_02/07_2-4.txt index 9cae306..d363bf6 100644 --- a/es/chapter_02/07_2-4.txt +++ b/es/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{tool2}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{tool2}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file diff --git a/es/chapter_02/07_3-4.txt b/es/chapter_02/07_3-4.txt index be8e121..28075b0 100644 --- a/es/chapter_02/07_3-4.txt +++ b/es/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Pulsa sobre el Depósito de Carretera{dep}, y selecciona un autobús {bus1} y pulse sobre 'Itinerario'.

Ahora seleccione las paradas:
{list}
- Después de añadir las {nr} paradas, seleccione la parada {stnam} de la lista y configure de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Pulsa sobre el Depósito de Carretera{dep}, y selecciona un autobús {bus1} y pulse sobre 'Itinerario'.

Ahora seleccione las paradas:
{list}
- Después de añadir las {nr} paradas, seleccione la parada {stnam} de la lista y configure de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Se avanza al siguiente capitulo cuando el autobús salga del depósito.

\ No newline at end of file diff --git a/es/chapter_02/07_4-4.txt b/es/chapter_02/07_4-4.txt index 65c3881..9dca573 100644 --- a/es/chapter_02/07_4-4.txt +++ b/es/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Ahora debes seguir al Veh¨ªculo.

Siguiendo Convoyes

Esta opci¨®n le permite seguir los veh¨ªculos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el veh¨ªculo que ya est¨¢ en circulaci¨®n para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de t¨ªtulo de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

Localiza al Veh¨ªculo en: {covpos}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Ahora debes seguir al Veh¨ªculo.

Siguiendo Convoyes

Esta opci¨®n le permite seguir los veh¨ªculos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el veh¨ªculo que ya est¨¢ en circulaci¨®n para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de t¨ªtulo de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

Localiza al Veh¨ªculo en: {covpos}

El tutorial pasar¨¢ al siguiente paso cuando est¨¦s siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/goal.txt b/es/chapter_02/goal.txt index 5d2cd2d..7e65057 100644 --- a/es/chapter_02/goal.txt +++ b/es/chapter_02/goal.txt @@ -1 +1 @@ -

{scr}

{txtst_01}Paso A - Construyendo un Tramo de Carretera
{step_01}

{txtst_02}Paso B - Construyendo un Depósito de Carretera
{step_02}

{txtst_03}Paso C - Colocando Paradas de Autobuses
{step_03}

{txtst_04}Paso D - Arrancado el Primer Autobús
{step_04}

{txtst_05}Paso E - Construyendo un Puente
{step_05}

{txtst_06}Paso F - Conectando el Muelle en Construcción
{step_06}

{txtst_07}Paso G - Conectando las Ciudades
{step_07}

{txtst_08}Paso H - Creando Paradas Públicas
{step_08}

\ No newline at end of file +

{scr}

{txtst_01}Paso A - Construyendo un Tramo de Carretera
{step_01}

{txtst_02}Paso B - Construyendo un Depósito de Carretera
{step_02}

{txtst_03}Paso C - Colocando Paradas de Autobuses
{step_03}

{txtst_04}Paso D - Arrancado el Primer Autobús
{step_04}

{txtst_05}Paso E - Construyendo un Puente
{step_05}

{txtst_06}Paso F - Conectando el Muelle en Construcción
{step_06}

{txtst_07}Paso G - Conectando las Ciudades
{step_07}

{txtst_08}Paso H - Creando Paradas Públicas
{step_08}

\ No newline at end of file diff --git a/es/chapter_02/goal_step_01.txt b/es/chapter_02/goal_step_01.txt index 3f631fb..76b22b4 100644 --- a/es/chapter_02/goal_step_01.txt +++ b/es/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

Abre '{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta los puntos entre {t1} y {t2} o {t1} y {t3} para avanzar al siguiente paso.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

Abre '{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta los puntos entre {t1} y {t2} o {t1} y {t3} para avanzar al siguiente paso.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_02.txt b/es/chapter_02/goal_step_02.txt index 67fdff5..e7b3977 100644 --- a/es/chapter_02/goal_step_02.txt +++ b/es/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {pos}. Puedes encontrar esta herramienta en '{tool2}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {pos}.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {pos}. Puedes encontrar esta herramienta en '{tool2}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {pos}.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_03.txt b/es/chapter_02/goal_step_03.txt index 8c6562c..d7381e6 100644 --- a/es/chapter_02/goal_step_03.txt +++ b/es/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad:
{list}

Las paradas se encuentran en la barra de herramientas '{tool2}' también.

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file +

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad:
{list}

Las paradas se encuentran en la barra de herramientas '{tool2}' también.

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_04.txt b/es/chapter_02/goal_step_04.txt index 1aa2d91..f1b1bb1 100644 --- a/es/chapter_02/goal_step_04.txt +++ b/es/chapter_02/goal_step_04.txt @@ -1,18 +1 @@ -

-Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio. -

-

-[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elige el Autobús {bus1}.
-[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
-[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
-[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
---> [a] Configura Carga mínima al {load}%.
---> [b] Configura Salir después de a {wait}.
-[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito. -

-

-Consejo: Presiona la tecla ["] para ocultar los edificios urbanos. -

-

-El tutorial pasará al siguiente paso cuando el autobús entre en circulación. -

+

Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio.

[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elige el Autobús {bus1}.
[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Consejo: Presiona la tecla ["] para ocultar los edificios urbanos.

Siguiendo Convoyes

Esta opción le permite seguir los vehículos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el vehículo que ya está en circulación para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de título de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_05.txt b/es/chapter_02/goal_step_05.txt index d4a4556..6baa395 100644 --- a/es/chapter_02/goal_step_05.txt +++ b/es/chapter_02/goal_step_05.txt @@ -1 +1 @@ -

El puente hacia uno de los suburbios exteriores fue arrasado recientemente,
y a la ciudad de {name} le gustaría que reconectaras dicho suburbio construyendo un puente entre {bpos1} y {bpos2}.

Los puentes también se encuentra se encuentra en la barra de herramientas '{tool2}'.

Hay dos formas de lograr esto. Primero selecciona la herramienta de puente de 50 km/h en Herramientas de Carretera, y luego...
[1] Puedes construir el puente pulsando sobre una de las pendientes opuestas.
[2] Puedes colocar el puente arrastrando el cursor desde una pendiente en cualquiera de los lados hasta la pendiente opuesta.

Para continuar, construye un puente en {bpos1}.

{bridge_info} \ No newline at end of file +

El puente hacia uno de los suburbios exteriores fue arrasado recientemente,
y a la ciudad de {name} le gustaría que reconectaras dicho suburbio construyendo un puente entre {bpos1} y {bpos2}.

Los puentes también se encuentra se encuentra en la barra de herramientas '{tool2}'.

Hay dos formas de lograr esto. Primero selecciona la herramienta de puente de 50 km/h en Herramientas de Carretera, y luego...
[1] Puedes construir el puente pulsando sobre una de las pendientes opuestas.
[2] Puedes colocar el puente arrastrando el cursor desde una pendiente en cualquiera de los lados hasta la pendiente opuesta.

Para continuar, construye un puente en {bpos1}.

{bridge_info} \ No newline at end of file diff --git a/es/chapter_02/goal_step_08.txt b/es/chapter_02/goal_step_08.txt index e32585d..27e0eab 100644 --- a/es/chapter_02/goal_step_08.txt +++ b/es/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.

En la barra de herramientas selecciona '{tool3}' y elige la herramienta Convertir en vía o parada pública

Convertir en parada pública

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Advertencia: Usar esta herramienta sale muy caro, {prce} por cada casilla.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file +

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.

En la barra de herramientas selecciona '{tool3}' y elige la herramienta Convertir en vía o parada pública

Convertir en parada pública

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Advertencia: Usar esta herramienta sale muy caro, {prce} por cada casilla.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file diff --git a/es/chapter_03/01_1-2.txt b/es/chapter_03/01_1-2.txt index c73e248..15e0ea5 100644 --- a/es/chapter_03/01_1-2.txt +++ b/es/chapter_03/01_1-2.txt @@ -1 +1 @@ -


Para la producción de harina de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

{tx} Usa la '{tool1}' en {f2} para mostrar los detalles

\ No newline at end of file +


Para la producción de harina de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

{tx} Usa la '{tool1}' en {f2} para mostrar los detalles

\ No newline at end of file diff --git a/es/chapter_03/01_2-2.txt b/es/chapter_03/01_2-2.txt index 22fca60..b65282d 100644 --- a/es/chapter_03/01_2-2.txt +++ b/es/chapter_03/01_2-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Los detalles son:

Producción máxima por mes:
Muestra la capacidad de producción que tiene la industria. La producción puede ser aumentada transportando pasajeros, correo o electricidad a la fábrica, dependiendo de lo que necesite.

Producción:
Muestra qué tipos de bienes de producción produce la fábrica, la cantidad de producción almacenada, y el rendimiento de la producción por cada unidad de materia prima.
Ejemplo: {f2} consume un {g1_factor}% de {good1}, produce un {g2_factor}% de {good2}, y tiene una producción máxima de {prod_out} unidades por mes. Eso significa que consume hasta {g1_consum} {g1_metric} de {good1} por mes, y produce {g2_prod} {g2_metric} de {good2} a partir de {good1}.

Consumo:
Muestra la materia prima que la fábrica necesita, la cantidad almacenada o en camino y cuánta materia prima hace falta para producir una unidad de producto.

Consumidor/Proveedores:
Muestra las fabricas conectadas (sólo puedes transportar mercancías a industrias conectadas).

Los trabajadores viven en:
Muestra las ciudades de donde provienen los trabajadores, su nivel de pasajeros, y su nivel de correo.

Nota: Transportar pasajeros a la fábrica no es obligatorio para que la fábrica produzca, pero hacerlo incrementará la producción.

Se avanza al siguiente paso pulsando sobre {f1}.

\ No newline at end of file +{step_hinfo}

{tx} Los detalles son:

Producción máxima por mes:
Muestra la capacidad de producción que tiene la industria. La producción puede ser aumentada transportando pasajeros, correo o electricidad a la fábrica, dependiendo de lo que necesite.

Producción:
Muestra qué tipos de bienes de producción produce la fábrica, la cantidad de producción almacenada, y el rendimiento de la producción por cada unidad de materia prima.
Ejemplo: {f2} consume un {g1_factor}% de {good1}, produce un {g2_factor}% de {good2}, y tiene una producción máxima de {prod_out} unidades por mes. Eso significa que consume hasta {g1_consum} {g1_metric} de {good1} por mes, y produce {g2_prod} {g2_metric} de {good2} a partir de {good1}.

Consumo:
Muestra la materia prima que la fábrica necesita, la cantidad almacenada o en camino y cuánta materia prima hace falta para producir una unidad de producto.

Consumidor/Proveedores:
Muestra las fabricas conectadas (sólo puedes transportar mercancías a industrias conectadas).

Los trabajadores viven en:
Muestra las ciudades de donde provienen los trabajadores, su nivel de pasajeros, y su nivel de correo.

Nota: Transportar pasajeros a la fábrica no es obligatorio para que la fábrica produzca, pero hacerlo incrementará la producción.

Se avanza al siguiente paso pulsando sobre {f1}.

\ No newline at end of file diff --git a/es/chapter_03/02_1-3.txt b/es/chapter_03/02_1-3.txt index 192e279..6b13763 100644 --- a/es/chapter_03/02_1-3.txt +++ b/es/chapter_03/02_1-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una vía de tren que conecte los dos puntos entre {w1} y {w2}.

Vías de tren

Hay varios tipos de vías de tren para diferentes velocidades (desde 60 hasta 200 km/h), deberías tener en cuenta que las vías de alta velocidad son mucho más caras, así que te recomendamos usar vías de 60 o 80 km/h...

Conecta la vía aquí: {cbor}

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una vía de tren que conecte los dos puntos entre {w1} y {w2}.

Vías de tren

Hay varios tipos de vías de tren para diferentes velocidades (desde 60 hasta 200 km/h), deberías tener en cuenta que las vías de alta velocidad son mucho más caras, así que te recomendamos usar vías de 60 o 80 km/h...

Conecta la vía aquí: {cbor}

\ No newline at end of file diff --git a/es/chapter_03/02_3-3.txt b/es/chapter_03/02_3-3.txt index ee26d7c..9631dc3 100644 --- a/es/chapter_03/02_3-3.txt +++ b/es/chapter_03/02_3-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramiento de vías de tren para construir una via de tren que conecte los dos puntos entre {w3} y {w4}.

Conecta la vía aquí: {cbor}.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramiento de vías de tren para construir una via de tren que conecte los dos puntos entre {w3} y {w4}.

Conecta la vía aquí: {cbor}.

\ No newline at end of file diff --git a/es/chapter_03/03_1-2.txt b/es/chapter_03/03_1-2.txt index 987ee0f..192f1c2 100644 --- a/es/chapter_03/03_1-2.txt +++ b/es/chapter_03/03_1-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f2}.

Estaciones de mercancías


Para saber si una estación acepta mercancías, sitúa el cursor sobre el botón de la barra de herramientas y verás aparecer una ventana de información. Una estación compuesta de varios edificios aceptará mercancía siempre que uno de sus edificios lo haga.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f2}.

Estaciones de mercancías


Para saber si una estación acepta mercancías, sitúa el cursor sobre el botón de la barra de herramientas y verás aparecer una ventana de información. Una estación compuesta de varios edificios aceptará mercancía siempre que uno de sus edificios lo haga.

\ No newline at end of file diff --git a/es/chapter_03/03_2-2.txt b/es/chapter_03/03_2-2.txt index c87917d..1493778 100644 --- a/es/chapter_03/03_2-2.txt +++ b/es/chapter_03/03_2-2.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f1}.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f1}.

\ No newline at end of file diff --git a/es/chapter_03/04_1-3.txt b/es/chapter_03/04_1-3.txt index 90faf28..5a59e3e 100644 --- a/es/chapter_03/04_1-3.txt +++ b/es/chapter_03/04_1-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una vía de tren desde {w1} hasta {w2}.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una vía de tren desde {w1} hasta {w2}.

\ No newline at end of file diff --git a/es/chapter_03/04_2-3.txt b/es/chapter_03/04_2-3.txt index 751e408..e666e3e 100644 --- a/es/chapter_03/04_2-3.txt +++ b/es/chapter_03/04_2-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un Depósito de Trenes en {dep}.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un Depósito de Trenes en {dep}.

\ No newline at end of file diff --git a/es/chapter_03/04_3-3.txt b/es/chapter_03/04_3-3.txt index 8c98edc..765d904 100644 --- a/es/chapter_03/04_3-3.txt +++ b/es/chapter_03/04_3-3.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Pulsa con la '{tool1}' sobre el Depósito de Trenes {dep} para avanzar al siguiente paso.

\ No newline at end of file +{step_hinfo}

{tx} Pulsa con la '{tool1}' sobre el Depósito de Trenes {dep} para avanzar al siguiente paso.

\ No newline at end of file diff --git a/es/chapter_03/06_1-5.txt b/es/chapter_03/06_1-5.txt index af86293..d5ac751 100644 --- a/es/chapter_03/06_1-5.txt +++ b/es/chapter_03/06_1-5.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de vías para conectar los dos puntos entre {w1} y {w2}.

Conecta la vía aquí: {cbor}

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de vías para conectar los dos puntos entre {w1} y {w2}.

Conecta la vía aquí: {cbor}

\ No newline at end of file diff --git a/es/chapter_03/06_2-5.txt b/es/chapter_03/06_2-5.txt index f093060..5aa0ece 100644 --- a/es/chapter_03/06_2-5.txt +++ b/es/chapter_03/06_2-5.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un túnel en {tu}.

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un túnel en {tu}.

\ No newline at end of file diff --git a/es/chapter_03/06_3-5.txt b/es/chapter_03/06_3-5.txt index 7d4f61e..b5d821c 100644 --- a/es/chapter_03/06_3-5.txt +++ b/es/chapter_03/06_3-5.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de vías para conectar los dos puntos entre {w3} y {w4}.

Connecta la vía aquí: {cbor}

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de vías para conectar los dos puntos entre {w3} y {w4}.

Connecta la vía aquí: {cbor}

\ No newline at end of file diff --git a/es/chapter_03/06_4-5.txt b/es/chapter_03/06_4-5.txt index 9790323..81da979 100644 --- a/es/chapter_03/06_4-5.txt +++ b/es/chapter_03/06_4-5.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f3}.

Estaciones de mercancía

Para saber si una estación acepta mercancías, sitúa el cursor sobre el botón de la barra de herramientas y verás aparecer una ventana de información. Una estación compuesta de varios edificios aceptará mercancía siempre que uno de sus edificios lo haga.

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f3}.

Estaciones de mercancía

Para saber si una estación acepta mercancías, sitúa el cursor sobre el botón de la barra de herramientas y verás aparecer una ventana de información. Una estación compuesta de varios edificios aceptará mercancía siempre que uno de sus edificios lo haga.

\ No newline at end of file diff --git a/es/chapter_03/06_5-5.txt b/es/chapter_03/06_5-5.txt index d0fdea5..0b1670e 100644 --- a/es/chapter_03/06_5-5.txt +++ b/es/chapter_03/06_5-5.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f2}.

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye una estación de mercancías ({tile} casillas de largo) cerca de {f2}.

\ No newline at end of file diff --git a/es/chapter_03/08_1-5.txt b/es/chapter_03/08_1-5.txt index d5cc6c9..430ebb7 100644 --- a/es/chapter_03/08_1-5.txt +++ b/es/chapter_03/08_1-5.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' desde la barra de herramientas y use las vías para conectar los dos puntos entre {w1} y {w2}.

Conecta la vía de tren aqui: {cbor}.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' desde la barra de herramientas y use las vías para conectar los dos puntos entre {w1} y {w2}.

Conecta la vía de tren aqui: {cbor}.

\ No newline at end of file diff --git a/es/chapter_03/08_2-5.txt b/es/chapter_03/08_2-5.txt index e3851e2..27840e0 100644 --- a/es/chapter_03/08_2-5.txt +++ b/es/chapter_03/08_2-5.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' desde la barra de herramientas y construye un puente en {br}.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' desde la barra de herramientas y construye un puente en {br}.

\ No newline at end of file diff --git a/es/chapter_03/08_3-5.txt b/es/chapter_03/08_3-5.txt index 1fb69c5..2f1bd48 100644 --- a/es/chapter_03/08_3-5.txt +++ b/es/chapter_03/08_3-5.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye la entrada del túnel {t1} manteniendo presionada la tecla Ctrl

Puedes activar la Vista Subterránea presionando las teclas [Shift] + U o entrando en los ajustes de Pantalla.
Puedes activar la Vista Subterránea por Capas presionando las teclas [Ctrl] + U, desde la Barra de Herramientas, o entrando en los ajustes de Pantalla.
Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye la entrada del túnel {t1} manteniendo presionada la tecla Ctrl

Puedes activar la Vista Subterránea presionando las teclas [Shift] + U o entrando en los ajustes de Pantalla.
Puedes activar la Vista Subterránea por Capas presionando las teclas [Ctrl] + U, desde la Barra de Herramientas, o entrando en los ajustes de Pantalla.
Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

\ No newline at end of file diff --git a/es/chapter_03/08_4-5.txt b/es/chapter_03/08_4-5.txt index 86fc78f..ad72fef 100644 --- a/es/chapter_03/08_4-5.txt +++ b/es/chapter_03/08_4-5.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Construcción de túneles con pendientes:
[1] Activa la Vista Subterránea por Capas y ajusta el nivel de la capa a {lev}.
[2] Ahora construye un segmento de túnel en {tunn}.
[3] Eleva el terreno usando la {tool3} en {tunn}.

Debes repetir este proceso hasta obtener la altura correcta [Z = {mx_lvl}]:

Lista de túneles:
{list}

Puedes activar la Vista Subterránea por Capas presionando [CTRL] + U o yendo a la configuración de Pantalla.
Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

Advertencia: En este punto, debes mantener presionada la tecla Ctrl para extender el túnel.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Construcción de túneles con pendientes:
[1] Activa la Vista Subterránea por Capas y ajusta el nivel de la capa a {lev}.
[2] Ahora construye un segmento de túnel en {tunn}.
[3] Eleva el terreno usando la {tool3} en {tunn}.

Debes repetir este proceso hasta obtener la altura correcta [Z = {mx_lvl}]:

Lista de túneles:
{list}

Puedes activar la Vista Subterránea por Capas presionando [CTRL] + U o yendo a la configuración de Pantalla.
Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

Advertencia: En este punto, debes mantener presionada la tecla Ctrl para extender el túnel.

\ No newline at end of file diff --git a/es/chapter_03/08_5-5.txt b/es/chapter_03/08_5-5.txt index c3d3d5e..23850c9 100644 --- a/es/chapter_03/08_5-5.txt +++ b/es/chapter_03/08_5-5.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.,.

{tx} Ajusta el nivel de la capa a {lev}, y conecta el túnel {t1} con la otra entrada en {t2}.

Puedes activar la Vista Subterránea presionando [Mayús] + U o en la configuración de Pantalla.
Puedes activar la Vista Subterránea por Capas presionando [Ctrl] + U o en la configuración de Pantalla.

Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

Advertencia: En este punto, debe mantener la tecla Ctrl presionada para extender el túnel.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.,.

{tx} Ajusta el nivel de la capa a {lev}, y conecta el túnel {t1} con la otra entrada en {t2}.

Puedes activar la Vista Subterránea presionando [Mayús] + U o en la configuración de Pantalla.
Puedes activar la Vista Subterránea por Capas presionando [Ctrl] + U o en la configuración de Pantalla.

Con la Vista Subterránea por Capas activada puedes:
[1] Bajar un nivel pulsando [{plus}].
[2] Subir un nivel pulsando [{minus}].

Nota: Cuando construyes estructuras complejas en varias capas, es recomendable usar la Vista Subterránea por Capas.

Advertencia: En este punto, debe mantener la tecla Ctrl presionada para extender el túnel.

\ No newline at end of file diff --git a/es/chapter_03/09_1-2.txt b/es/chapter_03/09_1-2.txt index 3b1c277..6251d93 100644 --- a/es/chapter_03/09_1-2.txt +++ b/es/chapter_03/09_1-2.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige una herramienta de vías de tren para conectar los dos puntos entre {w1} y {w2}.

Lista de vías:
{list}

Consejo: Puedes conectarlos simplemente pulsando sobre {w1} y {w2}.

Conecta la vía de tren aquí: {cbor}.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige una herramienta de vías de tren para conectar los dos puntos entre {w1} y {w2}.

Lista de vías:
{list}

Consejo: Puedes conectarlos simplemente pulsando sobre {w1} y {w2}.

Conecta la vía de tren aquí: {cbor}.

\ No newline at end of file diff --git a/es/chapter_03/09_2-2.txt b/es/chapter_03/09_2-2.txt index 29d95dd..4b9dcd2 100644 --- a/es/chapter_03/09_2-2.txt +++ b/es/chapter_03/09_2-2.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye Señales en los puntos indicados.
{sig}

Nota: Pulsa varias veces con la herramienta de señales para ajustar la dirección apropiadamente.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y construye Señales en los puntos indicados.
{sig}

Nota: Pulsa varias veces con la herramienta de señales para ajustar la dirección apropiadamente.

\ No newline at end of file diff --git a/es/chapter_03/10_1-4.txt b/es/chapter_03/10_1-4.txt index 85a0f76..560bf30 100644 --- a/es/chapter_03/10_1-4.txt +++ b/es/chapter_03/10_1-4.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar todas las vías de tren. Usa esta herramienta pulsando primero en un punto de partida y luego en un punto final.
Nota: La construcción de catenarias tiene en cuenta la dirección de las señales.

Vías de tren sin electrificar: {cbor}

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar todas las vías de tren. Usa esta herramienta pulsando primero en un punto de partida y luego en un punto final.
Nota: La construcción de catenarias tiene en cuenta la dirección de las señales.

Vías de tren sin electrificar: {cbor}

\ No newline at end of file diff --git a/es/chapter_03/10_2-4.txt b/es/chapter_03/10_2-4.txt index 3007242..a742f7d 100644 --- a/es/chapter_03/10_2-4.txt +++ b/es/chapter_03/10_2-4.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar el túnel todas las vías de tren.
Usa esta herramienta pulsando sobre un punto de inicio y después sobre un punto final.

Nota: La construcción de catenarias tiene en cuenta la dirección de las señales.

Vías de tren sin electrificar: {cbor}

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar el túnel todas las vías de tren.
Usa esta herramienta pulsando sobre un punto de inicio y después sobre un punto final.

Nota: La construcción de catenarias tiene en cuenta la dirección de las señales.

Vías de tren sin electrificar: {cbor}

\ No newline at end of file diff --git a/es/chapter_03/10_3-4.txt b/es/chapter_03/10_3-4.txt index a8439fc..6b38cc1 100644 --- a/es/chapter_03/10_3-4.txt +++ b/es/chapter_03/10_3-4.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar la vía de tren del Depósito de Trenes {dep}

Nota: Los vehículos eléctricos solo aparecen cuando la vía del depósito está electrificada.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

{tx} Selecciona '{tool2}' en la barra de herramientas y elige la herramienta de Catenaria para electrificar la vía de tren del Depósito de Trenes {dep}

Nota: Los vehículos eléctricos solo aparecen cuando la vía del depósito está electrificada.

\ No newline at end of file diff --git a/es/chapter_03/10_4-4.txt b/es/chapter_03/10_4-4.txt index 751e408..e666e3e 100644 --- a/es/chapter_03/10_4-4.txt +++ b/es/chapter_03/10_4-4.txt @@ -1 +1 @@ -{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un Depósito de Trenes en {dep}.

\ No newline at end of file +{step_hinfo}

{tx} Selecciona '{tool2}' en la barra de herramientas y construye un Depósito de Trenes en {dep}.

\ No newline at end of file diff --git a/es/chapter_03/goal.txt b/es/chapter_03/goal.txt index 0c4ad8c..49e5d6b 100644 --- a/es/chapter_03/goal.txt +++ b/es/chapter_03/goal.txt @@ -1 +1 @@ -

En este capitulo los Trenes son protagonistas y con ellos aprenderemos a transportar mercancías y pasajeros.

{scr}

{txtst_01}Paso A - Un Vistazo a las Fábricas
{step_01}

{txtst_02}Paso B - Conectando a los Proveedores
{step_02}

{txtst_03}Paso C - Construyendo Estaciones
{step_03}

{txtst_04}Paso D - Construyendo un Depósito
{step_04}

{txtst_05}Paso E - El Primer Tren
{step_05}

{txtst_06}Paso F - Conectando al Consumidor
{step_06}

{txtst_07}Paso G - El segundo Tren
{step_07}

{txtst_08}Paso H - Construcción Subterránea
{step_08}

{txtst_09}Paso I - Conectando las Estaciones
{step_09}

{txtst_10}Paso J - Vías Electrificadas
{step_10}

{txtst_11}Paso K - Trenes Eléctricos
{step_11}

\ No newline at end of file +

En este capitulo los Trenes son protagonistas y con ellos aprenderemos a transportar mercancías y pasajeros.

{scr}

{txtst_01}Paso A - Un Vistazo a las Fábricas
{step_01}

{txtst_02}Paso B - Conectando a los Proveedores
{step_02}

{txtst_03}Paso C - Construyendo Estaciones
{step_03}

{txtst_04}Paso D - Construyendo un Depósito
{step_04}

{txtst_05}Paso E - El Primer Tren
{step_05}

{txtst_06}Paso F - Conectando al Consumidor
{step_06}

{txtst_07}Paso G - El segundo Tren
{step_07}

{txtst_08}Paso H - Construcción Subterránea
{step_08}

{txtst_09}Paso I - Conectando las Estaciones
{step_09}

{txtst_10}Paso J - Vías Electrificadas
{step_10}

{txtst_11}Paso K - Trenes Eléctricos
{step_11}

\ No newline at end of file diff --git a/es/chapter_03/goal_step_05.txt b/es/chapter_03/goal_step_05.txt index c95c19f..9955f3d 100644 --- a/es/chapter_03/goal_step_05.txt +++ b/es/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

Ahora debe elegir un vehículo adecuado para transportar {good1} hasta {f2}.
[1] Abre el depósito de trenes y elige una locomotora {loc1} en la pestaña de Locomotoras.
[2] Ahora selecciona {wag} vagones para {good1} en la pestaña de Vagones (El tren no debe ser más grande que {tile} casillas).
[3] Presiona Itinerario, crea una nueva línea y selecciona la estación de tren cerca de {f1}.
--> Configura Carga mínima al {load}%.
[4] Selecciona la estación cerca de {f2} y presiona Arrancar.

Consejo: Puede usar el Filtro en la ventana del depósito para mostrar solo los vehículos que pueden transportar {good1}.

Se avanza al siguiente paso cuando {f2} reciba {t_reach}t de {good1}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good1}

\ No newline at end of file +

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

Ahora debe elegir un vehículo adecuado para transportar {good1} hasta {f2}.
[1] Abre el depósito de trenes y elige una locomotora {loc1} en la pestaña de Locomotoras.
[2] Ahora selecciona {wag} vagones para {good1} en la pestaña de Vagones (El tren no debe ser más grande que {tile} casillas).
[3] Presiona Itinerario, crea una nueva línea y selecciona la estación de tren cerca de {f1}.
--> Configura Carga mínima al {load}%.
[4] Selecciona la estación cerca de {f2} y presiona Arrancar.

Consejo: Puede usar el Filtro en la ventana del depósito para mostrar solo los vehículos que pueden transportar {good1}.

Se avanza al siguiente paso cuando {f2} reciba {t_reach} de {good1}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good1}

\ No newline at end of file diff --git a/es/chapter_03/goal_step_07.txt b/es/chapter_03/goal_step_07.txt index 9168b4c..c330f70 100644 --- a/es/chapter_03/goal_step_07.txt +++ b/es/chapter_03/goal_step_07.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

[1] Construye un tramo de vía de tren entre {w1} y {w2}.
[2] Coloca el Depósito de Trenes en: {way1}.

Ahora debes comprar una locomotora, presiona en la pestaña Locomotoras y selecciona una locomotora {loc2}. Añade {wag} vagones que puedan transportar {good2} en la pestaña de Vagones.

En la ventana Itinerario selecciona la estación en {f2}.
--> Configura Carga mínima al {load}%.
Ahora selecciona la estación en {f3} y presiona Arrancar.

Consejo: Usa el filtro para mostrar solo los vagones para {good2}.

Se avanza al siguiente paso cuando el {f3} reciba {t_reach} {g1_metric} de {good2}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good2}

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

[1] Construye un tramo de vía de tren entre {w1} y {w2}.
[2] Coloca el Depósito de Trenes en: {way1}.

Ahora debes comprar una locomotora, presiona en la pestaña Locomotoras y selecciona una locomotora {loc2}. Añade {wag} vagones que puedan transportar {good2} en la pestaña de Vagones.

En la ventana Itinerario selecciona la estación en {f2}.
--> Configura Carga mínima al {load}%.
Ahora selecciona la estación en {f3} y presiona Arrancar.

Consejo: Usa el filtro para mostrar solo los vagones para {good2}.

Se avanza al siguiente paso cuando el {f3} reciba {t_reach} {g1_metric} de {good2}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good2}

\ No newline at end of file diff --git a/es/chapter_03/goal_step_11.txt b/es/chapter_03/goal_step_11.txt index ac37188..5b5aa46 100644 --- a/es/chapter_03/goal_step_11.txt +++ b/es/chapter_03/goal_step_11.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Preparando los Trenes eléctricos.

Los trenes electrificados:

El primer paso para usar estos trenes es electrificar todas la vías, luego en la ventana del depósito selecciona la pestaña Eléctricos.

Ahora debes ensamblar un tren para Pasajeros.
[1] Después de abrir la ventana del depósito, selecciona un tren {loc3} en la pestaña de locomotoras.
[2] Ahora selecciona 6 vagones para pasajeros en la pestaña Trenes de pasajeros (no deben exceder las 4 Casillas de Estación).

Consejo: Usa el filtro para mostrar solo los vehículos de pasajeros.

Nota: Los vehículos eléctricos solo aparecen cuando la vía del depósito está electrificada.

[3] Pulsa sobre el botón [Itinerario] para configurar la siguiente ruta:
{list}

[4] Después de añadir todas las estaciones, selecciona la estación {stnam} en la lista y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Copiar Vehículo:

Este botón permite copiar el vehículo, incluyendo su itinerario o linea.

- Usa el boton [Copiar Vehículo] "{cnr} veces" para hacer duplicados exactos del tren eléctrico.

Arrancar los trenes:

Una vez que tengas los [{cnr}] trenes correctamente configurados, es momento de presionar el botón [Arrancar].

Se avanza al siguiente capitulo cuando todos los vehículos estén en circulación.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

Preparando los Trenes eléctricos.

Los trenes electrificados:

El primer paso para usar estos trenes es electrificar todas la vías, luego en la ventana del depósito selecciona la pestaña Eléctricos.

Ahora debes ensamblar un tren para Pasajeros.
[1] Después de abrir la ventana del depósito, selecciona un tren {loc3} en la pestaña de locomotoras.
[2] Ahora selecciona 6 vagones para pasajeros en la pestaña Trenes de pasajeros (no deben exceder las 4 Casillas de Estación).

Consejo: Usa el filtro para mostrar solo los vehículos de pasajeros.

Nota: Los vehículos eléctricos solo aparecen cuando la vía del depósito está electrificada.

[3] Pulsa sobre el botón [Itinerario] para configurar la siguiente ruta:
{list}

[4] Después de añadir todas las estaciones, selecciona la estación {stnam} en la lista y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Copiar Vehículo:

Este botón permite copiar el vehículo, incluyendo su itinerario o linea.

- Usa el boton [Copiar Vehículo] "{cnr} veces" para hacer duplicados exactos del tren eléctrico.

Arrancar los trenes:

Una vez que tengas los [{cnr}] trenes correctamente configurados, es momento de presionar el botón [Arrancar].

Se avanza al siguiente capitulo cuando todos los vehículos estén en circulación.

\ No newline at end of file diff --git a/es/chapter_03/step_1-4_hinfo.txt b/es/chapter_03/step_1-4_hinfo.txt index a31d3bb..8e06057 100644 --- a/es/chapter_03/step_1-4_hinfo.txt +++ b/es/chapter_03/step_1-4_hinfo.txt @@ -1 +1 @@ -

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

\ No newline at end of file +

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

\ No newline at end of file diff --git a/es/chapter_03/step_8-10_hinfo.txt b/es/chapter_03/step_8-10_hinfo.txt index 4133742..3d190a6 100644 --- a/es/chapter_03/step_8-10_hinfo.txt +++ b/es/chapter_03/step_8-10_hinfo.txt @@ -1 +1 @@ -

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

\ No newline at end of file +

El Servicio Público necesita que completes la red ferroviaria que recorre las siguientes ciudades de:
{cy2} {co2}, {cy1} {co1}, {cy3} {co3}, {cy4} {co4}, {cy5} {co5}.

\ No newline at end of file diff --git a/es/chapter_04/01_1-2.txt b/es/chapter_04/01_1-2.txt index 64f54d2..db290cb 100644 --- a/es/chapter_04/01_1-2.txt +++ b/es/chapter_04/01_1-2.txt @@ -1 +1 @@ -

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

{tx} usa la Herramienta de Inspección sobre {f3} para mostrar detalles.

\ No newline at end of file +

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

{tx} usa la Herramienta de Inspección sobre {f3} para mostrar detalles.

\ No newline at end of file diff --git a/es/chapter_04/01_2-2.txt b/es/chapter_04/01_2-2.txt index 019ebbe..1ebb157 100644 --- a/es/chapter_04/01_2-2.txt +++ b/es/chapter_04/01_2-2.txt @@ -1 +1 @@ -

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

{tx} Los detalles son:

Producción máxima por mes:
Muestra la capacidad de producción que tiene la industria. La producción puede ser aumentada transportando pasajeros, correo o electricidad a la fábrica, dependiendo de lo que necesite.

Producción:
Muestra qué tipos de bienes de producción produce la fábrica, la cantidad de producción almacenada, y el rendimiento de la producción por cada unidad de materia prima.

Consumo:
Muestra la materia prima que la fábrica necesita, la cantidad almacenada o en camino y cuánta materia prima hace falta para producir una unidad de producto.

Consumidor/Proveedores:
Muestra las fabricas conectadas (sólo puedes transportar mercancías a industrias conectadas).

Los trabajadores viven en:
Muestra las ciudades de donde provienen los trabajadores, su nivel de pasajeros, y su nivel de correo.

Nota: Transportar pasajeros a la fábrica no es obligatorio para que la fábrica produzca, pero hacerlo incrementará la producción.

Se avanza al siguiente paso pulsando sobre {f1} usando la Herramienta de Inspección.

\ No newline at end of file +

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

{tx} Los detalles son:

Producción máxima por mes:
Muestra la capacidad de producción que tiene la industria. La producción puede ser aumentada transportando pasajeros, correo o electricidad a la fábrica, dependiendo de lo que necesite.

Producción:
Muestra qué tipos de bienes de producción produce la fábrica, la cantidad de producción almacenada, y el rendimiento de la producción por cada unidad de materia prima.

Consumo:
Muestra la materia prima que la fábrica necesita, la cantidad almacenada o en camino y cuánta materia prima hace falta para producir una unidad de producto.

Consumidor/Proveedores:
Muestra las fabricas conectadas (sólo puedes transportar mercancías a industrias conectadas).

Los trabajadores viven en:
Muestra las ciudades de donde provienen los trabajadores, su nivel de pasajeros, y su nivel de correo.

Nota: Transportar pasajeros a la fábrica no es obligatorio para que la fábrica produzca, pero hacerlo incrementará la producción.

Se avanza al siguiente paso pulsando sobre {f1} usando la Herramienta de Inspección.

\ No newline at end of file diff --git a/es/chapter_04/05_2-3.txt b/es/chapter_04/05_2-3.txt index a255d9c..79d563c 100644 --- a/es/chapter_04/05_2-3.txt +++ b/es/chapter_04/05_2-3.txt @@ -1 +1 @@ -

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Construye un Muelle de Canal de mercancías en {dock}.

\ No newline at end of file +

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Construye un Muelle de Canal de mercancías en {dock}.

\ No newline at end of file diff --git a/es/chapter_04/05_3-3.txt b/es/chapter_04/05_3-3.txt index fd3b557..07a3aaa 100644 --- a/es/chapter_04/05_3-3.txt +++ b/es/chapter_04/05_3-3.txt @@ -1 +1 @@ -

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Conectando al consumidor {f4}

Se necesitan {all_cov} barcos para suministrar gas a {f4}.

[1] En la ventana del Astillero pulsa sobre la pestaña Barcos, luego selecciona el {sh}.
[2] Ahora debes configurar una línea (Sirve en línea), selecciona Crear línea nueva.
[3] Selecciona el muelle en {f3} y ajuste la Carga mínima al {load}%
[4] Selecciona el muelle en {f4} y cierre la ventana Itinerario
[5] Presiona el botón Copiar vehículo hasta llegar a {all_cov} convoys/barcos.
[6] Por último, presiona el botón Arrancar.

Consejo: Presiona [Ctrl] + pulsa el botón [Arrancar] para que todos los vehículos salgan del depósito.

Se avanza al siguiente paso cuando todos los barcos estén en circulación.

Barcos en circulación: {cir}/{all_cov}

\ No newline at end of file +

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Conectando al consumidor {f4}

Se necesitan {all_cov} barcos para suministrar gas a {f4}.

[1] En la ventana del Astillero pulsa sobre la pestaña Barcos, luego selecciona el {sh}.
[2] Ahora debes configurar una línea (Sirve en línea), selecciona Crear línea nueva.
[3] Selecciona el muelle en {f3} y ajuste la Carga mínima al {load}%
[4] Selecciona el muelle en {f4} y cierre la ventana Itinerario
[5] Presiona el botón Copiar vehículo hasta llegar a {all_cov} convoys/barcos.
[6] Por último, presiona el botón Arrancar.

Consejo: Presiona [Ctrl] + pulsa el botón [Arrancar] para que todos los vehículos salgan del depósito.

Se avanza al siguiente paso cuando todos los barcos estén en circulación.

Barcos en circulación: {cir}/{all_cov}

\ No newline at end of file diff --git a/es/chapter_04/goal.txt b/es/chapter_04/goal.txt index 2e27ebc..645d9aa 100644 --- a/es/chapter_04/goal.txt +++ b/es/chapter_04/goal.txt @@ -1 +1 @@ -

En este capítulo los Barcos son protagonistas y con ellos vamos a transportar mercancías, pasajeros y correo.

{scr}

{txtst_01}Paso A - Un Vistazo a las Fábricas
{step_01}

{txtst_02}Paso B - Colocando Muelles
{step_02}

{txtst_03}Paso C - Colocando Astilleros
{step_03}

{txtst_04}Paso D - Conectando a los Proveedores
{step_04}

{txtst_05}Paso E - Conectando al Consumidor
{step_05}

{txtst_06}Paso F - Muelles de Pasajeros
{step_06}

{txtst_07}Paso G - Conectando Atracciones Turísticas
{step_07}

\ No newline at end of file +

En este capítulo los Barcos son protagonistas y con ellos vamos a transportar mercancías, pasajeros y correo.

{scr}

{txtst_01}Paso A - Un Vistazo a las Fábricas
{step_01}

{txtst_02}Paso B - Colocando Muelles
{step_02}

{txtst_03}Paso C - Colocando Astilleros
{step_03}

{txtst_04}Paso D - Conectando a los Proveedores
{step_04}

{txtst_05}Paso E - Conectando al Consumidor
{step_05}

{txtst_06}Paso F - Muelles de Pasajeros
{step_06}

{txtst_07}Paso G - Conectando Atracciones Turísticas
{step_07}

\ No newline at end of file diff --git a/es/chapter_04/goal_step_02.txt b/es/chapter_04/goal_step_02.txt index 712a078..1a276b0 100644 --- a/es/chapter_04/goal_step_02.txt +++ b/es/chapter_04/goal_step_02.txt @@ -1 +1 @@ -

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

Coloca todos los Muelles de mercancías en las posiciones idicadas:
{dock}

Se avanza al siguiente paso cuando todos los muelles estén listos.

\ No newline at end of file +

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

Coloca todos los Muelles de mercancías en las posiciones idicadas:
{dock}

Se avanza al siguiente paso cuando todos los muelles estén listos.

\ No newline at end of file diff --git a/es/chapter_04/goal_step_03.txt b/es/chapter_04/goal_step_03.txt index a3bf28b..5d269c1 100644 --- a/es/chapter_04/goal_step_03.txt +++ b/es/chapter_04/goal_step_03.txt @@ -1 +1 @@ -

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

Coloca el Astillero aquí {dep1}.

Para avanzar al siguiente paso, pulsa sobre el Astillero {dep1} usando la Herramienta de Inspección

\ No newline at end of file +

Se necesita transportar hidrocarburos ({good1}) desde {f1} hasta {f3} para producir {good2}

Coloca el Astillero aquí {dep1}.

Para avanzar al siguiente paso, pulsa sobre el Astillero {dep1} usando la Herramienta de Inspección

\ No newline at end of file diff --git a/es/chapter_04/goal_step_04.txt b/es/chapter_04/goal_step_04.txt index 14db60b..313ce0d 100644 --- a/es/chapter_04/goal_step_04.txt +++ b/es/chapter_04/goal_step_04.txt @@ -1 +1 @@ -

Se necesita transportar {good1} desde {f1} hasta {f3} para la producción de {good2}

Conectando al proveedor {f1}

Se necesitan {all_cov} barcos para suministrar {good1} a {f3}.

[1] En la ventana del Astillero pulsa sobre la pestaña Barcos, luego selecciona el {sh}.
[2] Ahora debes configurar una línea (Sirve en línea), selecciona Crear línea nueva.
[3] Selecciona el muelle en {f1} y ajuste la Carga mínima al {load}%
[4] Selecciona el muelle en {f3} y cierre la ventana Itinerario
[5] Presiona el botón Copiar vehículo hasta llegar a {all_cov} convoys/barcos.
[6] Por último, presiona el botón Arrancar.

Consejo: Presiona [Ctrl] + pulsa el botón [Arrancar] para que todos los vehículos salgan del depósito.

Se avanza al siguiente paso cuando todos los barcos estén en circulación.

Barcos en circulación: {cir}/{all_cov}

\ No newline at end of file +

Se necesita transportar {good1} desde {f1} hasta {f3} para la producción de {good2}

Conectando al proveedor {f1}

Se necesitan {all_cov} barcos para suministrar {good1} a {f3}.

[1] En la ventana del Astillero pulsa sobre la pestaña Barcos, luego selecciona el {sh}.
[2] Ahora debes configurar una línea (Sirve en línea), selecciona Crear línea nueva.
[3] Selecciona el muelle en {f1} y ajuste la Carga mínima al {load}%
[4] Selecciona el muelle en {f3} y cierre la ventana Itinerario
[5] Presiona el botón Copiar vehículo hasta llegar a {all_cov} convoys/barcos.
[6] Por último, presiona el botón Arrancar.

Consejo: Presiona [Ctrl] + pulsa el botón [Arrancar] para que todos los vehículos salgan del depósito.

Se avanza al siguiente paso cuando todos los barcos estén en circulación.

Barcos en circulación: {cir}/{all_cov}

\ No newline at end of file diff --git a/es/chapter_04/goal_step_06.txt b/es/chapter_04/goal_step_06.txt index 41d9ffb..4d42c5a 100644 --- a/es/chapter_04/goal_step_06.txt +++ b/es/chapter_04/goal_step_06.txt @@ -1 +1 @@ -

Se necesita transportar pasajeros hacia las zonas turísticas {tur}.

Coloque los {nr} Muelles de pasajeros en las posiciones indicadas:
{dock}

Se avanza al siguiente paso cuando todos los muelles estén listos.

\ No newline at end of file +

Se necesita transportar pasajeros hacia las zonas turísticas {tur}.

Coloque los {nr} Muelles de pasajeros en las posiciones indicadas:
{dock}

Se avanza al siguiente paso cuando todos los muelles estén listos.

\ No newline at end of file diff --git a/es/chapter_04/goal_step_07.txt b/es/chapter_04/goal_step_07.txt index 0509fc6..eb404f5 100644 --- a/es/chapter_04/goal_step_07.txt +++ b/es/chapter_04/goal_step_07.txt @@ -1 +1 @@ -

Se necesita transportar pasajeros hacia las zonas turísticas {tur}.

Usa la herramienta de inspección en el Astillero {dep1} y en la pestaña Ferris compra un {ship}.

Ahora presiona itinerario y selecciona las paradas:
{list}

Tras añadir las paradas, selecciona la parada {stnam} y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Por último, presiona el botón Arrancar.

Se avanza al siguiente capítulo cuando el barco arranque desde el Astillero

\ No newline at end of file +

Se necesita transportar pasajeros hacia las zonas turísticas {tur}.

Usa la herramienta de inspección en el Astillero {dep1} y en la pestaña Ferris compra un {ship}.

Ahora presiona itinerario y selecciona las paradas:
{list}

Tras añadir las paradas, selecciona la parada {stnam} y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Por último, presiona el botón Arrancar.

Se avanza al siguiente capítulo cuando el barco arranque desde el Astillero

\ No newline at end of file diff --git a/es/chapter_05/03_1-2.txt b/es/chapter_05/03_1-2.txt index 2f0f06f..6e01263 100644 --- a/es/chapter_05/03_1-2.txt +++ b/es/chapter_05/03_1-2.txt @@ -1 +1 @@ -

{tx} En el menú {toolbar} selecciona {trf_name} para colocar transformadores en las fábricas:

{tran}

Se avanza al siguiente paso cuando todas las factorías estén electrificadas.

\ No newline at end of file +

{tx} En el menú {toolbar} selecciona {trf_name} para colocar transformadores en las fábricas:

{tran}

Se avanza al siguiente paso cuando todas las factorías estén electrificadas.

\ No newline at end of file diff --git a/es/chapter_05/03_2-2.txt b/es/chapter_05/03_2-2.txt index 55d23b7..e70d50f 100644 --- a/es/chapter_05/03_2-2.txt +++ b/es/chapter_05/03_2-2.txt @@ -1 +1 @@ -

{tx} En el menú {toolbar} selecciona {powerline_tool}} para conecta todas las fábricas a la red eléctrica de {f5}:

{tran}

Se avanza al siguiente paso cuando todas las factorías estén electrificadas.

\ No newline at end of file +

{tx} En el menú {toolbar} selecciona {powerline_tool}} para conecta todas las fábricas a la red eléctrica de {f5}:

{tran}

Se avanza al siguiente paso cuando todas las factorías estén electrificadas.

\ No newline at end of file diff --git a/es/chapter_05/04_1-3.txt b/es/chapter_05/04_1-3.txt index 1817305..f9bdee0 100644 --- a/es/chapter_05/04_1-3.txt +++ b/es/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} En el menú {toolbar} selecciona "Edificios de Extensión" para correo y coloca uno en cada una de las siguientes ubicaciones:

{st}

Se avanza al siguiente paso cuando el camión de correo abandone el depósito.

\ No newline at end of file +

{tx} En el menú {toolbar} selecciona "Edificios de Extensión" para correo y coloca uno en cada una de las siguientes ubicaciones:

{st}

Se avanza al siguiente paso cuando el camión de correo abandone el depósito.

\ No newline at end of file diff --git a/es/chapter_05/04_2-3.txt b/es/chapter_05/04_2-3.txt index 52b896b..d15bb6e 100644 --- a/es/chapter_05/04_2-3.txt +++ b/es/chapter_05/04_2-3.txt @@ -1 +1 @@ -

{tx} En el depósito {dep}, selecciona un camion {veh} para correo y pulsa [Itinerario].

Ahora selecciona las paradas:
{list}

Tras añadir todas las {nr} paradas, selecciona la parada {stnam} y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
Pulsa el botón [Copiar vehículo] hasta que obtengas {all_cov}. Por último, pulsa el botón [Arrancar]

Avanza al siguiente capítulo cuando todos los vehículos y el barco esten en circulación.

Convoyes en circulación: {cir}/{all_cov}

\ No newline at end of file +

{tx} En el depósito {dep}, selecciona un camion {veh} para correo y pulsa [Itinerario].

Ahora selecciona las paradas:
{list}

Tras añadir todas las {nr} paradas, selecciona la parada {stnam} y configúrala de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
Pulsa el botón [Copiar vehículo] hasta que obtengas {all_cov}. Por último, pulsa el botón [Arrancar]

Avanza al siguiente capítulo cuando todos los vehículos y el barco esten en circulación.

Convoyes en circulación: {cir}/{all_cov}

\ No newline at end of file diff --git a/es/chapter_05/04_3-3.txt b/es/chapter_05/04_3-3.txt index 988a608..9a5009d 100644 --- a/es/chapter_05/04_3-3.txt +++ b/es/chapter_05/04_3-3.txt @@ -1 +1 @@ -

{tx} Usa la Herramienta de Inspección en el Astillero {dep} y en la pestaña de Ferris compra un {ship}.

Ahora pulsa Itinerario y selecciona las paradas:
{list}

Tras añadir las paradas, selecciona la parada {stnam} de la lista y configúrala de la siguiente forma:
--> [a] Configura Carga Mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Por última pulsa el botón Arrancar.

Se avanza al siguiente capítulo cuando el barco salga del Astillero.

\ No newline at end of file +

{tx} Usa la Herramienta de Inspección en el Astillero {dep} y en la pestaña de Ferris compra un {ship}.

Ahora pulsa Itinerario y selecciona las paradas:
{list}

Tras añadir las paradas, selecciona la parada {stnam} de la lista y configúrala de la siguiente forma:
--> [a] Configura Carga Mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Por última pulsa el botón Arrancar.

Se avanza al siguiente capítulo cuando el barco salga del Astillero.

\ No newline at end of file diff --git a/es/chapter_05/goal.txt b/es/chapter_05/goal.txt index 4438886..e6681d1 100644 --- a/es/chapter_05/goal.txt +++ b/es/chapter_05/goal.txt @@ -1 +1 @@ -

En este capítulo vamos a mejorar la eficiencia de nuestras cadenas industriales, trasportando pasajeros, correo y energía eléctrica

{scr}

{txtst_01}Paso A - Producción del Electricidad y Consumo
{step_01}

{txtst_02}Paso B - Camiones para el Carbón
{step_02}

{txtst_03}Paso C - Conectando el Sistema Eléctrico
{step_03}

{txtst_04}Paso D - Entregando el Correo
{step_04}

\ No newline at end of file +

En este capítulo vamos a mejorar la eficiencia de nuestras cadenas industriales, trasportando pasajeros, correo y energía eléctrica

{scr}

{txtst_01}Paso A - Producción del Electricidad y Consumo
{step_01}

{txtst_02}Paso B - Camiones para el Carbón
{step_02}

{txtst_03}Paso C - Conectando el Sistema Eléctrico
{step_03}

{txtst_04}Paso D - Entregando el Correo
{step_04}

\ No newline at end of file diff --git a/es/chapter_05/goal_step_01.txt b/es/chapter_05/goal_step_01.txt index 342d1d9..fdf1364 100644 --- a/es/chapter_05/goal_step_01.txt +++ b/es/chapter_05/goal_step_01.txt @@ -1 +1 @@ -

Fábricas Electrificadas


Algunas de las fábricas necesitan energía eléctrica para mejorar su produción/eficiencia. Esto se logra colocando un transformador a cada fábrica/industria para luego conectarlo a una industria generadora de energía eléctrica.
No todas las industrias requieren energía eléctrica, esto se puede comprobar con el pequeño icono en forma de "rayo" que aparece en la ventana de las fábricas. Este icono indica que la fábrica requiere de energía eléctrica para mejorar su producción/eficiencia.

En este capítulo vamos a electrificar las siguientes fábricas:
{f1}
{f2}
{f3}

También debe conectarse la planta productora de electricidad:
{f4}

Se avanza al siguiente paso pulsando en cualquiera de las fábricas de la lista.

\ No newline at end of file +

Fábricas Electrificadas


Algunas de las fábricas necesitan energía eléctrica para mejorar su produción/eficiencia. Esto se logra colocando un transformador a cada fábrica/industria para luego conectarlo a una industria generadora de energía eléctrica.
No todas las industrias requieren energía eléctrica, esto se puede comprobar con el pequeño icono en forma de "rayo" que aparece en la ventana de las fábricas. Este icono indica que la fábrica requiere de energía eléctrica para mejorar su producción/eficiencia.

En este capítulo vamos a electrificar las siguientes fábricas:
{f1}
{f2}
{f3}

También debe conectarse la planta productora de electricidad:
{f4}

Se avanza al siguiente paso pulsando en cualquiera de las fábricas de la lista.

\ No newline at end of file diff --git a/es/chapter_05/goal_step_02.txt b/es/chapter_05/goal_step_02.txt index fe7b767..76dcccd 100644 --- a/es/chapter_05/goal_step_02.txt +++ b/es/chapter_05/goal_step_02.txt @@ -1 +1 @@ -

Se necesita transportar {good} para operar la planta generadora de electricidad "{f4}".

[1] Conecta la carretera:
Selecciona el menú {tool2} y conecta los puntos entre {w1} "{f3}" y {w2} "{f4}".

[2] Estaciones de camiones:
Construye las estaciones de mercancías en {w1} y {w2}.

[3] El depósito de carretera:
Construye un tramo de carretera en {dep} y luego un Depósito de Carretera.

[4] Preparación de los camiones:
Usa la {tool1} en el tanque y en la pestaña "Camiones" selecciona un {veh}, luego selecciona un tráiler para {good}.
Ahora para crear una línea para la flota de camiones:
- [1] Selecciona la estación en {f3} y coloca la Carga mínima en {load}%.
- [2] Seleccione la estación en {f4} y cierre la ventana Itinerario.
Pulsa el botón [Copiar Vehiculo] hasta llegar a {all_cov} convoyes, finalmente presione el botón [Arrancar].

Se avanza al siguiente paso cuando todos los convoyes estén en circulación.

Convoyes en circulación: {cir}/{all_cov}

\ No newline at end of file +

Se necesita transportar {good} para operar la planta generadora de electricidad "{f4}".

[1] Conecta la carretera:
Selecciona el menú {tool2} y conecta los puntos entre {w1} "{f3}" y {w2} "{f4}".

[2] Estaciones de camiones:
Construye las estaciones de mercancías en {w1} y {w2}.

[3] El depósito de carretera:
Construye un tramo de carretera en {dep} y luego un Depósito de Carretera.

[4] Preparación de los camiones:
Usa la {tool1} en el tanque y en la pestaña "Camiones" selecciona un {veh}, luego selecciona un tráiler para {good}.
Ahora para crear una línea para la flota de camiones:
- [1] Selecciona la estación en {f3} y coloca la Carga mínima en {load}%.
- [2] Seleccione la estación en {f4} y cierre la ventana Itinerario.
Pulsa el botón [Copiar Vehiculo] hasta llegar a {all_cov} convoyes, finalmente presione el botón [Arrancar].

Se avanza al siguiente paso cuando todos los convoyes estén en circulación.

Convoyes en circulación: {cir}/{all_cov}

\ No newline at end of file diff --git a/es/chapter_06/goal.txt b/es/chapter_06/goal.txt index 04c92a5..f82e818 100644 --- a/es/chapter_06/goal.txt +++ b/es/chapter_06/goal.txt @@ -1 +1 @@ -

En este capítulo nos dedicamos al transporte aéreo, construiremos un pequeño aeropuerto para transportar pasajeros a una ciudad muy lejana.

{scr}

{txtst_01}Paso A - El primer Aeropuerto
{step_01}

{txtst_02}Paso B - El Avión está a punto de despegar
{step_02}

{txtst_03}Paso C - Línea de Autobuses del Aeropuerto parte I
{step_03}

{txtst_04}Paso D - Línea de Autobuses del Aeropuerto parte II
{step_04}

\ No newline at end of file +

En este capítulo nos dedicamos al transporte aéreo, construiremos un pequeño aeropuerto para transportar pasajeros a una ciudad muy lejana.

{scr}

{txtst_01}Paso A - El primer Aeropuerto
{step_01}

{txtst_02}Paso B - El Avión está a punto de despegar
{step_02}

{txtst_03}Paso C - Línea de Autobuses del Aeropuerto parte I
{step_03}

{txtst_04}Paso D - Línea de Autobuses del Aeropuerto parte II
{step_04}

\ No newline at end of file diff --git a/es/chapter_06/goal_step_01.txt b/es/chapter_06/goal_step_01.txt index 6f24b16..2f847e4 100644 --- a/es/chapter_06/goal_step_01.txt +++ b/es/chapter_06/goal_step_01.txt @@ -1 +1 @@ -

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Aeropuerto en construción


Pasos:
1- Construye la {w1name} entre {c1_a} y {c1_b}.
2- Construye la {w2name} entre {c2_a} y {c2_b}.
3- Construye la parada aérea en el tramo de pista: {st1}.
4- Construye una Terminal de Pasajeros en: {st2}.
5- Construye el Hangar o Depósito Aereo (Construye un tramo de pista primero): {dep1}.
6- Haz pública la parada aerea en: {st1}.

Se avanza al siguiete paso, cuando todo esté en su lugar.

\ No newline at end of file +

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Aeropuerto en construción


Pasos:
1- Construye la {w1name} entre {c1_a} y {c1_b}.
2- Construye la {w2name} entre {c2_a} y {c2_b}.
3- Construye la parada aérea en el tramo de pista: {st1}.
4- Construye una Terminal de Pasajeros en: {st2}.
5- Construye el Hangar o Depósito Aereo (Construye un tramo de pista primero): {dep1}.
6- Haz pública la parada aerea en: {st1}.

Se avanza al siguiete paso, cuando todo esté en su lugar.

\ No newline at end of file diff --git a/es/chapter_06/goal_step_02.txt b/es/chapter_06/goal_step_02.txt index 7eaf232..92192ad 100644 --- a/es/chapter_06/goal_step_02.txt +++ b/es/chapter_06/goal_step_02.txt @@ -1 +1 @@ -

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Pulsa sobre el Hangar {dep1} y compra una aeronave de nombre '{plane}' y configura la ruta de la siguiente manera:

[1] Seleciona la Parada Aérea {sch1} y configure la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[2] Selecciona la Parada Aérea {sch2} y presiona Arrancar.

Se avanza al siguiete paso, cuando el Avión salga del hangar.

\ No newline at end of file +

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Pulsa sobre el Hangar {dep1} y compra una aeronave de nombre '{plane}' y configura la ruta de la siguiente manera:

[1] Seleciona la Parada Aérea {sch1} y configure la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[2] Selecciona la Parada Aérea {sch2} y presiona Arrancar.

Se avanza al siguiete paso, cuando el Avión salga del hangar.

\ No newline at end of file diff --git a/es/chapter_06/goal_step_03.txt b/es/chapter_06/goal_step_03.txt index e849cdb..98779e0 100644 --- a/es/chapter_06/goal_step_03.txt +++ b/es/chapter_06/goal_step_03.txt @@ -1 +1 @@ -

Conectando la ciudad {cit1} con el Aeropuerto {sch1} usando {cnr} autobuses.

Pulsa sobre el Depósito de Carretera {dep2}, selecciona un bus {bus1} y presiona [Itinerario]

[1] Seleciona todas las paradas en orden:
{stx}

[2] Tras añadir las paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[3] Usa el botón [Copiar vehículo] para conseguir los {cnr} autobuses necesarios.
[4] Ahora pulsa el botón [Arrancar] para que todos los vehículos dejen el depósito.

Se avanza al siguiete paso, cuando todos los autobuses dejen el depósito.

\ No newline at end of file +

Conectando la ciudad {cit1} con el Aeropuerto {sch1} usando {cnr} autobuses.

Pulsa sobre el Depósito de Carretera {dep2}, selecciona un bus {bus1} y presiona [Itinerario]

[1] Seleciona todas las paradas en orden:
{stx}

[2] Tras añadir las paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[3] Usa el botón [Copiar vehículo] para conseguir los {cnr} autobuses necesarios.
[4] Ahora pulsa el botón [Arrancar] para que todos los vehículos dejen el depósito.

Se avanza al siguiete paso, cuando todos los autobuses dejen el depósito.

\ No newline at end of file diff --git a/es/chapter_06/goal_step_04.txt b/es/chapter_06/goal_step_04.txt index 86e47ea..5fc9b25 100644 --- a/es/chapter_06/goal_step_04.txt +++ b/es/chapter_06/goal_step_04.txt @@ -1 +1 @@ -

Conectando la ciudad {cit1} con el Aeropuerto {sch2} usando {cnr} autobuses.

El Depósito de Carretera

Ve a la ubicación {cit2}, localiza la posición {dep3}, y construye un depósito de carretera ahí.

Los Autobuses

Pulsa sobre el Depósito de Carretera {dep3}, selecciona un autobús {bus2} y presiona [Itinerario]

[1] Seleciona todas las paradas en orden:
{stx}

[2] Tras añadir las paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[3] Usa el botón [Copiar vehículo] para conseguir los {cnr} autobuses necesarios.
[4] Ahora pulsa el botón [Arrancar] para que todos los vehículos dejen el depósito.

Se avanza al siguiente capítulo, cuando todos los autobuses dejen el depósito.

\ No newline at end of file +

Conectando la ciudad {cit1} con el Aeropuerto {sch2} usando {cnr} autobuses.

El Depósito de Carretera

Ve a la ubicación {cit2}, localiza la posición {dep3}, y construye un depósito de carretera ahí.

Los Autobuses

Pulsa sobre el Depósito de Carretera {dep3}, selecciona un autobús {bus2} y presiona [Itinerario]

[1] Seleciona todas las paradas en orden:
{stx}

[2] Tras añadir las paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[3] Usa el botón [Copiar vehículo] para conseguir los {cnr} autobuses necesarios.
[4] Ahora pulsa el botón [Arrancar] para que todos los vehículos dejen el depósito.

Se avanza al siguiente capítulo, cuando todos los autobuses dejen el depósito.

\ No newline at end of file diff --git a/es/chapter_07/goal_step_01x04.txt b/es/chapter_07/goal_step_01x04.txt index 520321f..ec1d41e 100644 --- a/es/chapter_07/goal_step_01x04.txt +++ b/es/chapter_07/goal_step_01x04.txt @@ -1 +1 @@ -

La ciudad de {city} necesita mantener una red de autobuses que permita a los pasajeros llegar a la estación de tren de {name}.

Construye tantas paradas de autobús en la ciudad como necesites para cubrir la ciudad. Asegúrese de que haya una parada de autobús conectada a la estación {name} para que se puedan contar los pasajeros.

Para pasar al siguiente paso, transporte más de {load} pasajeros en un mes.

Este mes se promocionaron los siguientes: {get_load}/{load}

\ No newline at end of file +

La ciudad de {city} necesita mantener una red de autobuses que permita a los pasajeros llegar a la estación de tren de {name}.

Construye tantas paradas de autobús en la ciudad como necesites para cubrir la ciudad. Asegúrese de que haya una parada de autobús conectada a la estación {name} para que se puedan contar los pasajeros.

Para pasar al siguiente paso, transporte más de {load} pasajeros en un mes.

Este mes se promocionaron los siguientes: {get_load}/{load}

\ No newline at end of file diff --git a/es/finished.txt b/es/finished.txt index fadc296..a008e2d 100644 --- a/es/finished.txt +++ b/es/finished.txt @@ -1 +1 @@ -

Hasta aquí llega el Escenario, muchas gracias por jugar el mítico Simutrans.

Puedes seguirnos aqui: https://www.facebook.com/Simutrans
Cualquier duda estamos para ayudar en el foro: https://forum.simutrans.com/

Créditos a toda la comunidad de Simutrans y en especial a:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Saludos!! @Yona-TYT.

\ No newline at end of file +

Hasta aquí llega el Escenario, muchas gracias por jugar el mítico Simutrans.

Puedes seguirnos aqui: https://www.facebook.com/Simutrans
Cualquier duda estamos para ayudar en el foro: https://forum.simutrans.com/

Créditos a toda la comunidad de Simutrans y en especial a:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Saludos!! @Yona-TYT.

\ No newline at end of file diff --git a/es/info.txt b/es/info.txt index 3478eef..9b7fdf2 100644 --- a/es/info.txt +++ b/es/info.txt @@ -1 +1 @@ -

Simutrans Tutorial


En este tutorial, se explican los primeros pasos en la creación de su imperio de transporte en Simutrans. Se centra en las acciones necesarias alrededor de las cadenas de transporte en Simutrans.

El tutorial se compone de varios Capítulos, cada uno con un número de Pasos incluidos en orden para completar el capitulo.

Los asuntos económicos sólo están cubiertos brevemente en el Tutorial

{list_of_chapters}

Puedes obtener más ayuda pulsando la tecla "F1" en lo que respecta a las diversas herramientas, funciones, y la lógica de Simutrans.

{first_link}

Nota: En algunos casos puede haber hasta 15 segundos de retraso desde que realizas una acción hasta que el Tutorial se actualiza al siguiente paso.


{pakset_info} \ No newline at end of file +

Simutrans Tutorial


En este tutorial, se explican los primeros pasos en la creación de su imperio de transporte en Simutrans. Se centra en las acciones necesarias alrededor de las cadenas de transporte en Simutrans.

El tutorial se compone de varios Capítulos, cada uno con un número de Pasos incluidos en orden para completar el capitulo.

Los asuntos económicos sólo están cubiertos brevemente en el Tutorial

{list_of_chapters}

Puedes obtener más ayuda pulsando la tecla "F1" en lo que respecta a las diversas herramientas, funciones, y la lógica de Simutrans.

{first_link}

Nota: En algunos casos puede haber hasta 15 segundos de retraso desde que realizas una acción hasta que el Tutorial se actualiza al siguiente paso.


{pakset_info} \ No newline at end of file diff --git a/es/info/info_pak128.txt b/es/info/info_pak128.txt index 74baf1e..837f6cb 100644 --- a/es/info/info_pak128.txt +++ b/es/info/info_pak128.txt @@ -1 +1 @@ -

Descripción pak128

\ No newline at end of file +

Descripción pak128

\ No newline at end of file diff --git a/es/info/info_pak64.txt b/es/info/info_pak64.txt index cab8c0a..9d10808 100644 --- a/es/info/info_pak64.txt +++ b/es/info/info_pak64.txt @@ -1 +1 @@ -

Descripción pak64

\ No newline at end of file +

Descripción pak64

\ No newline at end of file diff --git a/es/info/info_pak64perman.txt b/es/info/info_pak64perman.txt index fb8eada..26a3a13 100644 --- a/es/info/info_pak64perman.txt +++ b/es/info/info_pak64perman.txt @@ -1 +1 @@ -

Descripción pak64.german

pak64.german es un conjunto de gráficos que solo usa una altura.

Tampoco hay bonificación de velocidad en pak64.german. Pero esto sigue siendo importante porque no se permite que las estaciones estén abarrotadas. Si las estaciones se saturan, los volúmenes de transporte colapsan.
Si se utiliza la carga mínima, tenga cuidado de no llenar excesivamente ninguna estación.

El maglev y el S-/U-Bahn sólo deberían utilizarse cuando haya un número muy elevado de pasajeros.

\ No newline at end of file +

Descripción pak64.german

pak64.german es un conjunto de gráficos que solo usa una altura.

Tampoco hay bonificación de velocidad en pak64.german. Pero esto sigue siendo importante porque no se permite que las estaciones estén abarrotadas. Si las estaciones se saturan, los volúmenes de transporte colapsan.
Si se utiliza la carga mínima, tenga cuidado de no llenar excesivamente ninguna estación.

El maglev y el S-/U-Bahn sólo deberían utilizarse cuando haya un número muy elevado de pasajeros.

\ No newline at end of file diff --git a/es/result.txt b/es/result.txt index 29583e6..8ed3aff 100644 --- a/es/result.txt +++ b/es/result.txt @@ -1 +1 @@ -

El capítulo se ha completado al {ratio_chapter}%.

\ No newline at end of file +

El capítulo se ha completado al {ratio_chapter}%.

\ No newline at end of file diff --git a/es/rule.txt b/es/rule.txt index 764efbd..5a90951 100644 --- a/es/rule.txt +++ b/es/rule.txt @@ -1 +1 @@ -

No se muestran todas las herramientas. Tan sólo las acciones necesarias para el paso actual están disponibles.

· Describir normas.
· Dar consejos.
· Instrucciones sobre problemas conocidos.

\ No newline at end of file +

No se muestran todas las herramientas. Tan sólo las acciones necesarias para el paso actual están disponibles.

· Describir normas.
· Dar consejos.
· Instrucciones sobre problemas conocidos.

\ No newline at end of file From 6afdd94c3be6e11fbbe9506c1583e10c9063efc2 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 23:51:48 +0200 Subject: [PATCH 063/217] CHG way test function --- class/astar.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/astar.nut b/class/astar.nut index 0880218..535465e 100644 --- a/class/astar.nut +++ b/class/astar.nut @@ -758,9 +758,9 @@ class astar_builder extends astar * * */ -function test_select_way(start, end, wt) { +function test_select_way(start, end, wt = wt_rail) { //gui.add_message_at("start " + coord3d_to_string(start) + " end " + coord3d_to_string(end) + " t_end " + coord3d_to_string(t_end), start) - local asf = astar_route_finder(wt_rail) + local asf = astar_route_finder(wt) local wayline = asf.search_route([start], [end]) if ( "err" in wayline ) { //gui.add_message_at("no route from " + coord3d_to_string(start) + " to " + coord3d_to_string(end) , start) From 4ae535420b402c7d5505a2fdbec8448fa778dec6 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 23:52:23 +0200 Subject: [PATCH 064/217] CHG text output --- class/class_chapter_03.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 5f13cf4..a05cca6 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -438,7 +438,7 @@ class tutorial.chapter_03 extends basic_chapter } } local c = coord(list[0].x, list[0].y) - text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.dep = ch3_rail_depot3.b.href("("+ch3_rail_depot3.b.tostring()+")") text.loc3 = translate(loc3_name_obj) From 31c5ce8ff4a8ea571cada560f24a571d24a8017d Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 May 2025 23:53:31 +0200 Subject: [PATCH 065/217] CHG text output --- class/class_chapter_04.nut | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 5ee3ba3..49b3d8d 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -128,28 +128,21 @@ class tutorial.chapter_04 extends basic_chapter local c1 = coord(way4_cannal[0].x, way4_cannal[0].y) local c2 = coord(way4_cannal[1].x, way4_cannal[1].y) if(!correct_cov){ - local a = 3 - local b = 3 - text = ttextfile("chapter_04/05_"+a+"-"+b+".txt") - text.tx=ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_04/05_3-3.txt") + text.tx=ttext("[3/3]") } else if (pot0==0){ - local a = 1 - local b = 3 - text = ttextfile("chapter_04/05_"+a+"-"+b+".txt") - text.tx=ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_04/05_1-3.txt") + text.tx=ttext("[1/3]") } else if (pot1==0){ - local a = 2 - local b = 3 - text = ttextfile("chapter_04/05_"+a+"-"+b+".txt") - text.tx=ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_04/05_2-3.txt") + text.tx=ttext("[2/3]") + text.cdock = translate(get_obj_ch4(3)) } else if (pot2==0){ - local a = 3 - local b = 3 - text = ttextfile("chapter_04/05_"+a+"-"+b+".txt") - text.tx=ttext("["+a+"/"+b+"]") + text = ttextfile("chapter_04/05_3-3.txt") + text.tx=ttext("[3/3]") } text.w1 = c1.href(" ("+c1.tostring()+")")+"" text.w2 = c2.href(" ("+c2.tostring()+")")+"" @@ -193,7 +186,7 @@ class tutorial.chapter_04 extends basic_chapter } } local c = coord(list[0].x, list[0].y) - text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.ship = translate(ship2_name_obj) text.load = ship2_load From f04cac0a316daf700f123ce7989fa973060401ef Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 00:53:59 +0200 Subject: [PATCH 066/217] CHG check halt accept mail befor build mail extension ADD p64g toolbar mail extension --- class/class_basic_data.nut | 2 ++ class/class_chapter_05.nut | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 0b638c0..e8a25e1 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -163,8 +163,10 @@ function translate_objects() { // set toolbar with powerline tools if ( pak_name == "pak64.german" ) { translate_objects_list.rawset("tools_power", translate("POWERLINE")) + translate_objects_list.rawset("tools_mail_extension", translate("EXTENSIONS")) } else { translate_objects_list.rawset("tools_power", translate("SPECIALTOOLS")) + translate_objects_list.rawset("tools_mail_extension", translate("SPECIALTOOLS")) } //gui.add_message("Current: "+translate_objects_list.inspec) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 297facf..b1958ec 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -192,7 +192,7 @@ class tutorial.chapter_05 extends basic_chapter if (pot0==1 && pot1==0){ text = ttextfile("chapter_05/04_1-3.txt") text.tx="[1/3]" - text.toolbar = toolbar + text.toolbar = translate_objects_list.tools_mail_extension local st_tx = "" local list = city1_post_halts //extensions_tiles //Lista de build local siz = list.len() @@ -490,7 +490,21 @@ class tutorial.chapter_05 extends basic_chapter chapter_sub_steps = 3 if (pot0==0){ local player = player_x(1) - local list = extensions_tiles + local list = [] //extensions_tiles + for ( local i = 0; i < city1_post_halts.len(); i++ ) { + // check halts accept mail + local good = get_good_data(6, 2) + local t = my_tile(city1_post_halts[i]) + local halt = t.get_halt() + if ( halt != null ) { + local accept_post = halt.accepts_good(good_desc_x(good)) + //gui.add_message(coord3d_to_string(t) + " accept_post " + accept_post) + if ( !accept_post ) { + list.append(extensions_tiles[i]) + } + } + } + local obj = mo_building local station = false local lab_name = translate("Mail Extension Here!.") @@ -1340,7 +1354,7 @@ function search_free_tile(tile_list, r) { local tile = null - gui.add_message("tile search - " + coord3d_to_string(tile_list[0])) + //gui.add_message("tile search - " + coord3d_to_string(tile_list[0])) switch (r) { case 1: @@ -1365,7 +1379,7 @@ function search_free_tile(tile_list, r) { } if ( test_tile_is_empty(tile) && tile.get_slope() == 0 ) { - gui.add_message("tile found - " + coord3d_to_string(tile)) + //gui.add_message("tile found - " + coord3d_to_string(tile)) return tile } From b1e08951f2180bb57db2d582aaa3555b4f3c8281 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 00:58:30 +0200 Subject: [PATCH 067/217] CHG translate files --- de/chapter_04/05_2-3.txt | 2 +- de/chapter_04/05_3-3.txt | 2 +- de/chapter_04/goal_step_06.txt | 2 +- de/chapter_05/04_1-3.txt | 2 +- en/chapter_04/05_2-3.txt | 2 +- en/chapter_05/04_1-3.txt | 2 +- es/chapter_04/05_2-3.txt | 2 +- es/chapter_05/04_1-3.txt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/de/chapter_04/05_2-3.txt b/de/chapter_04/05_2-3.txt index 2142167..a376160 100644 --- a/de/chapter_04/05_2-3.txt +++ b/de/chapter_04/05_2-3.txt @@ -1 +1 @@ -

{good2} muss von {f3} nach {f4} transportiert werden.

{tx} Bauen Sie einen Binnenhafen für Waren auf Feld {dock}.

\ No newline at end of file +

{good2} muss von {f3} nach {f4} transportiert werden.

{tx} Bauen Sie einen {cdock} für Waren auf Feld {dock}.

\ No newline at end of file diff --git a/de/chapter_04/05_3-3.txt b/de/chapter_04/05_3-3.txt index d75cef5..e2fb3cd 100644 --- a/de/chapter_04/05_3-3.txt +++ b/de/chapter_04/05_3-3.txt @@ -1 +1 @@ -

{tx} Verbindung zum Verbraucher {f4}

{all_cov} Schiffe werden benötigt, um {f4} mit {good2} zu versorgen.

[1] Klicken Sie im Fenster Schiffdepot {dep1} auf die Registerkarte Schiffe und wählen Sie dann das {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.
[3] Wählen Sie ein Wasserfeld beim Hafen an der {f3} aus und stellen Sie die Mindestlast auf {load}%
[4] Wählen Sie den Binnenhafen bei {f4}.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis alle {all_cov} Schiffe unterwegs sind.
[7] Klicken Sie abschließend Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

{tx} Verbindung zum Verbraucher {f4}

{all_cov} Schiffe werden benötigt, um {f4} mit {good2} zu versorgen.

[1] Klicken Sie im Fenster Schiffdepot {dep1} auf die Registerkarte Schiffe und wählen Sie dann das {sh} aus.
[2] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.
[3] Wählen Sie ein Wasserfeld beim Hafen an der {f3} aus und stellen Sie die Mindestlast auf {load}%
[4] Wählen Sie den Binnenhafen bei {f4}.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Drücken Sie auf Kopieren, bis sie {all_cov} Schiffe haben.
[7] Klicken Sie abschließend Starten.

Tipp: Drücken Sie Strg beim klicken auf Starten, damit alle Fahrzeuge das Depot verlassen.

Um zum nächsten Schritt zu gelangen, müssen alle Schiffe im Umlauf sein.

Schiffe im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/de/chapter_04/goal_step_06.txt b/de/chapter_04/goal_step_06.txt index 27d603d..54e5549 100644 --- a/de/chapter_04/goal_step_06.txt +++ b/de/chapter_04/goal_step_06.txt @@ -1 +1 @@ -

Es ist notwendig, Passagiere in touristische Gebiete {tur} zu transportieren.

Platzieren Sie {nr} Häfen für Passagiere auf den angegebenen Feldern:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Häfen.

\ No newline at end of file +

Es ist notwendig, Passagiere ins touristische Gebiete bei {tur} zu transportieren.

Platzieren Sie {nr} Häfen für Passagiere auf den angegebenen Feldern:
{dock}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Häfen.

\ No newline at end of file diff --git a/de/chapter_05/04_1-3.txt b/de/chapter_05/04_1-3.txt index 7fb6054..b20fe94 100644 --- a/de/chapter_05/04_1-3.txt +++ b/de/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} Im Menü {toolbar} wählen Sie Erweiterungsgebäude für die Post aus und platzieren Sie eines an jedem der folgenden Halte:
{st}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Gebäude.

\ No newline at end of file +

{tx} Im Menü {toolbar} wählen Sie Erweiterungsgebäude für die Post aus und platzieren Sie eines an jedem der folgenden roten Halte:
{st}

Um zum nächsten Schritt zu gelangen, müssen alle Halte Post akzeptieren.

\ No newline at end of file diff --git a/en/chapter_04/05_2-3.txt b/en/chapter_04/05_2-3.txt index 929ca9b..7eb1190 100644 --- a/en/chapter_04/05_2-3.txt +++ b/en/chapter_04/05_2-3.txt @@ -1 +1 @@ -

It is required to transport {good2} from {f3} to the {f4} for the final consumer.

{tx} Build a Canal Quay of goods in {dock}.

\ No newline at end of file +

It is required to transport {good2} from {f3} to the {f4} for the final consumer.

{tx} Build a {cdock} of goods in {dock}.

\ No newline at end of file diff --git a/en/chapter_05/04_1-3.txt b/en/chapter_05/04_1-3.txt index b1854b4..44b530b 100644 --- a/en/chapter_05/04_1-3.txt +++ b/en/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} In the {toolbar} menu, select one of the "Extension Buildings" for mail and place one in each of the following halts:

{st}

Advances to the next step when the mail truck leaves the depot.

\ No newline at end of file +

{tx} In the {toolbar} menu, select one of the "Extension Buildings" for mail and place one in each of the following red halts:

{st}

Advances to the next step when the mail truck leaves the depot.

\ No newline at end of file diff --git a/es/chapter_04/05_2-3.txt b/es/chapter_04/05_2-3.txt index 79d563c..5450116 100644 --- a/es/chapter_04/05_2-3.txt +++ b/es/chapter_04/05_2-3.txt @@ -1 +1 @@ -

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Construye un Muelle de Canal de mercancías en {dock}.

\ No newline at end of file +

Se necesita transportar {good2} desde {f3} hasta {f4} para el consumidor final

{tx} Construye un {cdock} de mercancías en {dock}.

\ No newline at end of file diff --git a/es/chapter_05/04_1-3.txt b/es/chapter_05/04_1-3.txt index f9bdee0..632acea 100644 --- a/es/chapter_05/04_1-3.txt +++ b/es/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} En el menú {toolbar} selecciona "Edificios de Extensión" para correo y coloca uno en cada una de las siguientes ubicaciones:

{st}

Se avanza al siguiente paso cuando el camión de correo abandone el depósito.

\ No newline at end of file +

{tx} En el menú {toolbar} selecciona "Edificios de Extensión" para correo y coloca uno en cada una de las siguientes rojo ubicaciones:

{st}

Se avanza al siguiente paso cuando el camión de correo abandone el depósito.

\ No newline at end of file From 0a9b8ea8d667b63cd3e3f61c59ff3638014e43b5 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 01:00:14 +0200 Subject: [PATCH 068/217] CHG remove unused text files --- en/chapter_07/goal_step_01.txt | 1 - en/chapter_07/goal_step_02.txt | 1 - en/chapter_07/goal_step_03.txt | 1 - en/chapter_07/goal_step_04.txt | 1 - es/chapter_07/goal_step_01.txt | 1 - es/chapter_07/goal_step_02.txt | 1 - es/chapter_07/goal_step_03.txt | 1 - es/chapter_07/goal_step_04.txt | 1 - 8 files changed, 8 deletions(-) delete mode 100644 en/chapter_07/goal_step_01.txt delete mode 100644 en/chapter_07/goal_step_02.txt delete mode 100644 en/chapter_07/goal_step_03.txt delete mode 100644 en/chapter_07/goal_step_04.txt delete mode 100644 es/chapter_07/goal_step_01.txt delete mode 100644 es/chapter_07/goal_step_02.txt delete mode 100644 es/chapter_07/goal_step_03.txt delete mode 100644 es/chapter_07/goal_step_04.txt diff --git a/en/chapter_07/goal_step_01.txt b/en/chapter_07/goal_step_01.txt deleted file mode 100644 index db85842..0000000 --- a/en/chapter_07/goal_step_01.txt +++ /dev/null @@ -1 +0,0 @@ -

The city {city} needs to design a bus network that allows passengers to move to the train station: {name}.

[1] Place a bus stop in the position {stop}.
[2] Make the stop public in {stop}.
[3] Now you are free to build a bus network in the city {city}.
[4] Make sure all buses are connected to the station: {name}.

Progress is made to the next step, when more than {load} passengers are transported to {name} in a month.

Translated this month: {get_load}/{load}

\ No newline at end of file diff --git a/en/chapter_07/goal_step_02.txt b/en/chapter_07/goal_step_02.txt deleted file mode 100644 index fb4a597..0000000 --- a/en/chapter_07/goal_step_02.txt +++ /dev/null @@ -1 +0,0 @@ -

The city {city} needs to design a bus network that allows passengers to move to the train station: {name}.

[1] Place a bus stop in the position {stop}.
[2] Make the stop public in {stop}.
[3] Now you are free to build a bus network in the city {city}.
[4] Make sure all buses are connected to the station: {name}.

Progress is made to the next step, when more than {load} passengers are transported to {name} in a month.

Translated this month: {get_load}/{load}

\ No newline at end of file diff --git a/en/chapter_07/goal_step_03.txt b/en/chapter_07/goal_step_03.txt deleted file mode 100644 index db85842..0000000 --- a/en/chapter_07/goal_step_03.txt +++ /dev/null @@ -1 +0,0 @@ -

The city {city} needs to design a bus network that allows passengers to move to the train station: {name}.

[1] Place a bus stop in the position {stop}.
[2] Make the stop public in {stop}.
[3] Now you are free to build a bus network in the city {city}.
[4] Make sure all buses are connected to the station: {name}.

Progress is made to the next step, when more than {load} passengers are transported to {name} in a month.

Translated this month: {get_load}/{load}

\ No newline at end of file diff --git a/en/chapter_07/goal_step_04.txt b/en/chapter_07/goal_step_04.txt deleted file mode 100644 index db85842..0000000 --- a/en/chapter_07/goal_step_04.txt +++ /dev/null @@ -1 +0,0 @@ -

The city {city} needs to design a bus network that allows passengers to move to the train station: {name}.

[1] Place a bus stop in the position {stop}.
[2] Make the stop public in {stop}.
[3] Now you are free to build a bus network in the city {city}.
[4] Make sure all buses are connected to the station: {name}.

Progress is made to the next step, when more than {load} passengers are transported to {name} in a month.

Translated this month: {get_load}/{load}

\ No newline at end of file diff --git a/es/chapter_07/goal_step_01.txt b/es/chapter_07/goal_step_01.txt deleted file mode 100644 index 3691cd0..0000000 --- a/es/chapter_07/goal_step_01.txt +++ /dev/null @@ -1 +0,0 @@ -

La ciudad {city} necesita diseñar una red de autobuses que permita mover pasajeros hacia la estacion de tren: {name}.

[1] Coloca una parada de autobús en la posición {stop}.
[2] Haz pública la parada en {stop}.
[3] Ahora eres libre de construir una red de autobuses en la ciudad {city}.
[4] Asegúrate de que todos los autobuses estén conectados a la estación: {name}.

Se avanza al siguiete paso, cuando se transporten más de {load} pasajeros hacia {name} en un mes.

Se han trasportado este mes: {get_load}/{load}

\ No newline at end of file diff --git a/es/chapter_07/goal_step_02.txt b/es/chapter_07/goal_step_02.txt deleted file mode 100644 index d4b76ac..0000000 --- a/es/chapter_07/goal_step_02.txt +++ /dev/null @@ -1 +0,0 @@ -

La ciudad {city} necesita diseñar una red de autobuses que permita mover pasajeros hacia la estacion de tren: {name}.

[1] Coloca una parada de autobús en la posición {stop}.
[2] Haz pública la parada en {stop}.
[3] Ahora eres libre de construir una red de autobuses en la ciudad {city}.
[4] Asegúrate de que todos los autobuses estén conectados a la estación: {name}.

Se avanza al siguiete paso, cuando se transporten más de {load} pasajeros hacia {name} en un mes.

Se han trasportado este mes: {get_load}/{load}

\ No newline at end of file diff --git a/es/chapter_07/goal_step_03.txt b/es/chapter_07/goal_step_03.txt deleted file mode 100644 index 3691cd0..0000000 --- a/es/chapter_07/goal_step_03.txt +++ /dev/null @@ -1 +0,0 @@ -

La ciudad {city} necesita diseñar una red de autobuses que permita mover pasajeros hacia la estacion de tren: {name}.

[1] Coloca una parada de autobús en la posición {stop}.
[2] Haz pública la parada en {stop}.
[3] Ahora eres libre de construir una red de autobuses en la ciudad {city}.
[4] Asegúrate de que todos los autobuses estén conectados a la estación: {name}.

Se avanza al siguiete paso, cuando se transporten más de {load} pasajeros hacia {name} en un mes.

Se han trasportado este mes: {get_load}/{load}

\ No newline at end of file diff --git a/es/chapter_07/goal_step_04.txt b/es/chapter_07/goal_step_04.txt deleted file mode 100644 index 3691cd0..0000000 --- a/es/chapter_07/goal_step_04.txt +++ /dev/null @@ -1 +0,0 @@ -

La ciudad {city} necesita diseñar una red de autobuses que permita mover pasajeros hacia la estacion de tren: {name}.

[1] Coloca una parada de autobús en la posición {stop}.
[2] Haz pública la parada en {stop}.
[3] Ahora eres libre de construir una red de autobuses en la ciudad {city}.
[4] Asegúrate de que todos los autobuses estén conectados a la estación: {name}.

Se avanza al siguiete paso, cuando se transporten más de {load} pasajeros hacia {name} en un mes.

Se han trasportado este mes: {get_load}/{load}

\ No newline at end of file From 6bd831fd4a3784020be4a2f531fb026ef8f92c2c Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 08:33:01 +0200 Subject: [PATCH 069/217] CHG error message and not check build extension by accept mail --- class/class_basic_chapter.nut | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7c647d7..9524569 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2724,6 +2724,11 @@ class basic_chapter { local result = 0 for(local j=0; j Date: Thu, 29 May 2025 09:00:13 +0200 Subject: [PATCH 070/217] CHG better messages --- class/class_basic_chapter.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 9524569..b970898 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2772,10 +2772,10 @@ class basic_chapter return null } else - return translate("There is already a extension building here")+" ("+c.tostring()+")." + return translate("This stop already accepts mail.")+" ("+c.tostring()+")" } else if (glsw[j]==0) - result = translate("Place the extension building at the marked points")+" ("+c.tostring()+")." + result = translate("Place the extension building at the marked point")+" ("+c.tostring()+")." } return result From 80712ead1ee65065da40aa408c2166409f0f05fc Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 09:02:17 +0200 Subject: [PATCH 071/217] CHG translate files --- de.tab | 6 ++++++ en.tab | 4 ++++ es.tab | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/de.tab b/de.tab index 4d0f650..f9e1f35 100644 --- a/de.tab +++ b/de.tab @@ -372,3 +372,9 @@ You must use the inspection tool Sie müssen das Abfragewerkzeug (Taste a) benutzen You must use the tool to raise the ground here Sie müssen das Werkzeug verwenden, um den Boden hier anzuheben +#_________________________________error message_________________________________ +#_________________________________error message_________________________________ +Place the extension building at the marked point +Platzieren Sie den Erweiterungsbau an der markierten Stelle +This stop already accepts mail. +Dieser Halt akzeptiert bereits Post. diff --git a/en.tab b/en.tab index fd3e59c..c653143 100644 --- a/en.tab +++ b/en.tab @@ -38,3 +38,7 @@ The waittime in waystop {nr} '{name}' isn't {wait} {pos} Depart after in waystop {name} isn't {wait} {pos} Translator HWRead +#_________________________________error message_________________________________ +#_________________________________error message_________________________________ +Place the extension building at the marked point +Place the extension building at the marked points diff --git a/es.tab b/es.tab index 894c002..ec6e13b 100644 --- a/es.tab +++ b/es.tab @@ -376,3 +376,9 @@ You must use the inspection tool Debes usar la herramienta de inspección You must use the tool to raise the ground here Debes usar la herramienta para elevar el terreno aquí. +#_________________________________error message_________________________________ +#_________________________________error message_________________________________ +Place the extension building at the marked point +Coloque el edificio de ampliación en el punto marcado +This stop already accepts mail. +Esta parada ya acepta correo. From dd3fc8e942f8d1cad5583967365acb51a88edc5b Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 09:16:33 +0200 Subject: [PATCH 072/217] CHG vehicle pak64.german --- class/class_basic_data.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index e8a25e1..33d858b 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -183,7 +183,7 @@ function get_veh_ch2_st4() { return "BuessingLinie" break case "pak64.german": - return "OpelBlitz" + return "BuessingLinie" break case "pak128": return "S_Kroytor_LiAZ-677" From 1e3c123fb704a225d8f45a53021693b4a256f8fa Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 May 2025 20:32:03 +0200 Subject: [PATCH 073/217] CHG update translate files --- de/chapter_02/06_1-2.txt | 2 +- en.tab | 2 +- en/chapter_02/06_1-2.txt | 2 +- en/rule.txt | 2 +- es/chapter_02/06_1-2.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/de/chapter_02/06_1-2.txt b/de/chapter_02/06_1-2.txt index dbab124..71bcbdd 100644 --- a/de/chapter_02/06_1-2.txt +++ b/de/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:


{list}
[*] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {stnam} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:


{list}
[*] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/en.tab b/en.tab index c653143..4ab8bc4 100644 --- a/en.tab +++ b/en.tab @@ -1,4 +1,4 @@ -################################################################################# +§################################################################################# # for translate see # # https://simutrans-germany.com/translator_page/scenarios/scenario_5/ # ################################################################################# diff --git a/en/chapter_02/06_1-2.txt b/en/chapter_02/06_1-2.txt index 3ee4ddd..107b7dd 100644 --- a/en/chapter_02/06_1-2.txt +++ b/en/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:


{list}
[*] Select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {stnam}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:


{list}
[*] Select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file diff --git a/en/rule.txt b/en/rule.txt index 23f1ba5..a2d4257 100644 --- a/en/rule.txt +++ b/en/rule.txt @@ -1 +1 @@ -

Not every tool is displayed. Only actions necessary for the current step are available.

· Describe rules .
· Give hints .
· Known issues instructions .

\ No newline at end of file +

Not every tool is displayed. Only actions necessary for the current step are available.

· Describe rules .
· Give hints .
· Known issues instructions .

\ No newline at end of file diff --git a/es/chapter_02/06_1-2.txt b/es/chapter_02/06_1-2.txt index da0b8f7..e2fffef 100644 --- a/es/chapter_02/06_1-2.txt +++ b/es/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:


{list}
[*] Selecciona la parada {stnam} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file +

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {stnam}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:


{list}
[*] Selecciona la parada {stnam} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file From 9fe7e541ade4d1ed1c5a0e10932f4d3337e11c65 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Sun, 22 Jun 2025 12:22:07 -0400 Subject: [PATCH 074/217] Initial work: Text labels without owners (class basic chapter) --- class/class_basic_chapter.nut | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index b970898..c837c34 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -68,6 +68,8 @@ class basic_chapter map_siz = world.get_size() + pl_unown = player_x(15) + constructor(pl) { scenario.short_description = scenario_name + " - " + translate(this.chapter_name) @@ -1319,7 +1321,7 @@ class basic_chapter if(!way.is_electrified()){ way.mark() if (!tun) - label_x.create(coora, player_x(1), translate("Here")) + label_x.create(coora, pl_unown, translate("Here")) return res } else{ @@ -1506,7 +1508,7 @@ class basic_chapter if(!way.is_electrified()){ way.mark() if (!tun) - label_x.create(coora, player_x(1), translate("Here")) + label_x.create(coora, pl_unown, translate("Here")) return res } @@ -2138,7 +2140,7 @@ class basic_chapter local ribi = way.get_dirs() if ((ribi==1)||(ribi==2)||(ribi==4)||(ribi==8)||(ribi==10)||(ribi==5)){ - label_x.create(c_label, player_x(1), translate(text)) + label_x.create(c_label, pl_unown, translate(text)) way.mark() local c_sa = coord(c_label.x, c_label.y) result.coord[stnr] = {x = c_sa.x, y = c_sa.y} @@ -2495,7 +2497,6 @@ class basic_chapter function is_stop_building(siz, c_list, lab_name, good, label_sw = false) { - local pl_unown = player_x(15) local count = 0 for(local j=0;j Date: Sun, 22 Jun 2025 19:08:03 -0400 Subject: [PATCH 075/217] CHG Text labels without owners --- class/class_basic_chapter.nut | 2 +- class/class_chapter_02.nut | 8 +++--- class/class_chapter_03.nut | 48 +++++++++++++++++------------------ class/class_chapter_04.nut | 6 ++--- class/class_chapter_05.nut | 8 +++--- 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index c837c34..262bde3 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2891,7 +2891,7 @@ class basic_chapter label1 = tile_x(coor1.x, coor1.y, 0).find_object(mo_label) label2 = tile_x(coor2.x, coor2.y, 0).find_object(mo_label) if (!label1){ - label_x.create(coor1, player_x(1), translate(text)) + label_x.create(coor1, pl_unown, translate(text)) local label = tile_x(coor1.x,coor1.y,0).find_object(mo_label) if (label) label.mark() diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 235e0af..5eb5767 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -300,7 +300,7 @@ class tutorial.chapter_02 extends basic_chapter if (!way && !label){ local t1 = command_x(tool_remover) local err1 = t1.work(player_x(pl), tile, "") - label_x.create(city1_road_depot, player_x(pl), translate("Place the Road here!.")) + label_x.create(city1_road_depot, pl_unown, translate("Place the Road here!.")) return 0 } else if ((way)&&(way.get_owner().nr==pl)){ @@ -327,7 +327,7 @@ class tutorial.chapter_02 extends basic_chapter local tile = my_tile(city1_road_depot) local waydepo = tile.find_object(mo_way) if (!tile.find_object(mo_depot_road)){ - label_x.create(city1_road_depot, player_x(pl), translate("Build a Depot here!.")) + label_x.create(city1_road_depot, pl_unown, translate("Build a Depot here!.")) } else if (next_mark){ next_mark = delay_mark_tile(c_list1, stop_mark) @@ -421,8 +421,8 @@ class tutorial.chapter_02 extends basic_chapter local next_mark = true if (pot0 == 0){ if(!label) - label_x.create(bridge1_coords.a, player_x(pl), get_label_text(2)) - label_x.create(bridge1_coords.b, player_x(pl), "") + label_x.create(bridge1_coords.a, pl_unown, get_label_text(2)) + label_x.create(bridge1_coords.b, pl_unown, "") try { next_mark = delay_mark_tile(t_list_brd) } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index a05cca6..3291554 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -575,14 +575,14 @@ class tutorial.chapter_03 extends basic_chapter local limi = my_tile(way2_fac1_fac2[1]) local tile1 = my_tile(way2_fac1_fac2[0]) if (!tile1.find_object(mo_way)){ - label_x.create(way2_fac1_fac2[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac1_fac2[0], pl_unown, translate("Build Rails form here")) } else tile1.remove_object(player_x(1), mo_label) local tile2 = my_tile(limi) if (!tile2.find_object(mo_way)){ - label_x.create(limi, player_x(pl), translate("Build Rails form here")) + label_x.create(limi, pl_unown, translate("Build Rails form here")) //elimina el cuadro label /*local opt = 0 @@ -594,7 +594,7 @@ class tutorial.chapter_03 extends basic_chapter if (tile2.find_object(mo_label) && r_way.c.x<=limi.x) { if (!tile_x(wayend.x, wayend.y, wayend.z).find_object(mo_way)) { - label_x.create(wayend, player_x(pl), translate("Build Rails form here")) + label_x.create(wayend, pl_unown, translate("Build Rails form here")) } //Creea un cuadro label @@ -642,8 +642,8 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_step = 1 // sub step finish local tile = my_tile(bridge2_coords.a) if ((!tile.find_object(mo_bridge))){ - label_x.create(tile, player_x(pl), translate("Build a Bridge here!.")) - label_x.create(my_tile(bridge2_coords.b), player_x(pl), translate("Build a Bridge here!.")) + label_x.create(tile, pl_unown, translate("Build a Bridge here!.")) + label_x.create(my_tile(bridge2_coords.b), pl_unown, translate("Build a Bridge here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { @@ -661,7 +661,7 @@ class tutorial.chapter_03 extends basic_chapter local limi = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) local tile1 = limi if (r_way.c.y > limi.y){ - label_x.create(limi, player_x(pl), translate("Build Rails form here")) + label_x.create(limi, pl_unown, translate("Build Rails form here")) //Creea un cuadro label local opt = 0 local del = false @@ -676,7 +676,7 @@ class tutorial.chapter_03 extends basic_chapter local text = "X" label_bord(limit_ch3_rail_line_1b.a, limit_ch3_rail_line_1b.b, opt, del, text) if (!tile1.find_object(mo_label)) - label_x.create(way2_fac1_fac2[5], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac1_fac2[5], pl_unown, translate("Build Rails form here")) } local opt = 0 @@ -754,7 +754,7 @@ class tutorial.chapter_03 extends basic_chapter return 0 } if(!tile.find_object(mo_way)){ - label_x.create(tile, player_x(pl), translate("Build Rails form here")) + label_x.create(tile, pl_unown, translate("Build Rails form here")) } else{ local stop_mark = true @@ -825,14 +825,14 @@ class tutorial.chapter_03 extends basic_chapter local limi = way2_fac2_fac3[1] local tile1 = my_tile(way2_fac2_fac3[0]) if (!tile1.find_object(mo_way)){ - label_x.create(way2_fac2_fac3[0], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac2_fac3[0], pl_unown, translate("Build Rails form here")) } else tile1.remove_object(player_x(1), mo_label) local tile2 = my_tile(limi) if (!tile2.find_object(mo_way)){ - label_x.create(limi, player_x(pl), translate("Build Rails form here")) + label_x.create(limi, pl_unown, translate("Build Rails form here")) //elimina el cuadro label local opt = 0 @@ -844,7 +844,7 @@ class tutorial.chapter_03 extends basic_chapter tile2.remove_object(player_x(1), mo_label) if (!tile_x(wayend.x, wayend.y, wayend.z).find_object(mo_way)) - label_x.create(wayend, player_x(pl), translate("Build Rails form here")) + label_x.create(wayend, pl_unown, translate("Build Rails form here")) //Creea un cuadro label local opt = 0 local del = false @@ -880,7 +880,7 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_step = 1 // sub step finish local tile = my_tile(way2_fac2_fac3[2]) if ((!tile.find_object(mo_tunnel))){ - label_x.create(way2_fac2_fac3[2], player_x(pl), translate("Place a Tunnel here!.")) + label_x.create(way2_fac2_fac3[2], pl_unown, translate("Place a Tunnel here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { @@ -909,7 +909,7 @@ class tutorial.chapter_03 extends basic_chapter local tile1 = my_tile(limi) local tile2 = my_tile(way2_fac2_fac3[5]) if (r_way.c.y < limi.y){ - label_x.create(limi, player_x(pl), translate("Build Rails form here")) + label_x.create(limi, pl_unown, translate("Build Rails form here")) //Creea un cuadro label local opt = 0 local del = false @@ -925,7 +925,7 @@ class tutorial.chapter_03 extends basic_chapter label_bord(limit_ch3_rail_line_2b.a, limit_ch3_rail_line_2b.b, opt, del, text) if (!tile2.find_object(mo_way)) - label_x.create(way2_fac2_fac3[5], player_x(pl), translate("Build Rails form here")) + label_x.create(way2_fac2_fac3[5], pl_unown, translate("Build Rails form here")) } local opt = 0 local coora = coord3d(way2_fac2_fac3[3].x, way2_fac2_fac3[3].y, way2_fac2_fac3[3].z) @@ -1015,7 +1015,7 @@ class tutorial.chapter_03 extends basic_chapter return 0 } if(!tile.find_object(mo_way)){ - label_x.create(tile, player_x(pl), translate("Build Rails form here")) + label_x.create(tile, pl_unown, translate("Build Rails form here")) } else{ local stop_mark = true @@ -1075,8 +1075,8 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_step = 1 // sub step finish local tile = my_tile(bridge3_coords.a) if ((!tile.find_object(mo_bridge))){ - label_x.create(bridge3_coords.a, player_x(pl), translate("Build a Bridge here!.")) - label_x.create(my_tile(bridge3_coords.b), player_x(pl), translate("Build a Bridge here!.")) + label_x.create(bridge3_coords.a, pl_unown, translate("Build a Bridge here!.")) + label_x.create(my_tile(bridge3_coords.b), pl_unown, translate("Build a Bridge here!.")) r_way.c = coord3d(tile.x, tile.y, tile.z) } else { @@ -1111,7 +1111,7 @@ class tutorial.chapter_03 extends basic_chapter } } else{ - label_x.create(way3_tun_coord[0], player_x(pl), translate("Place a Tunnel here!.")) + label_x.create(way3_tun_coord[0], pl_unown, translate("Place a Tunnel here!.")) } } else{ @@ -1183,10 +1183,10 @@ class tutorial.chapter_03 extends basic_chapter local tile_b = my_tile(way3_cy1_cy6[j].b) if (!tile_a.find_object(mo_label)) - label_x.create(way3_cy1_cy6[j].a, player_x(1), translate("Build Rails form here")) + label_x.create(way3_cy1_cy6[j].a, pl_unown, translate("Build Rails form here")) if (!tile_b.find_object(mo_label)) - label_x.create(way3_cy1_cy6[j].b, player_x(1), translate("Build Rails form here")) + label_x.create(way3_cy1_cy6[j].b, pl_unown, translate("Build Rails form here")) local coora = coord3d(way3_cy1_cy6[j].a.x, way3_cy1_cy6[j].a.y, way3_cy1_cy6[j].a.z) local coorb = coord3d(way3_cy1_cy6[j].b.x, way3_cy1_cy6[j].b.y, way3_cy1_cy6[j].b.z) @@ -1218,7 +1218,7 @@ class tutorial.chapter_03 extends basic_chapter t.find_object(mo_way).mark() } if ((!t.find_object(mo_signal) && !t.find_object(mo_roadsign) )){ - label_x.create(way3_sign_list[j].c, player_x(1), translate("Place Singnal here!.")) + label_x.create(way3_sign_list[j].c, pl_unown, translate("Place Singnal here!.")) t.find_object(mo_way).mark() } else{ @@ -1279,7 +1279,7 @@ class tutorial.chapter_03 extends basic_chapter chapter_sub_step = 2 // sub step finish local tile = my_tile(ch3_rail_depot3.b) if (!tile.find_object(mo_depot_rail)) - label_x.create(ch3_rail_depot3.b, player_x(pl), translate("Build Train Depot here!.")) + label_x.create(ch3_rail_depot3.b, pl_unown, translate("Build Train Depot here!.")) else{ tile.remove_object(player_x(1), mo_label) pot2=1 @@ -1943,7 +1943,7 @@ class tutorial.chapter_03 extends basic_chapter return result } if ((j+1) == ch3_rail_stations.len()) - return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep3.tostring()+")." + return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot3.b.tostring()+")." } return result } @@ -2821,7 +2821,7 @@ class tutorial.chapter_03 extends basic_chapter tile.mark() way.mark() //if(j!=0 ) - label_x.create(c_list[j], player_x(0), format(translate("Build station No.%d here!."),j+1)) + label_x.create(c_list[j], pl_unown, format(translate("Build station No.%d here!."),j+1)) sw = false } else { diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 49b3d8d..0e3f731 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -282,7 +282,7 @@ class tutorial.chapter_04 extends basic_chapter local depot = t1.find_object(mo_depot_water) if (!depot){ - label_x.create(ship_depot, player_x(pl), translate("Build Shipyard here!.")) + label_x.create(ship_depot, pl_unown, translate("Build Shipyard here!.")) } else{ t1.remove_object(player_x(1), mo_label) @@ -313,7 +313,7 @@ class tutorial.chapter_04 extends basic_chapter local way_start = t_start.find_object(mo_way) if (way_start && way_start.get_desc().get_topspeed()==0){ t_start.mark() - label_x.create(c_start, player_x(1), translate("Build Canal here!.")) + label_x.create(c_start, pl_unown, translate("Build Canal here!.")) } else{ t_start.unmark() @@ -326,7 +326,7 @@ class tutorial.chapter_04 extends basic_chapter local way_end = t_end.find_object(mo_way) if (way_end && way_end.get_desc().get_topspeed()==0){ t_end.mark() - label_x.create(c_end, player_x(1), translate("Build Canal here!.")) + label_x.create(c_end, pl_unown, translate("Build Canal here!.")) } else{ t_end.unmark() diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index b1958ec..72a73dd 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -348,7 +348,7 @@ class tutorial.chapter_05 extends basic_chapter if(label.get_text()== "X") t_start.remove_object(player_x(1), mo_label) - label_x.create(t_start, player_x(pl), translate("Place the Road here!.")) + label_x.create(t_start, pl_unown, translate("Place the Road here!.")) } else t_start.remove_object(player_x(1), mo_label) @@ -357,7 +357,7 @@ class tutorial.chapter_05 extends basic_chapter if(label.get_text()== "X") t_end.remove_object(player_x(1), mo_label) - label_x.create(t_end, player_x(pl), translate("Place the Road here!.")) + label_x.create(t_end, pl_unown, translate("Place the Road here!.")) } else t_end.remove_object(player_x(1), mo_label) @@ -392,7 +392,7 @@ class tutorial.chapter_05 extends basic_chapter else if (pot1==1 && pot2==0){ local tile = my_tile(ch5_road_depot.a) if(!tile.find_object(mo_way)){ - label_x.create(ch5_road_depot.a, player_x(pl), translate("Place the Road here!.")) + label_x.create(ch5_road_depot.a, pl_unown, translate("Place the Road here!.")) } else { if (!tile.find_object(mo_depot_road)){ @@ -426,7 +426,7 @@ class tutorial.chapter_05 extends basic_chapter glsw[j]=1 } else - label_x.create(way5_power[j], player_x(pl), translate("Transformer Here!.")) + label_x.create(way5_power[j], pl_unown, translate("Transformer Here!.")) } if( glsw[0]==1 && glsw[1]==1 && glsw[2]==1 && glsw[3]==1){ From 378e805db6aa76a511373158a48a9c23787ebda1 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 26 Jun 2025 20:04:41 +0200 Subject: [PATCH 076/217] FIX rotate error by factorys --- class/class_basic_data.nut | 65 ++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 33d858b..d3b2980 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -48,7 +48,7 @@ function rename_factory_names() { factory_x(f_tile[0].x, f_tile[0].y).set_name(translate(f_name)) - if ( f_tile[0].x == coord_fac_1.x && f_tile[0].y == coord_fac_1.y ) { + if ( search_factory_corner(f_tile, 1) ) { // Timber plantation //translate_objects_list.rawset("fac_1_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -61,43 +61,43 @@ function rename_factory_names() { gui.add_message("factory_data d.rawin: "+d.rawget("c_list")) //factory_data.1.rawset(")*/ } - if ( f_tile[0].x == coord_fac_2.x && f_tile[0].y == coord_fac_2.y ) { + if ( search_factory_corner(f_tile, 2) ) { // Saw mill translate_objects_list.rawset("fac_2_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("2", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_3.x && f_tile[0].y == coord_fac_3.y ) { + if ( search_factory_corner(f_tile, 3) ) { // Construction Wholesaler translate_objects_list.rawset("fac_3_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("3", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_4.x && f_tile[0].y == coord_fac_4.y ) { + if ( search_factory_corner(f_tile, 4) ) { // Oil rig translate_objects_list.rawset("fac_4_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("4", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_5.x && f_tile[0].y == coord_fac_5.y ) { + if ( search_factory_corner(f_tile, 5) ) { // Oil refinery translate_objects_list.rawset("fac_5_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("5", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_6.x && f_tile[0].y == coord_fac_6.y ) { + if ( search_factory_corner(f_tile, 6) ) { // Gas station translate_objects_list.rawset("fac_6_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("6", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_7.x && f_tile[0].y == coord_fac_7.y ) { + if ( search_factory_corner(f_tile, 7) ) { // Coal mine translate_objects_list.rawset("fac_7_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("7", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( f_tile[0].x == coord_fac_8.x && f_tile[0].y == coord_fac_8.y ) { + if ( search_factory_corner(f_tile, 8) ) { // Coal power station translate_objects_list.rawset("fac_8_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -114,9 +114,10 @@ function rename_factory_names() { factory_data.rawin("6"), factory_data.rawin("7"), factory_data.rawin("8") - ] - gui.add_message(player_x(1), "factory_data len: "+factory_data.len()) + ]*/ + gui.add_message(player_x(1), "factory_data len: "+factory_data.len()) + /* gui.add_message(player_x(1), "factory_data rawin 1: "+factory_data.rawin("1")) gui.add_message(player_x(1), "factory_data rawin 2: "+factory_data.rawin("2")) gui.add_message(player_x(1), "factory_data rawin 3: "+factory_data.rawin("3")) @@ -126,7 +127,51 @@ function rename_factory_names() { gui.add_message(player_x(1), "factory_data rawin 7: "+factory_data.rawin("7")) gui.add_message(player_x(1), "factory_data rawin 8: "+factory_data.rawin("8")) */ + gui.add_message(player_x(1), "coord_fac_1: "+coord_to_string(coord_fac_1)) + +} + +/** + * search corner from factory + * + */ +function search_factory_corner(tiles, fac_id) { + local fac_coord = null + switch (fac_id) { + case 1: + fac_coord = coord_fac_1 + break + case 2: + fac_coord = coord_fac_2 + break + case 3: + fac_coord = coord_fac_3 + break + case 4: + fac_coord = coord_fac_4 + break + case 5: + fac_coord = coord_fac_5 + break + case 6: + fac_coord = coord_fac_6 + break + case 7: + fac_coord = coord_fac_7 + break + case 8: + fac_coord = coord_fac_8 + break + } + + + for ( local i = 0; i < tiles.len(); i++ ) { + if ( tiles[i].x == fac_coord.x && tiles[i].y == fac_coord.y ) { + return true + } + } + return false } /* From 34515cdb2a51fc28f87ae7d89d57295b82ad4c35 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 26 Jun 2025 20:08:31 +0200 Subject: [PATCH 077/217] CHG disabled debug messages --- class/class_basic_data.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index d3b2980..244b397 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -115,9 +115,9 @@ function rename_factory_names() { factory_data.rawin("7"), factory_data.rawin("8") ]*/ - +/* gui.add_message(player_x(1), "factory_data len: "+factory_data.len()) - /* + gui.add_message(player_x(1), "factory_data rawin 1: "+factory_data.rawin("1")) gui.add_message(player_x(1), "factory_data rawin 2: "+factory_data.rawin("2")) gui.add_message(player_x(1), "factory_data rawin 3: "+factory_data.rawin("3")) @@ -126,9 +126,9 @@ function rename_factory_names() { gui.add_message(player_x(1), "factory_data rawin 6: "+factory_data.rawin("6")) gui.add_message(player_x(1), "factory_data rawin 7: "+factory_data.rawin("7")) gui.add_message(player_x(1), "factory_data rawin 8: "+factory_data.rawin("8")) - */ - gui.add_message(player_x(1), "coord_fac_1: "+coord_to_string(coord_fac_1)) + gui.add_message(player_x(1), "coord_fac_1: "+coord_to_string(coord_fac_1)) +*/ } /** From aa7e0eb8c59c3b25eb6995b9316d679507c6bb57 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 26 Jun 2025 20:52:02 +0200 Subject: [PATCH 078/217] CHG better code --- class/class_basic_data.nut | 48 ++++++++------------------------------ 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 244b397..6dcb7b3 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -48,7 +48,7 @@ function rename_factory_names() { factory_x(f_tile[0].x, f_tile[0].y).set_name(translate(f_name)) - if ( search_factory_corner(f_tile, 1) ) { + if ( search_factory_corner(f_tile, coord_fac_1) ) { // Timber plantation //translate_objects_list.rawset("fac_1_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -61,43 +61,43 @@ function rename_factory_names() { gui.add_message("factory_data d.rawin: "+d.rawget("c_list")) //factory_data.1.rawset(")*/ } - if ( search_factory_corner(f_tile, 2) ) { + if ( search_factory_corner(f_tile, coord_fac_2) ) { // Saw mill translate_objects_list.rawset("fac_2_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("2", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 3) ) { + if ( search_factory_corner(f_tile, coord_fac_3) ) { // Construction Wholesaler translate_objects_list.rawset("fac_3_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("3", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 4) ) { + if ( search_factory_corner(f_tile, coord_fac_4) ) { // Oil rig translate_objects_list.rawset("fac_4_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("4", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 5) ) { + if ( search_factory_corner(f_tile, coord_fac_5) ) { // Oil refinery translate_objects_list.rawset("fac_5_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("5", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 6) ) { + if ( search_factory_corner(f_tile, coord_fac_6) ) { // Gas station translate_objects_list.rawset("fac_6_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("6", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 7) ) { + if ( search_factory_corner(f_tile, coord_fac_7) ) { // Coal mine translate_objects_list.rawset("fac_7_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("7", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, 8) ) { + if ( search_factory_corner(f_tile, coord_fac_8) ) { // Coal power station translate_objects_list.rawset("fac_8_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -132,38 +132,10 @@ function rename_factory_names() { } /** - * search corner from factory + * search corner from factory/building * */ -function search_factory_corner(tiles, fac_id) { - local fac_coord = null - switch (fac_id) { - case 1: - fac_coord = coord_fac_1 - break - case 2: - fac_coord = coord_fac_2 - break - case 3: - fac_coord = coord_fac_3 - break - case 4: - fac_coord = coord_fac_4 - break - case 5: - fac_coord = coord_fac_5 - break - case 6: - fac_coord = coord_fac_6 - break - case 7: - fac_coord = coord_fac_7 - break - case 8: - fac_coord = coord_fac_8 - break - } - +function search_factory_corner(tiles, fac_coord) { for ( local i = 0; i < tiles.len(); i++ ) { if ( tiles[i].x == fac_coord.x && tiles[i].y == fac_coord.y ) { From 4d5f8ef27f895ccf81b500847a64ab0f332fec6b Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Thu, 26 Jun 2025 20:35:24 -0400 Subject: [PATCH 079/217] Fix Text labels in electrified rails --- class/class_basic_chapter.nut | 7 +++++-- class/class_chapter_03.nut | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 262bde3..4d72086 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1317,10 +1317,13 @@ class basic_chapter if (!way) return res if (obj){ + if (obj == mo_wayobj){ + if(!way.is_electrified()){ way.mark() - if (!tun) + + if (coora.z >= square_x(coora.x,coora.y).get_ground_tile().z) label_x.create(coora, pl_unown, translate("Here")) return res } @@ -1507,7 +1510,7 @@ class basic_chapter if (obj == mo_wayobj){ if(!way.is_electrified()){ way.mark() - if (!tun) + if (coora.z >= square_x(coora.x,coora.y).get_ground_tile().z) label_x.create(coora, pl_unown, translate("Here")) return res diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 3291554..0aedce6 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1267,13 +1267,17 @@ class tutorial.chapter_03 extends basic_chapter } if (pot0==1 && pot1==0){ chapter_sub_step = 1 // sub step finish - local way = my_tile(ch3_rail_depot3.b).find_object(mo_way) + local tile = my_tile(ch3_rail_depot3.b) + local way = tile.find_object(mo_way) if (way.is_electrified()){ + tile.remove_object(player_x(1), mo_label) way.unmark() pot1= 1 } - else + else{ + label_x.create(ch3_rail_depot3.b, pl_unown, translate("Here")) way.mark() + } } if (pot1==1 && pot2==0){ chapter_sub_step = 2 // sub step finish From 237b29bc137494b147b4276041a972f269f6678b Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 27 Jun 2025 06:55:32 +0200 Subject: [PATCH 080/217] FIX missing parameter --- class/class_chapter_03.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 0aedce6..3ae0f3b 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1624,7 +1624,7 @@ class tutorial.chapter_03 extends basic_chapter } else if (tool_id==4108){ if (stop_flag[0]==0) - return format(translate("Select station No.%d"),1)+" ("+coord(st3_list[0].x, st3_list[0].y).tostring()+".)" + return format(translate("Select station No.%d"),1)+" ("+coord(way2_fac2_fac3[0].x, way2_fac2_fac3[0].y).tostring()+".)" } //Enrutar vehiculos (estacion nr2) if (building && pos.x>=way2_fac2_fac3[4].x && pos.y>=way2_fac2_fac3[4].y && pos.x<=way2_fac2_fac3[5].x && pos.y<=way2_fac2_fac3[5].y){ @@ -1634,17 +1634,17 @@ class tutorial.chapter_03 extends basic_chapter return null } if (stop_flag[0]==0) - return translate("Select the other station first")+" ("+coord(st3_list[0].x, st3_list[0].y).tostring()+".)" + return translate("Select the other station first")+" ("+coord(way2_fac2_fac3[0].x, way2_fac2_fac3[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } else if (tool_id==4108){ if (stop_flag[0]==0) - return translate("Select the other station first")+" ("+coord(st3_list[0].x, st3_list[0].y).tostring()+".)" + return translate("Select the other station first")+" ("+coord(way2_fac2_fac3[0].x, way2_fac2_fac3[0].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==0) - return format(translate("Select station No.%d"),2)+" ("+coord(st4_list[0].x, st4_list[0].y).tostring()+".)" + return format(translate("Select station No.%d"),2)+" ("+coord(way2_fac2_fac3[5].x, way2_fac2_fac3[5].y).tostring()+".)" else if (stop_flag[0]==1 && stop_flag[1]==1) return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" From 44a556123d195d8d5497eb4a5377d7b303fecbe3 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 27 Jun 2025 20:01:09 +0200 Subject: [PATCH 081/217] CHG rename funktion better name --- class/class_basic_data.nut | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 6dcb7b3..d672983 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -48,7 +48,7 @@ function rename_factory_names() { factory_x(f_tile[0].x, f_tile[0].y).set_name(translate(f_name)) - if ( search_factory_corner(f_tile, coord_fac_1) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_1) ) { // Timber plantation //translate_objects_list.rawset("fac_1_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -61,43 +61,43 @@ function rename_factory_names() { gui.add_message("factory_data d.rawin: "+d.rawget("c_list")) //factory_data.1.rawset(")*/ } - if ( search_factory_corner(f_tile, coord_fac_2) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_2) ) { // Saw mill translate_objects_list.rawset("fac_2_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("2", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_3) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_3) ) { // Construction Wholesaler translate_objects_list.rawset("fac_3_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("3", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_4) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_4) ) { // Oil rig translate_objects_list.rawset("fac_4_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("4", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_5) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_5) ) { // Oil refinery translate_objects_list.rawset("fac_5_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("5", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_6) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_6) ) { // Gas station translate_objects_list.rawset("fac_6_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("6", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_7) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_7) ) { // Coal mine translate_objects_list.rawset("fac_7_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() factory_data.rawset("7", {name = translate(f_name), c_list = t, c = coord(f_tile[0].x, f_tile[0].y)}) } - if ( search_factory_corner(f_tile, coord_fac_8) ) { + if ( search_tile_in_tiles(f_tile, coord_fac_8) ) { // Coal power station translate_objects_list.rawset("fac_8_name", translate(f_name)) local t = factory_x(f_tile[0].x, f_tile[0].y).get_tile_list() @@ -132,13 +132,16 @@ function rename_factory_names() { } /** - * search corner from factory/building + * check tile in tile array + * + * tiles = tile array + * coord = tile as coord * */ -function search_factory_corner(tiles, fac_coord) { +function search_tile_in_tiles(tiles, coord) { for ( local i = 0; i < tiles.len(); i++ ) { - if ( tiles[i].x == fac_coord.x && tiles[i].y == fac_coord.y ) { + if ( tiles[i].x == coord.x && tiles[i].y == coord.y ) { return true } } From f952f0487f7cc9bcd85f4ede3904ec2b7aa5e293 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 27 Jun 2025 20:07:55 +0200 Subject: [PATCH 082/217] CHG move function search_tile_in_tiles() to class_basic_chapter.nut --- class/class_basic_chapter.nut | 17 +++++++++++++++++ class/class_basic_data.nut | 18 ------------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 4d72086..0483874 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3420,4 +3420,21 @@ function test_tile_is_empty(t_tile) { return false } +/** + * check tile in tile array + * + * tiles = tile array + * coord = tile as coord + * + */ +function search_tile_in_tiles(tiles, coord) { + + for ( local i = 0; i < tiles.len(); i++ ) { + if ( tiles[i].x == coord.x && tiles[i].y == coord.y ) { + return true + } + } + + return false +} // END OF FILE diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index d672983..6a203fb 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -131,24 +131,6 @@ function rename_factory_names() { */ } -/** - * check tile in tile array - * - * tiles = tile array - * coord = tile as coord - * - */ -function search_tile_in_tiles(tiles, coord) { - - for ( local i = 0; i < tiles.len(); i++ ) { - if ( tiles[i].x == coord.x && tiles[i].y == coord.y ) { - return true - } - } - - return false -} - /* * translate objects * From e0e8b59b3e2852fab4de327c0948912c4eed5744 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Tue, 1 Jul 2025 10:45:11 -0400 Subject: [PATCH 083/217] Fix error with undefined search_tile_in_tiles() --- scenario.nut | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/scenario.nut b/scenario.nut index fce05ad..2f72efc 100644 --- a/scenario.nut +++ b/scenario.nut @@ -5,6 +5,13 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files +const version = 2001 +scenario_name <- "Tutorial Scenario" +scenario.short_description = scenario_name +scenario.author = "Yona-TYT & Andarix" +scenario.version = (version / 1000) + "." + ((version % 1000) / 100) + "." + ((version % 100) / 10) + (version % 10) +scenario.translation <- ttext("Translator") + include("set_data") // include set data switch (pak_name) { case "pak64": @@ -17,24 +24,26 @@ include("set_data") // include set data include(nut_path+"class_basic_coords_p128") // include coords def pak128 break } -include(nut_path+"class_basic_data") // include class for object data -translate_objects_list <- {} // translate list -translate_objects() // add objects to translate list -const version = 2001 -scenario_name <- "Tutorial Scenario" -scenario.short_description = scenario_name -scenario.author = "Yona-TYT & Andarix" -scenario.version = (version / 1000) + "." + ((version % 1000) / 100) + "." + ((version % 100) / 10) + (version % 10) -scenario.translation <- ttext("Translator") - -resul_version <- {pak= false , st = false} +chapter <- null // used later for class +chapter_max <- 7 // amount of chapter +select_option <- { x = 0, y = 0, z = 1 } // place of station to control name +select_option_halt <- null // placeholder for halt_x +tutorial <- {} // placeholder for all chapter CLASS persistent.version <- version // stores version of script persistent.select <- null // stores user selection persistent.chapter <- 1 // stores chapter number persistent.step <- 1 // stores step number of chapter +include(nut_path+"class_basic_gui") // include class for tools disabled/enabled +include(nut_path+"class_basic_data") // include class for object data +include(nut_path+"class_basic_chapter") // include class for basic chapter structure +translate_objects_list <- {} // translate list +translate_objects() // add objects to translate list + +resul_version <- {pak= false , st = false} + persistent.status <- {chapter=1, step=1} // save step y chapter script_test <- true @@ -92,14 +101,11 @@ gui_delay <- true //delay for open win fail_num <- 10 //numr for the count of try fail_count <- 1 //if tool fail more of fail_num try - //Schedule activate active_sch_check <- false - simu_version <- "124.3" - current_st <- "0" - -include(nut_path+"class_basic_gui") // include class for tools disabled/enabled +simu_version <- "124.3" +current_st <- "0" // table containing all system_types all_systemtypes <- [st_flat, st_elevated, st_runway, st_tram] @@ -107,13 +113,6 @@ all_systemtypes <- [st_flat, st_elevated, st_runway, st_tram] // Complemento para obtener tiempo de espera tick_wait <- 16 -chapter <- null // used later for class -chapter_max <- 7 // amount of chapter -select_option <- { x = 0, y = 0, z = 1 } // place of station to control name -select_option_halt <- null // placeholder for halt_x -tutorial <- {} // placeholder for all chapter CLASS - - //returns pakset name (lower case) function get_set_name(name) { @@ -289,7 +288,6 @@ function get_integral(tx) //Check version and pakset name resul_version = string_analyzer() include(nut_path+"class_basic_convoys") // include class for detect eliminated convoys - include(nut_path+"class_basic_chapter") // include class for basic chapter structure include(nut_path+"class_messages") // include def messages texts include(nut_path+"astar") // .. route search for way building etc From 3b4e74fb305d798dd17b81fd4b8edc18bb0c1233 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Tue, 1 Jul 2025 11:00:28 -0400 Subject: [PATCH 084/217] Fix error with undefined var --- class/class_basic_chapter.nut | 2 +- class/class_chapter_05.nut | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 0483874..caa2ece 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2802,7 +2802,7 @@ class basic_chapter function delete_stop_ex(nr, list, pos) { for(local j=0;j Date: Thu, 3 Jul 2025 23:53:49 +0200 Subject: [PATCH 085/217] FIX missing variables --- class/class_chapter_03.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 3ae0f3b..9c738a3 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1619,7 +1619,7 @@ class tutorial.chapter_03 extends basic_chapter return null } else - return translate("Select the other station")+" ("+coord(st4_list[0].x, st4_list[0].y).tostring()+".)" + return translate("Select the other station")+" ("+coord(way2_fac2_fac3[5].x, way2_fac2_fac3[5].y).tostring()+".)" } } else if (tool_id==4108){ From 7d5eca682ecffc83be32058d2f409d081a722c80 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 23 Jul 2025 20:47:37 -0400 Subject: [PATCH 086/217] Fix inconsistent layer values --- class/class_chapter_03.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 9c738a3..e346643 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -304,7 +304,7 @@ class tutorial.chapter_03 extends basic_chapter if (glsw[j]==0){ c = coord3d(c.x, c.y, c_z) local link = c.href("("+c.tostring()+")") - local layer = translate("Layer level")+" = "+(way3_tun_list[0].z)+"" + local layer = translate("Layer level")+" = "+(way3_tun_list[j].z)+"" tx_list += ttext("--> " + format("[%d] %s %s
", j+1, link, layer)) text.lev = way3_tun_list[0].z text.tunn = link @@ -315,7 +315,7 @@ class tutorial.chapter_03 extends basic_chapter local link = c.href("("+c.tostring()+")") local tx_ok = translate("OK") local tx_coord = "("+coord(way3_tun_list[j].x, way3_tun_list[j].y).tostring()+","+c_z+")" - local layer = translate("Layer level")+" = "+(way3_tun_list[0].z)+"" + local layer = translate("Layer level")+" = "+(way3_tun_list[j].z)+"" tx_list += ttext(""+format("[%d] %s", j+1, tx_coord+" "+layer+" "+tx_ok+"
")) text.lev = way3_tun_list[0].z text.tunn = link From 1288534832cbace97fe7fa61d5fbc8dea22bba2c Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 23 Jul 2025 21:18:45 -0400 Subject: [PATCH 087/217] Fix Syntax error --- class/class_basic_coords_p128.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 5f08109..b69e814 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -243,10 +243,10 @@ way3_cate_list1 <- [ {a = coord3d(55,198,11), b = way3_tun_coord[0], dir = 0, tu ] // dock raffenery - cannal stop - cannel way build -way4_cannal <- [coord3d(140,194,-3), coord3d(114,194,1), coord3d(127,193,-1)} +way4_cannal <- [coord3d(140,194,-3), coord3d(114,194,1), coord3d(127,193,-1)] c_cannel_lim <- {a = coord(114, 193), b = coord(140, 194)} -way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(132,211,0))]//{, dir = 2} +way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(132,211,0)]//{, dir = 2} /** * chapter 5 From 90de54c2df41a4992e9a6868e857d3d231bcd8df Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 24 Jul 2025 06:37:13 +0200 Subject: [PATCH 088/217] FIX tunnel coord --- class/class_basic_coords_p128.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index b69e814..628ae81 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -206,7 +206,7 @@ limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} // start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end -way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(95,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] +way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} From 468c5b30c96d7c13816891b27f1b691c233d47e5 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 2 Jan 2026 13:35:27 +0100 Subject: [PATCH 089/217] CHG chapter 7 all slope tools allowed --- class/class_basic_gui.nut | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/class/class_basic_gui.nut b/class/class_basic_gui.nut index d7caaf3..e2fa9dc 100644 --- a/class/class_basic_gui.nut +++ b/class/class_basic_gui.nut @@ -45,13 +45,19 @@ function general_disabled_tools( pl ) { tool_increase_industry, tool_merge_stop, dialog_enlarge_map, - tool_raise_land, - tool_lower_land, - tool_restoreslope, - 4143, //generate script + 4143, //generate script 4144 //pipette ] + // chapter 7 all slope tools allowed + if ( persistent.chapter < 7 ) { + local slope_tools = [ tool_raise_land, + tool_lower_land, + tool_restoreslope + ] + unused_tools.extend(slope_tools) + } + local pak64_tools = [ 0x8004, 0x8005, 0x4022, tool_set_climate ] local pak64german_tools = [ 0x800b, 0x800c, 0x800d, 0x8013, 0x8014, 0x8015, 0x8023, 0x8025, 0x8027, 0x8007, 0x8006 ] local pak128_tools = [0x8004, 0x8005, 0x8006, 0x800a, 0x4022, tool_set_climate ] @@ -1088,7 +1094,7 @@ function chapter_step_enabled_tools( pl ) { case 5: rules.clear() break - } + } break From 812f9ed06a6de02543a534f8ede1e4e15d962fe3 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 2 Jan 2026 14:40:56 +0100 Subject: [PATCH 090/217] FIX schedule error chapter 2 step F --- class/class_chapter_02.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 5eb5767..77f5c11 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -472,7 +472,7 @@ class tutorial.chapter_02 extends basic_chapter local c_dep = this.my_tile(city1_road_depot) local line_name = line2_name //"Test 2" - set_convoy_schedule(pl,c_dep, gl_wt, line_name) + //set_convoy_schedule(pl,c_dep, gl_wt, line_name) local id_start = 1 local id_end = 3 From d4c3d02703c8d1c4bc70111b9ac83ee7f9fc3881 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 14:35:05 +0100 Subject: [PATCH 091/217] CHG check finish step befor automatic jump to next step --- class/class_basic_chapter.nut | 45 ++----------------- class/class_chapter_01.nut | 14 +++--- class/class_chapter_02.nut | 18 ++++---- class/class_chapter_03.nut | 58 ++++++++++++------------ class/class_chapter_04.nut | 20 +++++---- class/class_chapter_05.nut | 18 ++++---- class/class_chapter_06.nut | 8 ++-- class/class_chapter_07.nut | 8 ++-- scenario.nut | 83 ++++++++++++++++++++++++++++++++--- 9 files changed, 152 insertions(+), 120 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index caa2ece..2fb4c3c 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -99,45 +99,6 @@ class basic_chapter return text.tostring() } - /* - * calculate percentage chapter complete - * - * ch_steps = count chapter steps - * step = actual chapter step - * sup_steps = count sub steps in a chapter step - * sub_step = actual sub step in a chapter step - * - * no sub steps in chapter step, then set sub_steps and sub_step to 0 - * - * This function is called during a step() and can alter the map - * - */ - function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) - { - local percentage_step = 100 / ch_steps - - local percentage = percentage_step * ch_step - - local percentage_sub_step = 0 - if ( sub_steps > 0 && sub_step > 0) { - percentage_sub_step = (percentage_step / sub_steps ) * sub_step - percentage += percentage_sub_step - } - - if ( ch_step <= ch_steps ) { - percentage -= percentage_step - } - - //gui.add_message("ch_steps "+ch_steps+" ch_step "+ch_step+" ch_steps "+sub_steps+" sub_step "+sub_step) - - // tutorial finish - if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { - percentage = 100 - } - - return percentage - } - function is_chapter_completed(pl) { local percentage = 0 @@ -517,7 +478,7 @@ class basic_chapter function give_ttext(text,coord) // coord=coord3d or cube={ne,se} ttext with {pos} or {cube} { - local result = ttext(text) + local result = ttext(text) local modus = true try { coord.x } catch(coord) { modus = false } if (modus) @@ -557,13 +518,13 @@ class basic_chapter function cube_to_text(cube) { return "("+cube.nw.x+","+cube.nw.y+","+cube.nw.z+" - "+cube.se.x+","+cube.se.y+","+cube.se.z+")" - } + } function pos_to_text(pos) { local cd = coord(pos.x,pos.y) return "("+cd.tostring()+")" - } + } function my_tile(coord) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 3403b85..5e1da41 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -74,10 +74,10 @@ class tutorial.chapter_01 extends basic_chapter } function is_chapter_completed(pl) { - local chapter_steps = 4 + persistent.ch_max_steps = 4 local chapter_step = persistent.step - local chapter_sub_steps = 0 // count all sub steps - local chapter_sub_step = 0 // actual sub step + persistent.ch_max_sub_steps = 0 // count all sub steps + persistent.ch_sub_step = 0 // actual sub step local txt=c_test.tostring() switch (this.step) { @@ -85,7 +85,7 @@ class tutorial.chapter_01 extends basic_chapter if (pot0 == 1) { this.next_step() } - //return chapter_percentage(chapter_steps, 1, 0, 0) + //return chapter_percentage(persistent.ch_max_steps, 1, 0, 0) break case 2: @@ -97,7 +97,7 @@ class tutorial.chapter_01 extends basic_chapter label_bord(city1_limit1.a, city1_limit1.b, opt, del, text) this.next_step() } - //return chapter_percentage(chapter_steps, 2, 0, 0) + //return chapter_percentage(persistent.ch_max_steps, 2, 0, 0) break case 3: @@ -143,7 +143,7 @@ class tutorial.chapter_01 extends basic_chapter comm_script = false this.next_step() } - //return chapter_percentage(chapter_steps, 3, 0, 0) + //return chapter_percentage(persistent.ch_max_steps, 3, 0, 0) break case 4: local next_mark = true @@ -169,7 +169,7 @@ class tutorial.chapter_01 extends basic_chapter break } - local percentage = chapter_percentage(chapter_steps, chapter_step, chapter_sub_steps, chapter_sub_step) + local percentage = chapter_percentage(persistent.ch_max_steps, chapter_step, persistent.ch_max_sub_steps, persistent.ch_sub_step) return percentage } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 77f5c11..345c28b 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -277,10 +277,10 @@ class tutorial.chapter_02 extends basic_chapter save_glsw() save_pot() - local chapter_steps = 8 + persistent.ch_max_steps = 8 local chapter_step = persistent.step - local chapter_sub_steps = 0 // count all sub steps - local chapter_sub_step = 0 // actual sub step + persistent.ch_max_sub_steps = 0 // count all sub steps + persistent.ch_sub_step = 0 // actual sub step switch (this.step) { case 1: @@ -468,7 +468,7 @@ class tutorial.chapter_02 extends basic_chapter break case 6: - chapter_sub_steps = 2 + persistent.ch_max_sub_steps = 2 local c_dep = this.my_tile(city1_road_depot) local line_name = line2_name //"Test 2" @@ -486,7 +486,7 @@ class tutorial.chapter_02 extends basic_chapter //gui.add_message("current_cov "+current_cov+" cov_nr "+cov_nr+" all_result "+all_result+" all_result.cov "+all_result.cov) if ( cov_nr>=1 ) { - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish } if (current_cov==ch2_cov_lim2.b){ @@ -503,7 +503,7 @@ class tutorial.chapter_02 extends basic_chapter break case 7: - chapter_sub_steps = 3 + persistent.ch_max_sub_steps = 3 if (pot0==0){ @@ -536,7 +536,7 @@ class tutorial.chapter_02 extends basic_chapter } else if (pot1==1 && pot2==0){ - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish //Comprueba la conexion de la via local coora = coord3d(way1_coords.a.x,way1_coords.a.y,way1_coords.a.z) local coorb = coord3d(way1_coords.b.x,way1_coords.b.y,way1_coords.b.z) @@ -571,7 +571,7 @@ class tutorial.chapter_02 extends basic_chapter } else if (pot2==1) { - chapter_sub_step = 2 // sub step finish + persistent.ch_sub_step = 2 // sub step finish local c_dep = this.my_tile(city1_road_depot) local line_name = line3_name //"Test 3" set_convoy_schedule(pl, c_dep, gl_wt, line_name) @@ -645,7 +645,7 @@ class tutorial.chapter_02 extends basic_chapter //return 100 break } - local percentage = chapter_percentage(chapter_steps, chapter_step, chapter_sub_steps, chapter_sub_step) + local percentage = chapter_percentage(persistent.ch_max_steps, chapter_step, persistent.ch_max_sub_steps, persistent.ch_sub_step) return percentage } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index e346643..284f000 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -525,10 +525,10 @@ class tutorial.chapter_03 extends basic_chapter save_pot() save_glsw() - local chapter_steps = 11 + persistent.ch_max_steps = 11 local chapter_step = persistent.step - local chapter_sub_steps = 0 // count all sub steps - local chapter_sub_step = 0 // actual sub step + persistent.ch_max_sub_steps = 0 // count all sub steps + persistent.ch_sub_step = 0 // actual sub step local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") @@ -536,7 +536,7 @@ class tutorial.chapter_03 extends basic_chapter switch (this.step) { case 1: - chapter_sub_steps = 2 + persistent.ch_max_sub_steps = 2 local next_mark = false if (pot0==0 || pot1 == 0) { local list = fac_2.c_list @@ -561,7 +561,7 @@ class tutorial.chapter_03 extends basic_chapter if(next_mark && pot2 == 1) { pot3=1 } - chapter_sub_step = 1 + persistent.ch_sub_step = 1 } else if (pot3==1 && pot4==0) { this.next_step() @@ -569,7 +569,7 @@ class tutorial.chapter_03 extends basic_chapter //return 5 break; case 2: - chapter_sub_steps = 3 + persistent.ch_max_sub_steps = 3 //Primer tramo de rieles if (pot0==0){ local limi = my_tile(way2_fac1_fac2[1]) @@ -639,7 +639,7 @@ class tutorial.chapter_03 extends basic_chapter } //Para el puente else if (pot0==1&&pot1==0) { - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(bridge2_coords.a) if ((!tile.find_object(mo_bridge))){ label_x.create(tile, pl_unown, translate("Build a Bridge here!.")) @@ -657,7 +657,7 @@ class tutorial.chapter_03 extends basic_chapter } //Segundo tramo de rieles else if (pot1==1 && pot2==0){ - chapter_sub_step = 2 // sub step finish + persistent.ch_sub_step = 2 // sub step finish local limi = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) local tile1 = limi if (r_way.c.y > limi.y){ @@ -705,7 +705,7 @@ class tutorial.chapter_03 extends basic_chapter case 3: glresult = null - chapter_sub_steps = 2 + persistent.ch_max_sub_steps = 2 local passa = good_alias.passa local mail = good_alias.mail @@ -724,7 +724,7 @@ class tutorial.chapter_03 extends basic_chapter } if (pot0==1 && pot1==0){ - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish //Estaciones de la Fabrica local pl_nr = 1 @@ -740,7 +740,7 @@ class tutorial.chapter_03 extends basic_chapter //return 15 break case 4: - chapter_sub_steps = 3 + persistent.ch_max_sub_steps = 3 local tile = my_tile(ch3_rail_depot1.b) if(pot0==0){ local c_list = [my_tile(ch3_rail_depot1.b), my_tile(ch3_rail_depot1.a)] @@ -769,7 +769,7 @@ class tutorial.chapter_03 extends basic_chapter } else if(pot0==1 && pot1==0){ - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish local label = tile.find_object(mo_label) if(!tile.find_object(mo_depot_rail)){ label.set_text(translate("Build Train Depot here!.")) @@ -781,7 +781,7 @@ class tutorial.chapter_03 extends basic_chapter } else if ( pot0==1 && pot1==1 && pot2==0 ) { - chapter_sub_step = 2 // sub step finish + persistent.ch_sub_step = 2 // sub step finish } else if(pot2==1){ @@ -818,7 +818,7 @@ class tutorial.chapter_03 extends basic_chapter //return 30 break case 6: - chapter_sub_steps = 5 + persistent.ch_max_sub_steps = 5 //Primer tramo de rieles if (pot0==0){ @@ -877,7 +877,7 @@ class tutorial.chapter_03 extends basic_chapter } //Para el tunel else if (pot0==1 && pot1==0){ - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(way2_fac2_fac3[2]) if ((!tile.find_object(mo_tunnel))){ label_x.create(way2_fac2_fac3[2], pl_unown, translate("Place a Tunnel here!.")) @@ -904,7 +904,7 @@ class tutorial.chapter_03 extends basic_chapter } //Segundo tramo de rieles else if (pot1==1 && pot2==0){ - chapter_sub_step = 2 // sub step finish + persistent.ch_sub_step = 2 // sub step finish local limi = way2_fac2_fac3[4] local tile1 = my_tile(limi) local tile2 = my_tile(way2_fac2_fac3[5]) @@ -950,7 +950,7 @@ class tutorial.chapter_03 extends basic_chapter //Text label para las estaciones else if (pot2==1 && pot3==0){ - chapter_sub_step = 3 // sub step finish + persistent.ch_sub_step = 3 // sub step finish glresult = null local passa = good_alias.passa local mail = good_alias.mail @@ -967,7 +967,7 @@ class tutorial.chapter_03 extends basic_chapter } } else if (pot3==1 && pot4==0){ - chapter_sub_step = 4 // sub step finish + persistent.ch_sub_step = 4 // sub step finish glresult = null local passa = good_alias.passa local mail = good_alias.mail @@ -1056,7 +1056,7 @@ class tutorial.chapter_03 extends basic_chapter //return 40 break case 8: - chapter_sub_steps = 5 + persistent.ch_max_sub_steps = 5 //Para el tramo de via if (pot0==0){ local coora = coord3d(way3_cy1_cy3.a.x, way3_cy1_cy3.a.y, way3_cy1_cy3.a.z) @@ -1072,7 +1072,7 @@ class tutorial.chapter_03 extends basic_chapter } //Para el puente else if (pot0==1 && pot1==0){ - chapter_sub_step = 1 // sub step finish + persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(bridge3_coords.a) if ((!tile.find_object(mo_bridge))){ label_x.create(bridge3_coords.a, pl_unown, translate("Build a Bridge here!.")) @@ -1090,7 +1090,7 @@ class tutorial.chapter_03 extends basic_chapter } //Para la entrada del tunel else if (pot1==1 && pot2==0){ - chapter_sub_step = 2 // sub step finish + persistent.ch_sub_step = 2 // sub step finish local t_tunn = my_tile(way3_tun_coord[0]) if (!t_tunn.find_object(mo_tunnel)){ @@ -1121,7 +1121,7 @@ class tutorial.chapter_03 extends basic_chapter } //Para conectar las dos entradas del tunel else if (pot2==1 && pot3==0){ - chapter_sub_step = 3 // sub step finish + persistent.ch_sub_step = 3 // sub step finish local coora = coord3d(way3_tun_coord[0].x, way3_tun_coord[0].y, way3_tun_coord[0].z) local coorb = coord3d(way3_tun_coord[2].x, way3_tun_coord[2].y, way3_tun_coord[2].z) local obj = false @@ -1138,7 +1138,7 @@ class tutorial.chapter_03 extends basic_chapter local squ = square_x(r_way.c.x, r_way.c.y) local z = squ.get_ground_tile().z if(z == r_way.c.z) { - chapter_sub_step = 4 // sub step finish + persistent.ch_sub_step = 4 // sub step finish //return 43 break } @@ -1174,7 +1174,7 @@ class tutorial.chapter_03 extends basic_chapter break case 9: - chapter_sub_steps = 2 + persistent.ch_max_sub_steps = 2 //Para las vias if (pot0==0){ for(local j=0;j 0 && sub_step > 0) { + percentage_sub_step = (percentage_step / sub_steps ) * sub_step + percentage += percentage_sub_step + } + + if ( ch_step <= ch_steps ) { + percentage -= percentage_step + } + + //gui.add_message("ch_steps "+ch_steps+" ch_step "+ch_step+" ch_steps "+sub_steps+" sub_step "+sub_step) + + // tutorial finish + if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { + percentage = 100 + } + + return percentage + } + /** * This function check whether finished or not * Is runs in a step, so it can alter the map @@ -599,15 +643,40 @@ function is_scenario_completed(pl) chapter.step = persistent.step - if (pending_call) { - // since we cannot alter the map in a sync_step - pending_call = false - scr_jump = true // we are during a jump ... - chapter.script_text() - scr_jump = false + local percentage = chapter.is_chapter_completed(pl) + + // check for automatic step + if ( pending_call ) { + //gui.add_message("check automaric jump : percentage " + percentage) + //gui.add_message(" : chapter.step " + chapter.step) + //gui.add_message(" : persistent.ch_max_sub_steps " + persistent.ch_max_sub_steps) + //gui.add_message(" : persistent.ch_sub_step " + persistent.ch_sub_step) + + local percentage_step = chapter_percentage(persistent.ch_max_steps, chapter.step, persistent.ch_max_sub_steps, persistent.ch_sub_step) + //gui.add_message(" : percentage_step " + percentage_step) + + local jump_step = false + if ( chapter.step == 1 && percentage >= 0 ) { + jump_step = true + } else if ( percentage >= 100 ) { + jump_step = true + } else if ( percentage == percentage_step ) { + jump_step = true + } + + if ( jump_step ){ + + // since we cannot alter the map in a sync_step + pending_call = false + scr_jump = true // we are during a jump ... + chapter.script_text() + scr_jump = false + + } + + } - local percentage = chapter.is_chapter_completed(pl) gl_percentage = percentage persistent.gl_percentage = gl_percentage From 338587f1357036dd44eb885f0218dd7146308607 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 22:24:51 +0100 Subject: [PATCH 092/217] UPD translate file --- de/chapter_02/07_4-4.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de/chapter_02/07_4-4.txt b/de/chapter_02/07_4-4.txt index 4f77072..811241a 100644 --- a/de/chapter_02/07_4-4.txt +++ b/de/chapter_02/07_4-4.txt @@ -1 +1 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Jetzt müssen Sie dem Konvoi folgen.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Fahrzeug befindet sich bei: {covpos}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Jetzt müssen Sie dem Konvoi folgen.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters .

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Um zum nächsten Schritt zu gelangen, folgen Sie dem Fahrzeug.

Das Fahrzeug befindet sich bei: {covpos}

Das Tutorial geht zum nächsten Schritt über, wenn Sie dem Konvoi folgen.

\ No newline at end of file From c9c54dbe52ccd947b011b1dad94da3dd294226cf Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 22:37:44 +0100 Subject: [PATCH 093/217] FIX schedule error not water schedule allowed --- class/class_chapter_05.nut | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 04f486b..a7001f3 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -767,13 +767,14 @@ class tutorial.chapter_05 extends basic_chapter function is_schedule_allowed(pl, schedule) { local result=null // null is equivalent to 'allowed' - if ( (pl == 0) && (schedule.waytype != wt_road) ) - result = translate("Only road schedules allowed") local nr = schedule.entries.len() switch (this.step) { case 2: + if ( (pl == 0) && (schedule.waytype != wt_road) ) + result = translate("Only road schedules allowed") + local selc = 0 local load = veh1_load local time = veh1_wait @@ -784,6 +785,9 @@ class tutorial.chapter_05 extends basic_chapter break case 4: if (current_cov> ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b){ + if ( (pl == 0) && (schedule.waytype != wt_road) ) + result = translate("Only road schedules allowed") + local selc = 0 local load = veh2_load local time = veh2_wait @@ -795,6 +799,9 @@ class tutorial.chapter_05 extends basic_chapter } } else if (current_cov> ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b){ + if ( (pl == 0) && (schedule.waytype != wt_water) ) + result = translate("Only water schedules allowed") + local selc = 0 local load = veh3_load local time = veh3_wait From 4d819fa3895694ed9745407a575274bf058cd941 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 23:04:10 +0100 Subject: [PATCH 094/217] FIX error by bridge build automatic step --- class/class_chapter_02.nut | 9 +++++++-- class/class_chapter_03.nut | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 345c28b..33f29c5 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -397,6 +397,11 @@ class tutorial.chapter_02 extends basic_chapter } local all_result = checks_convoy_schedule(convoy, pl) sch_cov_correct = all_result.res == null ? true : false + + if(!all_result.cov ){ + reset_glsw() + } + } if (cov_valid && current_cov == ch2_cov_lim1.b){ @@ -472,7 +477,7 @@ class tutorial.chapter_02 extends basic_chapter local c_dep = this.my_tile(city1_road_depot) local line_name = line2_name //"Test 2" - //set_convoy_schedule(pl,c_dep, gl_wt, line_name) + set_convoy_schedule(pl, c_dep, gl_wt, line_name) local id_start = 1 local id_end = 3 @@ -1091,7 +1096,7 @@ class tutorial.chapter_02 extends basic_chapter tile = my_tile(bridge1_coords.b) tile.remove_object(player_x(1), mo_label) local t = command_x(tool_build_bridge) - t.set_flags(2) + local err = t.work(player_x(pl), my_tile(bridge1_coords.a), my_tile(bridge1_coords.b), sc_bridge_name) } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 284f000..be82cd9 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2161,7 +2161,7 @@ class tutorial.chapter_03 extends basic_chapter t_start.remove_object(player_x(1), mo_label) local t = command_x(tool_build_bridge) - t.set_flags(2) + local err = t.work(player, t_start, t_end, sc_bridge_name) } //Segundo tramo de rieles @@ -2483,7 +2483,7 @@ class tutorial.chapter_03 extends basic_chapter t_start.remove_object(player_x(1), mo_label) local t = command_x(tool_build_bridge) - t.set_flags(2) + local err = t.work(player, t_start, t_end, sc_bridge_name) pot1=1 } From 30c931907d6eaa3312b6d4526a48a79438ecc466 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 23:08:14 +0100 Subject: [PATCH 095/217] FIX schedule errors chapter 5 --- class/class_chapter_05.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index a7001f3..ae5d58b 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -794,7 +794,7 @@ class tutorial.chapter_05 extends basic_chapter local c_list = city1_post_halts result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ - local line_name = line1_name + local line_name = line2_name update_convoy_schedule(pl, wt_road, line_name, schedule) } } From f6c53d02d17205b0c51904d68c9d42168bbddd9a Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 23:38:55 +0100 Subject: [PATCH 096/217] FIX waytype ba schedule check --- class/class_chapter_06.nut | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index cb14a8a..6a80055 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -570,6 +570,9 @@ class tutorial.chapter_06 extends basic_chapter local result=null // null is equivalent to 'allowed' switch (this.step) { case 2: + if ( schedule.waytype != wt_air ) + result = translate("Only road schedules allowed") + reset_glsw() local selc = 0 @@ -579,12 +582,13 @@ class tutorial.chapter_06 extends basic_chapter result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result == null){ local line_name = line1_name - update_convoy_schedule(pl, wt_road, line_name, schedule) + update_convoy_schedule(pl, wt_air, line_name, schedule) } break case 3: if ( schedule.waytype != wt_road ) result = translate("Only road schedules allowed") + local selc = 0 local load = veh1_load local time = veh1_wait From 15b7ce13636b93213ed74bbf4689a3ccb72510e4 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 3 Jan 2026 23:46:08 +0100 Subject: [PATCH 097/217] FIX wrong message --- class/class_chapter_06.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 6a80055..9d6c987 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -571,7 +571,7 @@ class tutorial.chapter_06 extends basic_chapter switch (this.step) { case 2: if ( schedule.waytype != wt_air ) - result = translate("Only road schedules allowed") + result = translate("Only air schedules allowed") reset_glsw() From 584133381838a4eb7fcb8220659e65d6681784c2 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 4 Jan 2026 00:22:06 +0100 Subject: [PATCH 098/217] FIX airplane schedule and start --- class/class_chapter_06.nut | 1 + 1 file changed, 1 insertion(+) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 9d6c987..b8d214e 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -584,6 +584,7 @@ class tutorial.chapter_06 extends basic_chapter local line_name = line1_name update_convoy_schedule(pl, wt_air, line_name, schedule) } + return result break case 3: if ( schedule.waytype != wt_road ) From 34e076f23535c25e5064bf2e51b7d87bf1e8ccb3 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 4 Jan 2026 01:16:43 +0100 Subject: [PATCH 099/217] FIX show schedule list FIX text files --- class/class_chapter_02.nut | 4 +++- de.tab | 4 ++++ de/chapter_02/06_2-2.txt | 2 +- en/chapter_02/06_2-2.txt | 2 +- es/chapter_02/06_2-2.txt | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 33f29c5..8d55b53 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -485,11 +485,13 @@ class tutorial.chapter_02 extends basic_chapter local convoy = convoy_x(gcov_id) local all_result = checks_convoy_schedule(convoy, pl) + sch_cov_correct = all_result.res == null ? true : false + if(!all_result.cov ){ reset_glsw() } - //gui.add_message("current_cov "+current_cov+" cov_nr "+cov_nr+" all_result "+all_result+" all_result.cov "+all_result.cov) + gui.add_message("current_cov "+current_cov+" cov_nr "+cov_nr+" all_result "+all_result+" all_result.cov "+all_result.cov) if ( cov_nr>=1 ) { persistent.ch_sub_step = 1 // sub step finish } diff --git a/de.tab b/de.tab index f9e1f35..238353b 100644 --- a/de.tab +++ b/de.tab @@ -128,6 +128,8 @@ Number of convoys in the depot: Anzahl der Konvois im Depot: Only %d stops are necessary. Es sind nur %d Stopps erforderlich. +Only air schedules allowed +Nur Flugzeugfahrpläne erlaubt Only delete signals. Nur Signale löschen. Only one train is allowed, press the [Sell] button. @@ -136,6 +138,8 @@ Only railway schedules allowed Nur Bahnfahrpläne erlaubt Only road schedules allowed Nur Straßenfahrpläne erlaubt +Only water schedules allowed +Nur Schifffahrpläne erlaubt Place a block signal here Platzieren Sie hier ein Blocksignal Place a Tunnel here!. diff --git a/de/chapter_02/06_2-2.txt b/de/chapter_02/06_2-2.txt index 68253a7..38f1b31 100644 --- a/de/chapter_02/06_2-2.txt +++ b/de/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {st1} befördern.

{tx} Mehrere Fahrzeuge auf der selben Route

Linien zuordnen:

Bestehende Linien können neuen Fahrzeugen zugewiesen werden, sofern es sich um Fahrzeuge derselben Kategorie handelt. In diesem Beispiel werden wir unseren neuen Fahrzeugen die Linie {line} zuweisen.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

[1] Kaufen Sie zuerst einen Bus {bus1}.
[2] Wenn die Linie korrekt erstellt wurde, können Sie bei Bedient Linie: klicken und dann die Zeile {line} auswählen.
[3] Klicken Sie abschließend auf Starten.

Busse im Umlauf: {cir}/3

Um zum nächsten Schritt zu gelangen, starten Sie alle 3 Busse.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {stnam} befördern.

{tx} Mehrere Fahrzeuge auf der selben Route

Linien zuordnen:

Bestehende Linien können neuen Fahrzeugen zugewiesen werden, sofern es sich um Fahrzeuge derselben Kategorie handelt. In diesem Beispiel werden wir unseren neuen Fahrzeugen die Linie {line} zuweisen.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

[1] Kaufen Sie zuerst einen Bus {bus1}.
[2] Wenn die Linie korrekt erstellt wurde, können Sie bei Bedient Linie: klicken und dann die Zeile {line} auswählen.
[3] Klicken Sie abschließend auf Starten.

Busse im Umlauf: {cir}/3

Um zum nächsten Schritt zu gelangen, starten Sie alle 3 Busse.

\ No newline at end of file diff --git a/en/chapter_02/06_2-2.txt b/en/chapter_02/06_2-2.txt index 6d86e33..759d768 100644 --- a/en/chapter_02/06_2-2.txt +++ b/en/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {st1}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [3] buses in circulation to move tourism in from the dock under construction {stnam}.

{tx} Starting the Buses.

Assignment of lines:

Existing lines can be assigned to new vehicles, as long as they are vehicles of the same category. In this example we are going to assign the line "{line}" to our new vehicles.

[1] First buy a bus {bus1}.
[2] If the line was created correctly, you can click on the Serves line filter (by default it says: [no schedule set]) and then select the line "{line}".
[3] Finally click on the Start button.

Buses in circulation: {cir}/3

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file diff --git a/es/chapter_02/06_2-2.txt b/es/chapter_02/06_2-2.txt index 958a6e8..ed20064 100644 --- a/es/chapter_02/06_2-2.txt +++ b/es/chapter_02/06_2-2.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {st1}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulación: {cir}/3

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea con [3] autobuses en circulación para mover turistas desde el muelle en construcción {stnam}.

{tx} Arrancando los Autobuses.

Asignando líneas:

Las líneas existentes pueden ser asignadas a nuevos vehículos, siempre que sean vehículos de la misma categoría. En este ejemplo vamos a asigna la línea "{line}" a nuestros nuevos vehículos.

[1] Primero compra un Autobús {bus1}.
[2] Si la línea fue creada correctamente, puedes pulsar sobre el filtro Sirve en línea (por defecto el texto es: [sin itinerario]) y luego selecciona la línea "{line}".
[3] Finalmente pulsa sobre el botón Arrancar.

Autobuses en circulación: {cir}/3

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file From 236d58f90050238f2e79abcb72d6b59d24bf4969 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 4 Jan 2026 11:40:22 +0100 Subject: [PATCH 100/217] CHG set version to 2.0.02 --- scenario.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenario.nut b/scenario.nut index 5aacd28..b60e084 100644 --- a/scenario.nut +++ b/scenario.nut @@ -5,7 +5,7 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files -const version = 2001 +const version = 2002 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" From f39b5b26c1d15a3a9671a09c91d448dc74f004df Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 5 Jan 2026 10:24:30 +0100 Subject: [PATCH 101/217] CHG text chapter 3 step E - factory names to stations names --- class/class_chapter_03.nut | 4 ++++ de/chapter_03/goal_step_05.txt | 2 +- en/chapter_03/goal_step_05.txt | 2 +- es/chapter_03/goal_step_05.txt | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index be82cd9..951d6ed 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -215,6 +215,10 @@ class tutorial.chapter_03 extends basic_chapter text.wag = sc_wag1_nr text.tile = loc1_tile text.load = loc1_load + local tile = my_tile(way2_fac1_fac2[0]) + text.stnam1 = ""+tile.get_halt().get_name() + tile = my_tile(way2_fac1_fac2[way2_fac1_fac2.len()-1]) + text.stnam2 = ""+tile.get_halt().get_name() text.wait = get_wait_time_text(loc1_wait) break case 6: diff --git a/de/chapter_03/goal_step_05.txt b/de/chapter_03/goal_step_05.txt index 846c2b6..177cd24 100644 --- a/de/chapter_03/goal_step_05.txt +++ b/de/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good1} nach {f2} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc1} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good1} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f1} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f2} aus.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {good1} an {f2} geliefert werden.

Tipp: Drücken Sie die Taste W (Umschalttaste+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good1}

\ No newline at end of file +

Für die Produktion von {good2} müssen Sie {good1} von {f1} nach {f2} transportieren.

Sie müssen nun ein geeignetes Fahrzeug auswählen, um {good1} nach {f2} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc1} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good1} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof {stnam1} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie als zweiten Halt den Bahnhof {stnam2} aus.
[5] Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {good1} an {f2} geliefert werden.

Tipp: Drücken Sie die Taste W (Umschalttaste+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good1}

\ No newline at end of file diff --git a/en/chapter_03/goal_step_05.txt b/en/chapter_03/goal_step_05.txt index 99e08cd..bd18a4c 100644 --- a/en/chapter_03/goal_step_05.txt +++ b/en/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Now you may assemble a convoy that can transport {good1} to {f2}.
[1] After opening the train depot's window, select the locomotive {loc1} in the Locomotives tab.
[2] Now select {wag} Wagons for {good1} in the Cars tab (The train may not be longer than {tile} tiles).
[3] In the field next to "Serves line", select create new line and select the station near {f1}.
--> Set Minimum load at {load}%."
[4] Select the station near {f2} and select Start.

Tip: You can set the Filter in the depot's window to only show vehicles that can transport {good1}.

It takes to the next step when the {f2} receive {t_reach} of {good1}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good1}

\ No newline at end of file +

Now you may assemble a convoy that can transport {good1} to {f2}.
[1] After opening the train depot's window, select the locomotive {loc1} in the Locomotives tab.
[2] Now select {wag} Wagons for {good1} in the Cars tab (The train may not be longer than {tile} tiles).
[3] In the field next to "Serves line", select create new line and select the station {stnam1}.
--> Set Minimum load at {load}%."
[4] Select the station {stnam2} and select Start.

Tip: You can set the Filter in the depot's window to only show vehicles that can transport {good1}.

It takes to the next step when the {f2} receive {t_reach} of {good1}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good1}

\ No newline at end of file diff --git a/es/chapter_03/goal_step_05.txt b/es/chapter_03/goal_step_05.txt index 9955f3d..d14be3c 100644 --- a/es/chapter_03/goal_step_05.txt +++ b/es/chapter_03/goal_step_05.txt @@ -1 +1 @@ -

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

Ahora debe elegir un vehículo adecuado para transportar {good1} hasta {f2}.
[1] Abre el depósito de trenes y elige una locomotora {loc1} en la pestaña de Locomotoras.
[2] Ahora selecciona {wag} vagones para {good1} en la pestaña de Vagones (El tren no debe ser más grande que {tile} casillas).
[3] Presiona Itinerario, crea una nueva línea y selecciona la estación de tren cerca de {f1}.
--> Configura Carga mínima al {load}%.
[4] Selecciona la estación cerca de {f2} y presiona Arrancar.

Consejo: Puede usar el Filtro en la ventana del depósito para mostrar solo los vehículos que pueden transportar {good1}.

Se avanza al siguiente paso cuando {f2} reciba {t_reach} de {good1}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good1}

\ No newline at end of file +

Para la producción de {good2}, necesitarás transportar {good1} desde {f1} hasta {f2}.

Ahora debe elegir un vehículo adecuado para transportar {good1} hasta {f2}.
[1] Abre el depósito de trenes y elige una locomotora {loc1} en la pestaña de Locomotoras.
[2] Ahora selecciona {wag} vagones para {good1} en la pestaña de Vagones (El tren no debe ser más grande que {tile} casillas).
[3] Presiona Itinerario, crea una nueva línea y selecciona la estación de tren {stnam1}.
--> Configura Carga mínima al {load}%.
[4] Selecciona la estación {stnam2} y presiona Arrancar.

Consejo: Puede usar el Filtro en la ventana del depósito para mostrar solo los vehículos que pueden transportar {good1}.

Se avanza al siguiente paso cuando {f2} reciba {t_reach} de {good1}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good1}

\ No newline at end of file From b3add0ba81b38364f1c3b40aee1d19c40eb9ade8 Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 5 Jan 2026 10:36:40 +0100 Subject: [PATCH 102/217] CHG station names for clickable links --- class/class_basic_coords_p128.nut | 2 +- class/class_chapter_03.nut | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 628ae81..b69e814 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -206,7 +206,7 @@ limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} // start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end -way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(96,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] +way2_fac2_fac3 <- [coord3d(94,155,2), coord3d(94,160,2), coord3d(95,172,3), coord3d(104,172,3), coord3d(109,184,2), coord3d(109,189,2)] limit_ch3_rail_line_2a <- {a = coord(91,159), b = coord(97,174)} limit_ch3_rail_line_2b <- {a = coord(102, 171), b = coord(110, 187)} diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 951d6ed..87ff6cb 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -216,9 +216,9 @@ class tutorial.chapter_03 extends basic_chapter text.tile = loc1_tile text.load = loc1_load local tile = my_tile(way2_fac1_fac2[0]) - text.stnam1 = ""+tile.get_halt().get_name() + text.stnam1 = tile.href(""+tile.get_halt().get_name()) tile = my_tile(way2_fac1_fac2[way2_fac1_fac2.len()-1]) - text.stnam2 = ""+tile.get_halt().get_name() + text.stnam2 = tile.href(""+tile.get_halt().get_name()) text.wait = get_wait_time_text(loc1_wait) break case 6: From bdfd1c7f31b9a8c417dbfd390599f4c344f095b9 Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 5 Jan 2026 10:50:33 +0100 Subject: [PATCH 103/217] CHG CHG text chapter 3 step G - factory names to stations names --- class/class_chapter_03.nut | 4 ++++ de/chapter_03/goal_step_07.txt | 2 +- en/chapter_03/goal_step_07.txt | 2 +- es/chapter_03/goal_step_07.txt | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 87ff6cb..fd1b10f 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -271,6 +271,10 @@ class tutorial.chapter_03 extends basic_chapter text.wag = sc_wag2_nr text.tile = loc2_tile text.load = loc2_load + local tile = my_tile(way2_fac2_fac3[0]) + text.stnam1 = tile.href(""+tile.get_halt().get_name()) + tile = my_tile(way2_fac2_fac3[way2_fac2_fac3.len()-1]) + text.stnam2 = tile.href(""+tile.get_halt().get_name()) text.wait = get_wait_time_text(loc2_wait) text.w1 = ch3_rail_depot2.a.href("("+ch3_rail_depot2.a.tostring()+")") text.w2 = ch3_rail_depot2.b.href("("+ch3_rail_depot2.b.tostring()+")") diff --git a/de/chapter_03/goal_step_07.txt b/de/chapter_03/goal_step_07.txt index bc852b5..e7dbadb 100644 --- a/de/chapter_03/goal_step_07.txt +++ b/de/chapter_03/goal_step_07.txt @@ -1 +1 @@ -

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

[1] Bauen Sie eine Bahnstrecke zwischen {w1} und {w2}.
[2] Platzieren Sie das Zugdepot auf Feld {way1}.

Sie müssen nun einen geeigneten Zug zusammen stellen, um {good2} nach {f3} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc2} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good2} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof in der Nähe von {f2} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie die Station in der Nähe von {f3} aus.
[5] Geben Sie der Linie einen aussagekräftigen Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {g1_metric} {good2} an {f3} geliefert werden.

Tipp: Drücken Sie die Taste W ([Umschalt]+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good2}

\ No newline at end of file +

Sie müssen {good2} von {f2} nach {f3} in {cy1} transportieren.

[1] Bauen Sie eine Bahnstrecke zwischen {w1} und {w2}.
[2] Platzieren Sie das Zugdepot auf Feld {way1}.

Sie müssen nun einen geeigneten Zug zusammen stellen, um {good2} nach {f3} zu transportieren.
[1] Öffnen Sie das Zugdepot und wählen Sie eine Lokomotive {loc2} im Reiter Loks.
[2] Wählen Sie nun {wag} Waggons für {good2} aus. (Der Zug darf die Haltlänge von {tile} nicht überschreiten).
[3] Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen und wählen Sie als ersten Halt den Bahnhof {stnam1} aus.
--> Stellen Sie Mindestladung auf {load}% ein.
[4] Wählen Sie als zweiten Halt den Bahnhof {stnam2} aus.
[5] Geben Sie der Linie einen aussagekräftigen Namen und schließen Sie den Linienplan.
[6] Starten Sie den Zug mit Klick auf Starten.

Tipp: Sie können den Filter im unteren Bereich des Depotfensters verwenden, um nur Fahrzeuge anzuzeigen, die eine bestimmte Fracht transportieren können.

Um zum nächsten Schritt zu gelangen, müssen {t_reach} {g1_metric} {good2} an {f3} geliefert werden.

Tipp: Drücken Sie die Taste W ([Umschalt]+w), um den Schnellvorlauf zu aktivieren. Erneutes drücken deaktiviert den Schnellvorlauf wieder.

Geliefert: {reached} {g1_metric} {good2}

\ No newline at end of file diff --git a/en/chapter_03/goal_step_07.txt b/en/chapter_03/goal_step_07.txt index ca575b2..b22be70 100644 --- a/en/chapter_03/goal_step_07.txt +++ b/en/chapter_03/goal_step_07.txt @@ -1 +1 @@ -

You need to transport {good2} from {f2} to {f3} in {cy1}.

[1] Build a track section between {w1} and {w2}.
[2] Build a Train Depot at: {way1}.

Now you may buy a locomotive. Click on the Locomotives tab and select {loc2}, then add {wag} wagons that can transport {good2} in the Cars tab (The train may not be longer than {tile} tiles).

Then, click on Schedule. First, select the station at {f2}.
--> Set Minimum load at {load}%."
Then select the station in {f3} and click on Start.

Tip: Use the filter to show only the {good2} wagons.

It takes to the next step when the {f3} receive {t_reach}{g1_metric} of {good2}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good2}

\ No newline at end of file +

You need to transport {good2} from {f2} to {f3} in {cy1}.

[1] Build a track section between {w1} and {w2}.
[2] Build a Train Depot at: {way1}.

Now you may buy a locomotive. Click on the Locomotives tab and select {loc2}, then add {wag} wagons that can transport {good2} in the Cars tab (The train may not be longer than {tile} tiles).

Then, click on Schedule. First, select the station {stnam1}.
--> Set Minimum load at {load}%."
Then select the station {stnam2} and click on Start.

Tip: Use the filter to show only the {good2} wagons.

It takes to the next step when the {f3} receive {t_reach}{g1_metric} of {good2}.

Tip: Press the "W" (capital letter) key to activate fast forward.

Received amount: {reached} {g1_metric} {good2}

\ No newline at end of file diff --git a/es/chapter_03/goal_step_07.txt b/es/chapter_03/goal_step_07.txt index c330f70..cc54d67 100644 --- a/es/chapter_03/goal_step_07.txt +++ b/es/chapter_03/goal_step_07.txt @@ -1 +1 @@ -

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

[1] Construye un tramo de vía de tren entre {w1} y {w2}.
[2] Coloca el Depósito de Trenes en: {way1}.

Ahora debes comprar una locomotora, presiona en la pestaña Locomotoras y selecciona una locomotora {loc2}. Añade {wag} vagones que puedan transportar {good2} en la pestaña de Vagones.

En la ventana Itinerario selecciona la estación en {f2}.
--> Configura Carga mínima al {load}%.
Ahora selecciona la estación en {f3} y presiona Arrancar.

Consejo: Usa el filtro para mostrar solo los vagones para {good2}.

Se avanza al siguiente paso cuando el {f3} reciba {t_reach} {g1_metric} de {good2}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good2}

\ No newline at end of file +

Necesitas transportar {good2} desde {f2} hasta {f3} en {cy1}.

[1] Construye un tramo de vía de tren entre {w1} y {w2}.
[2] Coloca el Depósito de Trenes en: {way1}.

Ahora debes comprar una locomotora, presiona en la pestaña Locomotoras y selecciona una locomotora {loc2}. Añade {wag} vagones que puedan transportar {good2} en la pestaña de Vagones.

En la ventana Itinerario selecciona la {stnam1}.
--> Configura Carga mínima al {load}%.
Ahora selecciona la {stnam2} y presiona Arrancar.

Consejo: Usa el filtro para mostrar solo los vagones para {good2}.

Se avanza al siguiente paso cuando el {f3} reciba {t_reach} {g1_metric} de {good2}.

Consejo: Pulse la tecla "W" (letra may¨²scula) para activar el avance r¨¢pido.

Cantidad recibida: {reached} {g1_metric} {good2}

\ No newline at end of file From 4e6969544765fe48ddf2a51619c2ec4feb95eb6e Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 00:17:12 +0100 Subject: [PATCH 104/217] CHG disabled debug message --- class/class_chapter_02.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 8d55b53..fb5c244 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -491,7 +491,7 @@ class tutorial.chapter_02 extends basic_chapter reset_glsw() } - gui.add_message("current_cov "+current_cov+" cov_nr "+cov_nr+" all_result "+all_result+" all_result.cov "+all_result.cov) + //gui.add_message("current_cov "+current_cov+" cov_nr "+cov_nr+" all_result "+all_result+" all_result.cov "+all_result.cov) if ( cov_nr>=1 ) { persistent.ch_sub_step = 1 // sub step finish } From dff30d94837d8be0445aa016834268d1f22184e6 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 10:03:23 +0100 Subject: [PATCH 105/217] CHG unnecessary code removed --- class/class_chapter_02.nut | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index fb5c244..609343e 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1212,7 +1212,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 2: @@ -1220,7 +1220,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 3: @@ -1228,7 +1228,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 4: //Schedule @@ -1236,14 +1236,14 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [0] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 5: local t_list = [-tool_remover, tool_build_bridge] local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 6: //Schedule @@ -1251,7 +1251,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [0] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 7: @@ -1260,7 +1260,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break case 8: //Make Stop public @@ -1268,7 +1268,7 @@ class tutorial.chapter_02 extends basic_chapter local wt_list = [-1] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + //if(res.ok) return result break } return result @@ -1280,17 +1280,13 @@ class tutorial.chapter_02 extends basic_chapter local t_list = [-t_icon.tram, -tool_make_stop_public, 0] // 0 = all tools allowed local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - if(res.ok) return result - return result + return res.result } else { local t_list = [-t_icon.tram, 0] // 0 = all tools allowed local wt_list = [gl_wt, -1] local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - if(res.ok) return result - return result + return res.result } } From 99fac8b54c2e9bf694b1b6c58a819ea1cc66953b Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 10:11:13 +0100 Subject: [PATCH 106/217] FIX error bridge build by automatic step --- class/class_chapter_02.nut | 13 +++++++------ class/class_chapter_03.nut | 25 ++++++++++++------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 609343e..5e56987 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1094,12 +1094,13 @@ class tutorial.chapter_02 extends basic_chapter } if (pot0 == 1){ local tile = my_tile(bridge1_coords.a) - tile.remove_object(player_x(1), mo_label) - tile = my_tile(bridge1_coords.b) - tile.remove_object(player_x(1), mo_label) - local t = command_x(tool_build_bridge) - - local err = t.work(player_x(pl), my_tile(bridge1_coords.a), my_tile(bridge1_coords.b), sc_bridge_name) + if ( !tile.find_object(mo_bridge) ) { + tile.remove_object(player_x(1), mo_label) + tile = my_tile(bridge1_coords.b) + tile.remove_object(player_x(1), mo_label) + local t = command_x(tool_build_bridge) + local err = t.work(player_x(pl), my_tile(bridge1_coords.a), my_tile(bridge1_coords.b), sc_bridge_name) + } } return null diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index fd1b10f..f81eb72 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2165,12 +2165,11 @@ class tutorial.chapter_03 extends basic_chapter if (pot1==0){ local t_start = my_tile(bridge2_coords.a) local t_end = my_tile(bridge2_coords.b) - - t_start.remove_object(player_x(1), mo_label) - - local t = command_x(tool_build_bridge) - - local err = t.work(player, t_start, t_end, sc_bridge_name) + if ( !t_start.find_object(mo_bridge) ) { + t_start.remove_object(player_x(1), mo_label) + local t = command_x(tool_build_bridge) + local err = t.work(player, t_start, t_end, sc_bridge_name) + } } //Segundo tramo de rieles if (pot4==0){ @@ -2486,13 +2485,13 @@ class tutorial.chapter_03 extends basic_chapter if (pot0==1 && pot1==0){ local t_start = my_tile(bridge3_coords.a) local t_end = my_tile(bridge3_coords.b) - t_start.unmark() - t_end.unmark() - t_start.remove_object(player_x(1), mo_label) - - local t = command_x(tool_build_bridge) - - local err = t.work(player, t_start, t_end, sc_bridge_name) + if ( !t_start.find_object(mo_bridge) ) { + t_start.unmark() + t_end.unmark() + t_start.remove_object(player_x(1), mo_label) + local t = command_x(tool_build_bridge) + local err = t.work(player, t_start, t_end, sc_bridge_name) + } pot1=1 } if (pot1==1 && pot2==0){ From 99e69c8efeb733c77bf61ff44b8b5bc521a60d85 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 10:41:56 +0100 Subject: [PATCH 107/217] CHG minor code optimization --- class/class_chapter_02.nut | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 5e56987..cce4643 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1093,13 +1093,13 @@ class tutorial.chapter_02 extends basic_chapter pot0 = 1 } if (pot0 == 1){ - local tile = my_tile(bridge1_coords.a) + local t_start = my_tile(bridge1_coords.a) + local t_end = my_tile(bridge1_coords.b) if ( !tile.find_object(mo_bridge) ) { - tile.remove_object(player_x(1), mo_label) - tile = my_tile(bridge1_coords.b) - tile.remove_object(player_x(1), mo_label) + t_start.remove_object(player_x(1), mo_label) + t_end.remove_object(player_x(1), mo_label) local t = command_x(tool_build_bridge) - local err = t.work(player_x(pl), my_tile(bridge1_coords.a), my_tile(bridge1_coords.b), sc_bridge_name) + local err = t.work(player_x(pl), t_start, t_end, sc_bridge_name) } } From 28323e8232811830a4a0f95dd137b4cb82b3d500 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 10:44:58 +0100 Subject: [PATCH 108/217] CHG unnecessary code removed --- class/class_chapter_03.nut | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index f81eb72..e075944 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2701,7 +2701,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 2: @@ -2709,7 +2708,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 3: @@ -2717,7 +2715,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 4: @@ -2725,7 +2722,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 5://Schedule @@ -2733,7 +2729,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 6: @@ -2741,7 +2736,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 7: @@ -2749,7 +2743,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 8: @@ -2757,7 +2750,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 9: @@ -2765,7 +2757,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 10: @@ -2773,7 +2764,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 11://Schedule @@ -2781,7 +2771,6 @@ class tutorial.chapter_03 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } @@ -2795,9 +2784,7 @@ class tutorial.chapter_03 extends basic_chapter local t_list = [-t_icon.tram, 0] // 0 = all tools allowed local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - if(res.ok) return result - return result + return res.result } function is_stations_building(pl, c_list, st_nr, good) From 00610fbc6c4a1c089d10a4de08e063272ee2c96a Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 23:12:42 +0100 Subject: [PATCH 109/217] FIX chapter 6 step A - build extensions building --- class/class_chapter_06.nut | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index b8d214e..7a74685 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -958,11 +958,13 @@ class tutorial.chapter_06 extends basic_chapter function is_tool_active(pl, tool_id, wt) { local result = false + + switch (this.step) { case 1: local t_list = [tool_remove_way, tool_build_way, tool_build_station, tool_build_depot] - local wt_list = [gl_wt] + local wt_list = [gl_wt, 0] // enabled extensions building local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result if(res.ok) return result @@ -997,6 +999,8 @@ class tutorial.chapter_06 extends basic_chapter function is_tool_allowed(pl, tool_id, wt){ local gt_list = [ t_icon.tram ] + + if(step < 4){ gt_list.push(t_icon.road) } @@ -1006,10 +1010,11 @@ class tutorial.chapter_06 extends basic_chapter } local result = true if(step < 4) { - local t_list = [0] // 0 = all tools allowed - local wt_list = [gl_wt] + local t_list = [0, 4115] // 0 = all tools allowed + local wt_list = [gl_wt, 0] // enabled extensions building local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result + //gui.add_message("is_tool_allowed wt " + wt + " : tool_id " + tool_id + " : res.ok " + res.ok + " : result " + result) if(res.ok) return result return result } From 7a0e255f327aada0ef3f3a2adc7c52994d5599df Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 23:26:31 +0100 Subject: [PATCH 110/217] CHG better tile for terminal --- class/class_chapter_06.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 7a74685..477554f 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -48,7 +48,7 @@ class tutorial.chapter_06 extends basic_chapter // Parada aerea --------------------------------- st1_pos = coord(114,176) // Terminal ------------------------------------- - st2_pos = coord(113,175) + st2_pos = coord(115,177) // Hangar -------------------------------------- c_dep_lim1 = {a = coord(113,176), b = coord(113,177)} c_dep1 = coord(113,177) From 203cad5b89f38c47696e68c670100900e2e82992 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 6 Jan 2026 23:58:05 +0100 Subject: [PATCH 111/217] CHG coords move to class_basic_coords --- class/class_basic_coords_p128.nut | 6 +++ class/class_basic_coords_p64.nut | 6 +++ class/class_basic_coords_p64g.nut | 6 +++ class/class_chapter_06.nut | 64 ++++++++++++++----------------- 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index b69e814..bb3d734 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -99,6 +99,7 @@ coord_st_1 <- coord(117,197) * used chapter 6 * city1_city7_air * city1_halt_airport + * city1_halt_airport_extension * city7_halt * * used chapter 7 @@ -138,6 +139,9 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] +city1_halt_airport <- [coord(114,176)] +city1_halt_airport_extension <- [coord(115,177)] + city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] @@ -159,6 +163,7 @@ ship_depot <- coord(150, 190) /** * rail_depot{depot_tile, way_tile} + * air_depot{depot_tile, way_tile} * * road depot must be located one field next to a road */ @@ -166,6 +171,7 @@ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} ch5_road_depot <- {a = coord(131,232), b = coord(132,232)} +ch6_air_depot <- {a = coord(113,177), b = coord(113,176)} /** * define bridges diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index e581a61..87d5964 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -99,6 +99,7 @@ coord_st_1 <- coord(117,197) * used chapter 6 * city1_city7_air * city1_halt_airport + * city1_halt_airport_extension * city7_halt * * used chapter 7 @@ -138,6 +139,9 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] +city1_halt_airport <- [coord(114,176)] +city1_halt_airport_extension <- [coord(115,177)] + city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] @@ -159,6 +163,7 @@ ship_depot <- coord(150, 190) /** * rail_depot{depot_tile, way_tile} + * air_depot{depot_tile, way_tile} * * road depot must be located one field next to a road */ @@ -166,6 +171,7 @@ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} ch5_road_depot <- {a = coord(131,232), b = coord(132,232)} +ch6_air_depot <- {a = coord(113,177), b = coord(113,176)} /** * define bridges diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 2b6079c..7a062d3 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -99,6 +99,7 @@ coord_st_1 <- coord(117,197) * used chapter 6 * city1_city7_air * city1_halt_airport + * city1_halt_airport_extension * city7_halt * * used chapter 7 @@ -138,6 +139,9 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] +city1_halt_airport <- [coord(114,176)] +city1_halt_airport_extension <- [coord(115,177)] + city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] @@ -159,6 +163,7 @@ ship_depot <- coord(150, 190) /** * rail_depot{depot_tile, way_tile} + * air_depot{depot_tile, way_tile} * * road depot must be located one field next to a road */ @@ -166,6 +171,7 @@ ch3_rail_depot1 <- {b = coord(121,164), a = coord(121,163)} ch3_rail_depot2 <- {b = coord(94,160), a = coord(93,160)} ch3_rail_depot3 <- {b = coord(108,196), a = coord(108,197)} ch5_road_depot <- {a = coord(131,232), b = coord(132,232)} +ch6_air_depot <- {a = coord(113,177), b = coord(113,176)} /** * define bridges diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 477554f..b58e15c 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -45,14 +45,6 @@ class tutorial.chapter_06 extends basic_chapter c2_is_way = null obj2_way_name = get_obj_ch6(2) - // Parada aerea --------------------------------- - st1_pos = coord(114,176) - // Terminal ------------------------------------- - st2_pos = coord(115,177) - // Hangar -------------------------------------- - c_dep_lim1 = {a = coord(113,176), b = coord(113,177)} - c_dep1 = coord(113,177) - // Step 2 ===================================================================================== d1_cnr = null //auto started plane1_obj = get_veh_ch6(1) @@ -108,10 +100,10 @@ class tutorial.chapter_06 extends basic_chapter function set_goal_text(text){ switch (this.step) { case 1: - text.c1_a = " ("+c1_track.a.tostring()+")" - text.c1_b = " ("+c1_track.b.tostring()+")" - text.c2_a = " ("+c2_track.a.tostring()+")" - text.c2_b = " ("+c2_track.b.tostring()+")" + text.c1_a = "("+c1_track.a.tostring()+")" + text.c1_b = "("+c1_track.b.tostring()+")" + text.c2_a = "("+c2_track.a.tostring()+")" + text.c2_b = "("+c2_track.b.tostring()+")" break case 2: @@ -192,9 +184,9 @@ class tutorial.chapter_06 extends basic_chapter text.bus2 = translate(veh2_obj) text.cit1 = city1_tow.href(cty1.name.tostring()) text.cit2 = city7_tow.href(cty2.name.tostring()) - text.st1 = " ("+st1_pos.tostring()+")" - text.st2 = " ("+st2_pos.tostring()+")" - text.dep1 = " ("+c_dep1.tostring()+")" + text.st1 = " ("+city1_halt_airport[0].tostring()+")" + text.st2 = " ("+city1_halt_airport_extension[0].tostring()+")" + text.dep1 = "("+ch6_air_depot.a.tostring()+")" return text } @@ -251,7 +243,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot1==1 && pot2==0){ - local tile = my_tile(st1_pos) + local tile = my_tile(city1_halt_airport[0]) local way = tile.find_object(mo_way) local buil = tile.find_object(mo_building) local name = translate("Build here") @@ -264,7 +256,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot2==1 && pot3==0){ - local tile = my_tile(st2_pos) + local tile = my_tile(city1_halt_airport_extension[0]) local buil = tile.find_object(mo_building) local name = translate("Build here") public_label(tile, name) @@ -276,7 +268,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot3==1 && pot4==0){ - local tile = my_tile(c_dep1) + local tile = my_tile(ch6_air_depot.a) local way = tile.find_object(mo_way) local depot = tile.find_object(mo_depot_air) local name = translate("Build here") @@ -289,7 +281,7 @@ class tutorial.chapter_06 extends basic_chapter //return 25 } else if (pot4==1 && pot5==0){ - local tile = my_tile(st1_pos) + local tile = my_tile(city1_halt_airport[0]) local buil = tile.find_object(mo_building) if(buil && buil.get_owner().nr == 1){ pot5 = 1 @@ -449,7 +441,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot1==1 && pot2==0){ - if(pos.x == st1_pos.x && pos.y == st1_pos.y){ + if(pos.x == city1_halt_airport[0].x && pos.y == city1_halt_airport[0].y){ if(tool_id == tool_build_way){ if (way){ return translate("The track is correct.") @@ -463,11 +455,11 @@ class tutorial.chapter_06 extends basic_chapter else return null } } - else return translate("Build here") + ": ("+st1_pos.tostring()+")!." + else return translate("Build here") + ": ("+city1_halt_airport[0].tostring()+")!." } else if (pot2==1 && pot3==0){ - if(pos.x == st2_pos.x && pos.y == st2_pos.y){ + if(pos.x == city1_halt_airport_extension[0].x && pos.y == city1_halt_airport_extension[0].y){ if(tool_id == tool_build_station){ if (buil){ return translate("There is already a station.") @@ -475,11 +467,11 @@ class tutorial.chapter_06 extends basic_chapter else return null } } - else return translate("Build here") + ": ("+st2_pos.tostring()+")!." + else return translate("Build here") + ": ("+city1_halt_airport_extension[0].tostring()+")!." } else if (pot3==1 && pot4==0){ - if((pos.x == c_dep_lim1.a.x && pos.y == c_dep_lim1.a.y) || (pos.x == c_dep_lim1.b.x && pos.y == c_dep_lim1.b.y)){ + if((pos.x == ch6_air_depot.b.x && pos.y == ch6_air_depot.b.y) || (pos.x == ch6_air_depot.a.x && pos.y == ch6_air_depot.a.y)){ if(tool_id == tool_build_way){ return null } @@ -490,10 +482,10 @@ class tutorial.chapter_06 extends basic_chapter else return null } } - else return translate("Build here") + ": ("+c_dep1.tostring()+")!." + else return translate("Build here") + ": ("+ch6_air_depot.a.tostring()+")!." } else if (pot4==1 && pot5==0){ - if(pos.x == st1_pos.x && pos.y == st1_pos.y){ + if(pos.x == city1_halt_airport[0].x && pos.y == city1_halt_airport[0].y){ if(tool_id == tool_make_stop_public){ if(buil){ return null @@ -501,7 +493,7 @@ class tutorial.chapter_06 extends basic_chapter else return null } } - else return translate("Click on the stop") + " ("+st1_pos.tostring()+")!." + else return translate("Click on the stop") + " ("+city1_halt_airport[0].tostring()+")!." } break; @@ -625,8 +617,8 @@ class tutorial.chapter_06 extends basic_chapter switch (this.step) { case 2: local wt = gl_wt - if ((depot.x != c_dep1.x)||(depot.y != c_dep1.y)) - return translate("You must select the deposit located in")+" ("+c_dep1.tostring()+")." + if ((depot.x != ch6_air_depot.a.x)||(depot.y != ch6_air_depot.a.y)) + return translate("You must select the deposit located in")+" ("+ch6_air_depot.a.tostring()+")." if (current_cov>ch6_cov_lim1.a && current_cov ch6_cov_lim1.a && current_cov< ch6_cov_lim1.b){ local pl = player - local c_depot = my_tile(c_dep1) + local c_depot = my_tile(ch6_air_depot.a) try { comm_destroy_convoy(pl, c_depot) // Limpia los vehiculos del deposito From 8b9060802fb03cb85d163987a2b1af0e33ac5d2b Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 7 Jan 2026 13:58:12 +0100 Subject: [PATCH 112/217] FIX text output coord --- class/class_chapter_05.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index ae5d58b..3c4088b 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -675,7 +675,7 @@ class tutorial.chapter_05 extends basic_chapter return translate("There is already a transformer here!")+" ("+pos.tostring()+")." } else if (glsw[j]==0) - result = translate("Build the transformer here!")+" ("+way5_power[j].tostring()+")." + result = translate("Build the transformer here!")+" ("+coord3d_to_string(way5_power[j])+")." } } if(tool_id == tool_build_transformer) From cf2c7549221c9c2e14cee9cb1a0aa7ca22942243 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 7 Jan 2026 15:52:48 +0100 Subject: [PATCH 113/217] CHG chapter 6 - move coords to class_basic_coords --- class/class_basic_coords_p128.nut | 2 +- class/class_basic_coords_p64.nut | 3 +- class/class_basic_coords_p64g.nut | 2 +- class/class_basic_data.nut | 80 ++++++++++++++++++++++++---- class/class_chapter_06.nut | 88 ++++++++++++++----------------- 5 files changed, 115 insertions(+), 60 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index bb3d734..574a62f 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -139,7 +139,6 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] -city1_halt_airport <- [coord(114,176)] city1_halt_airport_extension <- [coord(115,177)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), @@ -159,6 +158,7 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t * define depots */ city1_road_depot <- coord(115,185) +city7_road_depot <- coord(167,497) ship_depot <- coord(150, 190) /** diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 87d5964..75f69a1 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -139,9 +139,9 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] -city1_halt_airport <- [coord(114,176)] city1_halt_airport_extension <- [coord(115,177)] + city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] @@ -159,6 +159,7 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t * define depots */ city1_road_depot <- coord(115,185) +city7_road_depot <- coord(167,497) ship_depot <- coord(150, 190) /** diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 7a062d3..bd11361 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -139,7 +139,6 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { } city1_city7_air <- [coord(114,176), coord(168,489)] -city1_halt_airport <- [coord(114,176)] city1_halt_airport_extension <- [coord(115,177)] city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), @@ -159,6 +158,7 @@ ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), t * define depots */ city1_road_depot <- coord(124,188) //115,185 +city7_road_depot <- coord(167,497) ship_depot <- coord(150, 190) /** diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 6a203fb..018ad19 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -966,10 +966,13 @@ function set_transportet_goods(id) { /* * set loading capacity * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby * id 4 - chapter 3 step 11 : city train + * id 5 - chapter 6 step 2 : air city 1 - city 7 + * id 6 - chapter 6 step 3 : bus city 1 - Airport + * id 7 - chapter 6 step 4 : bus city 7 - Airport * */ function set_loading_capacity(id) { @@ -989,6 +992,15 @@ function set_loading_capacity(id) { case 4: return 100 break + case 5: + return 100 + break + case 6: + return 100 + break + case 7: + return 100 + break } break case "pak64.german": @@ -1005,6 +1017,15 @@ function set_loading_capacity(id) { case 4: return 80 break + case 5: + return 100 + break + case 6: + return 100 + break + case 7: + return 100 + break } break case "pak128": @@ -1021,6 +1042,15 @@ function set_loading_capacity(id) { case 4: return 100 break + case 5: + return 100 + break + case 6: + return 100 + break + case 7: + return 100 + break } break } @@ -1030,13 +1060,16 @@ function set_loading_capacity(id) { /* * set waiting time * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby - * id 4 - chapter 3 step 11 : city train - * id 5 - chapter 4 step 7 : good ship produser -> consumer - * id 6 - chapter 5 step 4 : road mail - * id 7 - chapter 5 step 4 : ship oil rig + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 4 - chapter 3 step 11 : city train + * id 5 - chapter 4 step 7 : good ship produser -> consumer + * id 6 - chapter 5 step 4 : road mail + * id 7 - chapter 5 step 4 : ship oil rig + * id 8 - chapter 6 step 2 : air city 1 - city 7 + * id 9 - chapter 6 step 3 : bus city 1 - Airport + * id 10 - chapter 6 step 4 : bus city 7 - Airport * * 1 day = 2115 * 1 hour = 88 @@ -1067,6 +1100,15 @@ function set_waiting_time(id) { case 7: return 42282 break + case 8: + return 42282 + break + case 9: + return 10571 + break + case 10: + return 10571 + break } break case "pak64.german": @@ -1092,6 +1134,15 @@ function set_waiting_time(id) { case 7: return 42282 break + case 8: + return 42282 + break + case 9: + return 10571 + break + case 10: + return 10571 + break } break case "pak128": @@ -1117,6 +1168,15 @@ function set_waiting_time(id) { case 7: return 42282 break + case 8: + return 42282 + break + case 9: + return 10571 + break + case 10: + return 10571 + break } break } diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index b58e15c..c18e2a2 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -48,23 +48,18 @@ class tutorial.chapter_06 extends basic_chapter // Step 2 ===================================================================================== d1_cnr = null //auto started plane1_obj = get_veh_ch6(1) - plane1_load = 100 - plane1_wait = 42282 + line1_name = "ch6_l1" // Step 3 ===================================================================================== - line1_name = "ch6_l1" //c_dep2 = coord(115,185) d2_cnr = null //auto started veh1_obj = get_veh_ch6(2) - veh1_load = 100 - veh1_wait = 10571 + line2_name = "ch6_l2" // Step 4 ===================================================================================== - line2_name = "ch6_l2" - c_dep3 = coord(167,497) d3_cnr = null //auto started - veh2_obj = get_veh_ch6(3) + line3_name = "ch6_l3" //Script //---------------------------------------------------------------------------------- @@ -74,7 +69,6 @@ class tutorial.chapter_06 extends basic_chapter sc_dep1 = get_obj_ch6(5) sc_dep2 = get_obj_ch6(6) - line3_name = "ch6_l3" function start_chapter() //Inicia solo una vez por capitulo { @@ -108,8 +102,8 @@ class tutorial.chapter_06 extends basic_chapter case 2: text.plane = translate(plane1_obj) - text.load = plane1_load - text.wait = get_wait_time_text(plane1_wait) + text.load = set_loading_capacity(7) + text.wait = get_wait_time_text(set_waiting_time(8)) text.cnr = d1_cnr break @@ -136,8 +130,8 @@ class tutorial.chapter_06 extends basic_chapter text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx text.dep2 = " ("+city1_road_depot.tostring()+")" - text.load = veh1_load - text.wait = get_wait_time_text(veh1_wait) + text.load = set_loading_capacity(6) + text.wait = get_wait_time_text(set_waiting_time(9)) text.cnr = d2_cnr break @@ -164,10 +158,10 @@ class tutorial.chapter_06 extends basic_chapter local c = coord(c_list[0].x, c_list[0].y) text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx - text.dep3 = " ("+c_dep3.tostring()+")" + text.dep3 = " ("+city7_road_depot.tostring()+")" - text.load = veh1_load - text.wait = get_wait_time_text(veh1_wait) + text.load = set_loading_capacity(7) + text.wait = get_wait_time_text(set_waiting_time(10)) text.cnr = d3_cnr break @@ -184,8 +178,8 @@ class tutorial.chapter_06 extends basic_chapter text.bus2 = translate(veh2_obj) text.cit1 = city1_tow.href(cty1.name.tostring()) text.cit2 = city7_tow.href(cty2.name.tostring()) - text.st1 = " ("+city1_halt_airport[0].tostring()+")" - text.st2 = " ("+city1_halt_airport_extension[0].tostring()+")" + text.st1 = "("+city1_city7_air[0].tostring()+")" + text.st2 = "("+city1_city7_air[1].tostring()+")" text.dep1 = "("+ch6_air_depot.a.tostring()+")" return text } @@ -243,7 +237,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot1==1 && pot2==0){ - local tile = my_tile(city1_halt_airport[0]) + local tile = my_tile(city1_city7_air[0]) local way = tile.find_object(mo_way) local buil = tile.find_object(mo_building) local name = translate("Build here") @@ -326,7 +320,7 @@ class tutorial.chapter_06 extends basic_chapter case 4: if (pot0==0){ - local tile = my_tile(c_dep3) + local tile = my_tile(city7_road_depot) local way = tile.find_object(mo_way) local depot = tile.find_object(mo_depot_road) if(way && depot){ @@ -335,7 +329,7 @@ class tutorial.chapter_06 extends basic_chapter //return 25 } else if (pot0==1 && pot1==0){ - local c_dep = my_tile(c_dep3) + local c_dep = my_tile(city7_road_depot) local line_name = line2_name set_convoy_schedule(pl, c_dep, wt_road, line_name) @@ -441,7 +435,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot1==1 && pot2==0){ - if(pos.x == city1_halt_airport[0].x && pos.y == city1_halt_airport[0].y){ + if(pos.x == city1_city7_air[0].x && pos.y == city1_city7_air[0].y){ if(tool_id == tool_build_way){ if (way){ return translate("The track is correct.") @@ -531,7 +525,7 @@ class tutorial.chapter_06 extends basic_chapter case 4: if (pot0==0){ - if(pos.x == c_dep3.x && pos.y == c_dep3.y){ + if(pos.x == city7_road_depot.x && pos.y == city7_road_depot.y){ if(tool_id == tool_build_depot){ if(depot){ return translate("The Depot is correct.") @@ -539,13 +533,13 @@ class tutorial.chapter_06 extends basic_chapter else return null } } - else return translate("Build here") + ": ("+c_dep3.tostring()+")!." + else return translate("Build here") + ": ("+city7_road_depot.tostring()+")!." } if (pot0==1 && pot1==0){ if (tool_id==4108) { local c_list = city7_halt //Lista de todas las paradas de autobus - local c_dep = c_dep3 //Coordeadas del deposito - local siz = c_list.len() //Numero de paradas + local c_dep = city7_road_depot //Coordeadas del deposito + local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) } @@ -568,8 +562,8 @@ class tutorial.chapter_06 extends basic_chapter reset_glsw() local selc = 0 - local load = plane1_load - local time = plane1_wait + local load = set_loading_capacity(5) + local time = set_waiting_time(8) local c_list = city1_city7_air result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result == null){ @@ -583,8 +577,8 @@ class tutorial.chapter_06 extends basic_chapter result = translate("Only road schedules allowed") local selc = 0 - local load = veh1_load - local time = veh1_wait + local load = set_loading_capacity(6) + local time = set_waiting_time(9) local c_list = city1_halt_airport result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -597,8 +591,8 @@ class tutorial.chapter_06 extends basic_chapter if ( schedule.waytype != wt_road ) result = translate("Only road schedules allowed") local selc = 0 - local load = veh1_load - local time = veh1_wait + local load = set_loading_capacity(7) + local time = set_waiting_time(10) local c_list = city7_halt result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -650,8 +644,8 @@ class tutorial.chapter_06 extends basic_chapter } local selc = 0 - local load = plane1_load - local time = plane1_wait + local load = set_loading_capacity(7) + local time = set_waiting_time(8) local c_list = city1_city7_air local siz = c_list.len() return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) @@ -682,8 +676,8 @@ class tutorial.chapter_06 extends basic_chapter } local selc = 0 - local load = veh1_load - local wait = veh1_wait + local load = set_loading_capacity(6) + local wait = set_waiting_time(9) local siz = c_list.len() local line = false result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, wait, c_list, siz, line) @@ -693,8 +687,8 @@ class tutorial.chapter_06 extends basic_chapter } break case 4: - if ((depot.x != c_dep3.x)||(depot.y != c_dep3.y)) - return translate("You must select the deposit located in")+" ("+c_dep3.tostring()+")." + if ((depot.x != city7_road_depot.x)||(depot.y != city7_road_depot.y)) + return translate("You must select the deposit located in")+" ("+city7_road_depot.tostring()+")." if (current_cov>ch6_cov_lim3.a && current_covch6_cov_lim2.a && current_covch6_cov_lim3.a && current_cov Date: Wed, 7 Jan 2026 16:05:45 +0100 Subject: [PATCH 114/217] CHG unnecessary code removed --- class/class_chapter_06.nut | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index c18e2a2..585efde 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -953,7 +953,6 @@ class tutorial.chapter_06 extends basic_chapter local wt_list = [gl_wt, 0] // enabled extensions building local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 2://Schedule @@ -961,7 +960,6 @@ class tutorial.chapter_06 extends basic_chapter local wt_list = [] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 3://Schedule @@ -969,7 +967,6 @@ class tutorial.chapter_06 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 4: @@ -977,7 +974,6 @@ class tutorial.chapter_06 extends basic_chapter local wt_list = [wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } return result @@ -996,21 +992,16 @@ class tutorial.chapter_06 extends basic_chapter } local result = true if(step < 4) { - local t_list = [0, 4115] // 0 = all tools allowed + local t_list = [0] // 0 = all tools allowed local wt_list = [gl_wt, 0] // enabled extensions building local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - //gui.add_message("is_tool_allowed wt " + wt + " : tool_id " + tool_id + " : res.ok " + res.ok + " : result " + result) - if(res.ok) return result - return result + return res.result } else { local t_list = [0] // 0 = all tools allowed local wt_list = [gl_wt, wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - if(res.ok) return result - return result + return res.result } } From ad00b08a06a652479bde29fae3897bfc731f3b7c Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 7 Jan 2026 19:49:44 +0100 Subject: [PATCH 115/217] CHG move convoy count to class_basic_data --- class/class_basic_convoys.nut | 232 +++++++++++++++++----------------- class/class_basic_data.nut | 173 +++++++++++++++++++++++++ 2 files changed, 289 insertions(+), 116 deletions(-) diff --git a/class/class_basic_convoys.nut b/class/class_basic_convoys.nut index 86c0076..c3ea7dc 100644 --- a/class/class_basic_convoys.nut +++ b/class/class_basic_convoys.nut @@ -6,132 +6,132 @@ */ //Number of convoys in each chapter are listed -cv_list <- [ - //Chapter_02: [Step..], [Cov_nr..], Index -------------- - {stp = [4,6,7], cov = [1,3,1], idx = 0}, +cv_list <- [ + //Chapter_02: [Step..], [Cov_nr..], Index -------------- + {stp = [4,6,7], cov = [set_convoy_count(1),set_convoy_count(2),set_convoy_count(3)], idx = 0}, - //Chapter_03: [Step..], [Cov_nr..], Index -------------- - {stp = [5,7,11], cov = [1,1,3], idx = 0} + //Chapter_03: [Step..], [Cov_nr..], Index -------------- + {stp = [5,7,11], cov = [set_convoy_count(4),set_convoy_count(5),set_convoy_count(6)], idx = 0} - //Chapter_04: [Step..], [Cov_nr..], Index -------------- - {stp = [4,5,7], cov = [2,2,1], idx = 0} + //Chapter_04: [Step..], [Cov_nr..], Index -------------- + {stp = [4,5,7], cov = [set_convoy_count(7),set_convoy_count(8),set_convoy_count(9)], idx = 0} - //Chapter_05: [Step..], [Cov_nr..], Index -------------- - {stp = [2,4,4], cov = [10,3,1], idx = 0} + //Chapter_05: [Step..], [Cov_nr..], Index -------------- + {stp = [2,4,4], cov = [set_convoy_count(10),set_convoy_count(11),set_convoy_count(12)], idx = 0} - //Chapter_06: [Step..], [Cov_nr..], Index -------------- - {stp = [2,3,4], cov = [1,2,5], idx = 0} - ] + //Chapter_06: [Step..], [Cov_nr..], Index -------------- + {stp = [2,3,4], cov = [set_convoy_count(13),set_convoy_count(14),set_convoy_count(15)], idx = 0} + ] //Generate list with convoy limits cv_lim <- [] //[{limit_a, limit_b, chapter_nr, step_nr}..] class basic_convoys { - function set_convoy_limit() - { - local nr = -1 - local idx = 0 - for(local j = 0; jgcov_id) - gcov_id = id - - if (!cov.is_in_depot() && convoy_ignore(ignore_save, id)) - cov_nr++ - } - return cov_nr - } - - function convoy_ignore(list, id) - { - for(local j = 0; j lim.a && cov_nr < lim.b && persistent.status.chapter >= lim.ch){ - if(lim.stp < persistent.step || persistent.status.chapter != lim.ch) - load_conv_ch(lim.ch, lim.stp, pl) - break - } - - } - } + function set_convoy_limit() + { + local nr = -1 + local idx = 0 + for(local j = 0; jgcov_id) + gcov_id = id + + if (!cov.is_in_depot() && convoy_ignore(ignore_save, id)) + cov_nr++ + } + return cov_nr + } + + function convoy_ignore(list, id) + { + for(local j = 0; j lim.a && cov_nr < lim.b && persistent.status.chapter >= lim.ch){ + if(lim.stp < persistent.step || persistent.status.chapter != lim.ch) + load_conv_ch(lim.ch, lim.stp, pl) + break + } + + } + } } // END OF FILE diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 018ad19..f7d9e42 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -879,6 +879,179 @@ function set_train_lenght(id) { } } +/* + * set count convoys for line + * + * id 1 - chapter 2 : city1_halt_1 - halts city 1 + * id 2 - chapter 2 : city1_halt_2 - halts connect city 1 dock and station + * id 3 - chapter 2 : city2_halt_1 - halts connect city 2 to city 1 + * id 4 - chapter 3 : rail factory 1 -> factory 2 + * id 5 - chapter 3 : rail factory 2 -> factory 3 + * id 6 - chapter 3 : ch3_rail_stations - city line + * id 7 - chapter 4 : ch4_ship1_halts - dock raffinerie - (coord_fac4) + * id 8 - chapter 4 : ch4_ship2_halts - dock raffinerie - canal stop gas station + * id 9 - chapter 4 : ch4_ship3_halts - passenger ship + * id 10 - chapter 5 : road coal to power plant + * id 11 - chapter 5 : city1_post_halts - halts for post + * id 12 - chapter 5 : post ship dock - oil rigg + * id 13 - chapter 6 : city1_city7_air + * id 14 - chapter 6 : city1_halt_airport + * id 15 - chapter 6 : city7_halt + * + */ +function set_convoy_count(id) { + + switch (pak_name) { + case "pak64": + switch (id) { + case 1: + return 1 + break + case 2: + return 3 + break + case 3: + return 1 + break + case 4: + return 1 + break + case 5: + return 1 + break + case 6: + return 3 + break + case 7: + return 2 + break + case 8: + return 2 + break + case 9: + return 1 + break + case 10: + return 10 + break + case 11: + return 3 + break + case 12: + return 1 + break + case 13: + return 1 + break + case 14: + return 2 + break + case 15: + return 5 + break + } + break + case "pak64.german": + switch (id) { + case 1: + return 1 + break + case 2: + return 3 + break + case 3: + return 1 + break + case 4: + return 1 + break + case 5: + return 1 + break + case 6: + return 2 + break + case 7: + return 2 + break + case 8: + return 2 + break + case 9: + return 1 + break + case 10: + return 7 + break + case 11: + return 3 + break + case 12: + return 1 + break + case 13: + return 1 + break + case 14: + return 2 + break + case 15: + return 5 + break + } + break + case "pak128": + switch (id) { + case 1: + return 1 + break + case 2: + return 3 + break + case 3: + return 1 + break + case 4: + return 1 + break + case 5: + return 1 + break + case 6: + return 3 + break + case 7: + return 2 + break + case 8: + return 2 + break + case 9: + return 1 + break + case 10: + return 10 + break + case 11: + return 3 + break + case 12: + return 1 + break + case 13: + return 1 + break + case 14: + return 2 + break + case 15: + return 5 + break + } + break + } +} + /* * set transportet goods * From 741349a82d4b62eb668a70913fe980c1254e3cf7 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 7 Jan 2026 19:55:23 +0100 Subject: [PATCH 116/217] FIX wrong parameter --- class/class_chapter_02.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index cce4643..cdc0f32 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1095,7 +1095,7 @@ class tutorial.chapter_02 extends basic_chapter if (pot0 == 1){ local t_start = my_tile(bridge1_coords.a) local t_end = my_tile(bridge1_coords.b) - if ( !tile.find_object(mo_bridge) ) { + if ( !t_start.find_object(mo_bridge) ) { t_start.remove_object(player_x(1), mo_label) t_end.remove_object(player_x(1), mo_label) local t = command_x(tool_build_bridge) From 00c296f116b14b778fc54fa3844c93b3684ce24d Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 8 Jan 2026 07:52:09 +0100 Subject: [PATCH 117/217] CHG coords move to class_basic_coords --- class/class_basic_coords_p128.nut | 5 ++++- class/class_basic_coords_p64.nut | 5 ++++- class/class_basic_coords_p64g.nut | 5 ++++- class/class_chapter_05.nut | 23 ++++++++++++----------- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 574a62f..efd75b0 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -94,7 +94,8 @@ coord_st_1 <- coord(117,197) * ch4_ship3_halts - passenger ship * * used chapter 5 - * city1_post_halts - halts for post + * city1_post_halts - halts for post + * ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) * * used chapter 6 * city1_city7_air @@ -152,6 +153,8 @@ ch4_ship1_halts <- [coord3d(151, 198, -3)] ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] +ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 75f69a1..ece87eb 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -94,7 +94,8 @@ coord_st_1 <- coord(117,197) * ch4_ship3_halts - passenger ship * * used chapter 5 - * city1_post_halts - halts for post + * city1_post_halts - halts for post + * ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) * * used chapter 6 * city1_city7_air @@ -153,6 +154,8 @@ ch4_ship1_halts <- [coord3d(151, 198, -3)] ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] +ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index bd11361..20a62af 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -94,7 +94,8 @@ coord_st_1 <- coord(117,197) * ch4_ship3_halts - passenger ship * * used chapter 5 - * city1_post_halts - halts for post + * city1_post_halts - halts for post + * ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) * * used chapter 6 * city1_city7_air @@ -141,6 +142,8 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { city1_city7_air <- [coord(114,176), coord(168,489)] city1_halt_airport_extension <- [coord(115,177)] +ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] + city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 3c4088b..e43c4eb 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -47,7 +47,7 @@ class tutorial.chapter_05 extends basic_chapter line3_name = "ch5_l3" //Para el barco - sch_list3 = [coord(133,189), coord(168,189)] + //sch_list3 = [coord(133,189), coord_fac_4] veh3_obj = get_veh_ch5(4) veh3_load = 100 veh3_wait = set_waiting_time(7) @@ -76,8 +76,8 @@ class tutorial.chapter_05 extends basic_chapter line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name line2_name = translate("Post") + " City " + get_city_name(city1_tow) - local ta = this.my_tile(sch_list3[0]) - local tb = this.my_tile(sch_list3[0]) + local ta = this.my_tile(ch5_post_ship_halts[0]) + local tb = this.my_tile(ch5_post_ship_halts[1]) line3_name = translate("Post") + " " + ta.get_halt().get_name() + " - " + tb.get_halt().get_name() // search free tile for transformer @@ -198,7 +198,7 @@ class tutorial.chapter_05 extends basic_chapter local siz = list.len() for(local j=0;j Date: Thu, 8 Jan 2026 17:17:33 +0100 Subject: [PATCH 118/217] CHG unnecessary code removed --- class/class_chapter_04.nut | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 06631d7..4e9e7be 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -928,7 +928,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 2: @@ -936,7 +935,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 3: @@ -944,7 +942,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 4://Schedule @@ -952,7 +949,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 5: @@ -960,7 +956,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 6: @@ -968,7 +963,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 7://Schedule @@ -976,7 +970,6 @@ class tutorial.chapter_04 extends basic_chapter local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } return result @@ -987,9 +980,7 @@ class tutorial.chapter_04 extends basic_chapter local t_list = [0] // 0 = all tools allowed local wt_list = [gl_wt] local res = update_tools(t_list, tool_id, wt_list, wt) - result = res.result - if(res.ok) return result - return result + return res.result } function is_dock_build(pos, tool_id, c_list, good) From d61f9a88010589b13d70b1bc0c7b7e4d99d0a2d0 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 8 Jan 2026 18:25:16 +0100 Subject: [PATCH 119/217] CHG chapter 4 step 7 - add oil rigg (factory 4) to schedule passenger ship --- class/class_basic_coords_p128.nut | 9 +++++++++ class/class_basic_coords_p64.nut | 9 +++++++++ class/class_basic_coords_p64g.nut | 13 +++++++++++-- class/class_chapter_04.nut | 19 ++++++++++--------- 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index efd75b0..35866af 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -153,6 +153,15 @@ ch4_ship1_halts <- [coord3d(151, 198, -3)] ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] +// add Oil rigg ( factory 4 to schedule passenger ship ) +ch4_schedule_line3 <- [] +for ( local i = 0; i < ch4_ship3_halts.len(); i++ ) { + ch4_schedule_line3.append(ch4_ship3_halts[i]) + if ( i == 0 || i == 2 ) { + ch4_schedule_line3.append(coord_fac_4) + } +} + ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index ece87eb..0015ee5 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -154,6 +154,15 @@ ch4_ship1_halts <- [coord3d(151, 198, -3)] ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] +// add Oil rigg ( factory 4 to schedule passenger ship ) +ch4_schedule_line3 <- [] +for ( local i = 0; i < ch4_ship3_halts.len(); i++ ) { + ch4_schedule_line3.append(ch4_ship3_halts[i]) + if ( i == 0 || i == 2 ) { + ch4_schedule_line3.append(coord_fac_4) + } +} + ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 20a62af..0459086 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -142,8 +142,6 @@ for ( local i = 0; i < city1_halt_1.len(); i++ ) { city1_city7_air <- [coord(114,176), coord(168,489)] city1_halt_airport_extension <- [coord(115,177)] -ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] - city7_halt <- [ coord(168,490), coord(160,493), coord(155,493), coord(150,494), coord(154,500), coord(159,499), coord(164,498), coord(166,503), coord(171,501), coord(176,501), coord(173,493)] @@ -155,6 +153,17 @@ ch4_ship1_halts <- [coord3d(151, 198, -3)] ch4_ship2_halts <- [ch4_ship1_halts[0], coord3d(114, 194, 1)] ch4_ship3_halts <- [coord3d(133, 189, -3), coord3d(188, 141, -3), coord3d(179, 135, -3)] +// add Oil rigg ( factory 4 to schedule passenger ship ) +ch4_schedule_line3 <- [] +for ( local i = 0; i < ch4_ship3_halts.len(); i++ ) { + ch4_schedule_line3.append(ch4_ship3_halts[i]) + if ( i == 0 || i == 2 ) { + ch4_schedule_line3.append(coord_fac_4) + } +} + +ch5_post_ship_halts <- [ch4_ship3_halts[0], coord_fac_4] + ch7_rail_stations <- [tile_x(57,198,11), tile_x(120,267,3), tile_x(120,327,5), tile_x(120,381,9)] /** diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 4e9e7be..3f86aae 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -47,6 +47,7 @@ class tutorial.chapter_04 extends basic_chapter line1_name = "ch4_l1" line2_name = "ch4_l2" line3_name = "ch4_l3" + //Script //---------------------------------------------------------------------------------- sc_way_name = get_obj_ch4(1) @@ -77,7 +78,7 @@ class tutorial.chapter_04 extends basic_chapter local pl = 0 if(this.step == 7){ local c_dep = this.my_tile(ship_depot) - local c_list = ch4_ship3_halts //sch_list3 + local c_list = ch4_schedule_line3 //sch_list3 start_sch_tmpsw(pl,c_dep, c_list) } return 0 @@ -171,8 +172,8 @@ class tutorial.chapter_04 extends basic_chapter case 7: local tx_list = "" - local nr = ch4_ship3_halts.len() //sch_list3 - local list = ch4_ship3_halts //sch_list3 + local nr = ch4_schedule_line3.len() //sch_list3 + local list = ch4_schedule_line3 //sch_list3 for (local j=0;j Date: Thu, 8 Jan 2026 18:27:19 +0100 Subject: [PATCH 120/217] CHG unnecessary code removed --- class/class_chapter_05.nut | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index e43c4eb..44d64e0 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -581,12 +581,12 @@ class tutorial.chapter_05 extends basic_chapter local wt = 0 local slope = t.get_slope() local way = t.find_object(mo_way) - local powerline = t.find_object(mo_powerline) - local bridge = t.find_object(mo_bridge) + //local powerline = t.find_object(mo_powerline) + //local bridge = t.find_object(mo_bridge) local label = t.find_object(mo_label) - local building = t.find_object(mo_building) - local sign = t.find_object(mo_signal) - local roadsign = t.find_object(mo_roadsign) + //local building = t.find_object(mo_building) + //local sign = t.find_object(mo_signal) + //local roadsign = t.find_object(mo_roadsign) /*if (way){ wt = way.get_waytype() if (tool_id!=4111) @@ -730,9 +730,9 @@ class tutorial.chapter_05 extends basic_chapter } if (pot1==1 && pot2==0){ if (tool_id==4108) { - local c_list = city1_post_halts //Lista de todas las paradas de autobus + local c_list = city1_post_halts //Lista de todas las paradas de autobus local c_dep = city1_road_depot //Coordeadas del deposito - local nr = c_list.len() //Numero de paradas + local nr = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, nr, c_list, pos) } @@ -1126,14 +1126,13 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [0] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result + break case 2: local t_list = [tool_build_way, tool_remove_way, tool_remover, tool_build_depot, tool_build_station] local wt_list = [wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 3: @@ -1141,7 +1140,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [wt_power] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 4: @@ -1149,7 +1147,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [0] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } @@ -1169,7 +1166,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [-1] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 2: @@ -1177,7 +1173,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break case 3: @@ -1186,7 +1181,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } else { @@ -1194,7 +1188,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [wt_power] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } @@ -1204,7 +1197,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [wt_road] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } else { @@ -1212,7 +1204,6 @@ class tutorial.chapter_05 extends basic_chapter local wt_list = [0, wt_power] local res = update_tools(t_list, tool_id, wt_list, wt) result = res.result - if(res.ok) return result break } } From 1232f82945cf81069c8cb432883a866476cfa85e Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 8 Jan 2026 18:33:50 +0100 Subject: [PATCH 121/217] CHG version to 2.0.03 --- scenario.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenario.nut b/scenario.nut index b60e084..1bd0db9 100644 --- a/scenario.nut +++ b/scenario.nut @@ -5,7 +5,7 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files -const version = 2002 +const version = 2003 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" From 3d3da8fa077dd99866e089372321fa3e0a0a0415 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 9 Jan 2026 07:57:00 +0100 Subject: [PATCH 122/217] FIX chapter 7 - count passenger --- class/class_chapter_07.nut | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 94a0eee..f268958 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -140,7 +140,7 @@ class tutorial.chapter_07 extends basic_chapter } function is_chapter_completed(pl) { - persistent.ch_max_steps = 5 + persistent.ch_max_steps = 4 local chapter_step = persistent.step persistent.ch_max_sub_steps = 0 // count all sub steps persistent.ch_sub_step = 0 // actual sub step @@ -171,12 +171,12 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local c = 0 local tile = check_halt_public(ch7_rail_stations[1]) if ( tile != null ) { - if ( c == 0 ) { + if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[1], gl_wt, gl_good) - c++ + pass_count++ + gui.add_message(" ch7 transfer_pass " + transfer_pass) } load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } @@ -193,12 +193,11 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local c = 0 local tile = check_halt_public(ch7_rail_stations[2]) if ( tile != null ) { - if ( c == 0 ) { + if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[2], gl_wt, gl_good) - c++ + pass_count++ } load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } @@ -215,12 +214,11 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local c = 0 local tile = check_halt_public(ch7_rail_stations[3]) if ( tile != null ) { - if ( c == 0 ) { + if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[3], gl_wt, gl_good) - c++ + pass_count++ } load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } From aa636c92255ae1fc0878efec0ba4ef8eacd0ae82 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 9 Jan 2026 13:43:51 +0100 Subject: [PATCH 123/217] CHG remove debug message --- class/class_chapter_07.nut | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index f268958..a4aa1bf 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -140,7 +140,7 @@ class tutorial.chapter_07 extends basic_chapter } function is_chapter_completed(pl) { - persistent.ch_max_steps = 4 + persistent.ch_max_steps = 5 local chapter_step = persistent.step persistent.ch_max_sub_steps = 0 // count all sub steps persistent.ch_sub_step = 0 // actual sub step @@ -176,7 +176,6 @@ class tutorial.chapter_07 extends basic_chapter if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[1], gl_wt, gl_good) pass_count++ - gui.add_message(" ch7 transfer_pass " + transfer_pass) } load = cov_pax(tile, gl_wt, gl_good) - transfer_pass } From 2ef6762d9b8e3d1c600cc3c15fa138ad61ecbca1 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 9 Jan 2026 21:36:57 +0100 Subject: [PATCH 124/217] CHG output scenario finish --- class/class_chapter_07.nut | 6 +-- de.tab | 2 + de/chapter_07/goal.txt | 2 +- en.tab | 2 + en/chapter_07/goal.txt | 2 +- es.tab | 2 + es/chapter_07/goal.txt | 2 +- scenario.nut | 107 +++++++++++++++++++------------------ 8 files changed, 65 insertions(+), 60 deletions(-) diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index a4aa1bf..042d4de 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -140,7 +140,7 @@ class tutorial.chapter_07 extends basic_chapter } function is_chapter_completed(pl) { - persistent.ch_max_steps = 5 + persistent.ch_max_steps = 4 local chapter_step = persistent.step persistent.ch_max_sub_steps = 0 // count all sub steps persistent.ch_sub_step = 0 // actual sub step @@ -229,10 +229,6 @@ class tutorial.chapter_07 extends basic_chapter } //return 75 break; - - case 5: - // last step no actions - break; } local percentage = chapter_percentage(persistent.ch_max_steps, chapter_step, persistent.ch_max_sub_steps, persistent.ch_sub_step) return percentage diff --git a/de.tab b/de.tab index 238353b..0388be3 100644 --- a/de.tab +++ b/de.tab @@ -48,6 +48,8 @@ Chapter Kapitel Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}). Kapitel {number} - {cname} abgeschlossen, nächstes Kapitel {nextcname} beginnt hier: ({coord}). +Chapter {number} - {cname} complete. +Kapitel {number} - {cname} abgeschlossen. Checking Compatibility Versionsprüfung Choose a different stop. diff --git a/de/chapter_07/goal.txt b/de/chapter_07/goal.txt index 9f43713..4303b22 100644 --- a/de/chapter_07/goal.txt +++ b/de/chapter_07/goal.txt @@ -1 +1 @@ -

{txtst_01}Schritt A - Die Stadtbusse I
{step_01}

{txtst_02}Schritt B - Die Stadtbusse II
{step_02}

{txtst_03}Schritt C - Die Stadtbusse III
{step_03}

{txtst_04}Schritt D - Die Stadtbusse IV
{step_04}

{txtst_05}Schritt E - Ende des Szenarios
{step_05}

\ No newline at end of file +

{txtst_01}Schritt A - Die Stadtbusse I
{step_01}

{txtst_02}Schritt B - Die Stadtbusse II
{step_02}

{txtst_03}Schritt C - Die Stadtbusse III
{step_03}

{txtst_04}Schritt D - Die Stadtbusse IV
{step_04}

\ No newline at end of file diff --git a/en.tab b/en.tab index 4ab8bc4..97df77b 100644 --- a/en.tab +++ b/en.tab @@ -20,6 +20,8 @@ Bus networks Bus Networks Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}). Congratulations on completing Chapter {number} - {cname}, Next Chapter '{nextcname}' start here: ({coord}). +Chapter {number} - {cname} complete. +Congratulations on completing Chapter {number} - {cname}. Dock No.%d must accept [%s] Dock No.%d must accept %s Here diff --git a/en/chapter_07/goal.txt b/en/chapter_07/goal.txt index feeee72..0a5ae5a 100644 --- a/en/chapter_07/goal.txt +++ b/en/chapter_07/goal.txt @@ -1 +1 @@ -

{txtst_01}Step A - The buses of the city I
{step_01}

{txtst_02}Step B - The buses of the city II
{step_02}

{txtst_03}Step C - The buses of the city III
{step_03}

{txtst_04}Step D - The buses of the city IV
{step_04}

{txtst_05}Step E - End Scenario
{step_05}

\ No newline at end of file +

{txtst_01}Step A - The buses of the city I
{step_01}

{txtst_02}Step B - The buses of the city II
{step_02}

{txtst_03}Step C - The buses of the city III
{step_03}

{txtst_04}Step D - The buses of the city IV
{step_04}

\ No newline at end of file diff --git a/es.tab b/es.tab index ec6e13b..9464244 100644 --- a/es.tab +++ b/es.tab @@ -48,6 +48,8 @@ Chapter Capítulo Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}). Felicitaciones, has completado el Capítulo {number} - {cname}, el siguiente Capítulo '{nextcname}' empieza aqui: ({coord}). +Chapter {number} - {cname} complete. +Felicitaciones, has completado el Capítulo {number} - {cname}. Checking Compatibility Comprobando Compatibilidad Choose a different stop. diff --git a/es/chapter_07/goal.txt b/es/chapter_07/goal.txt index c02c71f..4234968 100644 --- a/es/chapter_07/goal.txt +++ b/es/chapter_07/goal.txt @@ -1 +1 @@ -

{txtst_01}Paso A - Los autobuses de la ciudad I
{step_01}

{txtst_02}Paso B - Los autobuses de la ciudad II
{step_02}

{txtst_03}Paso C - Los autobuses de la ciudad III
{step_03}

{txtst_04}Paso D - Los autobuses de la ciudad IV
{step_04}

{txtst_05}Paso E - Fin del Escenario
{step_05}

\ No newline at end of file +

{txtst_01}Paso A - Los autobuses de la ciudad I
{step_01}

{txtst_02}Paso B - Los autobuses de la ciudad II
{step_02}

{txtst_03}Paso C - Los autobuses de la ciudad III
{step_03}

{txtst_04}Paso D - Los autobuses de la ciudad IV
{step_04}

\ No newline at end of file diff --git a/scenario.nut b/scenario.nut index 1bd0db9..9cd346f 100644 --- a/scenario.nut +++ b/scenario.nut @@ -356,7 +356,7 @@ function load_chapter(number,pl) chapter = tutorial["chapter_"+(number < 10 ? "0":"")+number](pl) chapter.chap_nr = number } - else{ + else if ( persistent.chapter <= chapter_max ) { chapter = tutorial["chapter_"+(number < 10 ? "0":"")+number](pl) if ( (number == persistent.chapter) && (chapter.startcash > 0) ) // set cash money here player_x(0).book_cash( (chapter.startcash - player_x(0).get_cash()[0]) * 100) @@ -375,12 +375,12 @@ function load_conv_ch(number, step, pl) } else { rules.gui_needs_update() } - if (!resul_version.pak || !resul_version.st){ + if (!resul_version.pak || !resul_version.st) { number = 0 chapter = tutorial["chapter_"+(number < 10 ? "0":"")+number](pl) chapter.chap_nr = number } - else{ + else { chapter = tutorial["chapter_"+(number < 10 ? "0":"")+number](pl) if ( (number == persistent.chapter) && (chapter.startcash > 0) ) // set cash money here @@ -432,14 +432,19 @@ function get_rule_text(pl) function get_goal_text(pl) { + if( persistent.chapter == tutorial.len() && chapter.is_chapter_completed(pl) >= 100 ) { + return "

" + translate("Tutorial Scenario complete.") + "

" + } return chapter.give_title() + chapter.get_goal_text( pl, my_chapter() ) } function get_result_text(pl) { // finished ... - if(persistent.chapter>tutorial.len()) { + if( persistent.chapter == tutorial.len() && chapter.is_chapter_completed(pl) >= 100 ) { + //return ttextfile("finished.txt") local text = ttextfile("finished.txt") + text.title = "

" + translate("Tutorial Scenario complete.") + "

" return text } @@ -527,45 +532,45 @@ function labels_text_debug() } - /* - * calculate percentage chapter complete - * - * ch_steps = count chapter steps - * step = actual chapter step - * sup_steps = count sub steps in a chapter step - * sub_step = actual sub step in a chapter step - * - * no sub steps in chapter step, then set sub_steps and sub_step to 0 - * - * This function is called during a step() and can alter the map - * - */ - function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) - { - local percentage_step = 100 / ch_steps +/* + * calculate percentage chapter complete + * + * ch_steps = count chapter steps + * step = actual chapter step + * sup_steps = count sub steps in a chapter step + * sub_step = actual sub step in a chapter step + * + * no sub steps in chapter step, then set sub_steps and sub_step to 0 + * + * This function is called during a step() and can alter the map + * + */ +function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) +{ + local percentage_step = 100 / ch_steps - local percentage = percentage_step * ch_step + local percentage = percentage_step * ch_step - local percentage_sub_step = 0 - if ( sub_steps > 0 && sub_step > 0) { - percentage_sub_step = (percentage_step / sub_steps ) * sub_step - percentage += percentage_sub_step - } + local percentage_sub_step = 0 + if ( sub_steps > 0 && sub_step > 0) { + percentage_sub_step = (percentage_step / sub_steps ) * sub_step + percentage += percentage_sub_step + } - if ( ch_step <= ch_steps ) { - percentage -= percentage_step - } + if ( ch_step <= ch_steps ) { + percentage -= percentage_step + } //gui.add_message("ch_steps "+ch_steps+" ch_step "+ch_step+" ch_steps "+sub_steps+" sub_step "+sub_step) - // tutorial finish - if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { - percentage = 100 - } - - return percentage + // tutorial finish + if ( tutorial.len() == persistent.chapter && ch_steps == ch_step && sub_steps == sub_step ) { + percentage = 100 } + return percentage +} + /** * This function check whether finished or not * Is runs in a step, so it can alter the map @@ -575,8 +580,18 @@ function labels_text_debug() function is_scenario_completed(pl) { // finished ... - if(persistent.chapter > chapter_max) { - return 100 + if( persistent.chapter > chapter_max ) { + local text = ttext("Chapter {number} - {cname} complete.") + text.number = chapter_max + text.cname = translate(""+chapter.chapter_name+"") + gui.add_message( text.tostring() ) + + rules.clear() + rules.gui_needs_update() + scr_jump = true + text = translate("Tutorial Scenario complete.") + gui.add_message( text.tostring() ) + return 100 } //-------Debug ==================================== @@ -680,7 +695,7 @@ function is_scenario_completed(pl) gl_percentage = percentage persistent.gl_percentage = gl_percentage - if (percentage >= 100){ // give message , be sure to have 100% or more + if ( percentage >= 100 ) { // give message , be sure to have 100% or more local text = ttext("Chapter {number} - {cname} complete, next Chapter {nextcname} start here: ({coord}).") text.number = persistent.chapter text.cname = translate(""+chapter.chapter_name+"") @@ -688,14 +703,6 @@ function is_scenario_completed(pl) persistent.chapter++ persistent.status.chapter++ - // finished ... - if(persistent.chapter > chapter_max) { - rules.clear() - rules.gui_needs_update() - scr_jump = true - return 100 - } - load_chapter(persistent.chapter, pl) chapter.chap_nr = persistent.chapter percentage = chapter.is_chapter_completed(pl) @@ -704,13 +711,9 @@ function is_scenario_completed(pl) text.nextcname = translate(""+chapter.chapter_name+"") text.coord = chapter.chapter_coord.tostring() chapter.start_chapter() //Para iniciar variables en los capitulos - if (persistent.chapter >1) gui.add_message(text.tostring()) - } - percentage = scenario_percentage(percentage) - if ( percentage >= 100 ) { // scenario complete - local text = translate("Tutorial Scenario complete.") - gui.add_message( text.tostring() ) + if (persistent.chapter > 1 && persistent.chapter < chapter_max ) gui.add_message(text.tostring()) } + return percentage } From 0d4efe128304a4b2d87f297a794dd6a82e926c7f Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 09:38:26 +0100 Subject: [PATCH 125/217] CHG textfiles --- de/finished.txt | 2 +- en/finished.txt | 2 +- es/finished.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/de/finished.txt b/de/finished.txt index 4211ad7..81f9516 100644 --- a/de/finished.txt +++ b/de/finished.txt @@ -1 +1 @@ -

Das ist für den Moment alles, vielen Dank, dass Sie das mythische Simutrans spielen.

Sie können hier folgen: www.facebook.com/Simutrans
Bei Fragen helfen wir Ihnen gerne im internationalem Forum forum.simutrans.com oder im deutschen Forum simutrans-forum.de
Weitere Informationen finden sie auch unter wiki.simutrans.com

Dank an die gesamte Simutrans-Community und insbesondere an:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Grüße!! @Yona-TYT.

\ No newline at end of file +{title}

Das ist für den Moment alles, vielen Dank, dass Sie das mythische Simutrans spielen.

Sie können hier folgen: www.facebook.com/Simutrans
Bei Fragen helfen wir Ihnen gerne im internationalem Forum forum.simutrans.com oder im deutschen Forum simutrans-forum.de
Weitere Informationen finden sie auch unter wiki.simutrans.com

Dank an die gesamte Simutrans-Community und insbesondere an:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Grüße!! @Yona-TYT.

\ No newline at end of file diff --git a/en/finished.txt b/en/finished.txt index 0e6a647..94a93d6 100644 --- a/en/finished.txt +++ b/en/finished.txt @@ -1 +1 @@ -

This is all for the moment, thank you very much for playing the mythical Simutrans.

You can follow here: https://www.facebook.com/Simutrans
Any questions we are here to help in the forum: https://forum.simutrans.com/

Credits to the entire Simutrans community, and especially to:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Regards!! @Yona-TYT.

\ No newline at end of file +{title}

This is all for the moment, thank you very much for playing the mythical Simutrans.

You can follow here: https://www.facebook.com/Simutrans
Any questions we are here to help in the forum: https://forum.simutrans.com/

Credits to the entire Simutrans community, and especially to:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Regards!! @Yona-TYT.

\ No newline at end of file diff --git a/es/finished.txt b/es/finished.txt index a008e2d..550e9c5 100644 --- a/es/finished.txt +++ b/es/finished.txt @@ -1 +1 @@ -

Hasta aquí llega el Escenario, muchas gracias por jugar el mítico Simutrans.

Puedes seguirnos aqui: https://www.facebook.com/Simutrans
Cualquier duda estamos para ayudar en el foro: https://forum.simutrans.com/

Créditos a toda la comunidad de Simutrans y en especial a:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Saludos!! @Yona-TYT.

\ No newline at end of file +{title}

Hasta aquí llega el Escenario, muchas gracias por jugar el mítico Simutrans.

Puedes seguirnos aqui: https://www.facebook.com/Simutrans
Cualquier duda estamos para ayudar en el foro: https://forum.simutrans.com/

Créditos a toda la comunidad de Simutrans y en especial a:
Dwachs
Prissi
ny911
HaydenRead
Tjoeker
gauthier
Andarix
Roboron

Saludos!! @Yona-TYT.

\ No newline at end of file From c22b4fa43908083410ec5da4711f897b93720faf Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 09:40:44 +0100 Subject: [PATCH 126/217] ADD script download texts Windows command in console: wsl ./text_download --- text_download.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 text_download.sh diff --git a/text_download.sh b/text_download.sh new file mode 100644 index 0000000..fdf6843 --- /dev/null +++ b/text_download.sh @@ -0,0 +1,2 @@ +wget -q --delete-after https://simutrans-germany.com/translator_page/scenarios/scenario_5/download.php +wget -O texts.zip https://simutrans-germany.com/translator_page/scenarios/scenario_5/data/language_pack-Scenario+Tutorial+multipak.zip From 66178d8d9b9a0bfaf5a92e10e0614b3177a8c704 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 09:56:40 +0100 Subject: [PATCH 127/217] CHG schedules --- class/class_basic_data.nut | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index f7d9e42..7d3cff2 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -947,7 +947,7 @@ function set_convoy_count(id) { return 2 break case 15: - return 5 + return 4 break } break @@ -996,7 +996,7 @@ function set_convoy_count(id) { return 2 break case 15: - return 5 + return 4 break } break @@ -1045,7 +1045,7 @@ function set_convoy_count(id) { return 2 break case 15: - return 5 + return 4 break } break @@ -1154,7 +1154,7 @@ function set_loading_capacity(id) { case "pak64": switch (id) { case 1: - return 100 + return 60 break case 2: return 100 @@ -1172,7 +1172,7 @@ function set_loading_capacity(id) { return 100 break case 7: - return 100 + return 60 break } break @@ -1197,14 +1197,14 @@ function set_loading_capacity(id) { return 100 break case 7: - return 100 + return 60 break } break case "pak128": switch (id) { case 1: - return 100 + return 60 break case 2: return 100 @@ -1222,7 +1222,7 @@ function set_loading_capacity(id) { return 100 break case 7: - return 100 + return 60 break } break @@ -1256,7 +1256,7 @@ function set_waiting_time(id) { return 10571 break case 2: - return 10571 + return 6345 break case 3: return 10571 @@ -1280,7 +1280,7 @@ function set_waiting_time(id) { return 10571 break case 10: - return 10571 + return 4230 break } break @@ -1314,7 +1314,7 @@ function set_waiting_time(id) { return 10571 break case 10: - return 10571 + return 4230 break } break @@ -1324,7 +1324,7 @@ function set_waiting_time(id) { return 10571 break case 2: - return 10571 + return 6345 break case 3: return 10571 @@ -1348,7 +1348,7 @@ function set_waiting_time(id) { return 10571 break case 10: - return 10571 + return 4230 break } break From 7aed81c31953b1f851da64398c21ef141e258976 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 15:14:04 +0100 Subject: [PATCH 128/217] CHG code style --- class/class_basic_chapter.nut | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 2fb4c3c..9f56b7d 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -222,6 +222,7 @@ class basic_chapter } return format(translate("The number max of vehicles in circulation must be [%d]."),max) } + function get_convoy_nr(nr, max) { local cov_nr = 0 @@ -581,7 +582,7 @@ class basic_chapter return null } - function is_waystop_correct(player,schedule,nr,load,wait,coord, line = false) + function is_waystop_correct(player, schedule, nr, load, wait, coord, line = false) { // coord = x,y,z place to compare the waystop // nr = number of schedule.entrie to compare @@ -635,6 +636,7 @@ class basic_chapter else if((c_buld1.x == c_buld2.x) && (c_buld1.y == c_buld2.y)) { result = null } + if (result!=null){ local text = ttext("The waystop {nr} '{name}' isn't on place {pos}") text.name = target_list[0].get_name() @@ -689,7 +691,7 @@ class basic_chapter return result } - function is_convoy_correct(depot,cov,veh,good_list,name, max_tile, is_st_tile = false) + function is_convoy_correct(depot, cov, veh, good_list, name, max_tile, is_st_tile = false) { local cov_list = depot.get_convoy_list() local cov_nr = cov_list.len() @@ -781,7 +783,7 @@ class basic_chapter if (cov_nr==cov) res.cov = true - //Check name car and cab + //Check name car and cab for (local j=0;j size) - return format(translate("The schedule needs to have %d waystops, but there are %d ."),size, nr) + return format(translate("The schedule needs to have %d waystops, but there are %d ."), size, nr) for(local j=0;j Date: Sat, 10 Jan 2026 15:15:48 +0100 Subject: [PATCH 129/217] CHG add define waiting halts for passenger lines --- class/class_basic_data.nut | 150 ++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 20 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 7d3cff2..b6e74c2 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -31,7 +31,7 @@ function get_factory_data(id) { return t } -/* +/** * rename factory names * translate object name in to language by start scenario * @@ -131,7 +131,7 @@ function rename_factory_names() { */ } -/* +/** * translate objects * * @@ -175,7 +175,7 @@ function translate_objects() { rename_factory_names() } -/* +/** * set vehicle for chapter 2 step 4 * */ @@ -194,7 +194,7 @@ function get_veh_ch2_st4() { } -/* +/** * set objects for chapter 2 * * id 1 = way name @@ -256,7 +256,7 @@ function get_obj_ch2(id) { } } -/* +/** * set vehicle for chapter 3 * * id 1 = step 5 loco @@ -339,7 +339,7 @@ function get_veh_ch3(id) { } -/* +/** * set objects for chapter 3 * * id 1 = way name @@ -431,7 +431,7 @@ function get_obj_ch3(id) { } } -/* +/** * set vehicle for chapter 4 * * id 1 = step 4 ship @@ -474,7 +474,7 @@ function get_veh_ch4(id) { } -/* +/** * set objects for chapter 4 * * id 1 = way name @@ -546,7 +546,7 @@ function get_obj_ch4(id) { } } -/* +/** * set vehicle for chapter 5 * * id 1 = step 2 truck (coal) @@ -609,7 +609,7 @@ function get_veh_ch5(id) { } -/* +/** * set objects for chapter 5 * * id 1 = road way name @@ -691,7 +691,7 @@ function get_obj_ch5(id) { } } -/* +/** * set vehicle for chapter 6 * * id 1 = step 2 airplane (passenger) @@ -744,7 +744,7 @@ function get_veh_ch6(id) { } -/* +/** * set objects for chapter 6 * * id 1 = runway name @@ -826,7 +826,7 @@ function get_obj_ch6(id) { } } -/* +/** * set count wg for train * * id 1 - chapter 3 : train good Holz @@ -879,7 +879,7 @@ function set_train_lenght(id) { } } -/* +/** * set count convoys for line * * id 1 - chapter 2 : city1_halt_1 - halts city 1 @@ -1052,7 +1052,7 @@ function set_convoy_count(id) { } } -/* +/** * set transportet goods * * id 1 - chapter 3 : train good Holz @@ -1136,7 +1136,7 @@ function set_transportet_goods(id) { } -/* +/** * set loading capacity * * id 1 - chapter 2 step 4 : bus city Pollingwick @@ -1230,7 +1230,7 @@ function set_loading_capacity(id) { } -/* +/** * set waiting time * * id 1 - chapter 2 step 4 : bus city Pollingwick @@ -1256,7 +1256,7 @@ function set_waiting_time(id) { return 10571 break case 2: - return 6345 + return 6343 break case 3: return 10571 @@ -1356,7 +1356,7 @@ function set_waiting_time(id) { } -/* +/** * goods def * * id = good id @@ -1415,7 +1415,7 @@ function get_good_data(id, select = null) { return output } -/* +/** * factory prod and good data for textfiles * * tile = tile_x factory @@ -1477,6 +1477,14 @@ function get_good_data(id, select = null) { } +/** + * add files for more infos + * + * bridge - bridge build + * tunnel - tunnel build + * info - more infos for pakset + * + */ function get_info_file(txt_file) { //ttextfile("info/build_bridge.txt") @@ -1523,3 +1531,105 @@ function get_info_file(txt_file) { } } + +/** + * set passenger halt for waiting + * + * id 1 = city1_halt_1[id] - halts city 1 + * id 2 = city1_halt_2 - halts connect city 1 dock and station + * id 3 = city2_halt_1 - halts connect city 2 to city 1 + * id 4 = line_connect_halt - halt in all halt lists city1 + * + * + * + */ +function get_waiting_halt(id) { + + switch (pak_name) { + case "pak64": + switch (id) { + case 1: + return 2 + break + case 2: + return 4 + break + case 3: + return 0 + break + case 4: + return 0 + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + } + break + case "pak64.german": + switch (id) { + case 1: + return 2 + break + case 2: + return 4 + break + case 3: + return 0 + break + case 4: + return 0 + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + } + break + case "pak128": + switch (id) { + case 1: + return 2 + break + case 2: + return 4 + break + case 3: + return 0 + break + case 4: + return 0 + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + } + break + } + +} \ No newline at end of file From 8cbbd89ef8c059a9c31c7a4921f38d62c52c75fd Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 16:30:29 +0100 Subject: [PATCH 130/217] CHG comment --- class/class_basic_data.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index b6e74c2..b3c06d2 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1536,9 +1536,9 @@ function get_info_file(txt_file) { * set passenger halt for waiting * * id 1 = city1_halt_1[id] - halts city 1 - * id 2 = city1_halt_2 - halts connect city 1 dock and station - * id 3 = city2_halt_1 - halts connect city 2 to city 1 - * id 4 = line_connect_halt - halt in all halt lists city1 + * id 2 = city1_halt_2[id] - halts connect city 1 dock and station + * id 3 = city2_halt_1[id] - halts connect city 2 to city 1 + * id 4 = * * * @@ -1632,4 +1632,4 @@ function get_waiting_halt(id) { break } -} \ No newline at end of file +} From 9d520aa244674037d9780e04339d8a9bc9a22ad9 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 21:50:30 +0100 Subject: [PATCH 131/217] CHG code style --- class/class_basic_chapter.nut | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 9f56b7d..3e6f9a0 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1078,7 +1078,7 @@ class basic_chapter return null } - function backward_pot(pnr) + function backward_pot(pnr) { if (pnr==0) {pot0 = 0; persistent.pot[pnr]=pot0} if (pnr==1) {pot1 = 0; persistent.pot[pnr]=pot1} @@ -1106,7 +1106,7 @@ class basic_chapter return null } - function reset_pot() + function reset_pot() { pot0 = 0 pot1 = 0 @@ -1135,7 +1135,8 @@ class basic_chapter } function reset_glsw() - { for(local j=0;j<20;j++){ + { + for(local j=0;j<20;j++){ glsw[j]=0 persistent.glsw[j]=glsw[j] } @@ -1144,7 +1145,8 @@ class basic_chapter } function reset_tmpsw() - { for(local j=0;j<20;j++){ + { + for(local j=0;j<20;j++){ tmpsw[j] = 0 } @@ -1153,8 +1155,9 @@ class basic_chapter } function reset_stop_flag() - { for(local j=0;j<20;j++){ - stop_flag[j]=0 + { + for(local j=0;j<20;j++){ + stop_flag[j]=0 } return null } @@ -2137,15 +2140,15 @@ class basic_chapter return result } - function get_dep_cov_nr(a,b){ + function get_dep_cov_nr(a,b){ local nr = -1 - for(local j=a;j Date: Sat, 10 Jan 2026 21:51:48 +0100 Subject: [PATCH 132/217] CHG add passenger waiting halts chapter 3 - 6 --- class/class_basic_data.nut | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index b3c06d2..9daff78 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1535,12 +1535,14 @@ function get_info_file(txt_file) { /** * set passenger halt for waiting * - * id 1 = city1_halt_1[id] - halts city 1 - * id 2 = city1_halt_2[id] - halts connect city 1 dock and station - * id 3 = city2_halt_1[id] - halts connect city 2 to city 1 - * id 4 = - * - * + * id 1 = city1_halt_1[id] - halts city 1 + * id 2 = city1_halt_2[id] - halts connect city 1 dock and station + * id 3 = city2_halt_1[id] - halts connect city 2 to city 1 + * id 4 = ch3_rail_stations - city line + * id 5 = ch4_ship3_halts - passenger ship + * id 6 = city1_city7_air - airplane + * id 7 = city1_halt_airport - bus airport - city 1 + * id 8 = city7_halt - bus airport - city 7 * */ function get_waiting_halt(id) { @@ -1558,7 +1560,7 @@ function get_waiting_halt(id) { return 0 break case 4: - return 0 + return 2 break case 5: return 0 From 7417fe90aa450eda3e88346525cbe7e110ec56d5 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 21:52:53 +0100 Subject: [PATCH 133/217] CHG configurable waiting halts for passenger lines --- class/class_chapter_03.nut | 20 ++++++++++++++------ class/class_chapter_04.nut | 12 ++++++------ class/class_chapter_05.nut | 8 ++++---- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index e075944..5e96f83 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -445,7 +445,7 @@ class tutorial.chapter_03 extends basic_chapter mark_st++ } } - local c = coord(list[0].x, list[0].y) + local c = coord(list[get_waiting_halt(4)].x, list[get_waiting_halt(4)].y) text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.dep = ch3_rail_depot3.b.href("("+ch3_rail_depot3.b.tostring()+")") @@ -2005,7 +2005,7 @@ class tutorial.chapter_03 extends basic_chapter break case 11: - local selc = 0 + local selc = get_waiting_halt(4) local load = loc3_load local time = loc3_wait local c_list = ch3_rail_stations @@ -2027,7 +2027,7 @@ class tutorial.chapter_03 extends basic_chapter case 5: local wt = gl_wt if ((depot.x != ch3_rail_depot1.b.x)||(depot.y != ch3_rail_depot1.b.y)) - return "Depot coordinate is incorrect ("+coord3d_to_string(depot)+")." + return "Depot coordinate is incorrect (" + coord3d_to_string(depot) + ")." local cov = 1 local veh = set_train_lenght(1) + 1 local good_list = [good_desc_x(good_alias.wood).get_catg_index()] //Wood @@ -2035,6 +2035,7 @@ class tutorial.chapter_03 extends basic_chapter local st_tile = loc1_tile // 3 local is_st_tile = true result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile, is_st_tile) + gui.add_message("is_convoy_allowed result " + result) if (result!=null){ backward_pot(0) @@ -2042,13 +2043,20 @@ class tutorial.chapter_03 extends basic_chapter return train_result_message(result, translate(name), good, veh, cov, st_tile) } + gui.add_message("is_convoy_allowed current_cov " + current_cov) + gui.add_message("is_convoy_allowed ch3_cov_lim1.a " + ch3_cov_lim1.a) + gui.add_message("is_convoy_allowed ch3_cov_lim1.b " + ch3_cov_lim1.b) if (current_cov>ch3_cov_lim1.a && current_cov%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(list[0].x, list[0].y) + local c = coord(list[get_waiting_halt(5)].x, list[get_waiting_halt(5)].y) text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.ship = translate(ship2_name_obj) @@ -601,7 +601,7 @@ class tutorial.chapter_04 extends basic_chapter return compare_schedule(result, pl, schedule, selc, load, time, c_list, false) break case 7: - local selc = 0 + local selc = get_waiting_halt(5) local load = ship2_load local time = ship2_wait local c_list = ch4_schedule_line3 //sch_list3 @@ -701,7 +701,7 @@ class tutorial.chapter_04 extends basic_chapter return ship_result_message(result, translate(name), good, veh, cov) } if (current_cov>ch4_cov_lim3.a && current_cov Date: Sat, 10 Jan 2026 21:55:34 +0100 Subject: [PATCH 134/217] CHG changed text step 2/B and add configurable waiting halts for passenger lines todo: step 2 schedule list show OK --- class/class_chapter_06.nut | 117 +++++++++++++++++++++++---------- de/chapter_06/goal_step_02.txt | 2 +- en/chapter_06/goal_step_02.txt | 2 +- es/chapter_06/goal_step_02.txt | 2 +- 4 files changed, 84 insertions(+), 39 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 585efde..7c3351e 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -88,7 +88,23 @@ class tutorial.chapter_06 extends basic_chapter line1_name = "Air " + cty1.name + " - " + cty2.name line2_name = "City " + cty1.name + " - Airport" line3_name = "City " + cty2.name + " - Airport" - +/* + //Schedule list form current convoy + if(this.step == 2){ + local c_dep = this.my_tile(city1_road_depot) + local c_list = city1_halt_1 + start_sch_tmpsw(pl, c_dep, c_list) + } + else if(this.step == 3){ + local c_dep = this.my_tile(city1_road_depot) + local c_list = city1_halt_2 + start_sch_tmpsw(pl, c_dep, c_list) + } + else if(this.step == 4){ + local c_dep = this.my_tile(city1_road_depot) + local c_list = city2_halt_1 + start_sch_tmpsw(pl, c_dep, c_list) + }*/ } function set_goal_text(text){ @@ -101,11 +117,34 @@ class tutorial.chapter_06 extends basic_chapter break case 2: + local list_tx = "" + local c_list = city1_city7_air + local siz = c_list.len() + for (local j=0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) + continue + } + if(tmpsw[j]==0 ){ + list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) + } + else{ + list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) + } + } + local c = coord(c_list[get_waiting_halt(6)].x, c_list[get_waiting_halt(6)].y) + text.stnam = my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.list = list_tx text.plane = translate(plane1_obj) - text.load = set_loading_capacity(7) + text.load = set_loading_capacity(5) text.wait = get_wait_time_text(set_waiting_time(8)) text.cnr = d1_cnr - break + + + break case 3: local list_tx = "" @@ -127,7 +166,7 @@ class tutorial.chapter_06 extends basic_chapter } } local c = coord(c_list[0].x, c_list[0].y) - text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx text.dep2 = " ("+city1_road_depot.tostring()+")" text.load = set_loading_capacity(6) @@ -156,7 +195,7 @@ class tutorial.chapter_06 extends basic_chapter } } local c = coord(c_list[0].x, c_list[0].y) - text.stnam = "1) "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx text.dep3 = " ("+city7_road_depot.tostring()+")" @@ -166,12 +205,12 @@ class tutorial.chapter_06 extends basic_chapter break } - local st1_halt = my_tile(city1_city7_air[0]).get_halt() + /*local st1_halt = my_tile(city1_city7_air[0]).get_halt() local st2_halt = my_tile(city1_city7_air[1]).get_halt() if(st1_halt){ text.sch1 = " "+st1_halt.get_name()+" ("+city1_city7_air[0].tostring()+")" text.sch2 = " "+st2_halt.get_name()+" ("+city1_city7_air[1].tostring()+")" - } + }*/ text.w1name = translate(obj1_way_name) text.w2name = translate(obj2_way_name) text.bus1 = translate(veh1_obj) @@ -291,6 +330,7 @@ class tutorial.chapter_06 extends basic_chapter case 2: if(current_cov == ch6_cov_lim1.b){ + sch_cov_correct = false this.next_step() } @@ -299,7 +339,7 @@ class tutorial.chapter_06 extends basic_chapter case 3: local c_dep = my_tile(city1_road_depot) - local line_name = line1_name + local line_name = line2_name set_convoy_schedule(pl, c_dep, wt_road, line_name) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) @@ -313,7 +353,7 @@ class tutorial.chapter_06 extends basic_chapter if(current_cov == ch6_cov_lim2.b){ sch_cov_correct = false - this.next_step() + this.next_step() } //return 65 break; @@ -330,7 +370,7 @@ class tutorial.chapter_06 extends basic_chapter } else if (pot0==1 && pot1==0){ local c_dep = my_tile(city7_road_depot) - local line_name = line2_name + local line_name = line3_name set_convoy_schedule(pl, c_dep, wt_road, line_name) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) @@ -495,29 +535,24 @@ class tutorial.chapter_06 extends basic_chapter case 2: if (tool_id==4108) { - if (glsw[0]==0){ - if(pos.x == city1_city7_air[0].x && pos.y == city1_city7_air[0].y) { - glsw[0]=1 - return null + for ( local j = 0; j < city1_city7_air.len(); j++ ) { + if (glsw[j]==0){ + if(pos.x == city1_city7_air[j].x && pos.y == city1_city7_air[j].y) { + glsw[j]=1 + return null + } + else return translate("Click on the stop") + " ("+city1_city7_air[j].tostring()+")!." } - else return translate("Click on the stop") + " ("+city1_city7_air[0].tostring()+")!." } - if (glsw[1]==0 && glsw[0]==1){ - if(pos.x == city1_city7_air[1].x && pos.y == city1_city7_air[1].y) { - glsw[1]=1 - return null - } - else return translate("Click on the stop") + " ("+city1_city7_air[1].tostring()+")!." - } } break; case 3: if (tool_id==4108) { - local c_list = city1_halt_airport //Lista de todas las paradas de autobus + local c_list = city1_halt_airport //Lista de todas las paradas de autobus local c_dep = city1_road_depot //Coordeadas del deposito - local siz = c_list.len() //Numero de paradas + local siz = c_list.len() //Numero de paradas result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." return is_stop_allowed(result, siz, c_list, pos) } @@ -561,7 +596,7 @@ class tutorial.chapter_06 extends basic_chapter reset_glsw() - local selc = 0 + local selc = get_waiting_halt(6) local load = set_loading_capacity(5) local time = set_waiting_time(8) local c_list = city1_city7_air @@ -576,7 +611,9 @@ class tutorial.chapter_06 extends basic_chapter if ( schedule.waytype != wt_road ) result = translate("Only road schedules allowed") - local selc = 0 + reset_glsw() + + local selc = get_waiting_halt(7) local load = set_loading_capacity(6) local time = set_waiting_time(9) local c_list = city1_halt_airport @@ -590,7 +627,10 @@ class tutorial.chapter_06 extends basic_chapter case 4: if ( schedule.waytype != wt_road ) result = translate("Only road schedules allowed") - local selc = 0 + + reset_glsw() + + local selc = get_waiting_halt(8) local load = set_loading_capacity(7) local time = set_waiting_time(10) local c_list = city7_halt @@ -619,6 +659,7 @@ class tutorial.chapter_06 extends basic_chapter local good_list = [good_desc_x(good_alias.passa).get_catg_index()] //Passengers local name = plane1_obj local st_tile = 1 + local load = set_loading_capacity(5) result = is_convoy_correct(depot, cov, veh,good_list, name, st_tile) if (result!=null){ @@ -643,12 +684,14 @@ class tutorial.chapter_06 extends basic_chapter return format(translate("The number of planes in the hangar must be [%d], use the [sell] button."),cov) } - local selc = 0 - local load = set_loading_capacity(7) + local selc = get_waiting_halt(6) local time = set_waiting_time(8) local c_list = city1_city7_air local siz = c_list.len() - return compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) + if(result == null) + reset_tmpsw() + return result } break case 3: @@ -675,7 +718,7 @@ class tutorial.chapter_06 extends basic_chapter return bus_result_message(result, translate(name), veh, cov) } - local selc = 0 + local selc = get_waiting_halt(7) local load = set_loading_capacity(6) local wait = set_waiting_time(9) local siz = c_list.len() @@ -710,7 +753,7 @@ class tutorial.chapter_06 extends basic_chapter return bus_result_message(result, translate(name), veh, cov) } - local selc = 0 + local selc = get_waiting_halt(8) local load = set_loading_capacity(7) local wait = set_waiting_time(10) local siz = c_list.len() @@ -800,6 +843,8 @@ class tutorial.chapter_06 extends basic_chapter tile.remove_object(player_x(1), mo_label) local t = command_x(tool_build_station) t.work(player, tile, sc_sta1) + t = command_x(tool_make_stop_public) + t.work(player, tile) } // Terminal ------------------------------------- if(pot3 == 0) { @@ -840,8 +885,8 @@ class tutorial.chapter_06 extends basic_chapter } local sched = schedule_x(gl_wt, []) local c_list = city1_city7_air - for(local j = 0;j Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

[1] Wählen Sie den Halt {sch1} und konfigurieren Sie den Halt wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%
--> [b] Setzen Sie maximale Wartezeit auf {wait}
[2] Wählen Sie den Halt {sch2}. Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.
[3] Starten Sie das Flugzeug mit Klick auf Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file +

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Halte aus:
{list}

Nachdem Sie alle Halte hinzugefügt haben, wählen Sie den Halt {stnam} und konfigurieren Sie ihn wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file diff --git a/en/chapter_06/goal_step_02.txt b/en/chapter_06/goal_step_02.txt index 3839bfa..0e55f37 100644 --- a/en/chapter_06/goal_step_02.txt +++ b/en/chapter_06/goal_step_02.txt @@ -1 +1 @@ -

The public service needs your help to connect the city {cit1} with the city {cit2} by air.

Click Hangar {dep1} and purchase an aircraft named '{plane}' and configure the route as follows:

[1] Select the Aero stop {sch1} and configure it this way:
--> [a] Set Minimum load to {load}%
--> [b] Set Depart after to {wait}.
[2] Select the Aero stop {sch2} and press Start.

Advance to the next step, when the Plane leaves the hangar.

\ No newline at end of file +

The public service needs your help to connect the city {cit1} with the city {cit2} by air.

Click Hangar {dep1} and purchase an aircraft named '{plane}' and configure the route as follows:

[1] Select all stops in order:
{list}
[2] After adding the stops, select the stop {stnam} from the list and configure as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[3] Use the [Copy Convoy] button to get the {cnr} buses needed.
[4] Now click the [Start] button to make all vehicles leave the depot/garage.

Advance to the next step, when the Plane leaves the hangar.

\ No newline at end of file diff --git a/es/chapter_06/goal_step_02.txt b/es/chapter_06/goal_step_02.txt index 92192ad..113a86e 100644 --- a/es/chapter_06/goal_step_02.txt +++ b/es/chapter_06/goal_step_02.txt @@ -1 +1 @@ -

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Pulsa sobre el Hangar {dep1} y compra una aeronave de nombre '{plane}' y configura la ruta de la siguiente manera:

[1] Seleciona la Parada Aérea {sch1} y configure la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[2] Selecciona la Parada Aérea {sch2} y presiona Arrancar.

Se avanza al siguiete paso, cuando el Avión salga del hangar.

\ No newline at end of file +

El servicio público necesita de tu ayuda para conectar la ciudad {cit1} con la ciudad {cit2} por vía aérea.

Pulsa sobre el Hangar {dep1} y compra una aeronave de nombre '{plane}' y configura la ruta de la siguiente manera:

[1] Seleciona todas las paradas en orden:
{stx}

[2] Tras añadir las paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%
--> [b] Configura Salir después de a {wait}
[3] Usa el botón [Copiar vehículo] para conseguir los {cnr} autobuses necesarios.
[4] Ahora pulsa el botón [Arrancar] para que todos los vehículos dejen el depósito.

Se avanza al siguiete paso, cuando el Avión salga del hangar.

\ No newline at end of file From b7f6867eb4bdb59a9d7892d05298ab0643c984db Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 22:08:37 +0100 Subject: [PATCH 135/217] FIX schedule edit --- class/class_chapter_03.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 5e96f83..8ba0c08 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1305,7 +1305,7 @@ class tutorial.chapter_03 extends basic_chapter case 11: local c_dep = this.my_tile(ch3_rail_depot3.b) - set_convoy_schedule(pl, c_dep, gl_wt, line1_name) + set_convoy_schedule(pl, c_dep, gl_wt, line3_name) if (current_cov == ch3_cov_lim3.b){ this.next_step() @@ -2011,7 +2011,7 @@ class tutorial.chapter_03 extends basic_chapter local c_list = ch3_rail_stations result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ - local line_name = line1_name + local line_name = line3_name update_convoy_schedule(pl, gl_wt, line_name, schedule) } return result From 784bccbef8c099afcd3633a498e6527b50815f4f Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 10 Jan 2026 23:56:06 +0100 Subject: [PATCH 136/217] CHG add get_waiting_halt code --- class/class_basic_data.nut | 22 +++++++++++++++++++++- class/class_chapter_03.nut | 16 ++++++++-------- class/class_chapter_04.nut | 6 +++--- class/class_chapter_05.nut | 36 ++++++++++-------------------------- class/class_chapter_06.nut | 12 ++++++------ 5 files changed, 48 insertions(+), 44 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 9daff78..d624dec 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1533,7 +1533,7 @@ function get_info_file(txt_file) { } /** - * set passenger halt for waiting + * set passenger/post halt for waiting * * id 1 = city1_halt_1[id] - halts city 1 * id 2 = city1_halt_2[id] - halts connect city 1 dock and station @@ -1543,6 +1543,8 @@ function get_info_file(txt_file) { * id 6 = city1_city7_air - airplane * id 7 = city1_halt_airport - bus airport - city 1 * id 8 = city7_halt - bus airport - city 7 + * id 9 = city1_post_halts - halts for post + * id 10 = ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) * */ function get_waiting_halt(id) { @@ -1574,6 +1576,12 @@ function get_waiting_halt(id) { case 8: return 0 break + case 9: + return 0 + break + case 10: + return 0 + break } break case "pak64.german": @@ -1602,6 +1610,12 @@ function get_waiting_halt(id) { case 8: return 0 break + case 9: + return 0 + break + case 10: + return 0 + break } break case "pak128": @@ -1630,6 +1644,12 @@ function get_waiting_halt(id) { case 8: return 0 break + case 9: + return 0 + break + case 10: + return 0 + break } break } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 8ba0c08..5ebde95 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -426,7 +426,7 @@ class tutorial.chapter_03 extends basic_chapter local list = ch3_rail_stations local mark_st = 0 - for (local j=0;j%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) } else{ @@ -446,7 +446,7 @@ class tutorial.chapter_03 extends basic_chapter } } local c = coord(list[get_waiting_halt(4)].x, list[get_waiting_halt(4)].y) - text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (get_waiting_halt(4)+1) + ") " + my_tile(c).get_halt().get_name() + " ("+c.tostring()+")" text.list = tx_list text.dep = ch3_rail_depot3.b.href("("+ch3_rail_depot3.b.tostring()+")") text.loc3 = translate(loc3_name_obj) @@ -2035,7 +2035,7 @@ class tutorial.chapter_03 extends basic_chapter local st_tile = loc1_tile // 3 local is_st_tile = true result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile, is_st_tile) - gui.add_message("is_convoy_allowed result " + result) + //gui.add_message("is_convoy_allowed result " + result) if (result!=null){ backward_pot(0) @@ -2043,9 +2043,9 @@ class tutorial.chapter_03 extends basic_chapter return train_result_message(result, translate(name), good, veh, cov, st_tile) } - gui.add_message("is_convoy_allowed current_cov " + current_cov) - gui.add_message("is_convoy_allowed ch3_cov_lim1.a " + ch3_cov_lim1.a) - gui.add_message("is_convoy_allowed ch3_cov_lim1.b " + ch3_cov_lim1.b) + //gui.add_message("is_convoy_allowed current_cov " + current_cov) + //gui.add_message("is_convoy_allowed ch3_cov_lim1.a " + ch3_cov_lim1.a) + //gui.add_message("is_convoy_allowed ch3_cov_lim1.b " + ch3_cov_lim1.b) if (current_cov>ch3_cov_lim1.a && current_cov[3/3]") } - text.w1 = c1.href(" ("+c1.tostring()+")")+"" - text.w2 = c2.href(" ("+c2.tostring()+")")+"" + text.w1 = c1.href("("+c1.tostring()+")") + text.w2 = c2.href("("+c2.tostring()+")") text.dock = ch4_ship2_halts[1].href("("+ch4_ship2_halts[1].tostring()+")")+"" //sch_list2 text.all_cov = d2_cnr text.load = ship1_load @@ -187,7 +187,7 @@ class tutorial.chapter_04 extends basic_chapter } } local c = coord(list[get_waiting_halt(5)].x, list[get_waiting_halt(5)].y) - text.stnam = ""+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (get_waiting_halt(5)+1)") "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.ship = translate(ship2_name_obj) text.load = ship2_load diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 6f92ba0..dddea06 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -232,9 +232,9 @@ class tutorial.chapter_05 extends basic_chapter list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(c_list[0].x, c_list[0].y) + local c = coord(c_list[get_waiting_halt(9)].x, c_list[get_waiting_halt(9)].y) local tile = my_tile(c) - text.stnam = "1) "+tile.get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (get_waiting_halt(9)+1) + ") "+tile.get_halt().get_name()+" ("+c.tostring()+")" text.list = list_tx text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") @@ -266,9 +266,9 @@ class tutorial.chapter_05 extends basic_chapter list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(c_list[0].x, c_list[0].y) + local c = coord(c_list[get_waiting_halt(10)].x, c_list[get_waiting_halt(10)].y) local tile = my_tile(c) - text.stnam = "1) "+tile.get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (get_waiting_halt(10)+1) + ") "+tile.get_halt().get_name()+" ("+c.tostring()+")" text.list = list_tx text.dep = ship_depot.href("("+ship_depot.tostring()+")") @@ -278,20 +278,6 @@ class tutorial.chapter_05 extends basic_chapter text.nr = siz } break - case 5: - - break - case 6: - - break - case 7: - break - - case 8: - break - - case 9: - break } text.f1 = fab_list[0].c.href(""+fab_list[0].name+" ("+fab_list[0].c.tostring()+")")+"" @@ -748,8 +734,6 @@ class tutorial.chapter_05 extends basic_chapter } } break - case 5: - break } if (tool_id == 4096){ @@ -788,7 +772,7 @@ class tutorial.chapter_05 extends basic_chapter if ( (pl == 0) && (schedule.waytype != wt_road) ) result = translate("Only road schedules allowed") - local selc = 0 + local selc = get_waiting_halt(9) local load = veh2_load local time = veh2_wait local c_list = city1_post_halts @@ -802,7 +786,7 @@ class tutorial.chapter_05 extends basic_chapter if ( (pl == 0) && (schedule.waytype != wt_water) ) result = translate("Only water schedules allowed") - local selc = 0 + local selc = get_waiting_halt(10) local load = veh3_load local time = veh3_wait local c_list = ch5_post_ship_halts @@ -870,7 +854,7 @@ class tutorial.chapter_05 extends basic_chapter local good = translate(good_alias.mail) return truck_result_message(result, translate(name), good, veh, cov) } - local selc = 0 + local selc = get_waiting_halt(9) local load = veh2_load local time = veh2_wait local c_list = city1_post_halts @@ -890,7 +874,7 @@ class tutorial.chapter_05 extends basic_chapter local good = translate(good_alias.mail) return ship_result_message(result, translate(name), good, veh, cov) } - local selc = 0 + local selc = get_waiting_halt(10) local load = veh3_load local time = veh3_wait local c_list = ch5_post_ship_halts @@ -1061,7 +1045,7 @@ class tutorial.chapter_05 extends basic_chapter local c_list = city1_post_halts local siz = c_list.len() for(local j = 0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(c_list[0].x, c_list[0].y) - text.stnam = my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + local c = coord(c_list[get_waiting_halt(7)].x, c_list[get_waiting_halt(7)].y) + text.stnam = (get_waiting_halt(7)+1) + ") " + my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx text.dep2 = " ("+city1_road_depot.tostring()+")" text.load = set_loading_capacity(6) @@ -194,10 +194,10 @@ class tutorial.chapter_06 extends basic_chapter list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(c_list[0].x, c_list[0].y) - text.stnam = my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + local c = coord(c_list[get_waiting_halt(8)].x, c_list[get_waiting_halt(8)].y) + text.stnam = (get_waiting_halt(8)+1) + ") " + my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx - text.dep3 = " ("+city7_road_depot.tostring()+")" + text.dep3 = "("+city7_road_depot.tostring()+")" text.load = set_loading_capacity(7) text.wait = get_wait_time_text(set_waiting_time(10)) From 2529999566f27c4c0654483a2dc28d4c7194ca22 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 00:00:05 +0100 Subject: [PATCH 137/217] FIX typo --- class/class_chapter_04.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 9b596a3..e8ff863 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -187,7 +187,7 @@ class tutorial.chapter_04 extends basic_chapter } } local c = coord(list[get_waiting_halt(5)].x, list[get_waiting_halt(5)].y) - text.stnam = (get_waiting_halt(5)+1)") "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (get_waiting_halt(5)+1) + ") "+my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.list = tx_list text.ship = translate(ship2_name_obj) text.load = ship2_load @@ -298,7 +298,7 @@ class tutorial.chapter_04 extends basic_chapter case 4: cov_cir = get_convoy_nr((ch4_cov_lim1.a), d1_cnr) - if (cov_cir == d1_cnr){ + if ( cov_cir == d1_cnr ){ reset_stop_flag() this.next_step() } @@ -398,7 +398,7 @@ class tutorial.chapter_04 extends basic_chapter case 7: local c_dep = this.my_tile(ship_depot) local line_name = line1_name - set_convoy_schedule(pl,c_dep, gl_wt, line_name) + set_convoy_schedule(pl, c_dep, gl_wt, line_name) if(current_cov == ch4_cov_lim3.b){ this.next_step() } From 1014074995b80491c9af772e7297dbea1dd5f660 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 00:36:41 +0100 Subject: [PATCH 138/217] FIX set OK for add halt to schedule --- class/class_chapter_06.nut | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 748f21c..7f5c0af 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -329,6 +329,19 @@ class tutorial.chapter_06 extends basic_chapter case 2: + local c_dep = my_tile(ch6_air_depot.a) + local line_name = line1_name + set_convoy_schedule(pl, c_dep, wt_air, line_name) + + local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) + local cov_list = depot.get_convoy_list() //Lista de vehiculos en el deposito + local convoy = convoy_x(gcov_id) + if (cov_list.len()>=1){ + convoy = cov_list[0] + } + local all_result = checks_convoy_schedule(convoy, pl) + sch_cov_correct = all_result.res == null ? true : false + if(current_cov == ch6_cov_lim1.b){ sch_cov_correct = false this.next_step() @@ -535,7 +548,7 @@ class tutorial.chapter_06 extends basic_chapter case 2: if (tool_id==4108) { - for ( local j = 0; j < city1_city7_air.len(); j++ ) { + /*for ( local j = 0; j < city1_city7_air.len(); j++ ) { if (glsw[j]==0){ if(pos.x == city1_city7_air[j].x && pos.y == city1_city7_air[j].y) { glsw[j]=1 @@ -543,7 +556,12 @@ class tutorial.chapter_06 extends basic_chapter } else return translate("Click on the stop") + " ("+city1_city7_air[j].tostring()+")!." } - } + }*/ + local c_list = city1_city7_air //Lista de todas las paradas de autobus + local c_dep = ch6_air_depot.a //Coordeadas del deposito + local siz = c_list.len() //Numero de paradas + result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+c_dep.tostring()+")." + return is_stop_allowed(result, siz, c_list, pos) } break; @@ -602,8 +620,7 @@ class tutorial.chapter_06 extends basic_chapter local c_list = city1_city7_air result = compare_schedule(result, pl, schedule, selc, load, time, c_list, false) if(result == null){ - local line_name = line1_name - update_convoy_schedule(pl, wt_air, line_name, schedule) + update_convoy_schedule(pl, wt_air, line1_name, schedule) } return result break @@ -619,8 +636,7 @@ class tutorial.chapter_06 extends basic_chapter local c_list = city1_halt_airport result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ - local line_name = line2_name - update_convoy_schedule(pl, wt_road, line_name, schedule) + update_convoy_schedule(pl, wt_road, line2_name, schedule) } return result break @@ -636,8 +652,7 @@ class tutorial.chapter_06 extends basic_chapter local c_list = city7_halt result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ - local line_name = line3_name - update_convoy_schedule(pl, wt_road, line_name, schedule) + update_convoy_schedule(pl, wt_road, line3_name, schedule) } return result break From dd952c0843b259e7c1d290d9da288c79c176a5dc Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 01:09:18 +0100 Subject: [PATCH 139/217] CHG add translate text for link to next step --- class/class_chapter_01.nut | 1 + de/chapter_01/goal_step_01.txt | 2 +- de/chapter_02/goal_step_04.txt | 2 +- en/chapter_01/goal_step_01.txt | 2 +- es/chapter_01/goal_step_01.txt | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 5e1da41..9de2c6e 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -58,6 +58,7 @@ class tutorial.chapter_01 extends basic_chapter text.pos2 = coord_fac_1.href(""+translate(ch1_text2)+" ("+coord_fac_1.tostring()+")") text.pos3 = coord_st_1.href(""+translate(ch1_text3)+" ("+coord_st_1.tostring()+")") text.link = ""+translate(ch1_text4)+" >>" + text.next_step = translate("Go to next step") break; case 3: text.pos = ""+buil1_name+" ("+city1_mon.tostring()+")" diff --git a/de/chapter_01/goal_step_01.txt b/de/chapter_01/goal_step_01.txt index e0e72c7..0c6748c 100644 --- a/de/chapter_01/goal_step_01.txt +++ b/de/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link 'Schritt überspringen'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Szenariomeldungen

Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Mailbox und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file +

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link '{next_step}'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Szenariomeldungen

Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Mailbox und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_04.txt b/de/chapter_02/goal_step_04.txt index ef2ea3a..0aafc37 100644 --- a/de/chapter_02/goal_step_04.txt +++ b/de/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Fahrzeugen folgen

Mit dieser Option können Sie Fahrzeuge auf ihrer Route verfolgen, sodass sie immer im Blick bleiben, egal wohin sie fahren. Sie wird im Fahrzeug-Fenster aktiviert und befindet sich in der Titelzeile des Fensters (das Auge).

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Klicken Sie auf das bereits fahrende Fahrzeug, um das Konvoi-Fenster anzuzeigen. Suchen Sie in der Titelleiste des Konvoi-Fensters nach dem vierten Symbol (dem Augensymbol) und drücken Sie darauf, um dem Konvoi zu folgen.

Das Tutorial fährt mit dem nächsten Schritt fort, sobald Sie dem Konvoi folgen.

\ No newline at end of file +

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Klicken Sie auf das bereits fahrende Fahrzeug, um das Konvoi-Fenster anzuzeigen. Suchen Sie in der Titelleiste des Konvoi-Fensters nach dem vierten Symbol (dem Augensymbol) und drücken Sie darauf, um dem Konvoi zu folgen.

Das Tutorial fährt mit dem nächsten Schritt fort, sobald Sie den Konvoi gestartet haben.

\ No newline at end of file diff --git a/en/chapter_01/goal_step_01.txt b/en/chapter_01/goal_step_01.txt index 5abe240..18e2b2b 100644 --- a/en/chapter_01/goal_step_01.txt +++ b/en/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

In this first step we are going to explain some basic aspects of the Tutorial Scenario.

Warning Windows

These are used to give a warning to the player in case of doing something wrong, like using the wrong tool, the events on the stage that show pop-ups are:
1- Use of tools, when the map is clicked with the wrong tool.
2- Schedule Vehicles, when the schedule or line of the vehicle is incorrect.
3- Start Vehicles, when the type of vehicle required is incorrect.

Marks and labels

A series of prompts are used in the field to help the player find/locate things. The three types of indications are:
1- Text labes, these objects are used to display a guide text and to indicate with "X" the limits for the use of tools.
2- Marks on objects, are used to give a 'Red' highlight to the objects that must be clicked.
3- Marks in the terrain, used to highlight objects and the terrain, also plays a visual role when connecting roads.

Links

In this scenario you will very commonly see the links to object locations, clicking on one of them will automatically take you to the location they indicate, for example "{pos}", clicking will take you directly to the city {town}. They are mainly used to go to: - Cities ({pos1}), Factories ({pos2}), Stations ({pos3}), etc.

Chapter/Step Regressions

This will only happen if you eliminate a vehicle in circulation, regardless of the chapter where you are, you will be sent back to correct the problem.

Link to Skip Steps

It is a special type of link that allows you to execute codes in the Scenario with just one click, using this shortcut you can see how everything is built automatically, it can be used up to Chapter 5.

Scenario Messages

Scenario messages are disabled by default, you can enable as follows:
- In the toolbar select the menu Menssage Center, in the press the button [Options]
- Below is a list of message types, each with 4 checkboxes.
- [Master Control] this control completely enables/disables the selected message.
- [News bar] this control enables/disables messages in the news bar.
- [Temporary Window] this control enables/disables messages in a popup window that disappears in a few seconds.
- [Alert Window] this control enables/disables messages in persistent popup (not recommended).

Tip: For Scenario messages it is recommended to activate only the [Temporary Window] .

Note: The text in this window always takes a few seconds to update.

To advance to the next step, you must click on this link {link}.

\ No newline at end of file +

In this first step we are going to explain some basic aspects of the Tutorial Scenario.

Warning Windows

These are used to give a warning to the player in case of doing something wrong, like using the wrong tool, the events on the stage that show pop-ups are:
1- Use of tools, when the map is clicked with the wrong tool.
2- Schedule Vehicles, when the schedule or line of the vehicle is incorrect.
3- Start Vehicles, when the type of vehicle required is incorrect.

Marks and labels

A series of prompts are used in the field to help the player find/locate things. The three types of indications are:
1- Text labes, these objects are used to display a guide text and to indicate with "X" the limits for the use of tools.
2- Marks on objects, are used to give a 'Red' highlight to the objects that must be clicked.
3- Marks in the terrain, used to highlight objects and the terrain, also plays a visual role when connecting roads.

Links

In this scenario you will very commonly see the links to object locations, clicking on one of them will automatically take you to the location they indicate, for example "{pos}", clicking will take you directly to the city {town}. They are mainly used to go to: - Cities ({pos1}), Factories ({pos2}), Stations ({pos3}), etc.

Chapter/Step Regressions

This will only happen if you eliminate a vehicle in circulation, regardless of the chapter where you are, you will be sent back to correct the problem.

Link '{next_step}'

It is a special type of link that allows you to execute codes in the Scenario with just one click, using this shortcut you can see how everything is built automatically, it can be used up to Chapter 5.

Scenario Messages

Scenario messages are disabled by default, you can enable as follows:
- In the toolbar select the menu Menssage Center, in the press the button [Options]
- Below is a list of message types, each with 4 checkboxes.
- [Master Control] this control completely enables/disables the selected message.
- [News bar] this control enables/disables messages in the news bar.
- [Temporary Window] this control enables/disables messages in a popup window that disappears in a few seconds.
- [Alert Window] this control enables/disables messages in persistent popup (not recommended).

Tip: For Scenario messages it is recommended to activate only the [Temporary Window] .

Note: The text in this window always takes a few seconds to update.

To advance to the next step, you must click on this link {link}.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_01.txt b/es/chapter_01/goal_step_01.txt index a8c4c9c..fb84f32 100644 --- a/es/chapter_01/goal_step_01.txt +++ b/es/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace para Saltar Pasos

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file +

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace '{next_step}'

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file From 0ac67938904113749403b1c382ef8b5117275914 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 13:14:49 +0100 Subject: [PATCH 140/217] ADD menu icons to text --- class/class_basic_data.nut | 117 +++++++++++++++++++++++++++++++++ class/class_chapter_01.nut | 5 ++ class/class_chapter_02.nut | 4 ++ de/chapter_01/goal_step_01.txt | 2 +- de/chapter_01/goal_step_02.txt | 2 +- de/chapter_01/goal_step_03.txt | 2 +- de/chapter_01/goal_step_04.txt | 2 +- de/chapter_02/goal_step_01.txt | 2 +- en/chapter_01/goal_step_01.txt | 2 +- en/chapter_01/goal_step_02.txt | 2 +- en/chapter_01/goal_step_04.txt | 2 +- en/chapter_02/goal_step_01.txt | 2 +- es/chapter_01/goal_step_01.txt | 2 +- es/chapter_01/goal_step_02.txt | 2 +- es/chapter_01/goal_step_04.txt | 2 +- es/chapter_02/goal_step_01.txt | 2 +- 16 files changed, 139 insertions(+), 13 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index d624dec..13081fc 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1655,3 +1655,120 @@ function get_waiting_halt(id) { } } + +/** + * return image for icons + * + * + * + * + * + */ +function get_gui_img(id) { + + switch (pak_name) { + case "pak64": + switch (id) { + case "road_menu": + return "" + break + case "rail_menu": + return "" + break + case "grid": + return "" + break + case "display": + return "" + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + case 9: + return 0 + break + case 10: + return 0 + break + } + break + case "pak64.german": + switch (id) { + case "road_menu": + return " " + break + case "rail_menu": + return " " + break + case "grid": + return "" + break + case "display": + return "" + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + case 9: + return 0 + break + case 10: + return 0 + break + } + break + case "pak128": + switch (id) { + case "road_menu": + return "" + break + case "rail_menu": + return "" + break + case "grid": + return "" + break + case "display": + return "" + break + case 5: + return 0 + break + case 6: + return 0 + break + case 7: + return 0 + break + case 8: + return 0 + break + case 9: + return 0 + break + case 10: + return 0 + break + } + break + } + +} \ No newline at end of file diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 9de2c6e..cc365aa 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -69,6 +69,11 @@ class tutorial.chapter_01 extends basic_chapter break; } + + // set image for buttons by different in paksets + text.img_grid = get_gui_img(grid) + text.img_display = get_gui_img(display) + text.town = cty1.name text.tool1 = translate(tool_alias.inspe) return text diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index cdc0f32..821d2e1 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -258,6 +258,10 @@ class tutorial.chapter_02 extends basic_chapter text.prce = money_to_string(price) break } + + // set image for buttons by different in paksets + text.img_road_menu = get_gui_img("road_menu") + text.load = veh1_load text.wait = get_wait_time_text(veh1_wait) text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") diff --git a/de/chapter_01/goal_step_01.txt b/de/chapter_01/goal_step_01.txt index 0c6748c..7ff29dc 100644 --- a/de/chapter_01/goal_step_01.txt +++ b/de/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link '{next_step}'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Szenariomeldungen

Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Mailbox und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file +

In diesem ersten Schritt werden wir einige grundlegende Aspekte des Tutorial-Szenarios erläutern.

Warnfenster

Diese werden verwendet, um den Spieler zu warnen, wenn er etwas falsch macht. Beispielsweise das falsche Werkzeug verwendet. Die Ereignisse im Szenario, die Pop-ups anzeigen, sind:
1 - Werkzeugverwendung, wenn Sie mit dem falschen Werkzeug auf die Karte klicken.
2 - Fahrzeugroute, wenn der Fahrplan des Fahrzeugs falsch ist.
3 - Fahrzeuge starten, wenn der erforderliche Fahrzeugtyp falsch ist.

Markierungen und Beschriftungen

Eine Reihe von Hinweisen auf der Karte werden verwendet, um dem Spieler beim Auffinden/Lokalisieren von Dingen zu helfen. Die drei Arten von Anzeigen sind:
1 - Textmarkierungen, diese Objekte werden verwendet, um einen Leittext anzuzeigen und mit X die Grenzen für die Verwendung von Werkzeugen anzuzeigen.
2 - Markierungen auf Objekten, werden verwendet, um Objekte, auf die Sie klicken müssen, rot hervorzuheben.
3 - Markierungen auf dem Gelände, werden verwendet, um Objekte hervorzuheben. Beim Gelände spielen sie auch eine optische Rolle bei der Verbindung von Wegen.

Links

In diesem Szenario werden Sie häufig Links zu Elementpositionen sehen. Wenn Sie auf einen davon klicken, wird die Karte auf die angegebene Stelle positioniert. Zum Beispiel gelangen Sie beim anklicken von {pos} direkt zur Stadt {town}. Sie werden hauptsächlich verwendet, um zu folgenden Orten zu gelangen: Städte ({pos1}), Fabriken ({pos2}), Stationen ({pos3}) usw.

Kapitel-/Schritt-Regressionen

Dies geschieht nur, wenn Sie ein im Umlauf befindliches Fahrzeug entfernen. Unabhängig davon, in welchem Kapitel Sie sich befinden, werden Sie zurückgeschickt, um das Problem zu beheben.

Link '{next_step}'

Es handelt sich um einen speziellen Linktyp, der es Ihnen ermöglicht, den Kapitel-Schritt automatisch auszuführen zu lassen.

Meldungen
Szenariomeldungen sind standardmäßig deaktiviert. Sie können sie auf folgende Weise aktivieren:
- Wählen Sie im Hauptmenü Meldungen und klicken Sie im sich öffnenden Fenster die Schaltfläche Optionen
- Jede Zeile steht für bestimmte Nachrichten. Ausführliche Erklärungen in der Hilfe (? im Fenstertitel).

Tipp: Für Szenario-Nachrichten wird empfohlen, nur das Temporäre Fenster zu aktivieren.

Hinweis: Es dauert immer einige Sekunden, bis der Text in diesem Fenster aktualisiert wird.

Um zum nächsten Schritt zu gelangen, müssen Sie auf diesen Link {link} klicken.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_02.txt b/de/chapter_01/goal_step_02.txt index f43345c..34e0853 100644 --- a/de/chapter_01/goal_step_02.txt +++ b/de/chapter_01/goal_step_02.txt @@ -1 +1 @@ -

Wir empfehlen Ihnen, das Raster für dieses Tutorial durch Drücken der Taste # zu aktivieren. Darüber hinaus wird dringend empfohlen, die Bäume entweder über das Menü Einstellungen - Anzeige so zu konfigurieren, dass sie transparent oder minimiert sind. Das Umschalten zwischen Groß und Klein/Transparent ist durch Drücken der Taste % möglich.

Sie können die Kartenansicht mit dem Mausrad oder den Tasten Bild runter/Bild hoch vergrößern oder verkleinern.

Sie können sich auf der Karte bewegen, indem Sie die Maus mit gedrückter Maustaste (rechts/links) bewegen. Die Cursortasten oder die Tasten des Ziffernblocks (wenn aktiv) können ebenfalls verwendet werden.

Sie können die Karte drehen, indem Sie Umschalt+r (Großbuchstabe R) drücken oder das Werkzeug Karte drehen aus dem Hauptmenü auswählen.

Versuchen Sie, in die Kamera hinein- und heraus zu zoomen und sich auf der Karte zu bewegen.

Um mit dem nächsten Schritt fortzufahren, drehen Sie die Karte.

\ No newline at end of file +

{img_grid} Kartenraster
Wir empfehlen Ihnen, das Raster für dieses Tutorial durch Drücken der Taste # zu aktivieren.

{img_display} Einstellungen - Anzeige
Darüber hinaus wird dringend empfohlen, die Bäume entweder über das Menü Einstellungen - Anzeige so zu konfigurieren, dass sie transparent oder minimiert sind. Das Umschalten zwischen Groß und Klein/Transparent ist durch Drücken der Taste % möglich.

Sie können die Kartenansicht mit dem Mausrad oder den Tasten Bild runter/Bild hoch vergrößern oder verkleinern.

Sie können sich auf der Karte bewegen, indem Sie die Maus mit gedrückter Maustaste (rechts/links) bewegen. Die Cursortasten oder die Tasten des Ziffernblocks (wenn aktiv) können ebenfalls verwendet werden.

Karte drehen
Sie können die Karte drehen, indem Sie Umschalt+r (Großbuchstabe R) drücken oder das Werkzeug Karte drehen aus dem Hauptmenü auswählen.

Versuchen Sie, in die Kamera hinein- und heraus zu zoomen und sich auf der Karte zu bewegen.

Um mit dem nächsten Schritt fortzufahren, drehen Sie die Karte.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_03.txt b/de/chapter_01/goal_step_03.txt index 1c6a4d2..b41c5ac 100644 --- a/de/chapter_01/goal_step_03.txt +++ b/de/chapter_01/goal_step_03.txt @@ -1 +1 @@ -

Da Sie nun wissen, wie Sie sich auf der Karte bewegen, besteht der nächste Schritt darin, Informationen über Elemente auf der Karte zu erhalten.

Abfragewerkzeug

Dies ist das Hauptwerkzeug des Spiels. Es kann kostenlos verwendet werden und ermöglicht die Anzeige des Informationsfensters für jedes Element auf der Karte, sofern vorhanden und aktiviert. Es ist auch das standardmäßig ausgewählte Werkzwug. Ist dies nicht der Fall, kann es über das Hauptmenü (das Lupensymbol) oder durch drücken der Taste a aktiviert werden.

Rechts in der Statuszeile werden die Koordinaten der Position (x,y,z) des Cursors angezeigt. Die Statuszeile befindet sich standardmäßig am unteren Rand.

Klicken Sie zunächst mit dem {tool1} auf {pos}. Nachdem Sie auf das Monument geklickt haben, müssen Sie das Informationsfenster schließen, indem Sie oben auf X klicken. Drücken Sie Esc, um das aktive geöffnete Fenster zu schließen oder indem Sie die Löschtaste drücken, um alle Fenster zu schließen.

Abschließend klicken Sie mit dem {tool1} auf die {buld_name} und schließen das Informationsfenster.

Tipp: Sie können im Informationsfenster auf das Bild des Objekts klicken und die Karte wird auf dessen Position zentriert.

\ No newline at end of file +

Da Sie nun wissen, wie Sie sich auf der Karte bewegen, besteht der nächste Schritt darin, Informationen über Elemente auf der Karte zu erhalten.

Abfragewerkzeug
Dies ist das Hauptwerkzeug des Spiels. Es kann kostenlos verwendet werden und ermöglicht die Anzeige des Informationsfensters für jedes Element auf der Karte, sofern vorhanden und aktiviert. Es ist auch das standardmäßig ausgewählte Werkzwug. Ist dies nicht der Fall, kann es über das Hauptmenü (das Lupensymbol) oder durch drücken der Taste a aktiviert werden.

Rechts in der Statuszeile werden die Koordinaten der Position (x,y,z) des Cursors angezeigt. Die Statuszeile befindet sich standardmäßig am unteren Rand.

Klicken Sie zunächst mit dem {tool1} auf {pos}. Nachdem Sie auf das Monument geklickt haben, müssen Sie das Informationsfenster schließen, indem Sie oben auf X klicken. Drücken Sie Esc, um das aktive geöffnete Fenster zu schließen oder indem Sie die Löschtaste drücken, um alle Fenster zu schließen.

Abschließend klicken Sie mit dem {tool1} auf die {buld_name} und schließen das Informationsfenster.

Tipp: Sie können im Informationsfenster auf das Bild des Objekts klicken und die Karte wird auf dessen Position zentriert.

\ No newline at end of file diff --git a/de/chapter_01/goal_step_04.txt b/de/chapter_01/goal_step_04.txt index 6bb706e..bbf4c66 100644 --- a/de/chapter_01/goal_step_04.txt +++ b/de/chapter_01/goal_step_04.txt @@ -1 +1 @@ -

Es gibt eine Reihe von Fenstern mit wichtigen Informationen.

Die Minikarte kann durch Drücken der Taste m angezeigt werden.
Das Fenster Finanzen kann durch Drücken der Taste f angezeigt werden.
Die Meldungen können durch drücken von Umschalt+b angezeigt werden.
Weitere Informationen über die Stadt erhalten Sie, indem Sie mit dem {tool1} auf das Rathaus klicken.

Um zum nächsten Kapitel zu gelangen, klicken Sie mit dem {tool1} auf das {pos2} von {town}.

\ No newline at end of file +

Es gibt eine Reihe von Fenstern mit wichtigen Informationen.

Minikarte
Die Minikarte kann durch Drücken der Taste m angezeigt werden.

Finanzen
Das Fenster Finanzen kann durch Drücken der Taste f angezeigt werden.

Meldungen
Die Meldungen können durch drücken von Umschalt+b angezeigt werden.

{tool1}
Weitere Informationen über die Stadt erhalten Sie, indem Sie mit dem {tool1} auf das Rathaus klicken.

Um zum nächsten Kapitel zu gelangen, klicken Sie mit dem {tool1} auf das {pos2} von {town}.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index aa7aafa..462eb3e 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie eine Sackgasse bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie ein Straßenende suchen oder bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

{img_road_menu} Menü Straßenbau

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file diff --git a/en/chapter_01/goal_step_01.txt b/en/chapter_01/goal_step_01.txt index 18e2b2b..2f8d287 100644 --- a/en/chapter_01/goal_step_01.txt +++ b/en/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

In this first step we are going to explain some basic aspects of the Tutorial Scenario.

Warning Windows

These are used to give a warning to the player in case of doing something wrong, like using the wrong tool, the events on the stage that show pop-ups are:
1- Use of tools, when the map is clicked with the wrong tool.
2- Schedule Vehicles, when the schedule or line of the vehicle is incorrect.
3- Start Vehicles, when the type of vehicle required is incorrect.

Marks and labels

A series of prompts are used in the field to help the player find/locate things. The three types of indications are:
1- Text labes, these objects are used to display a guide text and to indicate with "X" the limits for the use of tools.
2- Marks on objects, are used to give a 'Red' highlight to the objects that must be clicked.
3- Marks in the terrain, used to highlight objects and the terrain, also plays a visual role when connecting roads.

Links

In this scenario you will very commonly see the links to object locations, clicking on one of them will automatically take you to the location they indicate, for example "{pos}", clicking will take you directly to the city {town}. They are mainly used to go to: - Cities ({pos1}), Factories ({pos2}), Stations ({pos3}), etc.

Chapter/Step Regressions

This will only happen if you eliminate a vehicle in circulation, regardless of the chapter where you are, you will be sent back to correct the problem.

Link '{next_step}'

It is a special type of link that allows you to execute codes in the Scenario with just one click, using this shortcut you can see how everything is built automatically, it can be used up to Chapter 5.

Scenario Messages

Scenario messages are disabled by default, you can enable as follows:
- In the toolbar select the menu Menssage Center, in the press the button [Options]
- Below is a list of message types, each with 4 checkboxes.
- [Master Control] this control completely enables/disables the selected message.
- [News bar] this control enables/disables messages in the news bar.
- [Temporary Window] this control enables/disables messages in a popup window that disappears in a few seconds.
- [Alert Window] this control enables/disables messages in persistent popup (not recommended).

Tip: For Scenario messages it is recommended to activate only the [Temporary Window] .

Note: The text in this window always takes a few seconds to update.

To advance to the next step, you must click on this link {link}.

\ No newline at end of file +

In this first step we are going to explain some basic aspects of the Tutorial Scenario.

Warning Windows

These are used to give a warning to the player in case of doing something wrong, like using the wrong tool, the events on the stage that show pop-ups are:
1- Use of tools, when the map is clicked with the wrong tool.
2- Schedule Vehicles, when the schedule or line of the vehicle is incorrect.
3- Start Vehicles, when the type of vehicle required is incorrect.

Marks and labels

A series of prompts are used in the field to help the player find/locate things. The three types of indications are:
1- Text labes, these objects are used to display a guide text and to indicate with "X" the limits for the use of tools.
2- Marks on objects, are used to give a 'Red' highlight to the objects that must be clicked.
3- Marks in the terrain, used to highlight objects and the terrain, also plays a visual role when connecting roads.

Links

In this scenario you will very commonly see the links to object locations, clicking on one of them will automatically take you to the location they indicate, for example "{pos}", clicking will take you directly to the city {town}. They are mainly used to go to: - Cities ({pos1}), Factories ({pos2}), Stations ({pos3}), etc.

Chapter/Step Regressions

This will only happen if you eliminate a vehicle in circulation, regardless of the chapter where you are, you will be sent back to correct the problem.

Link '{next_step}'

It is a special type of link that allows you to execute codes in the Scenario with just one click, using this shortcut you can see how everything is built automatically, it can be used up to Chapter 5.

Messages
Scenario messages are disabled by default, you can enable as follows:
- In the toolbar select the menu Message Center, in the press the button [Options]
- Below is a list of message types, each with 4 checkboxes.
- [Master Control] this control completely enables/disables the selected message.
- [News bar] this control enables/disables messages in the news bar.
- [Temporary Window] this control enables/disables messages in a popup window that disappears in a few seconds.
- [Alert Window] this control enables/disables messages in persistent popup (not recommended).

Tip: For Scenario messages it is recommended to activate only the [Temporary Window] .

Note: The text in this window always takes a few seconds to update.

To advance to the next step, you must click on this link {link}.

\ No newline at end of file diff --git a/en/chapter_01/goal_step_02.txt b/en/chapter_01/goal_step_02.txt index e9233fc..d934efe 100644 --- a/en/chapter_01/goal_step_02.txt +++ b/en/chapter_01/goal_step_02.txt @@ -1 +1 @@ -

It is recommended to turn on the grid for this tutorial by using the "#" key. In addition, it is highly recommended that Trees are set to transparent, either through the settings menu, or by pressing the "%" key.

You can zoom in and out using either the Mouse wheel, or by using the "Page Up/Page Down Keys".

You can move about the map either by holding down the Right Mouse button and dragging, using the Arrow Keys or the number pad.

You can rotate the map by pressing "[Shift]+r" (Capital "R") or in from toolbar select Rotate Map tool.

Try zooming in and out and moving about the map.

To proceed to the next step, rotate the map.

\ No newline at end of file +

{img_grid} grid
It is recommended to turn on the grid for this tutorial by using the "#" key.
{img_display} settings menu - display
In addition, it is highly recommended that Trees are set to transparent, either through the settings menu, or by pressing the "%" key.

You can zoom in and out using either the Mouse wheel, or by using the "Page Up/Page Down Keys".

You can move about the map either by holding down the Right Mouse button and dragging, using the Arrow Keys or the number pad.

rotate the map
You can rotate the map by pressing "[Shift]+r" (Capital "R") or in from toolbar select Rotate Map tool.

Try zooming in and out and moving about the map.

To proceed to the next step, rotate the map.

\ No newline at end of file diff --git a/en/chapter_01/goal_step_04.txt b/en/chapter_01/goal_step_04.txt index 0b3c0e6..d9dda36 100644 --- a/en/chapter_01/goal_step_04.txt +++ b/en/chapter_01/goal_step_04.txt @@ -1 +1 @@ -

These windows help you to keep yourself updated about what is going on in the world.

The 'mini-map' can be displayed by pressing the "m" key.
The 'finances' window can be displayed by pressing the "f" key.
The 'message center' can be displayed by pressing "[Shift]+b".
Detailed information about cities can also be viewed by clicking on the Town hall with the '{tool1}'.

To continue to the next chapter click on the {pos2} of {town} using the '{tool1}'.

\ No newline at end of file +

These windows help you to keep yourself updated about what is going on in the world.

mini-map
The 'mini-map' can be displayed by pressing the "m" key.

finances
The 'finances' window can be displayed by pressing the "f" key.

message
The 'message center' can be displayed by pressing "[Shift]+b".

{tool1}
Detailed information about cities can also be viewed by clicking on the Town hall with the '{tool1}'.

To continue to the next chapter click on the {pos2} of {town} using the '{tool1}'.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_01.txt b/en/chapter_02/goal_step_01.txt index 533a90c..77e7d36 100644 --- a/en/chapter_02/goal_step_01.txt +++ b/en/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

Open the '{tool2}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, build a stretch of road between {t1} and {t2} or {t1} and {t3}.

\ No newline at end of file +

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

{img_road_menu} Menu {tool2}

Open the '{tool2}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, build a stretch of road between {t1} and {t2} or {t1} and {t3}.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_01.txt b/es/chapter_01/goal_step_01.txt index fb84f32..b7503b6 100644 --- a/es/chapter_01/goal_step_01.txt +++ b/es/chapter_01/goal_step_01.txt @@ -1 +1 @@ -

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace '{next_step}'

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes de Escenario

Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file +

En este primer paso vamos a explicar algunos aspectos básicos sobre el Escenario Tutorial.

Ventanas de Advertencia

Estas se usan para advertir al jugador en caso de hacer algo mal, como usar la herramienta equivocada. Los eventos en el escenario que muestran ventanas emergentes son:
1 - Uso de herramientas, cuando se pulsa en el mapa con la herramienta incorrecta.
2 - Itinerario de Vehículos, cuando la ruta o línea del vehículo es incorrecta.
3 - Arrancar Vehículos, cuando el tipo de vehículo requerido es incorrecto.

Marcas y etiquetas

Se usan una serie de indicaciones en el terreno para ayudar al jugador a encontrar/ubicar las cosas. Los tres tipos de indicaciones son:
1 - Marcadores de Texto, se usan estos objetos para mostrar un texto guía y para indicar con "X" los límites para el uso de herramientas.
2 - Marcas en objetos, se usan para darle un resalte 'Rojo' a los objetos donde se debe hacer clic.
3 - Marcas en el terreno, se usan para resaltar objetos y el terreno, también cumple un papel visual a la hora de conectar caminos.

Enlaces

En este escenario vas a ver frecuentemete enlaces a ubicaciones de elementos. Pulsar sobre uno de ellos te llevará automáticamente a la ubicación que indican, por ejemplo "{pos}", al pulsar te llevará directamente a la ciudad {town}. Se usan principalmente para ir a:
-- Ciudades ({pos1}), Fábricas ({pos2}), Estaciones ({pos3}), etc.

Regresiones de Capítulos/Pasos

Esto solo ocurre si eliminas un vehículo en circulación, sin importar el capítulo donde estés seras enviado de regreso a corregir el problema.

Enlace '{next_step}'

Es un tipo de enlace especial que permite ejecutar códigos en el Escenario con una sola pulsación. Usando este atajo puedes ver como se va construyendo todo automáticamente. Se puede usar hasta el Capítulo 6.

Mensajes
Los mensajes de Escenario están desactivados por defecto, puedes activarlos de la siguiente forma: -- En la barra de herramientas selecciona el menú Buzon, y ahí presione el botón de [Opciones]
-- A continuación se muestra un lista de los tipos de mensajes, cada uno con 4 casillas de verificación.
- [Control Maestro] este control activa/desactiva por completo el mensaje seleccionado.
- [Barra de noticias] este control activa/desactiva mensajes en la barra de noticias.
- [Ventana Temporal] este control activa/desactiva mensajes en ventana emergente que desaparece en unos segundos.
- [Ventana Alerta] este control activa/desactiva mensajes en en ventana emergente persistente (no recomendado).

Consejo: Para los mensajes de Escenario se recomienda activar sólo la [Ventana Temporal].

Nota: El texto en esta ventana siempre tarda unos segundos en actualizarse.

Para avanzar al siguiente paso, debes pulsar en este enlace {link}.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_02.txt b/es/chapter_01/goal_step_02.txt index 2e9867b..9bdd65b 100644 --- a/es/chapter_01/goal_step_02.txt +++ b/es/chapter_01/goal_step_02.txt @@ -1 +1 @@ -

Te recomendamos activar la cuadrícula para este tutorial pulsando la tecla "#". Además, es muy recomendable que los Ãrboles hayan sido configurados para ser transparentes, ya sea a través del menú de opciones o presionando la tecla "%".

Puedes acercar o alejar la cámara usando la rueda del ratón, o las teclas [AvPág/RePág].

Puedes moverte alrededor del mapa usando el Botón Derecho del ratón y arrastrando, usando las teclas de dirección, o el teclado numérico (si no está bloqueado).

Puedes rotar el mapa pulsando "[Mayús]+r" ("R" mayúscula) o seleccionando la herramienta "Rotar Mapa" desde el menú de herramientas.

Intenta acercar y alejar la cámara y moverte por el mapa.

Para continuar al siguiente paso, rota el mapa.

\ No newline at end of file +

{img_grid} cuadrícula
Te recomendamos activar la cuadrícula para este tutorial pulsando la tecla "#".

{img_display} Menú de configuración - Pantalla
Además, es muy recomendable que los Ãrboles hayan sido configurados para ser transparentes, ya sea a través del menú de opciones o presionando la tecla "%".

Puedes acercar o alejar la cámara usando la rueda del ratón, o las teclas [AvPág/RePág].

Puedes moverte alrededor del mapa usando el Botón Derecho del ratón y arrastrando, usando las teclas de dirección, o el teclado numérico (si no está bloqueado).

rotar el mapa
Puedes rotar el mapa pulsando "[Mayús]+r" ("R" mayúscula) o seleccionando la herramienta "Rotar Mapa" desde el menú de herramientas.

Intenta acercar y alejar la cámara y moverte por el mapa.

Para continuar al siguiente paso, rota el mapa.

\ No newline at end of file diff --git a/es/chapter_01/goal_step_04.txt b/es/chapter_01/goal_step_04.txt index 2d73a3f..28904bb 100644 --- a/es/chapter_01/goal_step_04.txt +++ b/es/chapter_01/goal_step_04.txt @@ -1 +1 @@ -

Hay una serie de ventanas contiene información esencial.

El 'Minimapa' se puede mostrar presionando la tecla "m".
La ventana de 'Finanzas' se puede mostrar presionando la tecla "f".
El 'Buzón' se puede mostrar pulsando "[Mayús]+b".
Más información sobre la ciudad está disponible pulsando sobre el 'Ayuntamiento' con la '{tool1}'.

Para avanzar al siguiente capítulo, pulsa en {pos2} de {town} usando la '{tool1}'.

\ No newline at end of file +

Hay una serie de ventanas contiene información esencial.

Minimapa
El 'Minimapa' se puede mostrar presionando la tecla "m".

Finanzas
La ventana de 'Finanzas' se puede mostrar presionando la tecla "f".

Buzón
El 'Buzón' se puede mostrar pulsando "[Mayús]+b".

{tool1}
Más información sobre la ciudad está disponible pulsando sobre el 'Ayuntamiento' con la '{tool1}'.

Para avanzar al siguiente capítulo, pulsa en {pos2} de {town} usando la '{tool1}'.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_01.txt b/es/chapter_02/goal_step_01.txt index 76b22b4..121c5f1 100644 --- a/es/chapter_02/goal_step_01.txt +++ b/es/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

Abre '{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta los puntos entre {t1} y {t2} o {t1} y {t3} para avanzar al siguiente paso.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

{img_road_menu} Menú {tool2}

'{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta los puntos entre {t1} y {t2} o {t1} y {t3} para avanzar al siguiente paso.

\ No newline at end of file From b1b997f849b40643c215457ab0ae1ffdf6c873c2 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 13:34:01 +0100 Subject: [PATCH 141/217] ADD info files for img tags in texts --- info_files/img-tools.ods | Bin 0 -> 19368 bytes info_files/img-tools/scenario.nut | 61 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 info_files/img-tools.ods create mode 100644 info_files/img-tools/scenario.nut diff --git a/info_files/img-tools.ods b/info_files/img-tools.ods new file mode 100644 index 0000000000000000000000000000000000000000..41bfc90ed6fab280957a13a2eaa428a7e2faf6f4 GIT binary patch literal 19368 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�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 g"+j+" d"+j+" s"+j+" t"+j+"
" + } + return tx + +} + + +function my_tile(coord) +{ + return square_x(coord.x,coord.y).get_ground_tile() + //return square_x(coord.x,coord.y).get_tile_at_height(coord.z) +} + + + From b338cc55bdfe861957a99e6b3e35a6e850b9c89b Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 13:52:23 +0100 Subject: [PATCH 142/217] FIX typo --- class/class_chapter_01.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index cc365aa..7595bfb 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -71,8 +71,8 @@ class tutorial.chapter_01 extends basic_chapter } // set image for buttons by different in paksets - text.img_grid = get_gui_img(grid) - text.img_display = get_gui_img(display) + text.img_grid = get_gui_img("grid") + text.img_display = get_gui_img("display") text.town = cty1.name text.tool1 = translate(tool_alias.inspe) From fcf9a862f9894f39957e51038384b9f63438c224 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 11 Jan 2026 13:52:57 +0100 Subject: [PATCH 143/217] CHG grid icon from main menu, not from settings --- class/class_basic_data.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 13081fc..dffb965 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1676,10 +1676,10 @@ function get_gui_img(id) { return "" break case "grid": - return "" + return "" break case "display": - return "" + return " " break case 5: return 0 @@ -1744,10 +1744,10 @@ function get_gui_img(id) { return "" break case "grid": - return "" + return "" break case "display": - return "" + return " " break case 5: return 0 From 7ebc3a1031f5977f19652a98b2f38d30970d2c7c Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 13 Jan 2026 16:00:51 +0100 Subject: [PATCH 144/217] FIX chapter 6 text --- class/class_chapter_06.nut | 26 ++++++++++++++++++-------- scenario.nut | 6 +++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 7f5c0af..d088d04 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -114,6 +114,10 @@ class tutorial.chapter_06 extends basic_chapter text.c1_b = "("+c1_track.b.tostring()+")" text.c2_a = "("+c2_track.a.tostring()+")" text.c2_b = "("+c2_track.b.tostring()+")" + + text.st1 = "("+city1_city7_air[0].tostring()+")" + text.st2 = "("+city1_halt_airport_extension[0].tostring()+")" + break case 2: @@ -154,6 +158,12 @@ class tutorial.chapter_06 extends basic_chapter local c = coord(c_list[j].x, c_list[j].y) local tile = my_tile(c) local st_halt = tile.get_halt() + + if ( j == 0 ) { + // airport bus halt + text.sch1 = " "+st_halt.get_name()+" ("+tile.x+","+tile.y+")" + } + if(sch_cov_correct){ list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) continue @@ -165,6 +175,7 @@ class tutorial.chapter_06 extends basic_chapter list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } + local c = coord(c_list[get_waiting_halt(7)].x, c_list[get_waiting_halt(7)].y) text.stnam = (get_waiting_halt(7)+1) + ") " + my_tile(c).get_halt().get_name()+" ("+c.tostring()+")" text.stx = list_tx @@ -183,6 +194,12 @@ class tutorial.chapter_06 extends basic_chapter local c = coord(c_list[j].x, c_list[j].y) local tile = my_tile(c) local st_halt = tile.get_halt() + + if ( j == 0 ) { + // airport bus halt + text.sch2 = " "+st_halt.get_name()+" ("+tile.x+","+tile.y+")" + } + if(sch_cov_correct){ list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) continue @@ -205,20 +222,13 @@ class tutorial.chapter_06 extends basic_chapter break } - /*local st1_halt = my_tile(city1_city7_air[0]).get_halt() - local st2_halt = my_tile(city1_city7_air[1]).get_halt() - if(st1_halt){ - text.sch1 = " "+st1_halt.get_name()+" ("+city1_city7_air[0].tostring()+")" - text.sch2 = " "+st2_halt.get_name()+" ("+city1_city7_air[1].tostring()+")" - }*/ + text.w1name = translate(obj1_way_name) text.w2name = translate(obj2_way_name) text.bus1 = translate(veh1_obj) text.bus2 = translate(veh2_obj) text.cit1 = city1_tow.href(cty1.name.tostring()) text.cit2 = city7_tow.href(cty2.name.tostring()) - text.st1 = "("+city1_city7_air[0].tostring()+")" - text.st2 = "("+city1_city7_air[1].tostring()+")" text.dep1 = "("+ch6_air_depot.a.tostring()+")" return text } diff --git a/scenario.nut b/scenario.nut index 9cd346f..e6c1b7f 100644 --- a/scenario.nut +++ b/scenario.nut @@ -662,13 +662,13 @@ function is_scenario_completed(pl) // check for automatic step if ( pending_call ) { - //gui.add_message("check automaric jump : percentage " + percentage) - //gui.add_message(" : chapter.step " + chapter.step) + gui.add_message("check automaric jump : percentage " + percentage) + gui.add_message(" : chapter.step " + chapter.step) //gui.add_message(" : persistent.ch_max_sub_steps " + persistent.ch_max_sub_steps) //gui.add_message(" : persistent.ch_sub_step " + persistent.ch_sub_step) local percentage_step = chapter_percentage(persistent.ch_max_steps, chapter.step, persistent.ch_max_sub_steps, persistent.ch_sub_step) - //gui.add_message(" : percentage_step " + percentage_step) + gui.add_message(" : percentage_step " + percentage_step) local jump_step = false if ( chapter.step == 1 && percentage >= 0 ) { From 0a972e4fc1bb8bf7aee3bcb766e05dc25fc0aa34 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 13 Jan 2026 16:03:23 +0100 Subject: [PATCH 145/217] CHG disabled debug message --- scenario.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scenario.nut b/scenario.nut index e6c1b7f..9cd346f 100644 --- a/scenario.nut +++ b/scenario.nut @@ -662,13 +662,13 @@ function is_scenario_completed(pl) // check for automatic step if ( pending_call ) { - gui.add_message("check automaric jump : percentage " + percentage) - gui.add_message(" : chapter.step " + chapter.step) + //gui.add_message("check automaric jump : percentage " + percentage) + //gui.add_message(" : chapter.step " + chapter.step) //gui.add_message(" : persistent.ch_max_sub_steps " + persistent.ch_max_sub_steps) //gui.add_message(" : persistent.ch_sub_step " + persistent.ch_sub_step) local percentage_step = chapter_percentage(persistent.ch_max_steps, chapter.step, persistent.ch_max_sub_steps, persistent.ch_sub_step) - gui.add_message(" : percentage_step " + percentage_step) + //gui.add_message(" : percentage_step " + percentage_step) local jump_step = false if ( chapter.step == 1 && percentage >= 0 ) { From 2794dec812c5a7c75a6681e2f4076bb724918a78 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 13 Jan 2026 20:20:31 +0100 Subject: [PATCH 146/217] CHG changed function check_halt_public() to search halt tile according to waytype in tilelist from halt --- class/class_basic_chapter.nut | 12 ++++++++---- class/class_chapter_06.nut | 4 ++-- class/class_chapter_07.nut | 8 ++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 3e6f9a0..7b23cb5 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -303,15 +303,19 @@ class basic_chapter } /** - * check station add tile wt_road (chapter 7) + * check waytype tile in tile list from station + * + * halt - tile_x from station + * search_wt - waytype for search tile + * + * return - tile_x or null * - * halt = tile_x */ - function check_halt_public(halt) { + function check_halt_wt(halt, search_wt) { local tiles = halt.get_halt().get_tile_list() for ( local i = 0; i < tiles.len(); i++ ) { local k = tiles[i].find_object(mo_building).get_desc().get_waytype() - if ( k == wt_road ) { + if ( k == search_wt ) { return tiles[i] } } diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index d088d04..488f976 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -159,7 +159,7 @@ class tutorial.chapter_06 extends basic_chapter local tile = my_tile(c) local st_halt = tile.get_halt() - if ( j == 0 ) { + if ( check_halt_wt(tile, wt_air) != null ) { // airport bus halt text.sch1 = " "+st_halt.get_name()+" ("+tile.x+","+tile.y+")" } @@ -195,7 +195,7 @@ class tutorial.chapter_06 extends basic_chapter local tile = my_tile(c) local st_halt = tile.get_halt() - if ( j == 0 ) { + if ( check_halt_wt(tile, wt_air) != null ) { // airport bus halt text.sch2 = " "+st_halt.get_name()+" ("+tile.x+","+tile.y+")" } diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 042d4de..2451317 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -150,7 +150,7 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local tile = check_halt_public(ch7_rail_stations[0]) + local tile = check_halt_wt(ch7_rail_stations[0], wt_road) if ( tile != null ) { if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[0], gl_wt, gl_good) @@ -171,7 +171,7 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local tile = check_halt_public(ch7_rail_stations[1]) + local tile = check_halt_wt(ch7_rail_stations[1], wt_road) if ( tile != null ) { if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[1], gl_wt, gl_good) @@ -192,7 +192,7 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local tile = check_halt_public(ch7_rail_stations[2]) + local tile = check_halt_wt(ch7_rail_stations[2], wt_road) if ( tile != null ) { if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[2], gl_wt, gl_good) @@ -213,7 +213,7 @@ class tutorial.chapter_07 extends basic_chapter if (!correct_cov) return 0 - local tile = check_halt_public(ch7_rail_stations[3]) + local tile = check_halt_wt(ch7_rail_stations[3], wt_road) if ( tile != null ) { if ( pass_count == 0 ) { transfer_pass = cov_pax(ch7_rail_stations[3], gl_wt, gl_good) From c59bcfbbefe03787a6c84b734a35025a47d527d0 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 13 Jan 2026 22:40:21 +0100 Subject: [PATCH 147/217] CHG clean up code --- class/class_chapter_07.nut | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 2451317..72bc401 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -235,14 +235,17 @@ class tutorial.chapter_07 extends basic_chapter } function is_work_allowed_here(pl, tool_id, name, pos, tool) { - local result=null // null is equivalent to 'allowed' + //local result=null // null is equivalent to 'allowed' local t = tile_x(pos.x, pos.y, pos.z) - local way = t.find_object(mo_way) + //local way = t.find_object(mo_way) local nr = compass_nr + + // inspections tool + if (tool_id==4096) + return null + switch (this.step) { case 1: - if (tool_id==4096) - return null if ((pos.x>=c_cty_lim1[nr].a.x-(1))&&(pos.y>=c_cty_lim1[nr].a.y-(1))&&(pos.x<=c_cty_lim1[nr].b.x+(1))&&(pos.y<=c_cty_lim1[nr].b.y+(1))){ return null @@ -252,8 +255,6 @@ class tutorial.chapter_07 extends basic_chapter break; case 2: - if (tool_id==4096) - return null if ((pos.x>=c_cty_lim2[nr].a.x-(1))&&(pos.y>=c_cty_lim2[nr].a.y-(1))&&(pos.x<=c_cty_lim2[nr].b.x+(1))&&(pos.y<=c_cty_lim2[nr].b.y+(1))){ return null @@ -263,8 +264,6 @@ class tutorial.chapter_07 extends basic_chapter break; case 3: - if (tool_id==4096) - return null if ((pos.x>=c_cty_lim3[nr].a.x-(1))&&(pos.y>=c_cty_lim3[nr].a.y-(1))&&(pos.x<=c_cty_lim3[nr].b.x+(1))&&(pos.y<=c_cty_lim3[nr].b.y+(1))){ return null @@ -274,8 +273,6 @@ class tutorial.chapter_07 extends basic_chapter break; case 4: - if (tool_id==4096) - return null if ((pos.x>=c_cty_lim4[nr].a.x-(1))&&(pos.y>=c_cty_lim4[nr].a.y-(1))&&(pos.x<=c_cty_lim4[nr].b.x+(1))&&(pos.y<=c_cty_lim4[nr].b.y+(1))){ return null @@ -284,12 +281,7 @@ class tutorial.chapter_07 extends basic_chapter return translate("You can only use this tool in the city")+cty4.name.tostring()+" ("+city6_tow.tostring()+")." break; - case 5: - return null; - } - if (tool_id==4096) - return null return tool_id } From 0ceb8eb5546d662450a1e09e23718c4c48b4057a Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 14 Jan 2026 09:28:09 +0100 Subject: [PATCH 148/217] CHG chapter 2 to configurable waiting halts for passenger lines --- class/class_chapter_02.nut | 41 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 821d2e1..1fda889 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -106,12 +106,12 @@ class tutorial.chapter_02 extends basic_chapter if(this.step == 4){ local c_dep = this.my_tile(city1_road_depot) local c_list = city1_halt_1 - start_sch_tmpsw(pl,c_dep, c_list) + start_sch_tmpsw(pl, c_dep, c_list) } else if(this.step == 6){ local c_dep = this.my_tile(city1_road_depot) local c_list = city1_halt_2 - start_sch_tmpsw(pl,c_dep, c_list) + start_sch_tmpsw(pl, c_dep, c_list) } else if(this.step == 7){ local c_dep = this.my_tile(city1_road_depot) @@ -153,8 +153,9 @@ class tutorial.chapter_02 extends basic_chapter break case 4: //local c = coord(city1_halt_1[0].x, city1_halt_1[0].y) - local tile = my_tile(city1_halt_1[0]) - text.stnam = "1) "+tile.get_halt().get_name()+" ("+city1_halt_1[0].tostring()+")" + local halt_to_waiting = get_waiting_halt(1) + local tile = my_tile(city1_halt_1[halt_to_waiting]) + text.stnam = (halt_to_waiting+1) + ") "+tile.get_halt().get_name()+" ("+city1_halt_1[halt_to_waiting].tostring()+")" text.list = create_schedule_list(city1_halt_1) text.nr = city1_halt_1.len() @@ -180,10 +181,10 @@ class tutorial.chapter_02 extends basic_chapter } text.list = create_schedule_list(city1_halt_2) - local tile = my_tile(city1_halt_2[0]) - text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" + local tile = my_tile(city1_halt_2[get_waiting_halt(2)]) + text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[get_waiting_halt(2)].tostring()+")" - local halt = my_tile(city1_halt_2[0]).get_halt() + local halt = my_tile(city1_halt_2[get_waiting_halt(2)]).get_halt() text.line = get_line_name(halt) text.cir = cov_nr @@ -198,8 +199,8 @@ class tutorial.chapter_02 extends basic_chapter text = ttextfile("chapter_02/07_3-4.txt") text.tx = ttext("[3/4]") - local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) - text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" + //local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) + //text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" text.list = create_halt_list(city2_halt_1) text.nr = city2_halt_1.len() @@ -223,7 +224,7 @@ class tutorial.chapter_02 extends basic_chapter text = ttextfile("chapter_02/07_3-4.txt") text.tx = ttext("[3/4]") - local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) + local tile = my_tile(city2_halt_1[get_waiting_halt(3)]) text.stnam = ""+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" text.list = create_schedule_list(city2_halt_1) @@ -882,7 +883,7 @@ class tutorial.chapter_02 extends basic_chapter local nr = schedule.entries.len() switch (this.step) { case 4: - local selc = 0 + local selc = get_waiting_halt(1) local load = veh1_load local time = veh1_wait local c_list = city1_halt_1 @@ -895,7 +896,7 @@ class tutorial.chapter_02 extends basic_chapter return result break case 6: - local selc = 0 + local selc = get_waiting_halt(2) local load = veh1_load local time = veh1_wait local c_list = city1_halt_2 @@ -910,7 +911,7 @@ class tutorial.chapter_02 extends basic_chapter local load = veh1_load local time = veh1_wait local c_list = city2_halt_1 - local selc = c_list.len()-1 + local selc = get_waiting_halt(3) result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line3_name //"Test 3" @@ -939,7 +940,7 @@ class tutorial.chapter_02 extends basic_chapter reset_tmpsw() return bus_result_message(result, translate(name), veh, cov) } - local selc = 0 + local selc = get_waiting_halt(1) local load = veh1_load local time = veh1_wait local c_list = city1_halt_1 @@ -958,13 +959,13 @@ class tutorial.chapter_02 extends basic_chapter local good_list = [good_desc_x (good_alias.passa).get_catg_index()] //Passengers local name = veh1_obj local st_tile = 1 - result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile) + result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile) if (result!=null){ reset_tmpsw() return bus_result_message(result, translate(name), veh, cov) } - local selc = 0 + local selc = get_waiting_halt(2) local load = veh1_load local time = veh1_wait local c_list = city1_halt_2 @@ -993,7 +994,7 @@ class tutorial.chapter_02 extends basic_chapter local time = veh1_wait local c_list = city2_halt_1 local siz = c_list.len() - local selc = siz-1 + local selc = get_waiting_halt(3) result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) if(result == null) reset_tmpsw() @@ -1072,7 +1073,7 @@ class tutorial.chapter_02 extends basic_chapter local wait = veh1_wait local sch_siz = c_list.len() for(local j=0;j Date: Wed, 14 Jan 2026 12:46:52 +0100 Subject: [PATCH 149/217] CHG clean up and optimize text output --- class/class_chapter_02.nut | 41 +++++++++++++++++----------------- de/chapter_02/06_1-2.txt | 2 +- de/chapter_02/07_3-4.txt | 2 +- de/chapter_02/goal_step_01.txt | 2 +- de/chapter_02/goal_step_02.txt | 2 +- de/chapter_02/goal_step_03.txt | 2 +- de/chapter_02/goal_step_04.txt | 2 +- de/chapter_06/goal_step_02.txt | 2 +- en/chapter_02/06_1-2.txt | 2 +- en/chapter_02/goal_step_01.txt | 2 +- en/chapter_02/goal_step_02.txt | 2 +- en/chapter_02/goal_step_03.txt | 2 +- en/chapter_02/goal_step_04.txt | 2 +- es/chapter_02/06_1-2.txt | 2 +- es/chapter_02/goal_step_01.txt | 2 +- es/chapter_02/goal_step_02.txt | 2 +- es/chapter_02/goal_step_03.txt | 2 +- es/chapter_02/goal_step_04.txt | 2 +- 18 files changed, 38 insertions(+), 37 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 1fda889..62897cf 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -139,23 +139,18 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: - text.t1 = city1_road_depot.href("("+city1_road_depot.tostring()+")") - // remove from textfile - // or used build_list[] - last entry depot tile - text.t2 = "" //coorda.href("("+coorda.tostring()+")") - text.t3 = "" //coordb.href("("+coordb.tostring()+")") + // set image for button by different in paksets + text.img_road_menu = get_gui_img("road_menu") break case 2: - text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 3: text.list = create_halt_list(city1_halt_1) break case 4: - //local c = coord(city1_halt_1[0].x, city1_halt_1[0].y) - local halt_to_waiting = get_waiting_halt(1) - local tile = my_tile(city1_halt_1[halt_to_waiting]) - text.stnam = (halt_to_waiting+1) + ") "+tile.get_halt().get_name()+" ("+city1_halt_1[halt_to_waiting].tostring()+")" + + local tile = my_tile(city1_halt_1[get_waiting_halt(1)]) + text.stnam = (get_waiting_halt(1)+1) + ") "+tile.get_halt().get_name()+" ("+city1_halt_1[get_waiting_halt(1)].tostring()+")" text.list = create_schedule_list(city1_halt_1) text.nr = city1_halt_1.len() @@ -164,6 +159,7 @@ class tutorial.chapter_02 extends basic_chapter text.bpos1 = bridge1_coords.a.href("("+bridge1_coords.a.tostring()+")") text.bpos2 = bridge1_coords.b.href("("+bridge1_coords.b.tostring()+")") + // load file info/build_bridge_xx.txt text.bridge_info = get_info_file("bridge") break @@ -181,8 +177,9 @@ class tutorial.chapter_02 extends basic_chapter } text.list = create_schedule_list(city1_halt_2) - local tile = my_tile(city1_halt_2[get_waiting_halt(2)]) - text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[get_waiting_halt(2)].tostring()+")" + // dock bus halt + local tile = my_tile(city1_halt_2[0]) + text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" local halt = my_tile(city1_halt_2[get_waiting_halt(2)]).get_halt() text.line = get_line_name(halt) @@ -202,8 +199,8 @@ class tutorial.chapter_02 extends basic_chapter //local tile = my_tile(city2_halt_1[city2_halt_1.len()-1]) //text.stnam = ""+city2_halt_1.len()+") "+tile.get_halt().get_name()+" ("+coord_to_string(tile)+")" - text.list = create_halt_list(city2_halt_1) - text.nr = city2_halt_1.len() + //text.list = create_halt_list(city2_halt_1) + //text.nr = city2_halt_1.len() } else if (pot0==0){ text = ttextfile("chapter_02/07_1-4.txt") @@ -244,13 +241,12 @@ class tutorial.chapter_02 extends basic_chapter } } - text.n1 = city1_tow.href(cty1.name.tostring()) - text.n2 = city2_tow.href(cty2.name.tostring()) + //text.n1 = city1_tow.href(cty1.name.tostring()) + //text.n2 = city2_tow.href(cty2.name.tostring()) local t = coord(way1_coords.a.x, way1_coords.a.y) text.pt1 = t.href("("+t.tostring()+")") t = coord(way1_coords.b.x, way1_coords.b.y) text.pt2 = t.href("("+t.tostring()+")") - text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") break case 8: @@ -260,12 +256,17 @@ class tutorial.chapter_02 extends basic_chapter break } - // set image for buttons by different in paksets - text.img_road_menu = get_gui_img("road_menu") + // text step 2, 6 and 7 + local steps = [1, 2, 4, 6, 7] + if ( steps.find(this.step) != null ) { + // depot coord step 2, 6 and 7 + text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") + } + // veh load and wait time set to steps text.load = veh1_load text.wait = get_wait_time_text(veh1_wait) - text.pos = city1_road_depot.href("("+city1_road_depot.tostring()+")") + text.bus1 = translate(veh1_obj) text.name = city1_tow.href(cty1.name.tostring()) text.name2 = city2_tow.href(cty2.name.tostring()) diff --git a/de/chapter_02/06_1-2.txt b/de/chapter_02/06_1-2.txt index 71bcbdd..af4e52b 100644 --- a/de/chapter_02/06_1-2.txt +++ b/de/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen vom im Bau befindlichen Pier {stnam} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {pos} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, ein Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:


{list}
[*] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Nachdem die Brücke nun repariert wurde, benötigt die Stadt {name} eine Linie mit 3 Bussen, die Touristen zum im Bau befindlichen Pier {stnam} befördern.

{tx} Starten der Busse.

Die Linien:

Linien sind hilfreich um mehrere Fahrzeuge zu kontrollieren, wenn sie dieselbe Route bedienen. Sie können Linien auch einen benutzerdefinierten Namen geben, um sie leichter identifizieren. Linien machen es auch leichter, Fahrzeuge auszuwechseln, da diese den Fahrplan behalten.
Linien können über das Fenster Linienverwaltung verwaltet werden, das über die Symbolleiste oder durch Drücken der Taste w aufgerufen werden kann.

Erste Schritte:

[1] Klicken Sie zunächst mit dem {tool1} auf das Straßendepot {dep} und wählen Sie im Depotfenster den Bus {bus1}.
[2] Es ist notwendig, eine Linie zu konfigurieren zur gleichzeitigen Verwaltung mehrerer Fahrzeuge. Klicken Sie bei Bedient Linie: auf das Auswahlfeld und klicken Neue Linie erstellen an.

Haltestellen auswählen:


{list}
[*] Wählen Sie die Haltestelle {stnam} und konfigurieren Sie diese wie folgt:
--> [a] Stellen Sie Mindestladung auf {load}% ein.
--> [b] Stellen Sie maximale Wartezeit auf {wait}.

Wichtiger Hinweis: Der Halt der im Linienplan markiert ist, ist der Halt den Fahrzeuge anfahren werden, die diese Linie zugewiesen bekommen. Deshalb sollte nach Zuweisung einer Linie im Fahrplan des Fahrzeuges geprüft werden, welcher Halt als nächstes angefahren wird. Dieser sollte ggf. durch anklicken auf einen Halt in der Nähe des Fahrzeuges geändert werden, um lange Fahrten zu vermeiden.

Abschließende Schritte:

[1] Geben Sie der Linie einen Namen und schließen Sie das Fenster, damit die Änderungen übernommen werden.
[2] Klicken Sie abschließend auf Starten, damit das Fahrzeug das Depot verlässt.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/07_3-4.txt b/de/chapter_02/07_3-4.txt index 20aa462..e697887 100644 --- a/de/chapter_02/07_3-4.txt +++ b/de/chapter_02/07_3-4.txt @@ -1 +1 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straßendepot{dep}, wählen Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wählen Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Klicken Sie auf das Straßendepot {dep}, wählen Sie einen Bus {bus1} aus und klicken Sie auf Fahrplan.

Wählen Sie nun die Haltestellen aus:
{list}
- Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste und konfigurieren Sie sie wie folgt:
--> [a] Konfigurieren Sie Mindestladung auf {load}%.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.

Um zum nächsten Schritt zu gelangen, starten Sie den Bus.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index 462eb3e..92dec8a 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie ein Straßenende suchen oder bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

{img_road_menu} Menü Straßenbau

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {t1} mit einer benachbarten Straße.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie ein Straßenende suchen oder bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

{img_road_menu} Menü Straßenbau

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {dep} mit einer benachbarten Straße.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_02.txt b/de/chapter_02/goal_step_02.txt index 4b1ca46..8b89924 100644 --- a/de/chapter_02/goal_step_02.txt +++ b/de/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} starten

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {pos}. Sie finden dieses Tool im Menü {tool2}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {pos}.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} starten

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {dep}. Sie finden dieses Tool im Menü {tool2}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {dep}.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_03.txt b/de/chapter_02/goal_step_03.txt index 443ee11..52f3714 100644 --- a/de/chapter_02/goal_step_03.txt +++ b/de/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file +

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_04.txt b/de/chapter_02/goal_step_04.txt index 0aafc37..8cacf3a 100644 --- a/de/chapter_02/goal_step_04.txt +++ b/de/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {pos} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Klicken Sie auf das bereits fahrende Fahrzeug, um das Konvoi-Fenster anzuzeigen. Suchen Sie in der Titelleiste des Konvoi-Fensters nach dem vierten Symbol (dem Augensymbol) und drücken Sie darauf, um dem Konvoi zu folgen.

Das Tutorial fährt mit dem nächsten Schritt fort, sobald Sie den Konvoi gestartet haben.

\ No newline at end of file +

Da nun die Haltestellen vorhanden sind, müssen Sie einen Bus kaufen, um den Service anbieten zu können.

[1] Klicken Sie mit dem {tool1} auf das Straßendepot {dep} und kaufen den Bus {bus1}.
[2] Um die Fahrzeugroute zu konfigurieren, müssen Sie zunächst auf die Schaltfläche Fahrplan klicken um das Fahrzeugfenster zu öffnen.
Hinweis: Das Depot-Fenster können Sie mit einem rechten Mausklick auf die Titelleiste ausblenden. Ein weiterer Klcik auf die Titelleiste blendet das Fenster wieder ein.
[3] Im Reiter Fahrplan müssen Sie nun alle Haltestellen in der Stadt auswählen, um sie zur Liste hinzuzufügen:
{list}
[4] Nachdem Sie die {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} aus der Liste aus und konfigurieren Sie die Haltestelle wie folgt:
--> [a] Setzen Sie Mindestladung auf {load} %.
--> [b] Setzen Sie maximale Wartezeit auf {wait}.
[5] Schließen Sie nun das Fahrzeugfenster und klicken Sie auf Starten, damit das Fahrzeug das Depot verlässt.

Tipp: Drücken Sie die Taste ", um städtische Gebäude auszublenden.

Klicken Sie auf das Fahrzeug, das bereits im Umlauf ist, um die Titelleiste des Fahrzeugfensters anzuzeigen und klicken Sie auf das Auge-Symbol, um dem Fahrzeug zu folgen

Klicken Sie auf das bereits fahrende Fahrzeug, um das Konvoi-Fenster anzuzeigen. Suchen Sie in der Titelleiste des Konvoi-Fensters nach dem vierten Symbol (dem Augensymbol) und drücken Sie darauf, um dem Konvoi zu folgen.

Das Tutorial fährt mit dem nächsten Schritt fort, sobald Sie den Konvoi gestartet haben.

\ No newline at end of file diff --git a/de/chapter_06/goal_step_02.txt b/de/chapter_06/goal_step_02.txt index b81b084..6ed9c26 100644 --- a/de/chapter_06/goal_step_02.txt +++ b/de/chapter_06/goal_step_02.txt @@ -1 +1 @@ -

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Halte aus:
{list}

Nachdem Sie alle Halte hinzugefügt haben, wählen Sie den Halt {stnam} und konfigurieren Sie ihn wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file +

Der öffentliche Dienst benötigt Ihre Hilfe, um die Stadt {cit1} mit der Stadt {cit2} per Flugzeug zu verbinden.

Klicken Sie auf den Hangar {dep1} und wählen das Flugzeug {plane}.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Halte aus:
{list}

Nachdem Sie alle Halte hinzugefügt haben, wählen Sie den Halt {stnam} und konfigurieren Sie ihn wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie das Flugzeug.

\ No newline at end of file diff --git a/en/chapter_02/06_1-2.txt b/en/chapter_02/06_1-2.txt index 107b7dd..5c18e47 100644 --- a/en/chapter_02/06_1-2.txt +++ b/en/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {stnam}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:


{list}
[*] Select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file +

Now that the bridge has been repaired, the city {name} needs a line with [{cov}] buses in circulation to move tourism in from the dock under construction {stnam}.

{tx} Starting the Buses.

The Lines:

They are useful to control large numbers of vehicles if they serve the same route. You can also give them a personalized name to help identify them.
Lines can be managed from the Line Management window and can be accessed from the toolbar or pressing the "w" key.

First steps:

[1] First click on the Garage {dep} using the '{tool1}' and buy a bus {bus1}.
[2] You need to configure a Line to manage multiple vehicles at once. Create a line Clicking on the Serves line filter and then on Create new line.

Select all stops:


{list}
[*] Select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.

Final steps:

[1] Close the Schedule window for the changes to be applied.
[2] Finally click the Start button to get the vehicle out of the depot.

Buses in circulation: {cir}/{cov}

Advances to the next step when all vehicles are in circulation.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_01.txt b/en/chapter_02/goal_step_01.txt index 77e7d36..db4bfb9 100644 --- a/en/chapter_02/goal_step_01.txt +++ b/en/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

{img_road_menu} Menu {tool2}

Open the '{tool2}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, build a stretch of road between {t1} and {t2} or {t1} and {t3}.

\ No newline at end of file +

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

{img_road_menu} Menu {tool2}

Open the '{tool2}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, connect the field {dep} to an adjacent street.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_02.txt b/en/chapter_02/goal_step_02.txt index 6cbc513..bdc15d3 100644 --- a/en/chapter_02/goal_step_02.txt +++ b/en/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

We are going to set up a Bus Service in the town of {name} .

The first step in setting up the service is building a Garage at {pos}. You will find the garage tool in the '{tool2}' toolbar too.

Garage/Depot:

You can only build a depot on dead ends. From the depots it is possible to buy, sell, route and start the vehicles. There is also an option that allows electric vehicles to be used, but this is only shown if the road under the depot is electrified.
The garage allows you to purchase vehicles to service the routes that you will create.

To take to the next step, build the Garage in {pos}.

\ No newline at end of file +

We are going to set up a Bus Service in the town of {name} .

The first step in setting up the service is building a Garage at {dep}. You will find the garage tool in the '{tool2}' toolbar too.

Garage/Depot:

You can only build a depot on dead ends. From the depots it is possible to buy, sell, route and start the vehicles. There is also an option that allows electric vehicles to be used, but this is only shown if the road under the depot is electrified.
The garage allows you to purchase vehicles to service the routes that you will create.

To take to the next step, build the Garage in {dep}.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_03.txt b/en/chapter_02/goal_step_03.txt index a5dc813..94cbfc7 100644 --- a/en/chapter_02/goal_step_03.txt +++ b/en/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

The next step in setting up your Bus Service for {name}.

It is necessary to build bus stops at each of the points marked in the city:
{list}

Stops are in the '{tool2}' toolbar too.

Bus Stops:

In order for the bus to be able to load passengers it is necessary that the stops are close to some building, tourist attraction or factory. The stops have a storage capacity of 32, 64 or more. It is also possible to combine them to increase their load capacity along with their coverage. You can also extend the load type using extension buildings or stations that accept different types of load.

Note: The stops have a coverage area of 5x5 around them, therefore it is advised to place the stops at a distance of 4 tiles. Unlike buildings, streets do not need to be covered as they do not generate passengers.

Tip: Covered area can be displayed by pressing the "v" key.

To take to the next step, build all the Stops.

\ No newline at end of file +

The next step in setting up your Bus Service for {name}.

It is necessary to build bus stops at each of the points marked in the city:
{list}

Stops are in the '{tool2}' toolbar too.

Bus Stops:

In order for the bus to be able to load passengers it is necessary that the stops are close to some building, tourist attraction or factory. The stops have a storage capacity of 32, 64 or more. It is also possible to combine them to increase their load capacity along with their coverage. You can also extend the load type using extension buildings or stations that accept different types of load.

Note: The stops have a coverage area of 5x5 around them, therefore it is advised to place the stops at a distance of 4 tiles. Unlike buildings, streets do not need to be covered as they do not generate passengers.

Tip: Covered area can be displayed by pressing the "v" key.

To take to the next step, build all the Stops.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_04.txt b/en/chapter_02/goal_step_04.txt index 17984da..078c9b9 100644 --- a/en/chapter_02/goal_step_04.txt +++ b/en/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Now you need to purchase a {bus1} Bus to run the service.

[1] First click on the Garage {pos} using the '{tool1}' and buy a bus {bus1}.
[2] To configure the route of the vehicle, you must first click on the Schedule button.
[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
{list}
[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

Tip: Press the ["] key to hide the urban buildings.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file +

Now you need to purchase a {bus1} Bus to run the service.

[1] First click on the Garage {dep} using the '{tool1}' and buy a bus {bus1}.
[2] To configure the route of the vehicle, you must first click on the Schedule button.
[3] With the Schedule window open, you should now select all stops in the city to add them to the list:
{list}
[4] After adding the {nr} stops, select the stop {stnam} and configure it as follows:
--> [a] Set Minimum load to {load}%.
--> [b] Set Depart after to {wait}.
[5] Now you may eventually close the schedule window and click the Start button so that the vehicle leaves the depot.

Tip: Press the ["] key to hide the urban buildings.

Following Convoys

This option allows you to follow vehicles as they travel their route, so that they remain in view no matter where they go, even if they go underground. It is activated from the Convoy Window and is the fourth icon in that Window's title bar (an eye).

Click on the vehicle already in circulation so that the Convoy Window is displayed. Look for the fourth icon in the title bar of the Convoy Window (eye icon) and press it to follow the convoy.

The tutorial will move to the next step when you are following the convoy.

\ No newline at end of file diff --git a/es/chapter_02/06_1-2.txt b/es/chapter_02/06_1-2.txt index e2fffef..d986a78 100644 --- a/es/chapter_02/06_1-2.txt +++ b/es/chapter_02/06_1-2.txt @@ -1 +1 @@ -

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {stnam}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:


{list}
[*] Selecciona la parada {stnam} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file +

Ahora que el puente fue reparado, la ciudad {name} necesita una línea con [{cov}] autobuses en circulación para mover turistas desde el muelle en construcción {stnam}.

{tx} Arrancando los Autobuses.

Las Líneas:

Son necesarias para controlar grandes cantidades de vehículos si estos sirven a la misma ruta. También se les puede dar un nombre personalizado para ayudar a identificarlas.
Las líneas se pueden gestionar desde la ventana Administración de lineas que se puede acceder desde la barra de herramientas o presionando la tecla "w".

Primeros pasos:

[1] Primero con la '{tool1}' pulse sobre el Depósito de Carretera{dep} y en la ventana del depósito elija el Autobús {bus1}.
[2] Es necesario configurar una Línea para gestionar varios vehículos a la vez. Pulsa sobre el filtro Sirve en línea y luego en Crear línea nueva.

Seleccionando todas las paradas:


{list}
[*] Selecciona la parada {stnam} y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.

Pasos finales:

[1] Cierra la ventana Itinerario para que los cambios sean aplicados.
[2] Por último pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Autobuses en circulación: {cir}/{cov}

Se avanza al siguiente paso cuando todos los vehículos estén en circulación.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_01.txt b/es/chapter_02/goal_step_01.txt index 121c5f1..bc99815 100644 --- a/es/chapter_02/goal_step_01.txt +++ b/es/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

{img_road_menu} Menú {tool2}

'{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta los puntos entre {t1} y {t2} o {t1} y {t3} para avanzar al siguiente paso.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

{img_road_menu} Menú {tool2}

'{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta el campo {dep} a una calle adyacente para avanzar al siguiente paso.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_02.txt b/es/chapter_02/goal_step_02.txt index e7b3977..93005a8 100644 --- a/es/chapter_02/goal_step_02.txt +++ b/es/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {pos}. Puedes encontrar esta herramienta en '{tool2}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {pos}.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {dep}. Puedes encontrar esta herramienta en '{tool2}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {dep}.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_03.txt b/es/chapter_02/goal_step_03.txt index d7381e6..ebe1b70 100644 --- a/es/chapter_02/goal_step_03.txt +++ b/es/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad:
{list}

Las paradas se encuentran en la barra de herramientas '{tool2}' también.

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file +

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad:
{list}

Las paradas se encuentran en la barra de herramientas '{tool2}' también.

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_04.txt b/es/chapter_02/goal_step_04.txt index f1b1bb1..e141a7b 100644 --- a/es/chapter_02/goal_step_04.txt +++ b/es/chapter_02/goal_step_04.txt @@ -1 +1 @@ -

Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio.

[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera{pos} y en la ventana del depósito elige el Autobús {bus1}.
[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Consejo: Presiona la tecla ["] para ocultar los edificios urbanos.

Siguiendo Convoyes

Esta opción le permite seguir los vehículos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el vehículo que ya está en circulación para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de título de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file +

Ahora que las paradas están colocadas, necesitas comprar un Autobús para dar servicio.

[1] Usando la '{tool1}' pulse sobre el Depósito de Carretera {dep} y en la ventana del depósito elige el Autobús {bus1}.
[2] Para configurar la ruta del vehículo, primero debes pulsar sobre el botón Itinerario para abrir la ventana del vehículo.
[3] En la pestaña de Itinerario, ahora debes seleccionar en orden todas la paradas de la ciudad para añadirlas a la lista:
{list}
[4] Después de añadir las {nr} paradas, selecciona la parada {stnam} de la lista y configura la parada de la siguiente forma:
--> [a] Configura Carga mínima al {load}%.
--> [b] Configura Salir después de a {wait}.
[5] Ahora cierra la ventana del vehículo y pulsa sobre el botón Arrancar para que el vehículo salga del depósito.

Consejo: Presiona la tecla ["] para ocultar los edificios urbanos.

Siguiendo Convoyes

Esta opción le permite seguir los vehículos mientras recorren su ruta, para que permanezcan a la vista sin importar a donde vayan, incluso si van bajo tierra. Se activa desde la ventana Convoy y es el cuarto icono en la barra de titulo de esa ventana (el ojo).

Haga clic en el vehículo que ya está en circulación para que se muestre la ventana Convoy. Busque el cuarto icono en la barra de título de la ventana del convoy (icono de ojo) y presionar para seguir al convoy.

El tutorial pasará al siguiente paso cuando estés siguiendo el convoy.

\ No newline at end of file From 9eba974343be538a3953660885639f55a983e163 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 14 Jan 2026 12:47:09 +0100 Subject: [PATCH 150/217] CHG code comment --- class/class_basic_chapter.nut | 2 +- class/class_basic_data.nut | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7b23cb5..663e4ec 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3255,7 +3255,7 @@ function create_schedule_list(coord_list) { continue } if(tmpsw[j]==0){ - list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) + list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+"("+c.tostring()+")")) } else{ list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index dffb965..caa2e72 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -176,7 +176,7 @@ function translate_objects() { } /** - * set vehicle for chapter 2 step 4 + * set vehicle for chapter 2 step 4, 6, 7 * */ function get_veh_ch2_st4() { @@ -1771,4 +1771,4 @@ function get_gui_img(id) { break } -} \ No newline at end of file +} From e3e85bab37151f49e12776276c3daec0609aab38 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Wed, 14 Jan 2026 09:37:47 -0400 Subject: [PATCH 151/217] ADD conv.set_followed() in commad script --- class/class_chapter_02.nut | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 62897cf..515ad0a 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -606,7 +606,7 @@ class tutorial.chapter_02 extends basic_chapter local conv = cov_save[current_cov-1] local cov_valid = is_cov_valid(conv) - if (current_cov == ch2_cov_lim3.b){ + if (cov_valid && current_cov == ch2_cov_lim3.b){ if (conv.is_followed()) { pot4 = 1 } @@ -1194,8 +1194,13 @@ class tutorial.chapter_02 extends basic_chapter local conv = depot.get_convoy_list() conv[0].set_line(player, c_line) comm_start_convoy(player, conv[0], depot) - - pot4 = 1 + } + if (pot4 == 0){ + local conv = cov_save[current_cov-1] + local cov_valid = is_cov_valid(conv) + if (cov_valid && current_cov == ch2_cov_lim3.b){ + conv.set_followed() + } } return null break @@ -1328,3 +1333,4 @@ class tutorial.chapter_02 extends basic_chapter } // END OF FILE + From 869340b84fc0691835f4f94ac9d9f0af1dc14e03 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 15 Jan 2026 09:02:41 +0100 Subject: [PATCH 152/217] CHG chapter 6 airport tower to terminal --- class/class_basic_data.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index caa2e72..3a6d6d2 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -769,7 +769,7 @@ function get_obj_ch6(id) { return "AirStop" break case 4: - return "Tower1930" + return "Terminal1930" break case 5: return "1930AirDepot" @@ -791,7 +791,7 @@ function get_obj_ch6(id) { return "AirStop" break case 4: - return "Tower1930" + return "Terminal1930" break case 5: return "1930AirDepot" From 056583d5cd7c84687b6151d87f2372bfc1891d2f Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 15 Jan 2026 09:03:34 +0100 Subject: [PATCH 153/217] CHG code clean up --- class/class_chapter_02.nut | 98 ++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 58 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 515ad0a..b895efa 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -40,9 +40,9 @@ class tutorial.chapter_02 extends basic_chapter // Step 4 ===================================================================================== //Primer autobus line1_name = "ch2_l1" - veh1_obj = get_veh_ch2_st4() - veh1_load = set_loading_capacity(1) - veh1_wait = set_waiting_time(1) + veh_obj = get_veh_ch2_st4() + veh_load = set_loading_capacity(1) + veh_wait = set_waiting_time(1) dep_cnr1 = null //auto started // Step 5 ===================================================================================== @@ -92,6 +92,7 @@ class tutorial.chapter_02 extends basic_chapter line2_name = line1_name + " dock/station" line3_name = cty1.name + " - " + cty2.name + // look for streets next to the depot field if(this.step == 1) { local tile = my_tile(city1_road_depot) if ( tile_x(tile.x-1, tile.y, tile.z).get_way(wt_road) != null ) { build_list.append(tile_x(tile.x-1, tile.y, tile.z)) } @@ -164,8 +165,8 @@ class tutorial.chapter_02 extends basic_chapter break case 6: - veh1_load = set_loading_capacity(2) - veh1_wait = set_waiting_time(2) + veh_load = set_loading_capacity(2) + veh_wait = set_waiting_time(2) if (current_cov==(ch2_cov_lim2.a+1)){ text = ttextfile("chapter_02/06_1-2.txt") @@ -189,8 +190,8 @@ class tutorial.chapter_02 extends basic_chapter break case 7: - veh1_load = set_loading_capacity(3) - veh1_wait = set_waiting_time(3) + veh_load = set_loading_capacity(3) + veh_wait = set_waiting_time(3) if (!correct_cov){ text = ttextfile("chapter_02/07_3-4.txt") @@ -241,8 +242,6 @@ class tutorial.chapter_02 extends basic_chapter } } - //text.n1 = city1_tow.href(cty1.name.tostring()) - //text.n2 = city2_tow.href(cty2.name.tostring()) local t = coord(way1_coords.a.x, way1_coords.a.y) text.pt1 = t.href("("+t.tostring()+")") t = coord(way1_coords.b.x, way1_coords.b.y) @@ -256,18 +255,20 @@ class tutorial.chapter_02 extends basic_chapter break } - // text step 2, 6 and 7 + // depot coord step 1, 2, 4, 6 and 7 local steps = [1, 2, 4, 6, 7] if ( steps.find(this.step) != null ) { - // depot coord step 2, 6 and 7 text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") } - // veh load and wait time set to steps - text.load = veh1_load - text.wait = get_wait_time_text(veh1_wait) + // veh load and wait time set to steps 4, 6 and 7 + local steps = [4, 6, 7] + if ( steps.find(this.step) != null ) { + text.load = veh_load + text.wait = get_wait_time_text(veh_wait) + text.bus1 = translate(veh_obj) + } - text.bus1 = translate(veh1_obj) text.name = city1_tow.href(cty1.name.tostring()) text.name2 = city2_tow.href(cty2.name.tostring()) text.tool1 = translate_objects_list.inspec @@ -849,16 +850,6 @@ class tutorial.chapter_02 extends basic_chapter if (pos.x==city1_halt_2[city1_halt_2.len()-1].x && pos.y==city1_halt_2[city1_halt_2.len()-1].y && glsw[0] > 0){ return format(translate("Select station No.%d"),2)+" ("+pub_st2.tostring()+")." } else { return null } - /*if (pos.x==city1_halt_2[city1_halt_2.len()-1].x && pos.y==city1_halt_2[city1_halt_2.len()-1].y && glsw[1] > 0){ - - return null - } - else { - if (glsw[0]==0) - return format(translate("Select station No.%d"),1)+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")." - else if (glsw[1]==0) - return format(translate("Select station No.%d"),2)+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")." - }*/ } break; } @@ -885,8 +876,8 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 4: local selc = get_waiting_halt(1) - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city1_halt_1 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -898,8 +889,8 @@ class tutorial.chapter_02 extends basic_chapter break case 6: local selc = get_waiting_halt(2) - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city1_halt_2 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -909,8 +900,8 @@ class tutorial.chapter_02 extends basic_chapter return result break case 7: - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city2_halt_1 local selc = get_waiting_halt(3) result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) @@ -933,7 +924,7 @@ class tutorial.chapter_02 extends basic_chapter local cov = 1 local veh = 1 local good_list = [good_desc_x (good_alias.passa).get_catg_index()] //Passengers - local name = veh1_obj + local name = veh_obj local st_tile = 1 result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile) @@ -942,8 +933,8 @@ class tutorial.chapter_02 extends basic_chapter return bus_result_message(result, translate(name), veh, cov) } local selc = get_waiting_halt(1) - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city1_halt_1 local siz = c_list.len() result = compare_schedule_convoy(result, pl, cov, convoy, selc, load, time, c_list, siz) @@ -958,7 +949,7 @@ class tutorial.chapter_02 extends basic_chapter local cov = cov_list.len() local veh = 1 local good_list = [good_desc_x (good_alias.passa).get_catg_index()] //Passengers - local name = veh1_obj + local name = veh_obj local st_tile = 1 result = is_convoy_correct(depot, cov, veh, good_list, name, st_tile) if (result!=null){ @@ -967,8 +958,8 @@ class tutorial.chapter_02 extends basic_chapter } local selc = get_waiting_halt(2) - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city1_halt_2 local siz = c_list.len() local line = true @@ -983,7 +974,7 @@ class tutorial.chapter_02 extends basic_chapter local cov = 1 local veh = 1 local good_list = [good_desc_x (good_alias.passa).get_catg_index()] //Passengers - local name = veh1_obj + local name = veh_obj local st_tile = 1 result = is_convoy_correct(depot,cov,veh,good_list,name, st_tile) if (result!=null){ @@ -991,8 +982,8 @@ class tutorial.chapter_02 extends basic_chapter return bus_result_message(result, translate(name), veh, cov) } - local load = veh1_load - local time = veh1_wait + local load = veh_load + local time = veh_wait local c_list = city2_halt_1 local siz = c_list.len() local selc = get_waiting_halt(3) @@ -1070,8 +1061,8 @@ class tutorial.chapter_02 extends basic_chapter local c_list = city1_halt_1 local sched = schedule_x(gl_wt, []) - local load = veh1_load - local wait = veh1_wait + local load = veh_load + local wait = veh_wait local sch_siz = c_list.len() for(local j=0;jch2_cov_lim2.a && j Date: Thu, 15 Jan 2026 09:06:25 +0100 Subject: [PATCH 154/217] CHG version 2.0.04 - Simutrans >= r11871 --- class/class_chapter_06.nut | 1 + scenario.nut | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 488f976..9d01583 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -455,6 +455,7 @@ class tutorial.chapter_06 extends basic_chapter if (tool_id==4096) return null + switch (this.step) { case 1: local climate = square_x(pos.x, pos.y).get_climate() diff --git a/scenario.nut b/scenario.nut index 9cd346f..eeba1fd 100644 --- a/scenario.nut +++ b/scenario.nut @@ -5,7 +5,7 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files -const version = 2003 +const version = 2004 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" From 2a071c2b0fc3664051e64f879d5590ac59a77650 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 15 Jan 2026 12:05:52 +0100 Subject: [PATCH 155/217] CHG line settings pak64 --- class/class_basic_coords_p64.nut | 1 + class/class_basic_data.nut | 42 +++++++++++++++++++++++--------- class/class_chapter_05.nut | 5 ++-- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 0015ee5..73ac7f1 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -112,6 +112,7 @@ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] +// road halt in all road lines city 1 line_connect_halt <- coord(126,187) city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 3a6d6d2..30707d4 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -935,7 +935,7 @@ function set_convoy_count(id) { return 10 break case 11: - return 3 + return 2 break case 12: return 1 @@ -1139,13 +1139,15 @@ function set_transportet_goods(id) { /** * set loading capacity * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby - * id 4 - chapter 3 step 11 : city train - * id 5 - chapter 6 step 2 : air city 1 - city 7 - * id 6 - chapter 6 step 3 : bus city 1 - Airport - * id 7 - chapter 6 step 4 : bus city 7 - Airport + * id 1 - chapter 2 step 4 : bus city Pollingwick + * id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * id 4 - chapter 3 step 11 : city train + * id 5 - chapter 6 step 2 : air city 1 - city 7 + * id 6 - chapter 6 step 3 : bus city 1 - Airport + * id 7 - chapter 6 step 4 : bus city 7 - Airport + * id 8 - chapter 5 step 4 : post city 1 + * id 9 - chapter 5 step 4 : ship oil rig * */ function set_loading_capacity(id) { @@ -1174,6 +1176,12 @@ function set_loading_capacity(id) { case 7: return 60 break + case 8: + return 60 + break + case 9: + return 100 + break } break case "pak64.german": @@ -1199,6 +1207,12 @@ function set_loading_capacity(id) { case 7: return 60 break + case 8: + return 60 + break + case 9: + return 70 + break } break case "pak128": @@ -1224,6 +1238,12 @@ function set_loading_capacity(id) { case 7: return 60 break + case 8: + return 60 + break + case 9: + return 100 + break } break } @@ -1231,7 +1251,7 @@ function set_loading_capacity(id) { } /** - * set waiting time + * set waiting time passenger and post * * id 1 - chapter 2 step 4 : bus city Pollingwick * id 2 - chapter 2 step 6 : bus Pollingwick - Dock @@ -1268,7 +1288,7 @@ function set_waiting_time(id) { return 42282 break case 6: - return 10571 + return 6343 break case 7: return 42282 @@ -1577,7 +1597,7 @@ function get_waiting_halt(id) { return 0 break case 9: - return 0 + return 7 break case 10: return 0 diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index dddea06..0792c4a 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -38,7 +38,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh2_obj = get_veh_ch5(3) - veh2_load = 100 + veh2_load = set_loading_capacity(8) veh2_wait = set_waiting_time(6) d2_cnr = null //auto started @@ -49,7 +49,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el barco //sch_list3 = [coord(133,189), coord_fac_4] veh3_obj = get_veh_ch5(4) - veh3_load = 100 + veh3_load = set_loading_capacity(9) veh3_wait = set_waiting_time(7) //c_dep3 = coord(150,190) // depot d3_cnr = null //auto started @@ -74,6 +74,7 @@ class tutorial.chapter_05 extends basic_chapter factory_data.rawget("8") ] + // set line names for automatic step line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name line2_name = translate("Post") + " City " + get_city_name(city1_tow) local ta = this.my_tile(ch5_post_ship_halts[0]) From cf5f8ec751892722779d6611c3ff1bc054adf703 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 16 Jan 2026 11:45:05 +0100 Subject: [PATCH 156/217] CHG search empty tiles for post extension on halts --- class/class_basic_chapter.nut | 151 +++++++++++++++++++++++++++++----- class/class_chapter_05.nut | 12 +-- 2 files changed, 139 insertions(+), 24 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 663e4ec..fc5b93d 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1,4 +1,6 @@ -/* +/** + * @file class_basic_chapter.nut + * * class basis_chapter * * @@ -30,8 +32,9 @@ tile_delay <- 0x0000000f & time() //delay for mark tiles gl_tile_i <- 0 /** - * chapter description : this is a placeholder class - */ + * class to chapter description : this is a placeholder class + * + */ class basic_chapter { @@ -108,12 +111,12 @@ class basic_chapter // BASIC FUNCTIONS, NO REWRITE //Para arrancar vehiculos usando comm ---------------------------------------------------------------- - function comm_set_convoy(cov_nr, coord, name, veh_nr = false) + function comm_set_convoy( cov_nr, coord, name, veh_nr = false ) { /*1 Numero de convoy actual,****** * 2 coord del deposito, * * 3 Name del vehiculo, * * 4 Numero de remolques/bagones)*/ - { + local pl = player_x(0) local depot = depot_x(coord.x, coord.y, coord.z) // Deposito /Garaje local cov_list = depot.get_convoy_list() // Lista de vehiculos en el deposito @@ -148,7 +151,7 @@ class basic_chapter } } - function comm_destroy_convoy(pl, coord){ + function comm_destroy_convoy( pl, coord ) { local depot = depot_x(coord.x, coord.y, coord.z) // Deposito /Garaje local cov_list = depot.get_convoy_list() // Lista de vehiculos en el deposito local d_nr = cov_list.len() //Numero de vehiculos en el deposito @@ -282,11 +285,13 @@ class basic_chapter } /** + * @fn check_halt_merge(halt1, halt2) * check is tile halt2 in tilelist halt1 * - * halt1 = tile_x - * halt2 = tile_x + * @param halt1 = tile_x + * @param halt2 = tile_x * + * @return true or false */ function check_halt_merge(halt1, halt2) { local tile_list = halt1.get_halt().get_tile_list() @@ -303,12 +308,13 @@ class basic_chapter } /** + * @fn check_halt_wt(halt, search_wt) * check waytype tile in tile list from station * - * halt - tile_x from station - * search_wt - waytype for search tile + * @param halt - tile_x from station + * @param search_wt - waytype for search tile * - * return - tile_x or null + * @return tile_x or null * */ function check_halt_wt(halt, search_wt) { @@ -3323,14 +3329,16 @@ function station_tiles(tile_a, tile_b, count) { } /** + * @fn check_rail_station(tile, rtype, pos = null) * check rail platform * - * tile = tile_x halt pos - * rtype = 0 - check pos in platform - * 1 - return array platform - * pos = tile to click + * @param tile = tile_x halt pos + * @param rtype = 0 - check pos in platform + * 1 - return array platform + * @param pos = tile to click * * + * @return true (rtype = 0) or tiles_x array (rtype = 1) */ function check_rail_station(tile, rtype, pos = null) { local halt_tiles = tile.get_halt().get_tile_list() @@ -3365,8 +3373,13 @@ function check_rail_station(tile, rtype, pos = null) { } /** - * test tile is empty - * removed objects for empty tiles: tree, ground_object, moving_object + * @fn test_tile_is_empty(t_tile) + * test tile is empty + * removed objects for empty tiles: tree, ground_object, moving_object + * + * @param t_tile = tile_x + * + * @return true or false * */ function test_tile_is_empty(t_tile) { @@ -3391,10 +3404,11 @@ function test_tile_is_empty(t_tile) { } /** + * @fn search_tile_in_tiles(tiles, coord) * check tile in tile array * - * tiles = tile array - * coord = tile as coord + * @param tiles = tile array + * @param coord = tile as coord * */ function search_tile_in_tiles(tiles, coord) { @@ -3407,4 +3421,103 @@ function search_tile_in_tiles(tiles, coord) { return false } + +/** + * @fn check_post_extension(halt_list) + * check stations enables post / enables pax and post + * search free tile for post extension + * search road tile for post halt + * replace pass halt -> pass/post halt + * + * @param halt_list = array[tiles_x, tile_x, .... ] + * + * @return array[ {a = build_tile, b = code}, .... ] + * code = 0 - build mail extension + * code = 1 - build mail halt + * code = 3 - replace pass halt to pass/mail halt + * code = 4 - remove city building + * + */ +function check_post_extension(halt_list) { + + local stations_list_mail = building_desc_x.get_available_stations(building_desc_x.station, wt_road, good_desc_x("Post")) + local build_list = [] + + local station_mail = null // halt accepts mail + local station_passmail = null // halt accepts passenger and mail + // search available halts + if ( stations_list_mail.len() > 0 ) { + for ( local i = 0; i < stations_list_mail.len(); i++ ) { + if ( stations_list_mail[i].enables_pax() && station_passmail == null ) { + station_passmail = stations_list_post[i] + } else if ( station_mail == null ) { + station_mail = stations_list_mail[i] + } + } + } + + if ( station_passmail != null ) { gui.add_message("station_passmail " + station_passmail.get_name()) } + if ( station_mail != null ) { gui.add_message("station_mail " + station_mail.get_name()) } + + for ( local i = 0; i < halt_list.len(); i++ ) { + local tiles = find_tiles_after_tile(my_tile(halt_list[i])) + + local code_0 = null + local code_1 = null + + for ( local j = 0; j < tiles.len(); j++ ) { + if ( test_tile_is_empty(tiles[j]) ) { + // empty tile build mail extension + code_0 = { a = tiles[j], b = 0 } + break + } + if ( tiles[j].get_slope() == 0 && tiles[j].get_way(wt_road) != null && station_mail != null ) { + // tile has road and mail halt avai + local w_dir = tiles[j].get_way_dirs(wt_road) + if ( dir.is_single(w_dir) || dir.is_straight(w_dir) ) { + // tile has road for build mail halt available + code_1 = { a = tiles[j], b = 1 } + } + } + } + + if ( code_0 != null ) { + build_list.append(code_0) + } else if ( code_1 != null ) { + build_list.append(code_1) + } + + } + + for ( local i = 0; i < build_list.len(); i++ ) { + gui.add_message("build_list[" + i + "] " + coord3d_to_string(build_list[i].a) + " code " + build_list[i].b ) + if ( build_list[i].b == 0 ) { + extensions_tiles[i] = coord(build_list[i].a.x, build_list[i].a.y) + } + } + +} + +/** + * @fn find_tiles_after_tile(tile) + * + * @param tile = tile_x + * + * @return tile_x array + * array[N, S, E, W, NE, SE, NW, SW] + */ +function find_tiles_after_tile(tile) { + local t_array = [] + + t_array.append( tile_x(tile.x, tile.y-1, tile.z) ) + t_array.append( tile_x(tile.x, tile.y+1, tile.z) ) + t_array.append( tile_x(tile.x+1, tile.y, tile.z) ) + t_array.append( tile_x(tile.x-1, tile.y, tile.z) ) + t_array.append( tile_x(tile.x+1, tile.y-1, tile.z) ) + t_array.append( tile_x(tile.x+1, tile.y+1, tile.z) ) + t_array.append( tile_x(tile.x-1, tile.y-1, tile.z) ) + t_array.append( tile_x(tile.x-1, tile.y+1, tile.z) ) + + return t_array +} // END OF FILE diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 0792c4a..21ce5c9 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -23,8 +23,8 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh1_obj = get_veh_ch5(1) - veh1_load = 100 - veh1_wait = 0 + veh1_load = set_loading_capacity(8) + veh1_wait = set_waiting_time(6) d1_cnr = null //auto started f1_good = get_good_data(5, 2) @@ -38,7 +38,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh2_obj = get_veh_ch5(3) - veh2_load = set_loading_capacity(8) + veh2_load = 100 veh2_wait = set_waiting_time(6) d2_cnr = null //auto started @@ -49,7 +49,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el barco //sch_list3 = [coord(133,189), coord_fac_4] veh3_obj = get_veh_ch5(4) - veh3_load = set_loading_capacity(9) + veh3_load = 100 veh3_wait = set_waiting_time(7) //c_dep3 = coord(150,190) // depot d3_cnr = null //auto started @@ -74,7 +74,6 @@ class tutorial.chapter_05 extends basic_chapter factory_data.rawget("8") ] - // set line names for automatic step line1_name = get_good_data(5, 3) + " " + fab_list[2].name + " - " + fab_list[3].name line2_name = translate("Post") + " City " + get_city_name(city1_tow) local ta = this.my_tile(ch5_post_ship_halts[0]) @@ -476,6 +475,9 @@ class tutorial.chapter_05 extends basic_chapter case 4: persistent.ch_max_sub_steps = 3 if (pot0==0){ + + check_post_extension(city1_post_halts) + local player = player_x(1) local list = [] //extensions_tiles for ( local i = 0; i < city1_post_halts.len(); i++ ) { From 3790464233cc967d4a7e627649e311fbac1ef432 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 16 Jan 2026 11:46:05 +0100 Subject: [PATCH 157/217] CHG comments --- scenario.nut | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/scenario.nut b/scenario.nut index eeba1fd..e340bdf 100644 --- a/scenario.nut +++ b/scenario.nut @@ -1,4 +1,5 @@ /* + * @file scenario.nut * Tutorial Scenario * * @@ -291,9 +292,9 @@ function get_integral(tx) { //Check version and pakset name resul_version = string_analyzer() - include(nut_path+"class_basic_convoys") // include class for detect eliminated convoys - include(nut_path+"class_messages") // include def messages texts - include(nut_path+"astar") // .. route search for way building etc + include(nut_path+"class_basic_convoys") // include class for detect eliminated convoys + include(nut_path+"class_messages") // include def messages texts + include(nut_path+"astar") // .. route search for way building etc } @@ -305,6 +306,7 @@ chapter <- tutorial.chapter_02 // must be placed here !!! /** + * @fn script_text() * This function will be called, whenever a user clicks to jump to the next step * It must not alter the map or call a tool! * Hence we just set a flag and handle all map changes in is_scenario_completed() @@ -403,9 +405,14 @@ function set_city_names() } -/* - * test functions generating the GUI strings - * These must return fast and must not alter the map! +/** + * @fn get_info_text(pl) + * test functions generating the GUI strings + * These must return fast and must not alter the map! + * + * @param pl = player_x + * + * @return */ function get_info_text(pl) { @@ -532,18 +539,20 @@ function labels_text_debug() } -/* +/** + * @fn chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) * calculate percentage chapter complete * - * ch_steps = count chapter steps - * step = actual chapter step - * sup_steps = count sub steps in a chapter step - * sub_step = actual sub step in a chapter step + * @param ch_steps = count chapter steps + * @param step = actual chapter step + * @param sup_steps = count sub steps in a chapter step + * @param sub_step = actual sub step in a chapter step * * no sub steps in chapter step, then set sub_steps and sub_step to 0 * - * This function is called during a step() and can alter the map + * This function is called during a step() and can alter the map * + * @return */ function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) { @@ -572,10 +581,14 @@ function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) } /** - * This function check whether finished or not - * Is runs in a step, so it can alter the map - * @return 100 or more, the scenario will be "win" and the scenario_info window - * show the result tab + * @fn is_scenario_completed(pl) + * This function check whether finished or not + * Is runs in a step, so it can alter the map + * + * @param pl = player_x + * + * @return 100 or more, the scenario will be "win" and the scenario_info window + * show the result tab */ function is_scenario_completed(pl) { From f10988855b91db6b042429261884ff5a21a90711 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 16 Jan 2026 14:05:05 +0100 Subject: [PATCH 158/217] FIX schedule error step 4 --- class/class_chapter_02.nut | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index b895efa..aa69ff8 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -41,8 +41,6 @@ class tutorial.chapter_02 extends basic_chapter //Primer autobus line1_name = "ch2_l1" veh_obj = get_veh_ch2_st4() - veh_load = set_loading_capacity(1) - veh_wait = set_waiting_time(1) dep_cnr1 = null //auto started // Step 5 ===================================================================================== @@ -64,6 +62,8 @@ class tutorial.chapter_02 extends basic_chapter line3_name = "ch2_l3" dep_cnr3 = null //auto started + veh_load = 0 + veh_wait = 0 // Step 8 ===================================================================================== price = 1200 @@ -146,6 +146,8 @@ class tutorial.chapter_02 extends basic_chapter case 2: break case 3: + veh_load = set_loading_capacity(1) + veh_wait = set_waiting_time(1) text.list = create_halt_list(city1_halt_1) break case 4: @@ -179,8 +181,8 @@ class tutorial.chapter_02 extends basic_chapter text.list = create_schedule_list(city1_halt_2) // dock bus halt - local tile = my_tile(city1_halt_2[0]) - text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[0].tostring()+")" + local tile = my_tile(city1_halt_2[get_waiting_halt(2)]) + text.stnam = ""+tile.get_halt().get_name()+" ("+city1_halt_2[get_waiting_halt(2)].tostring()+")" local halt = my_tile(city1_halt_2[get_waiting_halt(2)]).get_halt() text.line = get_line_name(halt) @@ -876,8 +878,8 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 4: local selc = get_waiting_halt(1) - local load = veh_load - local time = veh_wait + local load = set_loading_capacity(1) + local time = set_waiting_time(1) local c_list = city1_halt_1 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -889,8 +891,8 @@ class tutorial.chapter_02 extends basic_chapter break case 6: local selc = get_waiting_halt(2) - local load = veh_load - local time = veh_wait + local load = set_loading_capacity(2) + local time = set_waiting_time(2) local c_list = city1_halt_2 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ @@ -900,10 +902,10 @@ class tutorial.chapter_02 extends basic_chapter return result break case 7: - local load = veh_load - local time = veh_wait - local c_list = city2_halt_1 local selc = get_waiting_halt(3) + local load = set_loading_capacity(3) + local time = set_waiting_time(3) + local c_list = city2_halt_1 result = compare_schedule(result, pl, schedule, selc, load, time, c_list, true) if(result == null){ local line_name = line3_name //"Test 3" From aa369f444514da5e0c760e24b9e52643c76681d3 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 16 Jan 2026 19:30:57 +0100 Subject: [PATCH 159/217] ADD info closed scenario window --- de/info.txt | 2 +- en/info.txt | 2 +- es/info.txt | 2 +- scenario.nut | 7 +++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/de/info.txt b/de/info.txt index 6f0875c..3799cb4 100644 --- a/de/info.txt +++ b/de/info.txt @@ -1 +1 @@ -

Simutrans-Tutorial


Dieses Tutorial erklärt die ersten Schritte beim Aufbau Ihres Transportimperiums in Simutrans. Der Schwerpunkt liegt auf den notwendigen Maßnahmen rund um die Transportketten in Simutrans.

Das Tutorial besteht aus mehreren Kapiteln, in denen jeweils eine Reihe von Schritten zum Abschließen des Kapitels enthalten sind.

Wirtschaftliche Aspekte werden im Tutorial nur kurz behandelt.

{list_of_chapters}

Ausführlichere Hilfe erhalten Sie, indem Sie die Taste F1 drücken. In vielen Fenstern gibt es im Fenstertitel das ?, das beim anklicken direkt zum passenden Hilfetext springt.

{first_link}

Hinweis: In manchen Fällen kann es bis zu 15 Sekunden Verzögerung zwischen der Ausführung einer Aktion und der Aktualisierung des Tutorialtextes geben.


{pakset_info} \ No newline at end of file +

Simutrans-Tutorial


Dieses Tutorial erklärt die ersten Schritte beim Aufbau Ihres Transportimperiums in Simutrans. Der Schwerpunkt liegt auf den notwendigen Maßnahmen rund um die Transportketten in Simutrans.

Fenster {dialog} öffnen

Sollte dieses Fenster geschlossen werden, kann es mit diesem Button im Hauptmenü wieder geöffnet werden.

Das Tutorial besteht aus mehreren Kapiteln, in denen jeweils eine Reihe von Schritten zum Abschließen des Kapitels enthalten sind.

Wirtschaftliche Aspekte werden im Tutorial nur kurz behandelt.

{list_of_chapters}

Ausführlichere Hilfe erhalten Sie, indem Sie die Taste F1 drücken. In vielen Fenstern gibt es im Fenstertitel das ?, das beim anklicken direkt zum passenden Hilfetext springt.

{first_link}

Hinweis: In manchen Fällen kann es bis zu 15 Sekunden Verzögerung zwischen der Ausführung einer Aktion und der Aktualisierung des Tutorialtextes geben.


{pakset_info} \ No newline at end of file diff --git a/en/info.txt b/en/info.txt index d17546e..9b9d2c2 100644 --- a/en/info.txt +++ b/en/info.txt @@ -1 +1 @@ -

Simutrans Tutorial

In this tutorial, the first steps in setting up your transportation empire in Simutrans are explained. The focus is on the necessary actions around transportation chains in Simutrans.

The tutorial consists of several Chapters each having a number of Steps included in order to complete the target chapter.

Economic concerns are only briefly covered in the Tutorial

{list_of_chapters}

Further help can be found by pressing the "F1" key in regards to the various tools, functions, and logic in Simutrans.

{first_link}

Note: In some cases it can take up to 15 seconds from completing the required actions, before the Tutorial will update to the next step.


{pakset_info} \ No newline at end of file +

Simutrans Tutorial

In this tutorial, the first steps in setting up your transportation empire in Simutrans are explained. The focus is on the necessary actions around transportation chains in Simutrans.

Open window {dialog}

If this window is closed, it can be reopened using this button in the main menu.

The tutorial consists of several Chapters each having a number of Steps included in order to complete the target chapter.

Economic concerns are only briefly covered in the Tutorial

{list_of_chapters}

Further help can be found by pressing the "F1" key in regards to the various tools, functions, and logic in Simutrans.

{first_link}

Note: In some cases it can take up to 15 seconds from completing the required actions, before the Tutorial will update to the next step.


{pakset_info} \ No newline at end of file diff --git a/es/info.txt b/es/info.txt index 9b7fdf2..6bc17d8 100644 --- a/es/info.txt +++ b/es/info.txt @@ -1 +1 @@ -

Simutrans Tutorial


En este tutorial, se explican los primeros pasos en la creación de su imperio de transporte en Simutrans. Se centra en las acciones necesarias alrededor de las cadenas de transporte en Simutrans.

El tutorial se compone de varios Capítulos, cada uno con un número de Pasos incluidos en orden para completar el capitulo.

Los asuntos económicos sólo están cubiertos brevemente en el Tutorial

{list_of_chapters}

Puedes obtener más ayuda pulsando la tecla "F1" en lo que respecta a las diversas herramientas, funciones, y la lógica de Simutrans.

{first_link}

Nota: En algunos casos puede haber hasta 15 segundos de retraso desde que realizas una acción hasta que el Tutorial se actualiza al siguiente paso.


{pakset_info} \ No newline at end of file +

Simutrans Tutorial


En este tutorial, se explican los primeros pasos en la creación de su imperio de transporte en Simutrans. Se centra en las acciones necesarias alrededor de las cadenas de transporte en Simutrans.

Abrir ventana {dialog}

Si esta ventana está cerrada, se puede volver a abrir utilizando este botón en el menú principal.

El tutorial se compone de varios Capítulos, cada uno con un número de Pasos incluidos en orden para completar el capitulo.

Los asuntos económicos sólo están cubiertos brevemente en el Tutorial

{list_of_chapters}

Puedes obtener más ayuda pulsando la tecla "F1" en lo que respecta a las diversas herramientas, funciones, y la lógica de Simutrans.

{first_link}

Nota: En algunos casos puede haber hasta 15 segundos de retraso desde que realizas una acción hasta que el Tutorial se actualiza al siguiente paso.


{pakset_info} \ No newline at end of file diff --git a/scenario.nut b/scenario.nut index e340bdf..fa95083 100644 --- a/scenario.nut +++ b/scenario.nut @@ -417,11 +417,14 @@ function set_city_names() function get_info_text(pl) { local info = ttextfile("info.txt") + info.dialog = translate("Scenario information") + local help = "" local i = 0 //foreach (chap in tutorial) - for (i=1;i<=chapter_max;i++) - help+= ""+translate("Chapter")+" "+(i)+" - "+translate(tutorial["chapter_"+(i<10?"0":"")+i].chapter_name)+"
" + for ( i=1; i<=chapter_max; i++ ) + help += ""+translate("Chapter")+" "+(i)+" - "+translate(tutorial["chapter_"+(i<10?"0":"")+i].chapter_name)+"
" + info.list_of_chapters = help info.first_link = ""+(chapter.chap_nr <= 1 ? translate("Let's start!"):translate("Let's go on!") )+" >>" From 914f4c7c66047a700a546c085c425293dba2c9b5 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 20 Jan 2026 09:48:23 +0100 Subject: [PATCH 160/217] CHG chapter 5 step D - post extension review --- class/class_basic_chapter.nut | 343 ++++++++++++++++++++++++------ class/class_basic_coords_p128.nut | 4 +- class/class_basic_coords_p64.nut | 6 +- class/class_basic_coords_p64g.nut | 8 +- class/class_basic_data.nut | 38 ++-- class/class_basic_gui.nut | 3 +- class/class_chapter_05.nut | 153 +++++++++---- de/chapter_05/04_1-3.txt | 2 +- de/chapter_05/04_2-3.txt | 2 +- en/chapter_05/04_1-3.txt | 2 +- es/chapter_05/04_1-3.txt | 2 +- scenario.nut | 2 +- 12 files changed, 423 insertions(+), 142 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index fc5b93d..aa5bbec 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2013,7 +2013,7 @@ class basic_chapter return translate("The signal does not point in the correct direction")+" ("+coord(sigcoord[0].x,sigcoord[0].y).tostring()+")." } - function get_stop(pos,cs,result,load1,load2,cov,count,sw) + function get_stop(pos,cs,result,load1,load2,cov,count,sw) { local allret = {cs=cs,result=result,count=count,pot=null} local st_c = coord(pos.x,pos.y) @@ -2516,7 +2516,7 @@ class basic_chapter function is_stop_building_ex(siz, list, lab_name) { local count = 0 - for(local j=0;j 0 ) { for ( local i = 0; i < stations_list_mail.len(); i++ ) { if ( stations_list_mail[i].enables_pax() && station_passmail == null ) { - station_passmail = stations_list_post[i] + station_passmail = stations_list_mail[i] } else if ( station_mail == null ) { station_mail = stations_list_mail[i] } } } + if ( station_mail == null && station_passmail != null) { + station_mail = station_passmail + } + + if ( station_passmail != null ) { gui.add_message("station_passmail " + station_passmail.get_name()) } if ( station_mail != null ) { gui.add_message("station_mail " + station_mail.get_name()) } @@ -3464,36 +3481,76 @@ function check_post_extension(halt_list) { local code_0 = null local code_1 = null + local code_2 = null + local code_2_level = null + local code_3 = null + + local b_types = ["city_res", "city_com", "city_ind"] + + // check road direction + local halt_dir = my_tile(halt_list[i]).get_way_dirs(wt_road) for ( local j = 0; j < tiles.len(); j++ ) { if ( test_tile_is_empty(tiles[j]) ) { + local tile_ok = true + // not build end of road + if ( dir.is_single(halt_dir) ) { + if ( (halt_dir == 1 || halt_dir == 4) && halt_list[i].x == tiles[j].x ) { + tile_ok = false + } + if ( (halt_dir == 2 || halt_dir == 8) && halt_list[i].y == tiles[j].y ) { + tile_ok = false + } + } + // empty tile build mail extension - code_0 = { a = tiles[j], b = 0 } - break + if ( tile_ok ) { + code_0 = { a = tiles[j], b = 0 } + break + } } + if ( tiles[j].get_slope() == 0 && tiles[j].get_way(wt_road) != null && station_mail != null ) { - // tile has road and mail halt avai + // tile has road and mail halt available local w_dir = tiles[j].get_way_dirs(wt_road) if ( dir.is_single(w_dir) || dir.is_straight(w_dir) ) { - // tile has road for build mail halt available code_1 = { a = tiles[j], b = 1 } } } + + // replace pass halt to pass/mail halt + local tile_building = tiles[j].find_object(mo_building) + if ( tile_building != null ) { + local b_desc = tile_building.get_desc() + if ( b_types.find(b_desc.get_type()) ) { + if ( code_2 == null ) { + code_2 = { a = tiles[j], b = 2 } + code_2_level = tile_building.get_passenger_level() + } else if ( code_2_level < tile_building.get_passenger_level() ) { + code_2 = { a = tiles[j], b = 2 } + code_2_level = tile_building.get_passenger_level() + } + + } + } } if ( code_0 != null ) { build_list.append(code_0) } else if ( code_1 != null ) { build_list.append(code_1) + } else if ( code_2 != null ) { + build_list.append(code_2) } + //if ( code_2 != null ) { gui.add_message("code_2 " + coord3d_to_string(code_2.a) ) } } for ( local i = 0; i < build_list.len(); i++ ) { - gui.add_message("build_list[" + i + "] " + coord3d_to_string(build_list[i].a) + " code " + build_list[i].b ) - if ( build_list[i].b == 0 ) { - extensions_tiles[i] = coord(build_list[i].a.x, build_list[i].a.y) - } + //gui.add_message("build_list[" + i + "] " + coord3d_to_string(build_list[i].a) + " code " + build_list[i].b ) + //if ( build_list[i].b == 0 ) { + extensions_tiles.append({a = coord(build_list[i].a.x, build_list[i].a.y), b = build_list[i].b}) + //} } } @@ -3520,4 +3577,150 @@ function find_tiles_after_tile(tile) { return t_array } + + +/** + * @fn find_object(obj, wt, speed, good) + * find object tool + * + * @param obj = object type ( bridge, tunnel, way, catenary, station, extension ) + * @param wt = waytype + * @param speed = speed - null by station, extension + * @param good = good + */ +function find_object(obj, wt, speed, good = null) { + + local list = [] + switch ( obj ) { + case "bridge": + list = bridge_desc_x.get_available_bridges(wt) + break + case "tunnel": + list = tunnel_desc_x.get_available_tunnels(wt) + break + case "way": + list = way_desc_x.get_available_ways(wt, st_flat) + break + case "catenary": + local li = wayobj_desc_x.get_available_wayobjs(wt) + for (local j=0; j0) { + obj_desc = list[0] + //gui.add_message_at(our_player,"0 obj_desc " + obj_desc.get_name(), world.get_time()) + + for(local i=1; i obj_desc.get_topspeed() && b.get_topspeed() <= speed ) { + obj_desc = b + if ( obj_desc.get_topspeed() == speed ) { break } + } else { + if ( obj_desc.get_topspeed() >= speed ) { break } + obj_desc = b + //gui.add_message_at(our_player, i + " break obj_desc " + obj_desc.get_name(), world.get_time()) + break + } + } + } + } + } + } else { + if ( list.len() > 0 ) { + + if ( obj == "extension" ) { + for ( local i = 0; i < list.len(); i++ ) { + //gui.add_message(" list["+i+"].get_name() " + list[i].get_name() + " list[0].get_waytype() " + list[i].get_waytype()) + + if ( list[i].get_waytype() == 0 ) { + obj_desc = list[i] + } + } + + } else { + obj_desc = list[0] + } + + } + + } + + return obj_desc +} + + + // END OF FILE diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 35866af..71caf84 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -273,8 +273,8 @@ way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(132,211,0)]//{, dir = 2} * */ -extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), - coord(132,190), coord(121,190), coord(118,192), coord(113,191)] +//extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), +// coord(132,190), coord(121,190), coord(118,192), coord(113,191)] /** * set tiles for pos chapter start diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 73ac7f1..296e16f 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -116,7 +116,7 @@ city2_halt_1 <- [] line_connect_halt <- coord(126,187) city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] -local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, city1_halt_airport[1], coord(118,191), coord(113,190)] +local list = [coord(112,183), coord(117,186), coord(120,183), line_connect_halt, city1_halt_airport[1], coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } @@ -274,8 +274,8 @@ way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(131,209,-1)]//{, dir = 2} * */ -extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), - coord(132,190), coord(121,190), coord(118,192), coord(113,191)] +//extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), +// coord(132,190), coord(121,190), coord(118,192), coord(113,191)] /** * set tiles for pos chapter start diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 0459086..bc28b64 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -112,10 +112,10 @@ city1_halt_1 <- [] city1_halt_2 <- [] city2_halt_1 <- [] -line_connect_halt <- coord(126,187) +line_connect_halt <- coord(124,186) city1_halt_airport <- [coord(114,177), coord(121,189), line_connect_halt] -local list = [coord(111,183), coord(116,183), coord(120,183), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] +local list = [coord(114,184), coord(118,186), coord(120,181), line_connect_halt, coord(121,189), coord(118,191), coord(113,190)] for ( local i = 0; i < list.len(); i++ ) { city1_halt_1.append(list[i]) } @@ -272,8 +272,8 @@ way5_fac7_fac8 <- [coord3d(132,233,0), coord3d(131,209,-1)]//{, dir = 2} * */ -extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), - coord(132,190), coord(121,190), coord(118,192), coord(113,191)] +//extensions_tiles <- [coord(111,182), coord(116,182), coord(121,183), coord(127,187), +// coord(132,190), coord(121,190), coord(118,192), coord(113,191)] /** * set tiles for pos chapter start diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 30707d4..7491a04 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -166,9 +166,11 @@ function translate_objects() { if ( pak_name == "pak64.german" ) { translate_objects_list.rawset("tools_power", translate("POWERLINE")) translate_objects_list.rawset("tools_mail_extension", translate("EXTENSIONS")) + translate_objects_list.rawset("tools_road_stations", translate("ROADSTATIONS")) } else { translate_objects_list.rawset("tools_power", translate("SPECIALTOOLS")) translate_objects_list.rawset("tools_mail_extension", translate("SPECIALTOOLS")) + translate_objects_list.rawset("tools_road_stations", translate("ROADTOOLS")) } //gui.add_message("Current: "+translate_objects_list.inspec) @@ -1563,8 +1565,8 @@ function get_info_file(txt_file) { * id 6 = city1_city7_air - airplane * id 7 = city1_halt_airport - bus airport - city 1 * id 8 = city7_halt - bus airport - city 7 - * id 9 = city1_post_halts - halts for post - * id 10 = ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) + * id 9 = city1_post_halts - road halts for post + * id 10 = ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) * */ function get_waiting_halt(id) { @@ -1579,7 +1581,7 @@ function get_waiting_halt(id) { return 4 break case 3: - return 0 + return 2 break case 4: return 2 @@ -1610,10 +1612,10 @@ function get_waiting_halt(id) { return 2 break case 2: - return 4 + return 3 break case 3: - return 0 + return 2 break case 4: return 0 @@ -1647,7 +1649,7 @@ function get_waiting_halt(id) { return 4 break case 3: - return 0 + return 2 break case 4: return 0 @@ -1701,11 +1703,11 @@ function get_gui_img(id) { case "display": return " " break - case 5: - return 0 + case "post_menu": + return "" break - case 6: - return 0 + case "road_halts": + return "" break case 7: return 0 @@ -1735,11 +1737,11 @@ function get_gui_img(id) { case "display": return "" break - case 5: - return 0 + case "post_menu": + return "" break - case 6: - return 0 + case "road_halts": + return " " break case 7: return 0 @@ -1769,11 +1771,11 @@ function get_gui_img(id) { case "display": return " " break - case 5: - return 0 + case "post_menu": + return "" break - case 6: - return 0 + case "road_halts": + return "" break case 7: return 0 diff --git a/class/class_basic_gui.nut b/class/class_basic_gui.nut index e2fa9dc..7c99076 100644 --- a/class/class_basic_gui.nut +++ b/class/class_basic_gui.nut @@ -255,7 +255,6 @@ function chapter_disabled_tools( pl ) { tool_remove_way, tool_remover, tool_make_stop_public, - tool_build_station, tool_build_bridge, tool_build_tunnel, tool_build_depot, @@ -1139,7 +1138,7 @@ function chapter_step_enabled_tools( pl ) { rules.gui_needs_update() } -/* +/** * * * diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 21ce5c9..ae7c204 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -41,6 +41,7 @@ class tutorial.chapter_05 extends basic_chapter veh2_load = 100 veh2_wait = set_waiting_time(6) d2_cnr = null //auto started + veh2_waiting_halt = get_waiting_halt(9) line1_name = "ch5_l1" line2_name = "ch5_l2" @@ -54,6 +55,8 @@ class tutorial.chapter_05 extends basic_chapter //c_dep3 = coord(150,190) // depot d3_cnr = null //auto started + extensions_tiles = [] + //Script //---------------------------------------------------------------------------------- sc_way_name = get_obj_ch5(1) @@ -192,7 +195,15 @@ class tutorial.chapter_05 extends basic_chapter if (pot0==1 && pot1==0){ text = ttextfile("chapter_05/04_1-3.txt") text.tx="[1/3]" - text.toolbar = translate_objects_list.tools_mail_extension + + // set image for button by different in paksets + text.img_road_menu = get_gui_img("road_halts") + text.img_post_menu = get_gui_img("post_menu") + + //check_post_extension(city1_post_halts) + text.toolbar_extension = translate_objects_list.tools_mail_extension + text.toolbar_halt = translate_objects_list.tools_road_stations + local st_tx = "" local list = city1_post_halts //extensions_tiles //Lista de build local siz = list.len() @@ -203,10 +214,10 @@ class tutorial.chapter_05 extends basic_chapter //local name = list[j].name == ""? get_good_text(list[j].good) : translate(list[j].name) local name = st_halt.get_name() //translate(get_obj_ch5(6)) if (glsw[j]==0){ - st_tx +=format("%d %s ", j+1, name) + list[j].href("("+list[j].tostring()+")")+"
" + st_tx +=format("%s: %s ", translate("Stop"), name) + list[j].href("("+list[j].tostring()+")")+"
" } else { - st_tx +=format("%d %s ", j+1, name)+"("+list[j].tostring()+")"+ok_tx+"
" + st_tx +=format("%s: %s ", translate("Stop"), name)+"("+list[j].tostring()+")"+ok_tx+"
" } } text.st = st_tx @@ -217,6 +228,7 @@ class tutorial.chapter_05 extends basic_chapter local list_tx = "" local c_list = city1_post_halts local siz = c_list.len() + for (local j=0;j%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) } } - local c = coord(c_list[get_waiting_halt(9)].x, c_list[get_waiting_halt(9)].y) + + if ( pot1==1 ) { + new_set_waiting_halt(city1_post_halts) + } + local c = coord(c_list[veh2_waiting_halt].x, c_list[veh2_waiting_halt].y) local tile = my_tile(c) - text.stnam = (get_waiting_halt(9)+1) + ") "+tile.get_halt().get_name()+" ("+c.tostring()+")" + text.stnam = (veh2_waiting_halt+1) + ") "+tile.get_halt().get_name()+" ("+c.tostring()+")" text.list = list_tx text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") @@ -444,16 +460,16 @@ class tutorial.chapter_05 extends basic_chapter local factory = tile.find_object(mo_building).get_factory() if (factory){ if(script_test && factory.is_transformer_connected()){ - local transf = factory.get_transformer() - if (transf.is_connected(f_transf)){ - glsw[j] = 1 - } + local transf = factory.get_transformer() + if (transf.is_connected(f_transf)){ + glsw[j] = 1 + } } else{ - pow_list[j] = factory.get_power()[0] - f_pow_list[j] = pow_list[j] - if (pow_list[j] != 0) - glsw[j] = 1 + pow_list[j] = factory.get_power()[0] + f_pow_list[j] = pow_list[j] + if (pow_list[j] != 0) + glsw[j] = 1 } } } @@ -480,13 +496,15 @@ class tutorial.chapter_05 extends basic_chapter local player = player_x(1) local list = [] //extensions_tiles + local good = get_good_data(6, 2) + local accept_post = false + for ( local i = 0; i < city1_post_halts.len(); i++ ) { // check halts accept mail - local good = get_good_data(6, 2) local t = my_tile(city1_post_halts[i]) local halt = t.get_halt() if ( halt != null ) { - local accept_post = halt.accepts_good(good_desc_x(good)) + accept_post = halt.accepts_good(good_desc_x(good)) //gui.add_message(coord3d_to_string(t) + " accept_post " + accept_post) if ( !accept_post ) { list.append(extensions_tiles[i]) @@ -498,7 +516,8 @@ class tutorial.chapter_05 extends basic_chapter local station = false local lab_name = translate("Mail Extension Here!.") - delete_objet(player, list, obj, lab_name, station) + + delete_objet(player, list, obj, lab_name, station, accept_post) pot0=1 } if (pot0==1 && pot1==0){ @@ -775,7 +794,7 @@ class tutorial.chapter_05 extends basic_chapter if ( (pl == 0) && (schedule.waytype != wt_road) ) result = translate("Only road schedules allowed") - local selc = get_waiting_halt(9) + local selc = veh2_waiting_halt local load = veh2_load local time = veh2_wait local c_list = city1_post_halts @@ -857,7 +876,7 @@ class tutorial.chapter_05 extends basic_chapter local good = translate(good_alias.mail) return truck_result_message(result, translate(name), good, veh, cov) } - local selc = get_waiting_halt(9) + local selc = veh2_waiting_halt local load = veh2_load local time = veh2_wait local c_list = city1_post_halts @@ -1002,7 +1021,7 @@ class tutorial.chapter_05 extends basic_chapter local station = false for(local j=0;j message to message window and break + gui.add_message( j + " tool.work " + res + " name " + name) + break + } + } } - } + } local ok = false - if (current_cov> ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b){ + if (current_cov> ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b) { + + new_set_waiting_halt(city1_post_halts) + local wt = wt_road local c_depot = my_tile(city1_road_depot) comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito @@ -1048,7 +1084,7 @@ class tutorial.chapter_05 extends basic_chapter local c_list = city1_post_halts local siz = c_list.len() for(local j = 0;j {tx} Im Menü {toolbar} wählen Sie Erweiterungsgebäude für die Post aus und platzieren Sie eines an jedem der folgenden roten Halte:
{st}

Um zum nächsten Schritt zu gelangen, müssen alle Halte Post akzeptieren.

\ No newline at end of file +

{img_road_menu} {toolbar_halt}

{img_post_menu} {toolbar_extension}

{tx} Es gibt zwei Möglichkeiten Stationen für Post freizuschalten. Zum einen kann ein Post-Erweiterungsgebäude (Menü {toolbar_extension}) auf ein freies Feld neben dem Halt gebaut werden.
Zum anderen kann ein weiterer Halt (Menü {toolbar_halt}) auf einen geraden Weg angebaut werden, der Post akzeptiert.

{st}

Um zum nächsten Schritt zu gelangen, müssen alle Halte Post akzeptieren.

\ No newline at end of file diff --git a/de/chapter_05/04_2-3.txt b/de/chapter_05/04_2-3.txt index ddb8812..5373dfc 100644 --- a/de/chapter_05/04_2-3.txt +++ b/de/chapter_05/04_2-3.txt @@ -1 +1 @@ -

{tx} Wählen Sie im Straßendepot {dep} einen {veh} aus.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Haltestellen aus:
{list}

Nachdem Sie alle {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} und konfigurieren Sie es wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Klicken Sie auf Kopieren, bis Sie {all_cov} Fahrzeuge haben.
Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie alle Lkw.

Konvois im Umlauf: {cir}/{all_cov}

\ No newline at end of file +

{tx} Wählen Sie im Straßendepot {dep} einen {veh} aus.
Wählen Sie bei Bedient Linie: den Eintrag Neue Linie erstellen.

Wählen Sie nun die Haltestellen aus:
{list}

Nachdem Sie alle {nr} Haltestellen hinzugefügt haben, wählen Sie die Haltestelle {stnam} und konfigurieren Sie es wie folgt:
--> [a] Konfigurieren Sie Mindestlast auf {load} %.
--> [b] Setzen Sie Ausfahrt nach auf {wait}.
Geben Sie der Linie einen passenden Namen und schließen Sie den Linienplan.

Klicken Sie auf Kopieren, bis Sie {all_cov} Fahrzeuge haben.
Drücken Sie abschließend die Schaltfläche Starten

Um zum nächsten Schritt zu gelangen, starten Sie alle Lkw.

Lkw im Umlauf: {cir}/{all_cov}

\ No newline at end of file diff --git a/en/chapter_05/04_1-3.txt b/en/chapter_05/04_1-3.txt index 44b530b..8fcaf97 100644 --- a/en/chapter_05/04_1-3.txt +++ b/en/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} In the {toolbar} menu, select one of the "Extension Buildings" for mail and place one in each of the following red halts:

{st}

Advances to the next step when the mail truck leaves the depot.

\ No newline at end of file +

{img_road_menu} {toolbar_halt}

{img_post_menu} {toolbar_extension}

{tx} There are two ways to unlock stations for mail. Firstly, a mail extension building (Menu {toolbar_extension}) can be built on an empty space next to the stop.
Secondly, another stop (Menu {toolbar_halt}) that accepts mail can be built on a straight path.

{st}

To proceed to the next step, all Hold Post must be accepted.

\ No newline at end of file diff --git a/es/chapter_05/04_1-3.txt b/es/chapter_05/04_1-3.txt index 632acea..61121ee 100644 --- a/es/chapter_05/04_1-3.txt +++ b/es/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{tx} En el menú {toolbar} selecciona "Edificios de Extensión" para correo y coloca uno en cada una de las siguientes rojo ubicaciones:

{st}

Se avanza al siguiente paso cuando el camión de correo abandone el depósito.

\ No newline at end of file +

{img_road_menu} {toolbar_halt}

{img_post_menu} {toolbar_extension}

{tx} Hay dos maneras de desbloquear estaciones para el correo. Primero, se puede construir un edificio de extensión de correo (Menú {toolbar_extension}) en un espacio vacío junto a la parada.
Segundo, se puede construir otra parada (Menú {toolbar_halt}) que acepte correo en un camino recto.

{st}

Para continuar al siguiente paso, se deben aceptar todas las publicaciones en espera.

\ No newline at end of file diff --git a/scenario.nut b/scenario.nut index fa95083..6c73b03 100644 --- a/scenario.nut +++ b/scenario.nut @@ -6,7 +6,7 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files -const version = 2004 +const version = 2005 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" From 82f049d557281b595c42ebab31fa7c1a6fed10e8 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 20 Jan 2026 21:54:13 +0100 Subject: [PATCH 161/217] CHG clean up code; code style --- class/class_basic_chapter.nut | 60 +++++++++++++++-------------------- class/class_chapter_02.nut | 6 ++-- class/class_chapter_05.nut | 23 +++++--------- 3 files changed, 36 insertions(+), 53 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index aa5bbec..7ae2e83 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2474,10 +2474,10 @@ class basic_chapter return format(translate("Select station No.%d"),nr+1)+" ("+c.tostring()+")." } - function is_stop_building(siz, c_list, lab_name, good, label_sw = false) + function is_stop_building (siz, c_list, lab_name, good, label_sw = false) { local count = 0 - for(local j=0;jcity1_limit1.a.x && pos.y>city1_limit1.a.y && pos.x Date: Wed, 21 Jan 2026 17:51:31 +0100 Subject: [PATCH 162/217] CHG Functions removed with just one call --- class/class_basic_chapter.nut | 16 +--------------- class/class_chapter_02.nut | 12 ++++++++++-- class/class_chapter_05.nut | 18 +++++++++++++----- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7ae2e83..493ce95 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2780,20 +2780,6 @@ class basic_chapter return translate("You can only delete the stops.") } - function delete_stop_ex(list, pos) - { - for( local j = 0; j < list.len(); j++ ) { - local c = list[j].a - if (c != null){ - local stop = my_tile(c).find_object(mo_building) - if ( pos.x == c.x && pos.y == c.y && stop ) { - return null - } - } - } - return translate("You can only delete the stops.") - } - function tile_bord(coora, coorb, opt, del) { if (opt==0){ @@ -3431,7 +3417,7 @@ function search_tile_in_tiles(tiles, coord) { * check stations enables post / enables pax and post * search free tile for post extension * search road tile for post halt - * replace pass halt -> pass/post halt + * replace pass halt -> pass/post halt (not tested) * * @param halt_list = array[tiles_x, tile_x, .... ] * diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index f6be850..11b4580 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -737,8 +737,16 @@ class tutorial.chapter_02 extends basic_chapter //Permite eliminar paradas if (tool_id==tool_remover){ - local c_st = city1_halt_1 - return delete_stop( c_st, way, pos) + for( local j = 0 ; j < city1_halt_1.len(); j++ ) { + if (city1_halt_1[j] != null){ + local stop = tile_x(city1_halt_1[j].x, city1_halt_1[j].y,0).find_object(mo_building) + if ( pos.x == ccity1_halt_1_list[j].x && pos.y == city1_halt_1[j].y && stop ) { + way.mark() + return null + } + } + } + return translate("You can only delete the stops.") } } else if (tool_id==tool_build_station) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 0c277b6..f52280b 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -719,14 +719,23 @@ class tutorial.chapter_05 extends basic_chapter break case 4: if (pot0==1 && pot1==0){ - //Permite construir paradas + // Permite construir paradas if ( tool_id==tool_build_station ) { return build_stop_ex(extensions_tiles, t) } - //Permite eliminar paradas + // Permite eliminar paradas if ( tool_id==4097 ) { - return delete_stop_ex(extensions_tiles, pos) + for( local j = 0; j < extensions_tiles.len(); j++ ) { + local c = extensions_tiles[j].a + if (c != null){ + local stop = my_tile(c).find_object(mo_building) + if ( pos.x == c.x && pos.y == c.y && stop ) { + return null + } + } + } + return translate("You can only delete the stops/extensions.") } } if ( pot1==1 && pot2==0 ) { @@ -1229,9 +1238,8 @@ class tutorial.chapter_05 extends basic_chapter function delete_objet(player, list, obj, lab_name, station, accept_post) { for( local j = 0; j < list.len(); j++ ) { - local t = null // array with coord and code - t = my_tile(list[j].a) + local t = my_tile(list[j].a) local is_obj = t.find_object(obj) local halt = t.get_halt() From 09d9d0ce3405087d988d3b9cf40254f4957d70f9 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 23 Jan 2026 09:15:44 +0100 Subject: [PATCH 163/217] CHG chapter 2 text - add tool icons --- .gitignore | 1 + class/class_basic_data.nut | 3 +++ class/class_chapter_02.nut | 35 ++++++++++++++++++++++++++++------ de/chapter_02/07_1-4.txt | 2 +- de/chapter_02/07_2-4.txt | 2 +- de/chapter_02/goal_step_01.txt | 2 +- de/chapter_02/goal_step_02.txt | 2 +- de/chapter_02/goal_step_03.txt | 2 +- de/chapter_02/goal_step_05.txt | 2 +- de/chapter_02/goal_step_08.txt | 2 +- de/chapter_03/03_1-2.txt | 2 +- de/chapter_05/04_1-3.txt | 2 +- en/chapter_02/07_1-4.txt | 2 +- en/chapter_02/07_2-4.txt | 2 +- en/chapter_02/goal_step_01.txt | 2 +- en/chapter_02/goal_step_02.txt | 2 +- en/chapter_02/goal_step_03.txt | 2 +- en/chapter_02/goal_step_05.txt | 2 +- en/chapter_02/goal_step_08.txt | 2 +- es/chapter_02/07_1-4.txt | 2 +- es/chapter_02/07_2-4.txt | 2 +- es/chapter_02/goal_step_01.txt | 2 +- es/chapter_02/goal_step_02.txt | 2 +- es/chapter_02/goal_step_03.txt | 2 +- es/chapter_02/goal_step_05.txt | 2 +- es/chapter_02/goal_step_08.txt | 2 +- 26 files changed, 56 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 33f381a..e6bb10e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ *.kdev4 *.ods# .~lock* +/docu diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 7491a04..72706e7 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -174,6 +174,9 @@ function translate_objects() { } //gui.add_message("Current: "+translate_objects_list.inspec) + // tools + translate_objects_list.rawset("public_stop", translate("Make way or stop public (will join with neighbours), %i times maintainance")) + rename_factory_names() } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 11b4580..a3d952d 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -140,8 +140,6 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { case 1: - // set image for button by different in paksets - text.img_road_menu = get_gui_img("road_menu") break case 2: break @@ -254,17 +252,44 @@ class tutorial.chapter_02 extends basic_chapter local st_halt1 = my_tile(city1_halt_2[city1_halt_2.len()-1]).get_halt() text.st1 = city1_halt_2[city1_halt_2.len()-1].href(st_halt1.get_name()+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")") text.prce = money_to_string(price) + // toolbar icon make_stop_publuc tooltip + local factor = 60 //settings.get_cost_make_public_months() + local tool_text = translate_objects_list.public_stop + local idx = tool_text.find("%i") + local t1 = tool_text.slice(0, idx) + local t2 = tool_text.slice(idx+2) + tool_text = t1 + factor + t2 + text.public_stop = tool_text break } + // road menu step 1, 2, 4, 5 and 7 + local steps = [1, 2, 4, 5, 7] + if ( steps.find(this.step) != null ) { + // set image for button by different in paksets + text.img_road_menu = get_gui_img("road_menu") + text.toolbar_road = translate_objects_list.tools_road + } + + steps.clear() + // road halt menu step 3 and 7 + steps = [3, 7] + if ( steps.find(this.step) != null ) { + // set image for button by different in paksets + text.img_road_menu = get_gui_img("road_halts") + text.toolbar_halt = translate_objects_list.tools_road_stations + } + + steps.clear() // depot coord step 1, 2, 4, 6 and 7 - local steps = [1, 2, 4, 6, 7] + steps = [1, 2, 4, 6, 7] if ( steps.find(this.step) != null ) { text.dep = city1_road_depot.href("("+city1_road_depot.tostring()+")") } + steps.clear() // veh load and wait time set to steps 4, 6 and 7 - local steps = [4, 6, 7] + steps = [4, 6, 7] if ( steps.find(this.step) != null ) { text.load = veh_load text.wait = get_wait_time_text(veh_wait) @@ -274,8 +299,6 @@ class tutorial.chapter_02 extends basic_chapter text.name = city1_tow.href(cty1.name.tostring()) text.name2 = city2_tow.href(cty2.name.tostring()) text.tool1 = translate_objects_list.inspec - text.tool2 = translate_objects_list.tools_road - text.tool3 = translate_objects_list.tools_special return text } diff --git a/de/chapter_02/07_1-4.txt b/de/chapter_02/07_1-4.txt index 1538c80..e881a83 100644 --- a/de/chapter_02/07_1-4.txt +++ b/de/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Sie müssen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{img_road_menu} {toolbar_halt}

{tx} Sie müssen zuerst die Halte in {name2} bauen.

Liste der Haltestellen:
{list}

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/07_2-4.txt b/de/chapter_02/07_2-4.txt index 54e81cf..c26d300 100644 --- a/de/chapter_02/07_2-4.txt +++ b/de/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Öffnen Sie {tool2} und bauen Sie eine Straße von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedrückt, um gerade Abschnitte zu bauen.

Um zum nächsten Schritt zu gelangen, bauen Sie die Straße.

\ No newline at end of file +

Da die Brücke nun repariert ist, benötigt die Stadt {name} eine Buslinie mit Verbindung zur Nachbarstadt {name2}.

{tx} Öffnen Sie {toolbar_road} und bauen Sie eine Straße von {pt1} nach {pt2}.

Tipp: Halten Sie Strg gedrückt, um gerade Abschnitte zu bauen.

Um zum nächsten Schritt zu gelangen, bauen Sie die Straße.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_01.txt b/de/chapter_02/goal_step_01.txt index 92dec8a..3e2b6eb 100644 --- a/de/chapter_02/goal_step_01.txt +++ b/de/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie ein Straßenende suchen oder bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

{img_road_menu} Menü Straßenbau

Öffnen Sie das Menü {tool2} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {dep} mit einer benachbarten Straße.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} eröffnen.

Zuerst müssen Sie ein Straßenende suchen oder bauen, um darauf ein Depot zu errichten.

Straßen:

Dieses Werkzeug kann durch Ziehen oder Klicken von einem Punkt zu einem anderen verwendet werden. Sie können auch Strg drücken, um gerade Straßen zu erstellen. Es gibt verschiedene Arten von Straßen, deren Höchstgeschwindigkeit variieren kann. Für die Straßeninstandhaltung wird eine Gebühr erhoben, deren Höhe je nach Straßenart variiert. Es ist auch möglich, Straßen zu elektrifizieren (nicht in jedem Grafikset möglich), um die Durchfahrt von Elektrofahrzeugen zu ermöglichen.

{img_road_menu} {toolbar_road}

Öffnen Sie das Menü {toolbar_road} und wählen Sie eine Straße. Jetzt können Sie eine Straße bauen, indem Sie einmal auf den Anfang und einmal auf das Ende klicken oder den Cursor mit gedrückter linken Maustaste zwischen diesen Punkten ziehen.

Um zum nächsten Schritt zu gelangen, verbinden Sie das Feld {dep} mit einer benachbarten Straße.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_02.txt b/de/chapter_02/goal_step_02.txt index 8b89924..fdbd851 100644 --- a/de/chapter_02/goal_step_02.txt +++ b/de/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Wir werden einen Busdienst in der Stadt {name} starten

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {dep}. Sie finden dieses Tool im Menü {tool2}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {dep}.

\ No newline at end of file +

Wir werden einen Busdienst in der Stadt {name} starten

{img_road_menu} {toolbar_road}

Der erste Schritt zum Start des Dienstes ist der Bau eines Straßendepots auf das Feld {dep}. Sie finden dieses Tool im Menü {toolbar_road}.

Straßendepot:

Depots können nur auf ein Straßenendstück gebaut werden. Im Depot ist es möglich, Fahrzeuge zu kaufen, zu verkaufen, die Route anzupassen und zu starten. Es gibt auch eine Option, die den Einsatz von Elektrofahrzeugen ermöglicht, diese wird jedoch nur angezeigt, wenn das Depot elektrifiziert ist und Fahrzeuge zur Verfügung stehen.

Um zum nächsten Schritt zu gelangen, bauen Sie ein Straßendepot auf das Feld {dep}.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_03.txt b/de/chapter_02/goal_step_03.txt index 52f3714..2c68455 100644 --- a/de/chapter_02/goal_step_03.txt +++ b/de/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen:
{list}

Die Haltestellen finden Sie im Menü {tool2}.

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file +

Der nächste Schritt zum Starten Ihres Busdienstes für die Stadt {name}.

{img_road_menu} {toolbar_halt}

Es ist notwendig, auf jedem markierten Feld eine Bushaltestelle zu bauen. Die Haltestellen finden Sie im Menü {toolbar_halt}.

{list}

Bushaltestellen:

Damit der Bus Passagiere befördern kann, müssen die Haltestellen in der Nähe von Gebäuden, Touristenattraktionen (komplette Abdeckung nötig) oder Fabriken (ein Feld Abdeckung nötig) liegen. Die Haltestellen können unterschiedliche Kapazitäten haben. Es ist auch möglich, sie zu kombinieren, um ihre Kapazität und Reichweite zu erhöhen. Sie können die Ladeart (Passagiere, Post oder Waren) auch erweitern, indem Sie Erweiterungsgebäude oder Stationen verwenden, die verschiedene Arten von Ladegut aufnehmen.

Hinweis: Die Haltestellen haben eine Kartenabdeckung von meist 5x5 Feldern. Daher ist es ratsam, die Haltestellen so im Abstand zu platzieren, das ihre Abdeckungen sich nicht überlagern. Der Abdeckungsbereich kann durch Drücken der Taste v angezeigt werden.
Beachten Sie bei Haltestellen die Akzeptanz von Passagieren, Post und Waren. Diese steht am Ende des Tooltips, wenn sie mit der Maus auf dem Tool-Button verweilen. Sie kann auf dem Tool-Button auch mit einem kleinen Icon angezeigt werden.

Tipp: Drücken Sie die Taste ", um die städtischen Gebäude auszublenden.

Um zum nächsten Schritt zu gelangen, bauen Sie alle Halte.

\ No newline at end of file diff --git a/de/chapter_02/goal_step_05.txt b/de/chapter_02/goal_step_05.txt index eb057e0..e9805ae 100644 --- a/de/chapter_02/goal_step_05.txt +++ b/de/chapter_02/goal_step_05.txt @@ -1 +1 @@ -

Die Brücke zu einem der äußeren Vororte wurde kürzlich weggespült.
Die Stadt {name} möchte, dass Sie diesen Vorort durch den Bau einer Brücke zwischen {bpos1} und {bpos2} wieder verbinden.

Es gibt zwei Möglichkeiten, dies zu erreichen. Wählen Sie zuerst eine Brücke im Menü {tool2} aus und dann...
[1] Sie können die Brücke bauen, indem Sie nacheinander auf die gegenüberliegenden geraden Hangfeldern klicken.
[2] Sie können die Brücke bauen, indem Sie den Cursor vom Hang auf einer Seite zum gegenüberliegenden Hang mit gedrückter linken Maustaste ziehen.

Um zum nächsten Schritt zu gelangen, bauen Sie eine Brücke auf Feld {bpos1}.

{bridge_info} \ No newline at end of file +

Die Brücke zu einem der äußeren Vororte wurde kürzlich weggespült.
Die Stadt {name} möchte, dass Sie diesen Vorort durch den Bau einer Brücke zwischen {bpos1} und {bpos2} wieder verbinden.

{img_road_menu} {toolbar_road}

Es gibt zwei Möglichkeiten, dies zu erreichen. Wählen Sie zuerst eine Brücke im Menü {toolbar_road} aus und dann...
[1] Sie können die Brücke bauen, indem Sie nacheinander auf die gegenüberliegenden geraden Hangfeldern klicken.
[2] Sie können die Brücke bauen, indem Sie den Cursor vom Hang auf einer Seite zum gegenüberliegenden Hang mit gedrückter linken Maustaste ziehen.

Um zum nächsten Schritt zu gelangen, bauen Sie eine Brücke auf Feld {bpos1}.

{bridge_info} \ No newline at end of file diff --git a/de/chapter_02/goal_step_08.txt b/de/chapter_02/goal_step_08.txt index c8c91bb..2db1e6c 100644 --- a/de/chapter_02/goal_step_08.txt +++ b/de/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.

Wählen Sie in der Symbolleiste {tool3} und wählen Sie das Werkzeug In öffentliche Haltestelle umwande.

In eine öffentliche Haltestelle umwandeln

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Warnung: Die Verwendung dieses Tools ist sehr teuer. Die Kosten sind das 60-fache der Instandhaltung.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug In öffentliche Haltestelle umwande und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file +

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.


{public_stop}

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug In öffentliche Haltestelle umwande und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file diff --git a/de/chapter_03/03_1-2.txt b/de/chapter_03/03_1-2.txt index 2a48898..223bc9a 100644 --- a/de/chapter_03/03_1-2.txt +++ b/de/chapter_03/03_1-2.txt @@ -1 +1 @@ -{step_hinfo}

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.

{tx} Wählen Sie {tool2} und bauen Sie eine Warenstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file +{step_hinfo}

Warenstationen

Um herauszufinden, ob eine Station Waren (Fracht) akzeptiert, platzieren Sie den Cursor über dem Button in der Symbolleiste. Daraufhin wird ein Hinweistext angezeigt. Ein Bahnhof, der aus mehreren Feldern besteht, wird Fracht akzeptieren, wann immer eines der Felder dies tut.


Hinweis: Sollten Sie einen falschen Halt bauen, können Sie diesen mit einem anderen Halt mit höherer Kapazität überbauen. Hat der vorhandene Halt die gleiche oder eine höhere Kapazität. dann können Sie das überbauen mit gedrückter Strg - Taste erzwingen.

{tx} Wählen Sie {tool2} und bauen Sie eine Warenstation ({tile} Felder lang) in der Nähe von {f2}.

\ No newline at end of file diff --git a/de/chapter_05/04_1-3.txt b/de/chapter_05/04_1-3.txt index 4b1d69f..841f8c3 100644 --- a/de/chapter_05/04_1-3.txt +++ b/de/chapter_05/04_1-3.txt @@ -1 +1 @@ -

{img_road_menu} {toolbar_halt}

{img_post_menu} {toolbar_extension}

{tx} Es gibt zwei Möglichkeiten Stationen für Post freizuschalten. Zum einen kann ein Post-Erweiterungsgebäude (Menü {toolbar_extension}) auf ein freies Feld neben dem Halt gebaut werden.
Zum anderen kann ein weiterer Halt (Menü {toolbar_halt}) auf einen geraden Weg angebaut werden, der Post akzeptiert.

{st}

Um zum nächsten Schritt zu gelangen, müssen alle Halte Post akzeptieren.

\ No newline at end of file +

{img_road_menu} {toolbar_halt}

{img_post_menu} {toolbar_extension}

Es gibt zwei Möglichkeiten Stationen für Post freizuschalten. Zum einen kann ein Post-Erweiterungsgebäude (Menü {toolbar_extension}) auf ein freies Feld neben dem Halt gebaut werden.
Zum anderen kann ein weiterer Halt (Menü {toolbar_halt}) auf einen geraden Weg angebaut werden, der Post akzeptiert.

Hinweis: Sollten Sie einen falschen Halt bauen, können Sie diesen mit einem anderen Halt mit höherer Kapazität überbauen. Hat der vorhandene Halt die gleiche oder eine höhere Kapazität. dann können Sie das überbauen mit gedrückter Strg - Taste erzwingen.

{tx} Erweitern Sie die folgenden Halte, damit sie Post akzeptieren. {st}

Um zum nächsten Schritt zu gelangen, müssen alle Halte Post akzeptieren.

\ No newline at end of file diff --git a/en/chapter_02/07_1-4.txt b/en/chapter_02/07_1-4.txt index 1a9ee4f..1f9002f 100644 --- a/en/chapter_02/07_1-4.txt +++ b/en/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} First you must build all stops in {name2}.

Stops list:
{list}

It takes to the next step when the bus starts from the depot.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{img_road_menu} {toolbar_halt}

{tx} First you must build all stops in {name2}.

Stops list:
{list}

It takes to the next step when the bus starts from the depot.

\ No newline at end of file diff --git a/en/chapter_02/07_2-4.txt b/en/chapter_02/07_2-4.txt index fa35e46..8826406 100644 --- a/en/chapter_02/07_2-4.txt +++ b/en/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{tool2}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

It takes to the next step when the bus starts from the depot.

\ No newline at end of file +

Now that the bridge is repaired, we should create a bus service from {name} to the neighbouring City of {name2}.

{tx} Open the '{toolbar_road}' toolbar in the upper menu bar and select the road tool to connect the two points between {pt1} and {pt2}.

Connect the road here: {cbor}.

Tip: Hold down the [Ctrl] key to build straight sections of roads/rails.

It takes to the next step when the bus starts from the depot.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_01.txt b/en/chapter_02/goal_step_01.txt index db4bfb9..eb83328 100644 --- a/en/chapter_02/goal_step_01.txt +++ b/en/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

{img_road_menu} Menu {tool2}

Open the '{tool2}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, connect the field {dep} to an adjacent street.

\ No newline at end of file +

We are going to set up a Bus Service in the town of {name} .

First, you need to build a dead-end road so as to build the depot on it.

The Roads:

This tool can be used by dragging the mouse or clicking from one point to another, you can also press the [Ctrl] key when dragging or clicking to build straight paths. There are several types of roads, these can vary their maximum speed from 30km/h to 200km/h. The maintenance of the roads is charged and costs vary depending on the type of road. It is also possible to electrify the roads to allow the passage of electric vehicles.

{img_road_menu} {toolbar_road}

Open the '{toolbar_road}' toolbar in the upper menu bar and select the 50 kmph road tool. Then, you can build a road either by clicking once the beginning and once on the end point or by dragging the mouse between these points.

To take to the next step, connect the field {dep} to an adjacent street.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_02.txt b/en/chapter_02/goal_step_02.txt index bdc15d3..446c209 100644 --- a/en/chapter_02/goal_step_02.txt +++ b/en/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

We are going to set up a Bus Service in the town of {name} .

The first step in setting up the service is building a Garage at {dep}. You will find the garage tool in the '{tool2}' toolbar too.

Garage/Depot:

You can only build a depot on dead ends. From the depots it is possible to buy, sell, route and start the vehicles. There is also an option that allows electric vehicles to be used, but this is only shown if the road under the depot is electrified.
The garage allows you to purchase vehicles to service the routes that you will create.

To take to the next step, build the Garage in {dep}.

\ No newline at end of file +

We are going to set up a Bus Service in the town of {name} .

{img_road_menu} {toolbar_road}

The first step in setting up the service is building a Garage at {dep}. You will find the garage tool in the '{toolbar_road}' toolbar too.

Garage/Depot:

You can only build a depot on dead ends. From the depots it is possible to buy, sell, route and start the vehicles. There is also an option that allows electric vehicles to be used, but this is only shown if the road under the depot is electrified.
The garage allows you to purchase vehicles to service the routes that you will create.

To take to the next step, build the Garage in {dep}.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_03.txt b/en/chapter_02/goal_step_03.txt index 94cbfc7..92d1145 100644 --- a/en/chapter_02/goal_step_03.txt +++ b/en/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

The next step in setting up your Bus Service for {name}.

It is necessary to build bus stops at each of the points marked in the city:
{list}

Stops are in the '{tool2}' toolbar too.

Bus Stops:

In order for the bus to be able to load passengers it is necessary that the stops are close to some building, tourist attraction or factory. The stops have a storage capacity of 32, 64 or more. It is also possible to combine them to increase their load capacity along with their coverage. You can also extend the load type using extension buildings or stations that accept different types of load.

Note: The stops have a coverage area of 5x5 around them, therefore it is advised to place the stops at a distance of 4 tiles. Unlike buildings, streets do not need to be covered as they do not generate passengers.

Tip: Covered area can be displayed by pressing the "v" key.

To take to the next step, build all the Stops.

\ No newline at end of file +

The next step in setting up your Bus Service for {name}.

{img_road_menu} {toolbar_halt}

It is necessary to build bus stops at each of the points marked in the city. Stops are in the '{toolbar_halt}' toolbar too.

{list}

Bus Stops:

In order for the bus to be able to load passengers it is necessary that the stops are close to some building, tourist attraction or factory. The stops have a storage capacity of 32, 64 or more. It is also possible to combine them to increase their load capacity along with their coverage. You can also extend the load type using extension buildings or stations that accept different types of load.

Note: The stops have a coverage area of 5x5 around them, therefore it is advised to place the stops at a distance of 4 tiles. Unlike buildings, streets do not need to be covered as they do not generate passengers.

Tip: Covered area can be displayed by pressing the "v" key.

To take to the next step, build all the Stops.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_05.txt b/en/chapter_02/goal_step_05.txt index 2c4be55..b947ac5 100644 --- a/en/chapter_02/goal_step_05.txt +++ b/en/chapter_02/goal_step_05.txt @@ -1 +1 @@ -

The bridge to an outlying suburb was recently washed out,
and the City of {name} would like you to reconnect the suburb by building a brige between {bpos1} and {bpos2}.

Bridge are in the '{tool2}' toolbar too.

There are two ways this can be done, you must first select the 50 kmph bridge tool in the Road Tools toolbar, then...
[1] You can build the bridge by clicking on one of the facing slopes.
[2] You can place the bridge by dragging mouse from a slope on either side to the slope on the opposite side.

To take to the next step, build a bridge in {bpos1}.

{bridge_info} \ No newline at end of file +

The bridge to an outlying suburb was recently washed out,
and the City of {name} would like you to reconnect the suburb by building a brige between {bpos1} and {bpos2}.

{img_road_menu} {toolbar_road}

Bridge are in the '{toolbar_road}' toolbar too.

There are two ways this can be done, you must first select the 50 kmph bridge tool in the Road Tools toolbar, then...
[1] You can build the bridge by clicking on one of the facing slopes.
[2] You can place the bridge by dragging mouse from a slope on either side to the slope on the opposite side.

To take to the next step, build a bridge in {bpos1}.

{bridge_info} \ No newline at end of file diff --git a/en/chapter_02/goal_step_08.txt b/en/chapter_02/goal_step_08.txt index a5e9ce6..2a1f2d6 100644 --- a/en/chapter_02/goal_step_08.txt +++ b/en/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

The city {name} needs to connect the bus line with the train line under construction.

In the toolbar select '{tool3}' and choose the Make way or stop public tool.

Make stop public

By making the stop public, the player frees himself from maintaining it and also allows sharing the transport network with other players. But be careful, since this can't be reversed unless you change to the Public Service player.

Warning: Using this tool is very expensive, {prce} for each tile.

Select the Make way or stop public tool and click on the stop {st1}. You will notice that its color will change.

It advances to the next chapter when the stop are made public.

\ No newline at end of file +

The city {name} needs to connect the bus line with the train line under construction.


{public_stop}

By making the stop public, the player frees himself from maintaining it and also allows sharing the transport network with other players. But be careful, since this can't be reversed unless you change to the Public Service player.

Warning: Using this tool is very expensive, {prce} for each tile.

Select the Make way or stop public tool and click on the stop {st1}. You will notice that its color will change.

It advances to the next chapter when the stop are made public.

\ No newline at end of file diff --git a/es/chapter_02/07_1-4.txt b/es/chapter_02/07_1-4.txt index 21147d0..60e2af9 100644 --- a/es/chapter_02/07_1-4.txt +++ b/es/chapter_02/07_1-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una linea de autobús que conecte con la Ciudad vecina de {name2}.

{img_road_menu} {toolbar_halt}

{tx} Primero debes colocar las paradas en {name2}.

Lista de paradas:
{list}

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file diff --git a/es/chapter_02/07_2-4.txt b/es/chapter_02/07_2-4.txt index d363bf6..a3fc95e 100644 --- a/es/chapter_02/07_2-4.txt +++ b/es/chapter_02/07_2-4.txt @@ -1 +1 @@ -

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{tool2}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file +

Ahora que el puente ha sido reparado, la ciudad {name} necesita una línea de autobús que conecte con la Ciudad vecina de {name2}.

{tx} Abre '{toolbar_road}' en la barra de herramientas y construye una carretera para conectar los puntos entre {pt1} y {pt2}.

Conecta la carretera aquí: {cbor}

Consejo: Mantén presionada la tecla[Ctrl] para construir tramos rectos de carreteras/vías de tren.

Se avanza al siguiente paso cuando el autobús arranque desde el depósito.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_01.txt b/es/chapter_02/goal_step_01.txt index bc99815..652bd55 100644 --- a/es/chapter_02/goal_step_01.txt +++ b/es/chapter_02/goal_step_01.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

{img_road_menu} Menú {tool2}

'{tool2}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta el campo {dep} a una calle adyacente para avanzar al siguiente paso.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

Primero, necesitas construir una carretera sin salida para construir un depósito en ella.

Las Carreteras:

Esta herramienta se puede usar arrastrando o pulsando de un punto a otro, también puedse presionar la tecla [Ctrl] para construir caminos rectos. Existen varios tipos de carreteras, estas pueden variar su velocidad máxima desde 30km/h hasta 200km/h. Se cobra por el mantenimiento de las carreteras, y su coste varía dependiendo del tipo de carretera. Es posible también electrificar las carreteras para permitir el paso de vehículos eléctricos.

{img_road_menu} {toolbar_road}

'{toolbar_road}' en el menú de herramientas y selecciona la carretera de 50 km/h. Ahora puedes construir una carretera pulsando una vez sobre el inicio y otra sobre el final, o arrastrando el cursor entre estos puntos.

Conecta el campo {dep} a una calle adyacente para avanzar al siguiente paso.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_02.txt b/es/chapter_02/goal_step_02.txt index 93005a8..cce62c5 100644 --- a/es/chapter_02/goal_step_02.txt +++ b/es/chapter_02/goal_step_02.txt @@ -1 +1 @@ -

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {dep}. Puedes encontrar esta herramienta en '{tool2}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {dep}.

\ No newline at end of file +

Vamos a poner en marcha un Servicio de Autobús en la ciudad de {name}

{img_road_menu} {toolbar_road}

El primer paso para poner en marcha el servicio es construir un Depósito de Carretera en {dep}. Puedes encontrar esta herramienta en '{toolbar_road}' también.

Depósito de carretera:

Puedes construir un depósito en una carretera sin salida. Desde los depósitos es posible comprar, vender, ajustar la ruta y arrancar los vehículos. También hay una opción que permite usar vehículos eléctricos, pero sólo se muestra si la carretera bajo el depósito está electrificada.
El depósito te permite comprar vehículos para dar servicio a las ruta que vas a crear.

Para avanzar al próximo paso, construye un Depósito de Carretera en {dep}.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_03.txt b/es/chapter_02/goal_step_03.txt index ebe1b70..44698e3 100644 --- a/es/chapter_02/goal_step_03.txt +++ b/es/chapter_02/goal_step_03.txt @@ -1 +1 @@ -

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad:
{list}

Las paradas se encuentran en la barra de herramientas '{tool2}' también.

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file +

El próximo paso para poner en marcha tu Servicio de Autobús para la ciudad {name}.

{img_road_menu} {toolbar_halt}

Es necesario construir paradas de autobús en cada uno de los puntos marcados en la ciudad. Las paradas se encuentran en la barra de herramientas '{toolbar_halt}' también.

{list}

Las Paradas de Autobús:

Para que el autobús pueda cargar pasajeros es necesario que las paradas estén cerca de algún Edificio, Atracción Turística o Fábrica. Las paradas tienen una capacidad de almacenamiento de 32, 64 o más. En caso de saturarse se te cobrará una penalización. También es posible combinarlas para aumentar su capacidad de carga junto con su cobertura. También se puede extender el tipo de carga usando edificios de extensión o estaciones que acepten distintos tipos de carga.

Nota: Las paradas tienen una cobertura de 5x5, por lo tanto es recomendable colocar las paradas a una distancia de 4 casillas (cuadrados).Al contrario que con los edificios, las calles no necesitan estar dentro del área de cobertura ya que no generan pasajeros.

Consejo: El área de cobertura se puede mostrar presionando la tecla "v".

Consejo: Presiona la tecla " para ocultar los edificios urbanos.

Se avanza al siguiente paso cuando todas las Paradas estén en su lugar.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_05.txt b/es/chapter_02/goal_step_05.txt index 6baa395..0b1eed5 100644 --- a/es/chapter_02/goal_step_05.txt +++ b/es/chapter_02/goal_step_05.txt @@ -1 +1 @@ -

El puente hacia uno de los suburbios exteriores fue arrasado recientemente,
y a la ciudad de {name} le gustaría que reconectaras dicho suburbio construyendo un puente entre {bpos1} y {bpos2}.

Los puentes también se encuentra se encuentra en la barra de herramientas '{tool2}'.

Hay dos formas de lograr esto. Primero selecciona la herramienta de puente de 50 km/h en Herramientas de Carretera, y luego...
[1] Puedes construir el puente pulsando sobre una de las pendientes opuestas.
[2] Puedes colocar el puente arrastrando el cursor desde una pendiente en cualquiera de los lados hasta la pendiente opuesta.

Para continuar, construye un puente en {bpos1}.

{bridge_info} \ No newline at end of file +

El puente hacia uno de los suburbios exteriores fue arrasado recientemente,
y a la ciudad de {name} le gustaría que reconectaras dicho suburbio construyendo un puente entre {bpos1} y {bpos2}.

{img_road_menu} {toolbar_road}

Los puentes también se encuentra se encuentra en la barra de herramientas '{toolbar_road}'.

Hay dos formas de lograr esto. Primero selecciona la herramienta de puente de 50 km/h en Herramientas de Carretera, y luego...
[1] Puedes construir el puente pulsando sobre una de las pendientes opuestas.
[2] Puedes colocar el puente arrastrando el cursor desde una pendiente en cualquiera de los lados hasta la pendiente opuesta.

Para continuar, construye un puente en {bpos1}.

{bridge_info} \ No newline at end of file diff --git a/es/chapter_02/goal_step_08.txt b/es/chapter_02/goal_step_08.txt index 27e0eab..68744cd 100644 --- a/es/chapter_02/goal_step_08.txt +++ b/es/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.

En la barra de herramientas selecciona '{tool3}' y elige la herramienta Convertir en vía o parada pública

Convertir en parada pública

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Advertencia: Usar esta herramienta sale muy caro, {prce} por cada casilla.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file +

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.


{public_stop}

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Advertencia: Usar esta herramienta sale muy caro, {prce} por cada casilla.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file From 1ad06ab2a4ee0ee3345df3aca2d1d16bbe3d49a9 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 24 Jan 2026 12:29:29 +0100 Subject: [PATCH 164/217] FIX error siz missing --- class/class_basic_chapter.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 493ce95..7273b1b 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2570,7 +2570,7 @@ class basic_chapter } } - if (count==siz) { + if ( count == list.len() ) { return true } From fedc0c34f05a4856d9a3d92a6be56f5b66b3b841 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 24 Jan 2026 22:36:22 +0100 Subject: [PATCH 165/217] CHG comments --- class/astar.nut | 2 +- class/class_basic_coords_p128.nut | 9 ++--- class/class_basic_coords_p64.nut | 11 ++--- class/class_basic_coords_p64g.nut | 9 ++--- class/class_basic_data.nut | 11 +++-- class/class_basic_gui.nut | 67 +++++++++++++++---------------- class/class_chapter_00.nut | 12 +++--- class/class_chapter_01.nut | 12 +++--- class/class_chapter_02.nut | 12 +++--- class/class_chapter_03.nut | 13 +++--- class/class_chapter_04.nut | 12 +++--- class/class_chapter_05.nut | 12 +++--- class/class_chapter_06.nut | 12 +++--- class/class_chapter_07.nut | 21 +++++----- scenario.nut | 11 ++++- 15 files changed, 110 insertions(+), 116 deletions(-) diff --git a/class/astar.nut b/class/astar.nut index 535465e..00453de 100644 --- a/class/astar.nut +++ b/class/astar.nut @@ -1,5 +1,5 @@ /** - * @file astar.nut + * @brief astar.nut * Classes to help with route-searching. * Based on the A* algorithm. */ diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 71caf84..0b9f78b 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -1,10 +1,7 @@ /** - * @file class_basic_coords.nut - * @brief sets the pakset specific map coords - * - * - * - */ + * @brief class_basic_coords_p128.nut sets the pakset specific map coords for pak128 + * + */ /** * set limit for build diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 296e16f..0491941 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -1,13 +1,10 @@ /** - * @file class_basic_coords.nut - * @brief sets the pakset specific map coords - * - * - * - */ + * @brief class_basic_coords_p64.nut sets the pakset specific map coords for pak64 + * + */ /** - * set limit for build + * set limit for build/tool work * * */ diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index bc28b64..98fb2fd 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -1,10 +1,7 @@ /** - * @file class_basic_coords.nut - * @brief sets the pakset specific map coords - * - * - * - */ + * @brief class_basic_coords_p64g.nut sets the pakset specific map coords for pak64.german + * + */ /** * set limit for build diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 72706e7..9b9f7b4 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1,10 +1,9 @@ /** - * @file class_basic_data.nut - * @brief sets the pakset specific data - * - * all object names correspond to the names in the dat files - * - */ + * @brief class_basic_data.nut sets the pakset specific data + * + * all object names correspond to the names in the dat files + * + */ // placeholder for tools names in simutrans tool_alias <- {inspe = "Abfrage", road= "ROADTOOLS", rail = "RAILTOOLS", ship = "SHIPTOOLS", land = "SLOPETOOLS", spec = "SPECIALTOOLS"} diff --git a/class/class_basic_gui.nut b/class/class_basic_gui.nut index 7c99076..8df71b7 100644 --- a/class/class_basic_gui.nut +++ b/class/class_basic_gui.nut @@ -1,8 +1,10 @@ -/* - * tool id list see ../info_files/tool_id_list.ods - * - * - */ +/** + * @brief class_basic_gui.nut defines toolbars and tools + * + * tool id list see ../info_files/tool_id_list.ods + * + * + */ // placeholder for some menus icon switch (pak_name) { @@ -20,11 +22,12 @@ break } -/* - * general disabled not used menu and tools - * - */ -function general_disabled_tools( pl ) { +/** + * @fn general_disabled_tools ( pl ) + * general disabled not used menu and tools + * + */ +function general_disabled_tools ( pl ) { // reset rules rules.clear() @@ -81,14 +84,12 @@ function general_disabled_tools( pl ) { chapter_disabled_tools( pl ) } -/* - * disabled tools for chapter - * - * - * - * - */ -function chapter_disabled_tools( pl ) { +/** + * @fn chapter_disabled_tools( pl ) + * disabled tools for chapter + * + */ +function chapter_disabled_tools ( pl ) { /* persistent.chapter <- 1 // stores chapter number persistent.step <- 1 // stores step number of chapter @@ -411,14 +412,15 @@ function chapter_disabled_tools( pl ) { } -/* - * enabled tools for chapter step - * - * allowed tools for steps must be allowed in all subsequent steps of the chapter - * allowed tools not persistent save in rules - * - */ -function chapter_step_enabled_tools( pl ) { +/** + * @fn chapter_step_enabled_tools ( pl ) + * enabled tools for chapter step + * + * allowed tools for steps must be allowed in all subsequent steps of the chapter + * allowed tools not persistent save in rules + * + */ +function chapter_step_enabled_tools ( pl ) { /* persistent.chapter <- 1 // stores chapter number persistent.step <- 1 // stores step number of chapter @@ -1139,14 +1141,11 @@ function chapter_step_enabled_tools( pl ) { } /** - * - * - * - * - * - * - */ - function update_tools(list, id, wt_list, wt) { + * @fn update_tools ( list, id, wt_list, wt ) + * + * + */ + function update_tools ( list, id, wt_list, wt ) { local res = {ok = false, result = false } local wt_res = false if(wt < 0){ diff --git a/class/class_chapter_00.nut b/class/class_chapter_00.nut index 0cb512c..2e25234 100644 --- a/class/class_chapter_00.nut +++ b/class/class_chapter_00.nut @@ -1,9 +1,9 @@ -/* - * class chapter_00 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_00.nut error output for not compatible simutrans and pakset version + * + * + * Can NOT be used in network game ! + */ class tutorial.chapter_00 extends basic_chapter diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 7595bfb..4c916ff 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -1,9 +1,9 @@ -/* - * class chapter_01 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_01.nut Chapter 1 - Basic information about Simutrans + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_01 extends basic_chapter diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index a3d952d..aebb324 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1,9 +1,9 @@ -/* - * class chapter_02 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_02.nut Chapter 2 - Road traffic for bus and postal service + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_02 extends basic_chapter { diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 5ebde95..0972deb 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1,10 +1,9 @@ -// -/* - * class chapter_03 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_03.nut Chapter 3 - Rail transport for goods and passengers + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_03 extends basic_chapter { diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index e8ff863..65cfe32 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -1,9 +1,9 @@ -/* - * class chapter_04 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_04.nut Chapter 4 - Shipping for goods and passengers + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_04 extends basic_chapter { diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index f52280b..dfaccbd 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -1,9 +1,9 @@ -/* - * class chapter_05 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_05.nut Chapter 5 - Road freight transport, electricity supply and postal services + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_05 extends basic_chapter { diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 9d01583..5ada29a 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -1,9 +1,9 @@ -/* - * class chapter_07 - * - * - * Can NOT be used in network game ! - */ +/** + * @brief class_chapter_06.nut Chapter 6 - Air travel with bus connections + * + * Can NOT be used in network game ! + * + */ class tutorial.chapter_06 extends basic_chapter { diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 72bc401..102d3b4 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -1,17 +1,16 @@ -/* - * class chapter_07 - * - * - * Can NOT be used in network game ! - */ - +/** + * @brief class_chapter_07.nut Chapter 7 - City transport with buses without step sequence + * + * + * Can NOT be used in network game ! + */ class tutorial.chapter_07 extends basic_chapter { chapter_name = ch7_name chapter_coord = coord_chapter_7 - startcash = 500000 // pl=0 startcash; 0=no reset - load = 0 + startcash = 500000 // pl=0 startcash; 0=no reset + load = 0 // count for transportet passenger gl_wt = wt_road gl_good = 0 //Passengers @@ -51,9 +50,9 @@ class tutorial.chapter_07 extends basic_chapter local c_nw = city.get_pos_nw() local c_se = city.get_pos_se() - list.push({a = c_nw, b = c_se}) // N + list.push({a = c_nw, b = c_se}) // N list.push({a = coord(c_nw.x, c_se.y), b = coord(c_se.x, c_nw.y)}) // W - list.push({a = c_se, b = c_nw}) // S + list.push({a = c_se, b = c_nw}) // S list.push({a = coord(c_se.x, c_nw.y), b = coord(c_nw.x, c_se.y)}) // E return list diff --git a/scenario.nut b/scenario.nut index 6c73b03..24e2054 100644 --- a/scenario.nut +++ b/scenario.nut @@ -1,5 +1,5 @@ /* - * @file scenario.nut + * @brief scenario.nut * Tutorial Scenario * * @@ -118,7 +118,14 @@ all_systemtypes <- [st_flat, st_elevated, st_runway, st_tram] // Complemento para obtener tiempo de espera tick_wait <- 16 -//returns pakset name (lower case) +/** + * @fn get_set_name(name) + * returns pakset name (lower case) + * + * @param name mixed case + * + * @return name lower case + */ function get_set_name(name) { local s = name.find(" ") From 1225b863f858149369922f49a54178fa9af5b273 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 25 Jan 2026 11:01:57 +0100 Subject: [PATCH 166/217] ADD settings.get_make_public_months() CHG texts --- class/class_chapter_02.nut | 2 +- de/chapter_02/goal_step_08.txt | 2 +- en/chapter_02/goal_step_08.txt | 2 +- es/chapter_02/goal_step_08.txt | 2 +- scenario.nut | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index aebb324..e15ce67 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -253,7 +253,7 @@ class tutorial.chapter_02 extends basic_chapter text.st1 = city1_halt_2[city1_halt_2.len()-1].href(st_halt1.get_name()+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")") text.prce = money_to_string(price) // toolbar icon make_stop_publuc tooltip - local factor = 60 //settings.get_cost_make_public_months() + local factor = settings.get_make_public_months() local tool_text = translate_objects_list.public_stop local idx = tool_text.find("%i") local t1 = tool_text.slice(0, idx) diff --git a/de/chapter_02/goal_step_08.txt b/de/chapter_02/goal_step_08.txt index 2db1e6c..aeb1322 100644 --- a/de/chapter_02/goal_step_08.txt +++ b/de/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.


{public_stop}

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug In öffentliche Haltestelle umwande und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file +

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.


{public_stop}

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug zum öffentliche machen von Halten und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file diff --git a/en/chapter_02/goal_step_08.txt b/en/chapter_02/goal_step_08.txt index 2a1f2d6..fe8b4d7 100644 --- a/en/chapter_02/goal_step_08.txt +++ b/en/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

The city {name} needs to connect the bus line with the train line under construction.


{public_stop}

By making the stop public, the player frees himself from maintaining it and also allows sharing the transport network with other players. But be careful, since this can't be reversed unless you change to the Public Service player.

Warning: Using this tool is very expensive, {prce} for each tile.

Select the Make way or stop public tool and click on the stop {st1}. You will notice that its color will change.

It advances to the next chapter when the stop are made public.

\ No newline at end of file +

The city {name} needs to connect the bus line with the train line under construction.


{public_stop}

By making the stop public, the player frees himself from maintaining it and also allows sharing the transport network with other players. But be careful, since this can't be reversed unless you change to the Public Service player.

Select the Make way or stop public tool and click on the stop {st1}. You will notice that its color will change.

It advances to the next chapter when the stop are made public.

\ No newline at end of file diff --git a/es/chapter_02/goal_step_08.txt b/es/chapter_02/goal_step_08.txt index 68744cd..d213345 100644 --- a/es/chapter_02/goal_step_08.txt +++ b/es/chapter_02/goal_step_08.txt @@ -1 +1 @@ -

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.


{public_stop}

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Advertencia: Usar esta herramienta sale muy caro, {prce} por cada casilla.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file +

La ciudad {name} necesita que conectes la línea de Autobuses con la línea de Trenes en construcción.


{public_stop}

Al hacer la parada pública, el jugador se ahorra el mantenimiento de la parada a la vez que permite compartir con otros jugadores la red de transporte. Pero debes tener cuidado, ya que esta acción no se puede revertir a no ser que cambies al jugador del Servicio Público.

Selecciona la herramienta Convertir en vía o parada pública y pulsa en la parada {st1}. Notarás que el color de la parada cambiará..

Se avanza al siguiente capítulo cuando la parada sea pública.

\ No newline at end of file diff --git a/scenario.nut b/scenario.nut index 24e2054..b5457a0 100644 --- a/scenario.nut +++ b/scenario.nut @@ -6,7 +6,7 @@ * Can NOT be used in network game ! */ const nut_path = "class/" // path to folder with *.nut files -const version = 2005 +const version = 2006 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" From 8e5cc64674166aa570686f58b7ebf8a83171ebbc Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 25 Jan 2026 11:17:45 +0100 Subject: [PATCH 167/217] CHG remove price to make stop public; v2.0.06 require simutrans r11875 --- class/class_chapter_02.nut | 1 - 1 file changed, 1 deletion(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index e15ce67..fd48e82 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -251,7 +251,6 @@ class tutorial.chapter_02 extends basic_chapter case 8: local st_halt1 = my_tile(city1_halt_2[city1_halt_2.len()-1]).get_halt() text.st1 = city1_halt_2[city1_halt_2.len()-1].href(st_halt1.get_name()+" ("+city1_halt_2[city1_halt_2.len()-1].tostring()+")") - text.prce = money_to_string(price) // toolbar icon make_stop_publuc tooltip local factor = settings.get_make_public_months() local tool_text = translate_objects_list.public_stop From 671bb792440a86ddba9c865ddce85b01f93433e4 Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 26 Jan 2026 19:37:22 +0100 Subject: [PATCH 168/217] CHG comments for documentation --- class/astar.nut | 4 + class/class_basic_chapter.nut | 21 +- class/class_basic_data.nut | 466 +++++++++++++++++++--------------- class/class_basic_gui.nut | 4 +- class/class_chapter_00.nut | 10 +- class/class_chapter_01.nut | 10 +- class/class_chapter_02.nut | 8 +- class/class_chapter_03.nut | 8 +- class/class_chapter_04.nut | 8 +- class/class_chapter_05.nut | 8 +- class/class_chapter_06.nut | 8 +- class/class_chapter_07.nut | 8 +- info_files/img-tools.ods | Bin 19368 -> 20422 bytes scenario.nut | 14 +- 14 files changed, 331 insertions(+), 246 deletions(-) diff --git a/class/astar.nut b/class/astar.nut index 00453de..1ab0380 100644 --- a/class/astar.nut +++ b/class/astar.nut @@ -1,3 +1,7 @@ +/** @file astar.nut + * @brief Classes to help with route-searching. + */ + /** * @brief astar.nut * Classes to help with route-searching. diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7273b1b..b0cda25 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1,11 +1,11 @@ /** - * @file class_basic_chapter.nut - * - * class basis_chapter - * - * - * Can NOT be used in network game ! - */ + * @file class_basic_chapter.nut + * @brief global parameters and functions + * + * + * Can NOT be used in network game ! + * + */ //Global coordinate for mark build tile currt_pos <- null @@ -32,9 +32,10 @@ tile_delay <- 0x0000000f & time() //delay for mark tiles gl_tile_i <- 0 /** - * class to chapter description : this is a placeholder class - * - */ + * @class basic_chapter + * @brief class to chapter description : this is a placeholder class + * + */ class basic_chapter { diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index 9b9f7b4..e38822c 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -1,17 +1,21 @@ -/** - * @brief class_basic_data.nut sets the pakset specific data +/** @file class_basic_data.nut + * @brief sets the pakset specific data * * all object names correspond to the names in the dat files * */ -// placeholder for tools names in simutrans +/// placeholder for tools names in simutrans tool_alias <- {inspe = "Abfrage", road= "ROADTOOLS", rail = "RAILTOOLS", ship = "SHIPTOOLS", land = "SLOPETOOLS", spec = "SPECIALTOOLS"} -// placeholder for good names in pak64 +/// placeholder for good names in pak64 good_alias <- {mail = "Post", passa= "Passagiere", goods = "Goods", wood = "Holz", plan = "Bretter", coal = "Kohle", oel = "Oel" , gas = "Gasoline"} -// placeholder for shortcut keys names +/** + * placeholder for shortcut keys names + * + * @param string pak name + */ switch (pak_name) { case "pak64": key_alias <- {plus_s = "+", minus_s = "-"} @@ -24,6 +28,11 @@ good_alias <- {mail = "Post", passa= "Passagiere", goods = "Goods", wood = "Hol break } +/** + * factory_data list the factory data + * + * list factory_data ( id, { translate name, tile list, tile_x(0, 0) } ) + */ factory_data <- {} function get_factory_data(id) { local t = factory_data.rawget(id) @@ -31,11 +40,11 @@ function get_factory_data(id) { } /** - * rename factory names - * translate object name in to language by start scenario - * - * set factory data - */ + * translate factorys raw name in to game language by start scenario + * + * set factory_data{} + * + */ function rename_factory_names() { local list = factory_list_x() @@ -131,10 +140,10 @@ function rename_factory_names() { } /** - * translate objects - * - * - */ + * array to translate texts from simutrans programm + * + * set translate_objects_list + */ function translate_objects() { //translate_objects_list.inspec <- translate("Abfrage") @@ -180,9 +189,10 @@ function translate_objects() { } /** - * set vehicle for chapter 2 step 4, 6, 7 - * - */ + * vehicle for chapter 2 step 4, 6, 7 + * + * @return string object name + */ function get_veh_ch2_st4() { switch (pak_name) { case "pak64": @@ -199,14 +209,16 @@ function get_veh_ch2_st4() { } /** - * set objects for chapter 2 - * - * id 1 = way name - * id 2 = bridge name - * id 3 = stations name - * id 4 = depot name - * - */ + * set objects for chapter 2 + * + * @param integer id + * @li id 1 = way name + * @li id 2 = bridge name + * @li id 3 = stations name + * @li id 4 = depot name + * + * @return object raw name + */ function get_obj_ch2(id) { switch (pak_name) { case "pak64": @@ -261,16 +273,18 @@ function get_obj_ch2(id) { } /** - * set vehicle for chapter 3 - * - * id 1 = step 5 loco - * id 2 = step 7 loco - * id 3 = step 11 loco - * id 4 = step 5 wag - * id 5 = step 7 wag - * id 6 = step 11 wag - * - */ + * vehicle for chapter 3 + * + * @param integer id + * @li id 1 = step 5 loco + * @li id 2 = step 7 loco + * @li id 3 = step 11 loco + * @li id 4 = step 5 wag + * @li id 5 = step 7 wag + * @li id 6 = step 11 wag + * + * @return object raw name + */ function get_veh_ch3(id) { switch (pak_name) { case "pak64": @@ -344,17 +358,19 @@ function get_veh_ch3(id) { } /** - * set objects for chapter 3 - * - * id 1 = way name - * id 2 = bridge name - * id 3 = stations name - * id 4 = depot name - * id 5 = tunnel name - * id 6 = signal name - * id 7 = overheadpower name - * - */ + * objects for chapter 3 + * + * @param integer id + * @li id 1 = way name + * @li id 2 = bridge name + * @li id 3 = stations name + * @li id 4 = depot name + * @li id 5 = tunnel name + * @li id 6 = signal name + * @li id 7 = overheadpower name + * + * @return object raw name + */ function get_obj_ch3(id) { switch (pak_name) { case "pak64": @@ -436,12 +452,14 @@ function get_obj_ch3(id) { } /** - * set vehicle for chapter 4 - * - * id 1 = step 4 ship - * id 2 = step 7 ship - * - */ + * vehicle for chapter 4 + * + * @param integer id + * @li id 1 = step 4 ship + * @li id 2 = step 7 ship + * + * @return object raw name + */ function get_veh_ch4(id) { switch (pak_name) { case "pak64": @@ -479,15 +497,17 @@ function get_veh_ch4(id) { } /** - * set objects for chapter 4 - * - * id 1 = way name - * id 2 = harbour 1 name (good) - * id 3 = cannel stop name - * id 4 = harbour 2 name (passenger) - * id 5 = depot name - * - */ + * objects for chapter 4 + * + * @param integer id + * @li id 1 = way name + * @li id 2 = harbour 1 name (good) + * @li id 3 = cannel stop name + * @li id 4 = harbour 2 name (passenger) + * @li id 5 = depot name + * + * @return string object name + */ function get_obj_ch4(id) { switch (pak_name) { case "pak64": @@ -551,14 +571,16 @@ function get_obj_ch4(id) { } /** - * set vehicle for chapter 5 - * - * id 1 = step 2 truck (coal) - * id 2 = step 2 truck trail (coal) - * id 3 = step 4 truck (post) - * id 4 = step 4 ship (post) - * - */ + * vehicle for chapter 5 + * + * @param integer id + * @li id 1 = step 2 truck (coal) + * @li id 2 = step 2 truck trail (coal) + * @li id 3 = step 4 truck (post) + * @li id 4 = step 4 ship (post) + * + * @return string object name + */ function get_veh_ch5(id) { switch (pak_name) { case "pak64": @@ -614,16 +636,18 @@ function get_veh_ch5(id) { } /** - * set objects for chapter 5 - * - * id 1 = road way name - * id 2 = truck stop name (good) - * id 3 = powerline way name - * id 4 = powerline transformer - * id 5 = depot name - * id 6 = post extension name - * - */ + * objects for chapter 5 + * + * @param integer id + * @li id 1 = road way name + * @li id 2 = truck stop name (good) + * @li id 3 = powerline way name + * @li id 4 = powerline transformer + * @li id 5 = depot name + * @li id 6 = post extension name + * + * @return string object name + */ function get_obj_ch5(id) { switch (pak_name) { case "pak64": @@ -696,13 +720,15 @@ function get_obj_ch5(id) { } /** - * set vehicle for chapter 6 - * - * id 1 = step 2 airplane (passenger) - * id 2 = step 3 bus - * id 3 = step 4 bus - * - */ + * vehicle for chapter 6 + * + * @param integer id + * @li id 1 = step 2 airplane (passenger) + * @li id 2 = step 3 bus + * @li id 3 = step 4 bus + * + * @return string object name + */ function get_veh_ch6(id) { switch (pak_name) { case "pak64": @@ -749,16 +775,18 @@ function get_veh_ch6(id) { } /** - * set objects for chapter 6 - * - * id 1 = runway name - * id 2 = taxiway name - * id 3 = air stop name - * id 4 = air extension name - * id 5 = air depot name - * id 6 = road depot name - * - */ + * objects for chapter 6 + * + * @param integer id + * @li id 1 = runway name + * @li id 2 = taxiway name + * @li id 3 = air stop name + * @li id 4 = air extension name + * @li id 5 = air depot name + * @li id 6 = road depot name + * + * @return string object name + */ function get_obj_ch6(id) { switch (pak_name) { case "pak64": @@ -831,13 +859,15 @@ function get_obj_ch6(id) { } /** - * set count wg for train - * - * id 1 - chapter 3 : train good Holz - * id 2 - chapter 3 : train good Bretter - * id 3 - chapter 3 : train good Passagiere - * - */ + * count wg for train + * + * @param integer id + * @li id 1 - chapter 3 : train good Holz + * @li id 2 - chapter 3 : train good Bretter + * @li id 3 - chapter 3 : train good Passagiere + * + * @return integer count + */ function set_train_lenght(id) { switch (pak_name) { @@ -884,25 +914,27 @@ function set_train_lenght(id) { } /** - * set count convoys for line - * - * id 1 - chapter 2 : city1_halt_1 - halts city 1 - * id 2 - chapter 2 : city1_halt_2 - halts connect city 1 dock and station - * id 3 - chapter 2 : city2_halt_1 - halts connect city 2 to city 1 - * id 4 - chapter 3 : rail factory 1 -> factory 2 - * id 5 - chapter 3 : rail factory 2 -> factory 3 - * id 6 - chapter 3 : ch3_rail_stations - city line - * id 7 - chapter 4 : ch4_ship1_halts - dock raffinerie - (coord_fac4) - * id 8 - chapter 4 : ch4_ship2_halts - dock raffinerie - canal stop gas station - * id 9 - chapter 4 : ch4_ship3_halts - passenger ship - * id 10 - chapter 5 : road coal to power plant - * id 11 - chapter 5 : city1_post_halts - halts for post - * id 12 - chapter 5 : post ship dock - oil rigg - * id 13 - chapter 6 : city1_city7_air - * id 14 - chapter 6 : city1_halt_airport - * id 15 - chapter 6 : city7_halt - * - */ + * count convoys for line + * + * @param integer id + * @li id 1 - chapter 2 : city1_halt_1 - halts city 1 + * @li id 2 - chapter 2 : city1_halt_2 - halts connect city 1 dock and station + * @li id 3 - chapter 2 : city2_halt_1 - halts connect city 2 to city 1 + * @li id 4 - chapter 3 : rail factory 1 -> factory 2 + * @li id 5 - chapter 3 : rail factory 2 -> factory 3 + * @li id 6 - chapter 3 : ch3_rail_stations - city line + * @li id 7 - chapter 4 : ch4_ship1_halts - dock raffinerie - (coord_fac4) + * @li id 8 - chapter 4 : ch4_ship2_halts - dock raffinerie - canal stop gas station + * @li id 9 - chapter 4 : ch4_ship3_halts - passenger ship + * @li id 10 - chapter 5 : road coal to power plant + * @li id 11 - chapter 5 : city1_post_halts - halts for post + * @li id 12 - chapter 5 : post ship dock - oil rigg + * @li id 13 - chapter 6 : city1_city7_air + * @li id 14 - chapter 6 : city1_halt_airport + * @li id 15 - chapter 6 : city7_halt + * + * @return string object name + */ function set_convoy_count(id) { switch (pak_name) { @@ -1057,16 +1089,18 @@ function set_convoy_count(id) { } /** - * set transportet goods - * - * id 1 - chapter 3 : train good Holz - * id 2 - chapter 3 : train good Bretter - * id 3 - chapter 7 : bus city Hepplock - * id 4 - chapter 7 : bus city Appingbury - * id 5 - chapter 7 : bus city Hillcross - * id 6 - chapter 7 : bus city Springville - * - */ + * Number of goods to be transported + * + * @param integer id + * @li id 1 - chapter 3 : train good Holz + * @li id 2 - chapter 3 : train good Bretter + * @li id 3 - chapter 7 : bus city Hepplock + * @li id 4 - chapter 7 : bus city Appingbury + * @li id 5 - chapter 7 : bus city Hillcross + * @li id 6 - chapter 7 : bus city Springville + * + * @return integer transport count + */ function set_transportet_goods(id) { switch (pak_name) { @@ -1141,19 +1175,21 @@ function set_transportet_goods(id) { } /** - * set loading capacity - * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby - * id 4 - chapter 3 step 11 : city train - * id 5 - chapter 6 step 2 : air city 1 - city 7 - * id 6 - chapter 6 step 3 : bus city 1 - Airport - * id 7 - chapter 6 step 4 : bus city 7 - Airport - * id 8 - chapter 5 step 4 : post city 1 - * id 9 - chapter 5 step 4 : ship oil rig - * - */ + * Number of loading capacity + * + * @param id + * @li id 1 - chapter 2 step 4 : bus city Pollingwick + * @li id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * @li id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * @li id 4 - chapter 3 step 11 : city train + * @li id 5 - chapter 6 step 2 : air city 1 - city 7 + * @li id 6 - chapter 6 step 3 : bus city 1 - Airport + * @li id 7 - chapter 6 step 4 : bus city 7 - Airport + * @li id 8 - chapter 5 step 4 : post city 1 + * @li id 9 - chapter 5 step 4 : ship oil rig + * + * @return integer loading capacity + */ function set_loading_capacity(id) { switch (pak_name) { @@ -1255,22 +1291,25 @@ function set_loading_capacity(id) { } /** - * set waiting time passenger and post - * - * id 1 - chapter 2 step 4 : bus city Pollingwick - * id 2 - chapter 2 step 6 : bus Pollingwick - Dock - * id 3 - chapter 2 step 7 : bus Pollingwick - Malliby - * id 4 - chapter 3 step 11 : city train - * id 5 - chapter 4 step 7 : good ship produser -> consumer - * id 6 - chapter 5 step 4 : road mail - * id 7 - chapter 5 step 4 : ship oil rig - * id 8 - chapter 6 step 2 : air city 1 - city 7 - * id 9 - chapter 6 step 3 : bus city 1 - Airport - * id 10 - chapter 6 step 4 : bus city 7 - Airport - * - * 1 day = 2115 - * 1 hour = 88 - */ + * Number of waiting time passenger and post + * + * 1 day = 2115
+ * 1 hour = 88 + * + * @param id + * @li id 1 - chapter 2 step 4 : bus city Pollingwick + * @li id 2 - chapter 2 step 6 : bus Pollingwick - Dock + * @li id 3 - chapter 2 step 7 : bus Pollingwick - Malliby + * @li id 4 - chapter 3 step 11 : city train + * @li id 5 - chapter 4 step 7 : good ship produser -> consumer + * @li id 6 - chapter 5 step 4 : road mail + * @li id 7 - chapter 5 step 4 : ship oil rig + * @li id 8 - chapter 6 step 2 : air city 1 - city 7 + * @li id 9 - chapter 6 step 3 : bus city 1 - Airport + * @li id 10 - chapter 6 step 4 : bus city 7 - Airport + * + * @return integer waiting time + */ function set_waiting_time(id) { switch (pak_name) { @@ -1381,15 +1420,19 @@ function set_waiting_time(id) { } /** - * goods def - * - * id = good id - * select = define return data - * 1 = translate metric - * 2 = raw good name - * 3 = translate good name - * - */ + * good data + * + * @param integer id = good id + * @param integer select = define return data + * @li select 1 = translate metric + * @li select 2 = raw good name + * @li select 3 = translate good name + * + * @return + * @li integer good metric (select 1) + * @li string good raw name (select2) + * @li string good translated name (select=3) + */ function get_good_data(id, select = null) { local good_n = null @@ -1440,15 +1483,15 @@ function get_good_data(id, select = null) { } /** - * factory prod and good data for textfiles - * - * tile = tile_x factory - * g_id = good name - * read = "in" / "out" - * - * return array[base_production, base_consumption, factor] - */ - function read_prod_data(tile, g_id, read = null) { + * factory prod and good data for textfiles + * + * @param coord tile = tile_x factory + * @param integer g_id = good name + * @param string read = "in" / "out" + * + * @return array array[base_production, base_consumption, factor] + */ +function read_prod_data(tile, g_id, read = null) { // actual not read good data local t = square_x(tile.x, tile.y).get_ground_tile() @@ -1499,16 +1542,18 @@ function get_good_data(id, select = null) { return output - } +} /** - * add files for more infos - * - * bridge - bridge build - * tunnel - tunnel build - * info - more infos for pakset - * - */ + * files for more infos + * + * @param txt_file + * txt_file = bridge - bridge build + * txt_file = tunnel - tunnel build + * txt_file = info - more infos for pakset + * + * @return ttextfile(file) + */ function get_info_file(txt_file) { //ttextfile("info/build_bridge.txt") @@ -1557,20 +1602,22 @@ function get_info_file(txt_file) { } /** - * set passenger/post halt for waiting - * - * id 1 = city1_halt_1[id] - halts city 1 - * id 2 = city1_halt_2[id] - halts connect city 1 dock and station - * id 3 = city2_halt_1[id] - halts connect city 2 to city 1 - * id 4 = ch3_rail_stations - city line - * id 5 = ch4_ship3_halts - passenger ship - * id 6 = city1_city7_air - airplane - * id 7 = city1_halt_airport - bus airport - city 1 - * id 8 = city7_halt - bus airport - city 7 - * id 9 = city1_post_halts - road halts for post - * id 10 = ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) - * - */ + * halt id for waiting time in the halt list + * + * @param integer id + * @li id 1 = city1_halt_1[id] - halts city 1 + * @li id 2 = city1_halt_2[id] - halts connect city 1 dock and station + * @li id 3 = city2_halt_1[id] - halts connect city 2 to city 1 + * @li id 4 = ch3_rail_stations - city line + * @li id 5 = ch4_ship3_halts - passenger ship + * @li id 6 = city1_city7_air - airplane + * @li id 7 = city1_halt_airport - bus airport - city 1 + * @li id 8 = city7_halt - bus airport - city 7 + * @li id 9 = city1_post_halts - road halts for post + * @li id 10 = ch5_post_ship_halts - post passenger dock - factory 4 (Oil rigg) + * + * @return integer id for halt list + */ function get_waiting_halt(id) { switch (pak_name) { @@ -1681,13 +1728,16 @@ function get_waiting_halt(id) { } /** - * return image for icons - * - * - * - * - * - */ + * set icon code to text by different icons in paksets + * + * The folder info_files/img-tools contains a scenario for displaying the icons with their IDs. + * + * @param string id = icon code + * The icon code are documented in the file info_files/img-tools.ods. + * + * + * @return string image code for icons in text + */ function get_gui_img(id) { switch (pak_name) { diff --git a/class/class_basic_gui.nut b/class/class_basic_gui.nut index 8df71b7..35aac6c 100644 --- a/class/class_basic_gui.nut +++ b/class/class_basic_gui.nut @@ -1,5 +1,5 @@ -/** - * @brief class_basic_gui.nut defines toolbars and tools +/** @file class_basic_gui.nut + * @brief defines toolbars and tools * * tool id list see ../info_files/tool_id_list.ods * diff --git a/class/class_chapter_00.nut b/class/class_chapter_00.nut index 2e25234..2e96e86 100644 --- a/class/class_chapter_00.nut +++ b/class/class_chapter_00.nut @@ -1,11 +1,13 @@ +/** @file class_chapter_00.nut + * @brief error output for not compatible simutrans and pakset version + */ + /** - * @brief class_chapter_00.nut error output for not compatible simutrans and pakset version - * + * @brief class_chapter_00.nut + * error output for not compatible simutrans and pakset version * * Can NOT be used in network game ! */ - - class tutorial.chapter_00 extends basic_chapter { chapter_name = "Checking Compatibility" diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 4c916ff..2eec3b7 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -1,11 +1,15 @@ +/** @file class_chapter_01.nut + * @brief Basic information about Simutrans + */ + /** - * @brief class_chapter_01.nut Chapter 1 - Basic information about Simutrans + * @class tutorial.chapter_01 + * @brief class_chapter_01.nut + * Basic information about Simutrans * * Can NOT be used in network game ! * */ - - class tutorial.chapter_01 extends basic_chapter { chapter_name = ch1_name diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index fd48e82..a232491 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_02.nut + * @brief Road traffic for bus and postal service + */ + /** - * @brief class_chapter_02.nut Chapter 2 - Road traffic for bus and postal service + * @brief class_chapter_02.nut + * Road traffic for bus and postal service * * Can NOT be used in network game ! * */ - class tutorial.chapter_02 extends basic_chapter { chapter_name = ch2_name diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 0972deb..1ed3c28 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_03.nut + * @brief Rail transport for goods and passengers + */ + /** - * @brief class_chapter_03.nut Chapter 3 - Rail transport for goods and passengers + * @brief class_chapter_03.nut + * Rail transport for goods and passengers * * Can NOT be used in network game ! * */ - class tutorial.chapter_03 extends basic_chapter { chapter_name = ch3_name diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 65cfe32..1ef991d 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_04.nut + * @brief Shipping for goods and passengers + */ + /** - * @brief class_chapter_04.nut Chapter 4 - Shipping for goods and passengers + * @brief class_chapter_04.nut + * Shipping for goods and passengers * * Can NOT be used in network game ! * */ - class tutorial.chapter_04 extends basic_chapter { chapter_name = ch4_name diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index dfaccbd..565b8d9 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_05.nut + * @brief Road freight transport, electricity supply and postal services + */ + /** - * @brief class_chapter_05.nut Chapter 5 - Road freight transport, electricity supply and postal services + * @brief class_chapter_05.nut + * Road freight transport, electricity supply and postal services * * Can NOT be used in network game ! * */ - class tutorial.chapter_05 extends basic_chapter { chapter_name = ch5_name diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 5ada29a..08e4915 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_06.nut + * @brief Air travel with bus connections + */ + /** - * @brief class_chapter_06.nut Chapter 6 - Air travel with bus connections + * @brief class_chapter_06.nut + * Air travel with bus connections * * Can NOT be used in network game ! * */ - class tutorial.chapter_06 extends basic_chapter { chapter_name = ch6_name diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 102d3b4..0a4e4bb 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -1,10 +1,14 @@ +/** @file class_chapter_07.nut + * @brief City transport with buses without step sequence + */ + /** - * @brief class_chapter_07.nut Chapter 7 - City transport with buses without step sequence + * @brief class_chapter_07.nut + * City transport with buses without step sequence * * * Can NOT be used in network game ! */ - class tutorial.chapter_07 extends basic_chapter { chapter_name = ch7_name diff --git a/info_files/img-tools.ods b/info_files/img-tools.ods index 41bfc90ed6fab280957a13a2eaa428a7e2faf6f4..95aa6be8f2e804f0e7d2f26236636cf1b12d47c9 100644 GIT binary patch delta 18536 zcmZ^qWl$Vl6sED@?lM4v1$P$-jHJx||To(4OT2aBPq0FQtV1A`0$gZEV+0YeS`pK16i1pA*&%7P9BN`Is`{jIT-U=Bx-Z=+7kAU-=Q;n%4 z#k;YrLV`7r$NtC2j>?Y8lgG*|2a}$Tsrg?RRoo8MSU)0^JW?#a zJ(4(<%F1&tm)sb&_B&i(PH(jnV%?M96@mtW@%= zR)R{vW0O?-lxODvf2T*k(h zcZ+fJ118cY@*eN+4}&F_2x&^rnbRFH^VM$#_N8SvEl1fLp|vDM*n&8i3oiZ@A9hL`|Pk2M&h=IV!Gy)qqI--2REp!Q1#@`g2{cV-}l9kzqjuTQ+oJbn2D(5EVIO4vn|E&v)JRdgU~6 z^?}wP<^((xgS{(S8QVxl^hr%ig5{o+Se?b%A~AsuY4B70g#~(v$|!YgFgW;8ojel%_&tB+0RD0hQ=z8- zfE79AaJM20tE{mJMm}d?PwYdYC}D`?7PE{H|J(0&?R=lPhwz8?@qv08jMcUIM!`!z zEO#p3oz%Bu7(!vzP{Jdp3Tv<73U6or_&v82*~S$Yaj9pR=9h~G2}>cbquGLkW0i^3xoo=r`gz`(Z%hF_(MrPvakWZk)X23m-E=f*d2t`zhIQ{;B&kcaHI0Fxx~HKrZ1k86<(N)^BM8S4ml zru3W+pB4W`i*Dm{Y0EZ$WU}|3@sM)Eskt(eD=X!=>7?2*Xac^`8tCnAl#h<0>b7^& z%2_;jrn&g_ZV#PFVCiEcj@;m)67r{3MQPzIe+L$Ul~y?u!GUzgL*KLR1y-sv-#!7C z)=YRxbF2R(Tf(tUT^jSbM`&MFiXQ%F_@ui2odDQ zv``>(3s;rZqk$-Hj41?`W(a+rGB)(u`E!`vsM5A)-C++dO#TyhvVl}X-lV)+tNs27 zP_p#YzNUzH)LO|6b&KeLKUwTNWt#{w6OD8P|E8tZ3^YXJJzunbG$!9?i-IC9IenI=Rh#A{_x(xY6b;{x*17kh2mw2^Q_7Fo>qqp4q>m4hUorW-tF9F(CO@gFvEsO-8!YX{RQVz zr{E3Tx2+Z%t|KxBTqUQ(ls2+QVS+j^g7pUTr4^b=tgOzBJ>`fxlqh7a?}h$!j)=V# zIQVQ8lKDb;%Fm&X+UYF5tC84U%T+zt6xC8S0 ztGnEeEL8a&j-_k(YkzG?^bKw1$2J?Z!eKa-Ij>d1E|>-e(wWuZZ5I-VpcV=^*YgAX zCe%E5?YKaOFWyU&yVUl}1JDKW4^Z%CZdiuUg0DX-WGPlmuX#yY3|5|GhsF(kdy8p) z%XUK~UjFtnqh5bQagO=(eRiM%Wh1cCDO<{!ZiLUTH;3LGC(g>9A*z)q zB#dYH_w%I`_*}8wNOd~mSbYpP%W2m?ic#O3+J|*Pbtc_D?nkXicXD%J7YU|Is;DXR zFV@Qr*|NIc5nAnYq|cam5bNhG-NN9<7AJ?QSog_)^#G2$-*AfmTkRUkOhH8VQZI-X zw>}?_{VsM}%8;9|b(1g5uFnWu^B0Pua#DT#!biTz!_6CJ5!6~8fz4;1(%YmVn$j;~ zYLx--7DdSHAj%fZy+8o}xoJV-Vf^cr+bY3c`_9XSXdPZgsAy#eZnzF!I+{pAdv^eN zoWoNEMy0%(6RoGMPu=;GFgO*S{QR&doqOk^N2F?=*DLiqpxX5XOy>FaSycfEnLo~( zP81aeW=aqS=6@+sWMt(3l&B%h|8=4NdrlHS#{{qI>;Un>o4o^rClujWmgw2UZMKC zW)@q$V#XM{A+1s(_Ui@6>5Rmsh~tVQi0S4xppY#9y7dDPW>J#u~1huR3;M`l}|w zNOSKvbB36fO}%Pw>cx8+*;NP=+Y}ko2CS(kj2|s0G9;y`-*R(o5Wfl6BaK&p^aSf` zmWi|uQcVMtaDu7COrlc zF712D8H_-%co!tIJz8InM2wQ*W+Ng%9rt&}{9e?y`wT}Zw^+QUe(-R4F$h}+70(-< zo5+Y{l@3O5eCo zDfKq0An5}#Gw%Joi_Lw8S6@aqi4a}6{n-#FHNp|tJyBV6X)`a zp~m4eHB}y=o;wZUc^qsOV3n<>$uzATbc#t1PeM*4tK_YVVSW7#s?_tk(_B-H-{z#%n(yNpK{g}vE{VR#z@6}&w@c@xI`aFqt@tA z3DplyaZ$@*MF^WQ;B_*8(4%ASZ?9>L<})odDh)<_s`cC2n84-&P-8ixM^@)M(US!s?G35#pwTjNw4Y0ld8bU=S0%)29Lo7fH+W)M*929X z!t6B+uy833wI7e^r2@;SH=Pd;5rB^KTCjc63U|5_dCmwz(I1<>?u~hYWV_*10yJ?m zC1z58%9QNR_IZ<5;dG|)eK7FuR;U7X;dx=nMCiqYsmJczVd484O0f#<9qz64Av8*t z@LW>9SO3IV2smEs1LtEXy&Ruc^iItp!6?o?n2cn?D3ZJ1?SW^E*3Th{&F@V0F!e#8 z53GV)0pMy<#I{ZWxG=QiZfnYPL>MmY=dPbUi9&bcSh@jZk9}V4nFk_APBsT|y%k;p z482)@h~KuEy?_DpP%Yz5edDRtwcZSPs`q=RM9P_hM5jc)8~09M|An-RPP#v;=s)j9 z5!$DKfZ`55*y-5~rlI2V4pX~VYGN|Ry{x*VyD? zG>=KYTp;*napz$2Iq347r(AtiGS{;tO?JKL7qeEu6DA%E7sAkXYeiV->(x z9lgS6czSAobGPdYno<4am8X!kRrc}G-R}=tT6b)CQqIjpr+Pd;<-p1BcSBz94@ z6kl<1Tt1={rI!Ge*{5yV2iqjD04eyV(_e1JqR>+DLHgL4TP}^?R@4cKT>`EW0MAdg z&o@E%l(zSlHCHoF-Ab>x6s!a;~my#8mNg0kGv{?+L{zS;q+MZy70 z*XFs1e3Rg-`7FwhfI`~TY*$6n-YYj*17;5)hA-$!(@p3CS1AE z?BV~95cuCn%FtehK6;c52Ik)l4?_%-^!kM~i2#p=v|d$FQ~ICdKOmtXA|oLpqoAUp zp6I{G}adv7gtwT=eIN#wY8LXww3pEHZ?VMb#)c? zj#VW!;R6w9yF_=AF7Q8r(USJGQ}Q!H=!+buZtrnN8!e?^%<)bY>9M!Pe~J;yO%Try zbml_M;K@Q*eo-ilj7XKPP2U!M8ONWmyv=*ab*DMi}Y%^z;Wv;~v_tf;b?z$bhL?7<2li>4iRIqG>937(khA)+k(kVu{BP z9R(eTc_u?(Ve$|=)`$bruttNJu4mAed5~mWLU=exXXsYy#^Y=_mmcY5ih%23WpApU zQB1Dc+wP!qzU4Lnz;FX^G{rqi)N_{>+6vgPUR5I@9>Rlt>Mq@{u$dThs&Q4AGrOjo z=f;L=!dAuHC}Xu4rWb!->HCIyXa+%y1_O#3zBs^`*JoE-n!>D9EJ6$)O~Yec$TQ7U zxvGVZwr2$Zr57V+UUU3brgVD9GRs9ES8nKG9v^~W@hB5)+9poDmd)no_bSW8ygV8V0Bg^`j-&5cQ+9|azW6}LBJ zqn6Z$>Y1^2wK!a~&tgufgb5HT*9sx zALywz_aGPZwn#o(Ne<#BTKWq=n974Wh7pS{h~%wT9!UM0SShiF->(SI;?13+1`*>G z%bwhhnb&!CY&5;JzQ&f5Cm?K^D!lxONwaI2g_s@PJ2#fPERs1I3Bv6+3WLIGj=@mg zdGwY(@}-j#Opefh3^PM>?+8~G(TAD9PC2YqOCbDgN?6VL(_qn;ZUdrFFYjRKxQ_B~ zl~nXRAAEu3D(>Nu+`p$Q12m*g1stDi0a#2+F)TwzDfBKHf_u7IpZ}OWd(77$OykJ% ziIZky9|{&9Oz^$@sji;Zc7DW_WdI{m8@Ms_HJL35W1(7_mcoSqd=(a@dy1}Mx*eJd z$z$uEsKRtH#ka@99=qf5#n4a}Wxynr?wq)iKL-;suJ@0qIz~D=8F-CS>!Sv>fyY6> z<(SkaD@H2#%Mpdn&~Sn;a|%N?zXaipBB>|PUKuibJgT=Yhtk8CfT@3CO2Ckd1&D41 zy9WaXoM?La`I8;$qZ!R40f3uRD-1`qyMxhb1Rk$>x_OZz_Wi3_$>>lGUyhHl-?S};6i)-h%rm#1 z;iAVl*jcojB^OOPc`KbSxMU{70+ttI~IA6+a^Q=ur}I`Ik;ny^rHH%c}+p{5y;2Rb#ej zgYF>?{2uN*o#*TqVTFR#TZU}09L;T>#PSxZJvv^kab+x8S9i%4yB1HBD7Hw}$vHq#!HgGl~V0aMqat^xo= z2R}lU-Bt18aMr%LIzxAJkaSn2fvCTQ$@$l(y}h|1hDc1LCBc!NnhS$yE#~n5g6)1c zeSn}Eh)MlP+3~$F+w=5X5o<(AVm`P#alcAfx}$9xl2TZs=Q*-bcJo6`cq1 zLVv{2TZcG2u2JsoS!4Mjqc)M$oc?%Gj@GrqD4A=5r@-wDrS7C^odl8F54bmqD}+YIiwXJ}zw+d6Sga?7O? zW7bl74uxh3Ov{dJa&YXNc&?uphEt9!h&7jnkdu&$QWHO$XCVp(uEgNRv4S%?u}zh! zjfDBuwYTNIe$@EDr05bNPNk3rJjm2*DJjL`QZtsa^wK+4H4cWaJ!~Ank%-;pmy1bh=U?s{iK$kNx$H!la!>(Has%cj5)QqY{8TNoFW?VYCSdn1#<;NBd;M!v zVJq#*Vx&QvW#^&mhy-H6Cu26rEN3?cGr|&nbRr%v;BdgFMA)+e06qg&b>b%?Bdx@%MOW~c=*cU^_lE*LehE-JVo7cx9c`640n+6d z5L&Aunl(;}&;TU&8{xl@MOy@?9?ux&NJb{gh?bW1pS!T7MUoBpNK0d-PiAUz!8GBv zZXZg7`4}t8$HAkd)OKZUx%0>NY_NhN~2Eq~~_P-p~<;L9=_9<(bL z5FPGhj}oEy|3!tc_T#zMJ6F1SyORCm4k{jPoO<5HbaPb56X=Sxlbx3Ni*hL#^=RQ1 z8JW@9Uos>=f&ZvS^2hS-a~}s_g?|~v)4mnr+{=i7&u0C%!hLVNmSbuTo!Ar=@4-;` zYcBX`1d;52bcyh-6-5?)*Zup}%l&l;Bz&7m0-L%CXng*S`JJ7ir^@%Y7r@bjI~yc-OORc`crK-G2FcIf`*} zj`@{OMwXn@I-o;4<7o|?FCG4X0m*WW)VJ1A-3mqOikh*3WL5o!aqZOQMm%CA-@(QL za!XP3?(m`}pa`uNCJ}#l$ek;1OOb*F)=zCdeyhB*CCC^eCVXY+&5?b0GhdHQv7tmA zG1DX%%Snt5nzTRi%2daP>dLHr!PE6eFlqyuZHKvx`lp&hC zA?Jv-;MaPQw&mmS?{;vrO)QVs0+`LZDIzltZ{n5_vEE9ha1*gRDOBUxaQoHtjwToV zUceMzAhP~>Ki`WDaZQ3m?w9F?0Y%EsB3lEdNg=`UN;a8p8|8CHNo*-!PdT++InThM zpFocafMgy$LEhAre^QV&X(*Ek8rS-pNK%J0qUgGkU}u9$tEj^o;fKffLTC$xM#Pb@n%-bJJIpj$0ey)bxqox zlzAgN+|0(ZSrD^BP5W(n=OB1OrKwt;Z$P9HE<>1U@GkT@nMqMLN0L*VzfQIjBaj7jut zrb&8q>`5$a++Y_NNCD+>Jga3Z%hD~r>DPSuoQrN`XSaAE3zv3#da~iO3fXMfT z`9~Alv*$;M44KeJ$TkIl!vZNqUE;4;lE}hzol242I@p+!3+;29Hihv>0kD+4L*^{P z)K8V62x*98wl+>i@cS4k<|4!c^DhT582+SE2b67+VEzMeDC7<^)3&x-JI=3}d z_!9Xc^Rw6^qONjn%+k0O5!^oHa~kD>>p7+Sb&XD0q(uyCO<=aaG^7mECLo3XMww_8mZWMF!CV)4eH_jG7~s$2M)TR35;kG-<*<-4tZ&SIZ^g09 zmxB@=*9em|XgvPPNVit4E+;3rp)@B%Ps8p z{a`y9$Oxh+K~cmxki}|5YNmrZ85j&H{|M6lK>E?elWkhBl{-)82brby(l3#cB;WErTn>kgSwiD_OAvrIcTwQUW~IZL(c%7qn*6*`oOJb zQ`0vr%&nwD37{?r;Gcj8%mmZvd29?OlsE7VSpX*R%Fy^$Yy{rshPPV)czU5=&Eu57 zRP67%GjOsUct~3LlG0qXcuFPlopiJw#r(2oqs4`aT1%ftqQ)S5onusf6~$^*iH6S* zE9KG;FYD!0j;Zy*b<)Fep|snqSHX@U-H$cYrKuCY2^rU85Cw5^=kQCk07b z2F|1L{mF7^OK0Jc48;saL!(6GEDv7Zo-nmrF5Rs-H*%GMsE z)N|N@qRi_KzVNl=ND~(~o9o3z5rtO))iqjyP*urSo}x@bmYo8@!msk!t?f~g-w9}R zbt~a*U_Wre5@Ii}Q8OVem75r~ND2;wdK^x0817syc|Con)`xDhU=nQu^j={jx8L(soj$6BTaL!>ClaXgGX22X}{dlwT!x}*`*g#`J+{X zZYfA`m7qCj_Z?)=0x#RHy)FRpF%o1h=LOOGig^*O;#89`E%st6nN+-t*s&s690~3S z_n1oys?Q1Oq^P^G;Xw+rA1$q`^M6&5Ke<>+__K?V-1xOm9tMK7Qp+cbDwS_<0(vF% zj9WEZj^?vN?N4G#8Y-774YpKEJ>cwDIpV1=B2?`nC8y}GrO8%589Nq7Plbx6rTXUn z=rn4NE32%5y>LELt?dfN&=H9b*R}U`s9K%dF1OrMvne0y@li-JS_?XIWQjZza^K1@N5uwRG%P{_d;LUprY<3)C}*Rp#?q z=^p9xGEmGaU%w?Uv;{hg$Y`_FFszO*RuV{`bd|Hf#9|1^AljI}Id6WNiyT`;bHkCv z`0QHkqLAOIBsf$dY4|tFR@R^07635t%5OMbkaJr|+V2Fj&+KQINs$iWxvd7(knKDd z%qg8(mt?IsD=mB2gvu(}K8D#Zu^92!;u${BaQ*zpB+A=)hhH&O}s?;Xrd^0R75nK%j>a!u=d&=u=H z>lap8n*Ii#-;o19C@uH(9L)3B^pr_c8wS7R`}U+4xEqj~z68Ij;;S;E6?YO&X$^gP zK79_;7?9VDm3r%`ven4uKqQ#0e!*NoaS-4?(UAp~CU9@}2&T7I*jSOMIjBo7UJJPi zlaLM7iaO$D7Hgfh!*&bDm3D`eJRlp1o*=pd+Kj=P<19FQx=V34i#LUp@%HPZu0YC%GxGdU(XB|xe{x;wC$aPIZ=L_&eK&i2Sh93+EpAoP!LRLTlC;5 zmSa8oGLMMAl6ROXLnN0mI2*eoFFGXWzSnaJB?X<7JZh7ok>_Dag#sS9|Lza9%EZlI1tr5b)WB$i8@TYc6Km%`SXp;9_ zQ0TTo5>L0Lu%y2P{5QvS(~H-Y*Vf&1d;N5o=bw%*+z>)hepdaYp@-F0enbM@)6Kr^R6f{ba3PfYxDJhtnL--adopdXeQtxr!M6F3~XtBSMKbGwDl5r z?YT478_{cm_ilm{*E_v>W#ioE^!Kqc@RCg8@|f%$^V0n%L^gc4b3pkGVJpk22mCay z^7kp0Z}U+wP!u~;^wnhKDjwuVv;~e7eV45q%IXE*E$O_I^<6MDKHpcx>~7m5`J9WQ zmR*fxy}z7%l-|Nt4Fn0norwX!Vt`&egn-K|onjAUPLmhmU9U$VJLFj>u-E?vDLBk+ z2Nz1Yk|GKR*dzoaL|*Ldf@wIxmx2TR2}?zNu$$mJN?6C#$G1D3fNLJuozL(6ClJ}t zUCO_R-473&UN=~62;ZIZef;o@`0b%ZeOGMnf7hM-UI>2EJPkhdUQOk_UQOxr+^p+t zy#Aqlo#7*frtCc4?rcVcu!*h{pFR5i`;MtWF}qezm?I!_=dPy%vg{79^W8PW_)%G2 zZlsBIUT#iQUX#j_%KOZ*Lf&~A*9b_SzdJem4E*xW0SS-VO$Pn80a(ZEmTtw;^ecQY4SY#4ZiaL7JwZ*20L^r-BrOkfso-3XYs>T~>7wso_Rw;q~gEh6ME|LVOn=#DK+U=Gl!CI?nuU_(5&8Wt8lZ&f69 zQi>v}^jxZ3u6$-&hdmp^TG17z0jwtzjT|Q}{1BG~jC?LD13zqaFDxt@|9!kIyX1a> zg!h~u?mo7A{YAH#c|B&^f!+1O_ti#4BB@Fnx{1pj@T;^YhDt6%etDcd5_DhBIpuxu z$^Z%Bn%|{;fI!s*MSM>zuXbE7qZj@xgDxTGgE!=H?yDf8T<`5N($}NgG?*FxdTaYo zkRdDt1Iy)I`|7i(p#K9(0m_ViT~Vu04g88zG#~Tq#=4MG!?h`3xq#eYFFK^PmKf?T zrQKEJyU_A4S0Dy7O+Byfca(3NY~ZsuBZ_r)2vg$CM(?ijNnStjTXGUB9VK{Iffd}1 z$!`rv!|wr30CoRmSDWs^w*mBTm=FNsq$xS{boQN1kR^L(4El{@t( zeZsbY)d(adp^*hdexDqAa2f9ISk1uI)6K(Hd!By`78t!Z)VddlAAbHFW}%g{AJcFa z?P?x@dzr6)I10%WAvd+!UKWOW-Bm2hptVer-nhb1EfC&{fg)IxeW*FuGgPLW?@^;#zZ9jE$2%Q&|tP*j$oZ`vK91qOUSMe5} zM%4U|fF3_iCyhfI93a5&DI4ThEhHw{yfH-`$Pn>Mh1j4|8F&gEi#5J`;)$m?-<;;27 zRRv`#15>lZ79mNrkg=LY$P5wPZm`N@ojueLk{=OQO4XXf{M$2do1i0k3-0U?wVclx zz2ttK7f?=~*Lyj@HZA4O(cgtP*K*rS!u z15++Oo?&l56{xs6+*hw8>+`_9omhk0Kp~T}f|m~6ZUX$D`uW~Byz|XnHE`sU%^o{T z_d}SqFvRc1HSf<9^A6jMO}zKlNqhPYU!&re{Nos|kIa63|5chUKv>D%?zXw*Jw zv$;q2vY;-6R~rhBg{lEF{W@N4iJ@V<*=JozCm#F1fPd%#u7~ntKvu9y;;%nCU#ly9 zo(4yb`+F&a{h?Er;_swe`zQEd|M4F8c?V`7Wgn>=?6tk!V0*5{wmO@AXxfg*K14cVX#c3 zNc??YhbS%AD$R30W)~LJB~^j;(ECA!(uLMJh&t~_5;5OsH20UIFAjn^PW@_ojyWT{ zGF{}K?UF2VM@WRL%d`w=I2Y^P}rDkx_705?9@7kRNAje-X0a zd7j4zXhLI2?IN|&%SfMrC+2lL+aW&hE8ypsa2=58icEX)igyjIoS>S~Ehu zU?IQgARUyu0-c~_ixjx0Vq3hF`olrPF2yu2wAZG-gbgY{R;i8Xzu^Cj8(#a{1>jZN zgeAMqI=_q!g<*ygh^FsV8Rt@0gV(CanG`W+A-~QQ6Op;u&P~IZLyXy$7_wD;;Z86VLygEv&lovJ%};+TVq|n zduW=fBEr*Y-L+7sNR#{+(VfB^;OLAWi)xtvyuSi*?-tP%TqQoWNfqebn@7c{c+GFaOT(t1W2-SAF*}9qHWAPQw#pp-(C>2yBfQ68u(yc z_DayV9B6(Ym?yUuTJ&SF_9hYOeSY=oZzq&~s)u<9GMRP)KZ*qlmIW7I1Zb^0oaTs9 z_E{i71jheK5*z4x-Mq&|-Z{YS!!gWeKae%1+N#riuQsgLB+yskUxs9!#AM(GyjnwkVh|CF1><3>aiEzFw>a;)SL(H%#}0vyU2-@h zB!=PublwEEQn0~D; z?S8E~ve>e;eE*UINdJ)POvA|$1OkLhVm?|s2Lp@|R}vH(xn{{d)3n@QEt%nr;=Xx2 zT6SVB@ocTM;@t5Hg@8qZc+T2ZbZL(hTT9u_x#fY2U?uEdo`6Q{7LheDhGRNh zk`EQbPK4$_xcurii!(8&dm43BbhCNZx;JdVCwQYrKQzd%+)+mDU$z}RZQf+t?6jCa zAro!aXr}8#-RhDhm7`0 z+r(e;z&o6fK@fA;i)0&91^wn#|Mm$cUJi6Kt&+p!S~*_-S|;EBUzFB(?JvA$e{BaR-U$>CP$4tsaZ)hlT@|={oEC57j;8gIn)6DyI$O6{oM)Ld9{hHHUZ=A}* zg%B>JBfj?cfq0LAdCMmghq50oI7UyHh5_NP6@QrwJ%z*wcQoOleEqgw@pWo~nDU_b z9?5{Y1^&3JCC5+3tWDp!)|?*$q%#u4UCD}(PM`f)lI?n(;NvLSzBn#?zrI-C&O)% z^*w5evm_d#-+cl3Af!8y(D*B?#!rc zc8Ur5n3N?3W?1x?d(`@&YiDB|G0p$?Ls7i%A|@r=BK({2nV62Zeb=aV(tq<3KR~B^8{r&#)xJR8!ZKRTU|E79khSWdf z0^apW>#6fnc-(9=A=Imt4NVR4hkhA33h`Cfp!lF@a6eU}-NCS1AkCL~fJzk!^dS44 z$BH#RvDzYWl689SYvbEeEa^Ez-t@7N01x z?tenni zZ|;z%+F^2|wy5TuY>_y-WdD79?&9?=y~fwz0^lk>`ONu>C;U`-|CF!_PMD~^JECe- z&ogXwTf}rv8cVn(ANR`OoDc{GT^uC;;A>pnLE1n2O{>6!@lF1BTVAfDM{oA`6>vUON>@ zl)|7$<{`hW$0A<5t8WC`0!73=wUk9sy82usKv@2m^d5B)XZWwZxM}Bkd150#j~bzX z$Gru%yq*|}x8b}m-hYdbx`6hB8+%N$PQ=jMtQ|^U_hTwRYO52ttI6PGlyWXD`@CQ6 zGkksKTI_B*bAlx6q6iE`9sZpV%yvUSqwRQ}?tDBz&859&W;6oY2U;y3{*y-o90r@; z1vpR50LzZmRt9>L#L&AlJ>h1tw0-BZ|3*4E=xM*6Gvr+In%qhFDfv7Jd4O>C|-f1OeL1 z_6WwyhyJ4~;-wxXeo&~>^t8}rky!~(BoO)!qOeFV=Z$kw&ydd!3bCGy-ckLQB$*3M z@BrwTNC14PtMWEO{sjCq0zGf&yf-ebIVkuxNv^wtgSbsAgNRn#gzFdkQ4D7fYU)D1 z)*Od_!%~_-=$s|j*{F9av<)zwC+AWhMK|b*7L3VNTt&@qv+UVzddD>V{ZigZe77^4 z*M8JfXE+#_ta8=k8(X`*^b=Ww05Q2#)n;SIp7RArUjRic>Z^);q@C_in^%&RjgW-y zk`L{HH?#rW7Z^gq-L4NeA@D{@rQvPy6UjK^jJ6%#My&>*KtFOk71Bw5wIlJ{(CLb< z3oL(?KP7TWPPeEqB?XF(bFhpD0Uho$N&BXKrJ&2F`~reUU-m#sNTljlndA zrl20L*^~-#lW%8jTLwHTl%1YKoT`?-W-jI64ndm}w9x)ea(m;S4$y+0GTsyCmFSDp z%8oSIACiJrM5I+|+dAPaA8?@U0|~g8{B}XNWC`$IaSf8ry6lRH#P2*zz@Eh(^H$GK zR~F$#f21(yFpczzHQSsrc7J`fJwX)~ckM`f-UVL-?; zivK=O&3d1ceU6JX*{iDN;!Ex$Iq<;rXLA6SP7Af>ucaTj;fC(7_yN9?kXox1@zivD z%#z3cX6zW$Kb-_+9Q$A^Q<qwxhDvL?3K)D7r z8h0;%|7I;zGUhh?VT+@SV8``mxU3Bl?PjClQ|=P2y5GMc-Q)uJY_}Bz9JdAcJTeeN zIUaWTb*HhQIQKowYhM9tNMH}K>1~GxCCj}W39RSr01ch!yiAZ`!jBaXJoMCE%T`A4 z`m^)dSgWT_ZXOq;D&dCOWE0f)j&##syhWKB*!16#CwXaQsagrs;Q#+=C^VQPdoe8V z#J3Y(?DYpG1e1IlqDBY)0A6{uX8Mk{U$>=V(S^u135k)ag<|Rr3w0N&YzmOQ(YTY9 zNqp>$uiP(kou zRk$*?KOk4Hiz-O?Rf;T0yLatJl7aXqFpIbZtL8aYP^uD(t)8x;w7D+2v+Er!Yy1Cb z;@KCkEV2fRNYx&jyON--=H`z6aA6b%lZq|xOgAj=tZ4s! z07>zvt@>P`DXig&b+PKN4sBN+{EglbQQ_;r52ksChpo#-AvOZD111NRZc6pelO~jb zs;oa(rdFi8Ap0!eUkRIN5|QOyXEY=3$qS6^NL&NT~KK7HhUj-`3|fwL1@`!aPC&yHUL?zMF< z>7;6@-IP>oK`Z8%26Zc^j{mMf&x|)C-=%3;z<@Vt2fLy%_r0I8IjA&KoOWo0seZP3 z`hNL(f7ljEbx2(=U$G1UO%l7 z1i3Or+_-ID|01D{cL@#8r~|A9_fC#Tn`F6%nscdW+##rM0@6!GrWGQEwzvGf@ujx3!GYQIt=daGZxce7Xo5fmy*k`~V@`yN98 zB+A8F=X}NMjU|SOAK4(KiaK)6)-V9=P7{Bg#nOBbQIlY=g-}k9H3?}VWC@G#>%=UF zkTjvqHH=;!xn^ga3^&m=t4)u!;-f*&Fy6;j?KlSV4TDSOxU=fxW)T zy>9Dej3+S@bz_r1#LrJ(I)*n(J+y-~AO{T>x~XMfI#C0E+Xm+b#8PtA#!< z>#HT8I~^H{)>viFMPkYV*axj3R7P&!eg=+S^~~Kz{ZdFb@Eg24Xm%rZ0Tpw_LgSsY zrj8oqp7fy2Wz)#d7|4DJyyMl7NL)RE=u?*^rRPxkBw7#>)V&Vt3;?QrBfJtw$388Rx`%5t7 zFrS{Pj9Dd>J}>5eM|qEsK03XB56@b|IhIG1REx_+{<%YHn5gEdTj_?iEX zvEhB07$JK|Ciat8_H^?%-8kOKlwg^gsU7E{%Bvr9FCOoji!&^phfbAxY85$Z4a_W% zom)PR(?pl>f=8Mj`Smw4Sqrish*{=wj@!fHK5#ZQ+8X2|!V+Mj z$q3#0vz&t!i!YWgI&5{I!}v_ns8Z+R`GlRREK`7Av{Ed$^d+bi)-x4oTWtIoHd&+r zaag`Ws{~8=udg1sdO-L12+e9fxW7Kq)OY!GYZ@Xzo#g4{7L!+-0{}Qk;a%?~;z4^OV`?&&X133)33 delta 17455 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 diff --git a/scenario.nut b/scenario.nut index b5457a0..5b0afe1 100644 --- a/scenario.nut +++ b/scenario.nut @@ -1,10 +1,10 @@ -/* - * @brief scenario.nut - * Tutorial Scenario - * - * - * Can NOT be used in network game ! - */ +/** + * @file scenario.nut + * @brief Tutorial Scenario + * + * Can NOT be used in network game ! + * + */ const nut_path = "class/" // path to folder with *.nut files const version = 2006 scenario_name <- "Tutorial Scenario" From 90b7c47661bc056408bc38d3dda7cd7abaa955d7 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 27 Jan 2026 17:11:29 +0100 Subject: [PATCH 169/217] CHG Selected stop to be tested for acceptance before construction begins. --- class/class_basic_chapter.nut | 62 +++++++++++++++++++++++----------- class/class_chapter_02.nut | 26 ++++++++------ class/class_chapter_03.nut | 16 +++++++++ class/class_chapter_04.nut | 6 ++-- class/class_chapter_05.nut | 7 ++-- de.tab | 2 ++ de/chapter_02/goal_step_08.txt | 2 +- es.tab | 2 ++ 8 files changed, 86 insertions(+), 37 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index b0cda25..4c9d1f9 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2475,38 +2475,43 @@ class basic_chapter return format(translate("Select station No.%d"),nr+1)+" ("+c.tostring()+")." } - function is_stop_building (siz, c_list, lab_name, good, label_sw = false) + function is_stop_building (c_list, lab_name, good, label_sw = false) { local count = 0 - for( local j = 0; j < siz; j++ ) { + for( local j = 0; j < c_list.len(); j++ ) { local c = c_list[j] local t = my_tile(c) - local buil = t.find_object(mo_building) + //local buil = t.find_object(mo_building) local label = t.find_object(mo_label) local way = t.find_object(mo_way) local halt = t.get_halt() - if( buil && halt ) { - local desc = buil.get_desc() - local g_list = get_build_load_type(desc) - local is_good = station_compare_load(good, g_list) - if(is_good) { - if(way){ + + if( halt ) { + //local desc = buil.get_desc() + //local g_list = get_build_load_type(desc) + //local is_good = station_compare_load(good, g_list) + local is_good = halt.accepts_good(good_desc_x(good)) + + if ( is_good ) { + if ( way ) { way.unmark() } - glsw[j]=1 + glsw[j] = 1 count++ - if (count==siz) { + if (count == c_list.len() ) { return true } + } else { + } } - else{ - glsw[j]=0 - if (way && !way.is_marked()){ + else { + glsw[j] = 0 + if ( way && !way.is_marked() ) { way.mark() } - if (!label && !t.is_marked()) { + if ( !label && !t.is_marked() ) { label_x.create(c, pl_unown, lab_name) } } @@ -2593,13 +2598,13 @@ class basic_chapter else if (ribi==7 || ribi==11 || ribi==13 || ribi==14 || ribi==15) return translate("It is not possible to build stops at intersections")+" ("+pos.tostring()+")." - for( local j = 0 ; j < c_list.len(); j++ ) { + for( local j = 0; j < c_list.len(); j++ ) { local halt = tile_x(c_list[j].x, c_list[j].y, 0).get_halt() if (halt){ local name = halt.get_name() local is_good = halt.accepts_good(good_desc_x(good_alias.passa)) if (!is_good){ - return format(translate("The %s stop must be for %s"),name, translate("Passagiere"))+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." + return format(translate("The %s stop must be for %s"), name, translate("Passagiere"))+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." } } } @@ -3222,12 +3227,12 @@ class basic_chapter function create_halt_list(cord_list) { local list_tx = "" local c_list = cord_list - for (local j=0;j%s %d: %s
", translate("Stop"), j+1, link) } @@ -3700,6 +3705,23 @@ function find_object(obj, wt, speed, good = null) { return obj_desc } - +/** + * + * @param wt - waytype + * @param good - + * + * @return error message or null + */ +function check_select_station(name, wt, good) { + local list = building_desc_x.get_available_stations(building_desc_x.station, wt, good_desc_x(good)) + local list_name = [] + for (local i = 0; i < list.len(); i++ ) { + list_name.append(list[i].get_name()) + } + if ( list_name.find(name) == null ) { + return format(translate("Selected halt accept not %s"), translate(good))+"." + } + return null +} // END OF FILE diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index a232491..eb8fbf4 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -380,11 +380,10 @@ class tutorial.chapter_02 extends basic_chapter local text = "X" pot0=1 } - local siz = city1_halt_1.len() local c_list = city1_halt_1 local name = translate("Place Stop here!.") local load = good_alias.passa - local all_stop = is_stop_building(siz, c_list, name, load) + local all_stop = is_stop_building(c_list, name, load) if (all_stop && pot0==1){ this.next_step() @@ -549,11 +548,10 @@ class tutorial.chapter_02 extends basic_chapter if (pot0==0){ - local siz = city2_halt_1.len() local c_list = city2_halt_1 local name = get_label_text(1) local load = good_alias.passa - local all_stop = is_stop_building(siz, c_list, name, load) + local all_stop = is_stop_building(c_list, name, load) if (all_stop) { pot0=1 @@ -753,10 +751,15 @@ class tutorial.chapter_02 extends basic_chapter case 3: if (pos.x == city1_road_depot.x && pos.y == city1_road_depot.y ) - return format(translate("You must build the %d stops first."),city1_halt_1.len()) - if (pos.x>city1_limit1.a.x && pos.y>city1_limit1.a.y && pos.x city1_limit1.a.x && pos.y > city1_limit1.a.y && pos.x < city1_limit1.b.x && pos.y < city1_limit1.b.y ) { //Permite construir paradas - if (tool_id==tool_build_station){ + if ( tool_id == tool_build_station ) { + // check selected halt accept passenger + local s = check_select_station(name, wt_road, good_alias.passa) + if ( s != null ) return s + local c_st = city1_halt_1 return build_stop(c_st, t, way, slope, ribi, label, pos) } @@ -775,7 +778,7 @@ class tutorial.chapter_02 extends basic_chapter return translate("You can only delete the stops.") } } - else if (tool_id==tool_build_station) + else if ( tool_id == tool_build_station ) return result = format(translate("Stops should be built in [%s]"), cty1.name)+" ("+city1_tow.tostring()+")." break; @@ -832,9 +835,12 @@ class tutorial.chapter_02 extends basic_chapter if ((tool_id==tool_build_station)){ if (pos.x>city2_limit1.a.x && pos.y>city2_limit1.a.y && pos.x Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.


{public_stop}

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug zum öffentliche machen von Halten und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file +

Die Stadt {name} benötigt Sie, um die Buslinie mit der im Bau befindlichen Bahnlinie zu verbinden.


{public_stop}

Durch die Einrichtung einer öffentlichen Haltestelle wird ermöglicht, das mehrere Spieler diesen Halt nutzen können. Dies ermöglicht das Verknüpfen von Teilnetzen für den gemeinsamen Passagier-, Post- und Warentransport. Aber Sie müssen vorsichtig sein, da diese Aktion nicht rückgängig gemacht werden kann, es sei denn, Sie wechseln zum Spieler für den öffentlichen Dienst.

Hinweis: Öffentliche Halte sind für das Alleinspiel nicht zwingend notwendig.

Wählen Sie das Werkzeug zum öffentlich machen von Halten und klicken Sie auf die Haltestelle {st1}. Sie werden feststellen, dass sich die Farbe des Stopps ändert.

Sie gelangen zum nächsten Kapitel, wenn der Halt {st1} öffentlich ist.

\ No newline at end of file diff --git a/es.tab b/es.tab index 9464244..f5bec26 100644 --- a/es.tab +++ b/es.tab @@ -382,5 +382,7 @@ Debes usar la herramienta para elevar el terreno aquí. #_________________________________error message_________________________________ Place the extension building at the marked point Coloque el edificio de ampliación en el punto marcado +Selected halt accept not %s +La parada seleccionada no acepta %s. This stop already accepts mail. Esta parada ya acepta correo. From 25e4601010272db3272de61109c5e0dd24ec5f43 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 16:51:43 +0100 Subject: [PATCH 170/217] CHG code style --- scenario.nut | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/scenario.nut b/scenario.nut index 5b0afe1..bc0ed33 100644 --- a/scenario.nut +++ b/scenario.nut @@ -41,11 +41,11 @@ persistent.ch_max_steps <- 1 // stores chapter max steps persistent.ch_max_sub_steps <- 0 // stores chapter max sub steps persistent.ch_sub_step <- 0 // stores actual chapter sub steps -include(nut_path+"class_basic_gui") // include class for tools disabled/enabled -include(nut_path+"class_basic_data") // include class for object data -include(nut_path+"class_basic_chapter") // include class for basic chapter structure -translate_objects_list <- {} // translate list -translate_objects() // add objects to translate list +include(nut_path+"class_basic_gui") // include class for tools disabled/enabled +include(nut_path+"class_basic_data") // include class for object data +include(nut_path+"class_basic_chapter") // include class for basic chapter structure +translate_objects_list <- {} // translate list +translate_objects() // add objects to translate list resul_version <- {pak= false , st = false} @@ -119,7 +119,6 @@ all_systemtypes <- [st_flat, st_elevated, st_runway, st_tram] tick_wait <- 16 /** - * @fn get_set_name(name) * returns pakset name (lower case) * * @param name mixed case @@ -313,7 +312,6 @@ chapter <- tutorial.chapter_02 // must be placed here !!! /** - * @fn script_text() * This function will be called, whenever a user clicks to jump to the next step * It must not alter the map or call a tool! * Hence we just set a flag and handle all map changes in is_scenario_completed() @@ -413,7 +411,6 @@ function set_city_names() /** - * @fn get_info_text(pl) * test functions generating the GUI strings * These must return fast and must not alter the map! * @@ -550,7 +547,6 @@ function labels_text_debug() /** - * @fn chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) * calculate percentage chapter complete * * @param ch_steps = count chapter steps @@ -591,7 +587,6 @@ function chapter_percentage(ch_steps, ch_step, sub_steps, sub_step) } /** - * @fn is_scenario_completed(pl) * This function check whether finished or not * Is runs in a step, so it can alter the map * @@ -843,6 +838,7 @@ function jump_to_link_executed(pos) //-------------------------------------------------------- datasave <- {cov = cov_save} + class data_save { // Convoys function convoys_save() {return datasave.cov;} From 80ef2033f0002c0f48195d61967f3b8e17778da9 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 16:52:07 +0100 Subject: [PATCH 171/217] ADD comments --- class/class_basic_convoys.nut | 12 ++++++------ set_data.nut | 8 +++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/class/class_basic_convoys.nut b/class/class_basic_convoys.nut index c3ea7dc..e4a9e51 100644 --- a/class/class_basic_convoys.nut +++ b/class/class_basic_convoys.nut @@ -1,9 +1,9 @@ -/* - * class basic_convoys - * - * - * Can NOT be used in network game ! - */ +/** + * @file class_basic_convoys.nut + * @brief convoys + * + * Can NOT be used in network game ! + */ //Number of convoys in each chapter are listed cv_list <- [ diff --git a/set_data.nut b/set_data.nut index 8dd0137..7bca9fc 100644 --- a/set_data.nut +++ b/set_data.nut @@ -1,6 +1,8 @@ -/* - * define set data - */ +/** + * @file set_data.nut + * @brief define set data + * + */ // pak64 pak_name <- "pak64" // pak name From bdd839821d8516c1819d1f44b2156846cdc84502 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 16:55:21 +0100 Subject: [PATCH 172/217] CHG add check selected halt --- class/class_chapter_04.nut | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index d76f2b9..903a8f3 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -483,6 +483,10 @@ class tutorial.chapter_04 extends basic_chapter local c_list = ch4_ship1_halts local good = good_alias.goods if((tool_id != 4096)) + // check selected halt accept goods + local s = check_select_station(name, wt_water, good_alias.goods) + if ( s != null ) return s + return is_dock_build(pos, tool_id, c_list, good) break case 3: @@ -557,6 +561,10 @@ class tutorial.chapter_04 extends basic_chapter local c_list = ch4_ship3_halts local good = good_alias.passa if((tool_id != 4096)) + // check selected halt accept passenger + local s = check_select_station(name, wt_water, good_alias.passa) + if ( s != null ) return s + return is_dock_build(pos, tool_id, c_list, good) break From 3f45be89fb82b73d08695d67a90d5408afb98148 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 16:56:03 +0100 Subject: [PATCH 173/217] FIX good check halt selected halt --- class/class_chapter_03.nut | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 15191b5..b2f49ec 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1444,7 +1444,7 @@ class tutorial.chapter_03 extends basic_chapter case 3: if (pot0==0){ //Estaciones de la Fabrica - // check selected halt accept passenger + // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1456,7 +1456,7 @@ class tutorial.chapter_03 extends basic_chapter else if (pot0==1 && pot1==0){ //Estaciones del Productor - // check selected halt accept passenger + // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1593,7 +1593,7 @@ class tutorial.chapter_03 extends basic_chapter } //Estaciones de la Fabrica else if (pot2==1 && pot3==0){ - // check selected halt accept passenger + // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1604,7 +1604,7 @@ class tutorial.chapter_03 extends basic_chapter } //Estaciones del Productor else if (pot3==1 && pot4==0){ - // check selected halt accept passenger + // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1959,7 +1959,7 @@ class tutorial.chapter_03 extends basic_chapter if (tool_id==4108){ //gui.add_message(""+st_lim_a.len()+"") - for(local j=0;j Date: Wed, 28 Jan 2026 16:56:58 +0100 Subject: [PATCH 174/217] CHG comments --- class/class_basic_chapter.nut | 225 ++++++++++++++++++---------------- 1 file changed, 118 insertions(+), 107 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 4c9d1f9..9bba1d0 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -7,6 +7,11 @@ * */ +/** + * @brief class_basic_chapter.nut + * @brief global parameters and functions + */ + //Global coordinate for mark build tile currt_pos <- null @@ -202,10 +207,6 @@ class basic_chapter return c_line } - //---------------------------------------------------------------------------------------------------------------- - - //------------------------- - function checks_convoy_nr(nr, max) { for(local j=0;j pass/post halt (not tested) - * - * @param halt_list = array[tiles_x, tile_x, .... ] - * - * @return array[ {a = build_tile, b = code}, .... ] - * code = 0 - build mail extension - * code = 1 - build mail halt - * code = 2 - replace pass halt to pass/mail halt (not tested) - * code = 3 - remove city building (not implemented) - * - */ + * check stations enables post / enables pax and post + * search free tile for post extension + * search road tile for post halt + * replace pass halt -> pass/post halt (not tested) + * + * @param halt_list = array[tiles_x, tile_x, .... ] + * + * @return array[ {a = build_tile, b = code}, .... ] + * code = 0 - build mail extension + * code = 1 - build mail halt + * code = 2 - replace pass halt to pass/mail halt (not tested) + * code = 3 - remove city building (not implemented) + * + */ function check_post_extension(halt_list) { local stations_list_mail = building_desc_x.get_available_stations(building_desc_x.station, wt_road, good_desc_x("Post")) @@ -3713,10 +3707,27 @@ function find_object(obj, wt, speed, good = null) { * @return error message or null */ function check_select_station(name, wt, good) { - local list = building_desc_x.get_available_stations(building_desc_x.station, wt, good_desc_x(good)) + + local sel_obj = null + switch (wt) { + case wt_water: + sel_obj = building_desc_x.harbour + break + case 0: + sel_obj = building_desc_x.station_extension + break + default: + sel_obj = building_desc_x.station + break + } + + local list = building_desc_x.get_available_stations(sel_obj, wt, good_desc_x(good)) local list_name = [] for (local i = 0; i < list.len(); i++ ) { - list_name.append(list[i].get_name()) + if ( list[i].get_waytype() == wt ) { + list_name.append(list[i].get_name()) + gui.add_message(" name " + list_name[i]) + } } if ( list_name.find(name) == null ) { return format(translate("Selected halt accept not %s"), translate(good))+"." From d5491df7e738cd916710e36ce1afbd0d06f50f8f Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 18:05:37 +0100 Subject: [PATCH 175/217] CHG add check selected halt chapter 5 --- class/class_basic_chapter.nut | 19 ++++++++++++++++--- class/class_chapter_05.nut | 26 ++++++++++++++++++++++---- de.tab | 10 ++++++++-- en.tab | 4 ++++ es.tab | 8 +++++++- 5 files changed, 57 insertions(+), 10 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 9bba1d0..e5beb14 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2711,7 +2711,7 @@ class basic_chapter } - for(local j=0; j Date: Wed, 28 Jan 2026 20:19:22 +0100 Subject: [PATCH 176/217] CHG comments --- class/class_basic_coords_p128.nut | 4 ++-- class/class_basic_coords_p64.nut | 2 +- class/class_basic_coords_p64g.nut | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/class/class_basic_coords_p128.nut b/class/class_basic_coords_p128.nut index 0b9f78b..cd710a1 100644 --- a/class/class_basic_coords_p128.nut +++ b/class/class_basic_coords_p128.nut @@ -1,6 +1,6 @@ /** - * @brief class_basic_coords_p128.nut sets the pakset specific map coords for pak128 - * + * @file class_basic_coords_p128.nut + * @brief sets the pakset specific map coords for pak128 */ /** diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 0491941..6e4bcba 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -1,6 +1,6 @@ /** + * @file class_basic_coords_p64.nut * @brief class_basic_coords_p64.nut sets the pakset specific map coords for pak64 - * */ /** diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 98fb2fd..7c361d4 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -1,6 +1,6 @@ /** - * @brief class_basic_coords_p64g.nut sets the pakset specific map coords for pak64.german - * + * @file class_basic_coords_p64g.nut + * @brief sets the pakset specific map coords for pak64.german */ /** From 9065d1f7b4e0c75a385435a69a0012570bbebf5a Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 20:20:11 +0100 Subject: [PATCH 177/217] CHG code style --- class/class_basic_chapter.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index e5beb14..ecd8f2f 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2569,14 +2569,14 @@ class basic_chapter local mail = good_alias.mail local goods = good_alias.goods if ((pos.x == st_c.x) && (pos.y == st_c.y)){ - if (glsw[j]==0){ + if ( glsw[j] == 0 ) { way.unmark() return null } else return translate("There is already a stop here")+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." } - else if (glsw[j]==0) + else if ( glsw[j] == 0 ) result = translate("Place the stops at the marked points")+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." } return result @@ -2715,13 +2715,13 @@ class basic_chapter local c = list[j].a //gui.add_message("a "+glsw[j]) if ((tile.x == c.x) && (tile.y == c.y)){ - if (glsw[j]==0){ + if ( glsw[j] == 0 ) { return null } else return translate("This stop already accepts mail.")+" ("+c.tostring()+")" } - else if (glsw[j]==0) + else if ( glsw[j] == 0 ) result = translate("Place the extension building at the marked point")+" ("+c.tostring()+")." } return result From d2396569786d917377ab2be08aa870467c790f40 Mon Sep 17 00:00:00 2001 From: Andarix Date: Wed, 28 Jan 2026 20:20:38 +0100 Subject: [PATCH 178/217] CHG code style and remove obsolete code --- class/class_chapter_05.nut | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index bd3fe35..f0b312b 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -107,21 +107,6 @@ class tutorial.chapter_05 extends basic_chapter d3_cnr = get_dep_cov_nr(ch5_cov_lim3.a,ch5_cov_lim3.b) local pl = 0 - /*if(this.step == 4){ - //Camion de correo - local c_dep = this.my_tile(city1_road_depot) - local c_list = city1_post_halts - start_sch_tmpsw(pl, c_dep, c_list) - - //Barco de Correo/Pasajeros - c_dep = this.my_tile(c_dep3) - c_list = sch_list3 - start_sch_tmpsw(pl, c_dep, c_list) - }*/ - - if ( this.step == 4 && extensions_tiles.len() == 0 ) { - check_post_extension(city1_post_halts) - } return 0 } @@ -169,7 +154,7 @@ class tutorial.chapter_05 extends basic_chapter local tran_tx = "" for(local j=0;j%s %d ", trf_name, j+1) + way5_power[j].href("("+coord3d_to_string(way5_power[j])+")") + "
" } else { @@ -188,7 +173,7 @@ class tutorial.chapter_05 extends basic_chapter local tran_tx = "" local f_list = fab_list for(local j=0;j%s ",translate(f_list[j].name)) + f_list[j].c.href("("+f_list[j].c.tostring()+")") + "
" } else { @@ -215,14 +200,13 @@ class tutorial.chapter_05 extends basic_chapter local st_tx = "" local list = city1_post_halts //extensions_tiles //Lista de build - local siz = list.len() - for ( local j = 0; j < siz; j++ ) { + for ( local j = 0; j < list.len(); j++ ) { //local c = coord(c_list[j].x, c_list[j].y) local tile = my_tile(list[j]) local st_halt = tile.get_halt() //local name = list[j].name == ""? get_good_text(list[j].good) : translate(list[j].name) local name = st_halt.get_name() //translate(get_obj_ch5(6)) - if (glsw[j]==0){ + if ( glsw[j] == 0 ) { st_tx +=format("%s: %s ", translate("Stop"), name) + list[j].href("("+list[j].tostring()+")")+"
" } else { @@ -236,9 +220,8 @@ class tutorial.chapter_05 extends basic_chapter text.tx = "[2/3]" local list_tx = "" local c_list = city1_post_halts - local siz = c_list.len() - for ( local j = 0; j < siz; j++ ) { + for ( local j = 0; j < list.len(); j++ ) { local c = coord(c_list[j].x, c_list[j].y) local tile = my_tile(c) local st_halt = tile.get_halt() @@ -685,13 +668,13 @@ class tutorial.chapter_05 extends basic_chapter if (tool_id == tool_build_transformer){ local f_transf = t.find_object(mo_transformer_c) if (pos.x==way5_power[j].x && pos.y==way5_power[j].y){ - if (glsw[j]==0){ + if ( glsw[j] == 0 ) { return null } else return translate("There is already a transformer here!")+" ("+pos.tostring()+")." } - else if (glsw[j]==0) + else if ( glsw[j] == 0 ) result = translate("Build the transformer here!")+" ("+coord3d_to_string(way5_power[j])+")." } } @@ -1067,7 +1050,7 @@ class tutorial.chapter_05 extends basic_chapter local list = extensions_tiles for(local j=0;j Date: Wed, 28 Jan 2026 23:27:40 +0100 Subject: [PATCH 179/217] CHG def to auto select from depots, extension mail, powerline and canal --- class/class_basic_chapter.nut | 10 ++++- class/class_basic_data.nut | 84 +++++------------------------------ class/class_chapter_02.nut | 5 ++- class/class_chapter_03.nut | 5 ++- class/class_chapter_04.nut | 7 ++- class/class_chapter_05.nut | 21 ++++++--- class/class_chapter_06.nut | 9 +++- 7 files changed, 56 insertions(+), 85 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index ecd8f2f..bee7ca8 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3566,7 +3566,7 @@ function find_tiles_after_tile(tile) { * @param speed = speed - null by station, extension * @param good = good */ -function find_object(obj, wt, speed, good = null) { +function find_object(obj, wt, speed = null, good = null) { local list = [] switch ( obj ) { @@ -3608,6 +3608,14 @@ function find_object(obj, wt, speed, good = null) { //gui.add_message(" list extension wt=0 " + list.len()) } break + case "depot": + list = building_desc_x.get_building_list(building_desc_x.depot) + for ( local i = 0; i < list.len(); i++ ) { + if ( list[i].get_waytype() == wt ) { + return list[i] + } + } + break } diff --git a/class/class_basic_data.nut b/class/class_basic_data.nut index e38822c..7bd1b9d 100644 --- a/class/class_basic_data.nut +++ b/class/class_basic_data.nut @@ -215,7 +215,6 @@ function get_veh_ch2_st4() { * @li id 1 = way name * @li id 2 = bridge name * @li id 3 = stations name - * @li id 4 = depot name * * @return object raw name */ @@ -232,9 +231,6 @@ function get_obj_ch2(id) { case 3: return "BusStop" break - case 4: - return "CarDepot" - break } break case "pak64.german": @@ -248,9 +244,6 @@ function get_obj_ch2(id) { case 3: return "BusHalt_1" break - case 4: - return "CarDepot" - break } break case "pak128": @@ -264,9 +257,6 @@ function get_obj_ch2(id) { case 3: return "medium_classic_bus_stop" break - case 4: - return "CarDepot" - break } break } @@ -364,7 +354,7 @@ function get_veh_ch3(id) { * @li id 1 = way name * @li id 2 = bridge name * @li id 3 = stations name - * @li id 4 = depot name + * @li id 4 = - * @li id 5 = tunnel name * @li id 6 = signal name * @li id 7 = overheadpower name @@ -385,7 +375,7 @@ function get_obj_ch3(id) { return "FreightTrainStop" break case 4: - return "TrainDepot" + return "" break case 5: return "RailTunnel" @@ -410,7 +400,7 @@ function get_obj_ch3(id) { return "MHzPS2FreightTrainStop" break case 4: - return "TrainDepot" + return "" break case 5: return "RailTunnel_2" @@ -435,7 +425,7 @@ function get_obj_ch3(id) { return "Container1TrainStop" break case 4: - return "TrainDepot" + return "" break case 5: return "Rail_140_Tunnel" @@ -500,11 +490,10 @@ function get_veh_ch4(id) { * objects for chapter 4 * * @param integer id - * @li id 1 = way name + * @li id 1 = - * @li id 2 = harbour 1 name (good) * @li id 3 = cannel stop name * @li id 4 = harbour 2 name (passenger) - * @li id 5 = depot name * * @return string object name */ @@ -513,7 +502,7 @@ function get_obj_ch4(id) { case "pak64": switch (id) { case 1: - return "Kanal" + return "" break case 2: return "LargeShipStop" @@ -524,15 +513,12 @@ function get_obj_ch4(id) { case 4: return "ShipStop" break - case 5: - return "ShipDepot" - break } break case "pak64.german": switch (id) { case 1: - return "Kanal" + return "" break case 2: return "LargeShipStop" @@ -543,15 +529,12 @@ function get_obj_ch4(id) { case 4: return "ShipStop" break - case 5: - return "ShipDepot" - break } break case "pak128": switch (id) { case 1: - return "canal_020" + return "" break case 2: return "Long_Goods_Dock" @@ -562,9 +545,6 @@ function get_obj_ch4(id) { case 4: return "ShipStop" break - case 5: - return "ShipDepot" - break } break } @@ -641,10 +621,8 @@ function get_veh_ch5(id) { * @param integer id * @li id 1 = road way name * @li id 2 = truck stop name (good) - * @li id 3 = powerline way name + * @li id 3 = - * @li id 4 = powerline transformer - * @li id 5 = depot name - * @li id 6 = post extension name * * @return string object name */ @@ -659,17 +637,11 @@ function get_obj_ch5(id) { return "CarStop" break case 3: - return "Powerline" + return "" break case 4: return "Aufspanntransformator" break - case 5: - return "CarDepot" - break - case 6: - return "PostOffice" - break } break case "pak64.german": @@ -681,17 +653,11 @@ function get_obj_ch5(id) { return "LKW_Station_1" break case 3: - return "Powerline" + return "" break case 4: return "Aufspanntransformator" //PowerSource break - case 5: - return "CarDepot" - break - case 6: - return "SmallPostOffice" - break } break case "pak128": @@ -703,17 +669,11 @@ function get_obj_ch5(id) { return "CarStop" break case 3: - return "Powerline" + return "" break case 4: return "Aufspanntransformator" break - case 5: - return "CarDepot" - break - case 6: - return "PostOffice" - break } break } @@ -782,8 +742,6 @@ function get_veh_ch6(id) { * @li id 2 = taxiway name * @li id 3 = air stop name * @li id 4 = air extension name - * @li id 5 = air depot name - * @li id 6 = road depot name * * @return string object name */ @@ -803,12 +761,6 @@ function get_obj_ch6(id) { case 4: return "Terminal1930" break - case 5: - return "1930AirDepot" - break - case 6: - return "CarDepot" - break } break case "pak64.german": @@ -825,12 +777,6 @@ function get_obj_ch6(id) { case 4: return "Terminal1930" break - case 5: - return "1930AirDepot" - break - case 6: - return "CarDepot" - break } break case "pak128": @@ -847,12 +793,6 @@ function get_obj_ch6(id) { case 4: return "Terminal1950_AirportBlg_S" break - case 5: - return "1940AirDepot" - break - case 6: - return "CarDepot" - break } break } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index eb8fbf4..35372fc 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -77,7 +77,7 @@ class tutorial.chapter_02 extends basic_chapter sc_way_name = get_obj_ch2(1) sc_bridge_name = get_obj_ch2(2) sc_station_name = get_obj_ch2(3) - sc_dep_name = get_obj_ch2(4) + sc_dep_name = null // depot name function start_chapter() //Inicia solo una vez por capitulo { @@ -86,6 +86,9 @@ class tutorial.chapter_02 extends basic_chapter ch2_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} ch2_cov_lim3 = {a = cv_lim[lim_idx+2].a, b = cv_lim[lim_idx+2].b} + /// set depot name + sc_dep_name = find_object("depot", wt_road).get_name() + dep_cnr1 = get_dep_cov_nr(ch2_cov_lim1.a,ch2_cov_lim1.b) dep_cnr2 = get_dep_cov_nr(ch2_cov_lim2.a,ch2_cov_lim2.b) dep_cnr3 = get_dep_cov_nr(ch2_cov_lim3.a,ch2_cov_lim3.b) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index b2f49ec..15eb50d 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -68,7 +68,7 @@ class tutorial.chapter_03 extends basic_chapter sc_tunn_name = get_obj_ch3(5) sc_bridge_name = get_obj_ch3(2) sc_station_name = get_obj_ch3(3) - sc_dep_name = get_obj_ch3(4) + sc_dep_name = null sc_veh1_name = get_veh_ch3(4) sc_veh2_name = get_veh_ch3(5) sc_wag3_name = get_veh_ch3(6) @@ -99,6 +99,9 @@ class tutorial.chapter_03 extends basic_chapter dep_cnr3 = get_dep_cov_nr(ch3_cov_lim3.a,ch3_cov_lim3.b) + /// set depot name + sc_dep_name = find_object("depot", wt_rail).get_name() + cy1.name = get_city_name(city1_tow) cy2.name = get_city_name(city3_tow) cy3.name = get_city_name(city4_tow) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 903a8f3..5d7eadf 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -58,7 +58,7 @@ class tutorial.chapter_04 extends basic_chapter sc_dock_name1 = get_obj_ch4(2) sc_dock_name2 = get_obj_ch4(3) sc_dock_name3 = get_obj_ch4(4) - sc_dep_name = get_obj_ch4(5) + sc_dep_name = null function start_chapter() //Inicia solo una vez por capitulo { @@ -76,6 +76,11 @@ class tutorial.chapter_04 extends basic_chapter ch4_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} ch4_cov_lim3 = {a = cv_lim[lim_idx+2].a, b = cv_lim[lim_idx+2].b} + /// set depot name + sc_dep_name = find_object("depot", wt_water).get_name() + /// set way canal + sc_way_name = find_object("way", wt_water, 10) //get_obj_ch4(1) + d1_cnr = get_dep_cov_nr(ch4_cov_lim1.a,ch4_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch4_cov_lim2.a,ch4_cov_lim2.b) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index f0b312b..2e6313d 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -38,7 +38,7 @@ class tutorial.chapter_05 extends basic_chapter way5_power = [] // coords transformer //Step 4 ===================================================================================== - st_name = get_obj_ch5(6) + st_name = null // mail extension //Para el Camion veh2_obj = get_veh_ch5(3) @@ -65,10 +65,10 @@ class tutorial.chapter_05 extends basic_chapter //---------------------------------------------------------------------------------- sc_way_name = get_obj_ch5(1) sc_station_name = get_obj_ch5(2) - sc_dep_name = get_obj_ch5(5) + sc_dep_name = null sc_trail_name = get_veh_ch5(2) sc_trail_nr = 1 - sc_power_name = get_obj_ch5(3) + sc_power_name = null sc_transf_name = get_obj_ch5(4) function start_chapter() //Inicia solo una vez por capitulo @@ -102,6 +102,13 @@ class tutorial.chapter_05 extends basic_chapter ch5_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} ch5_cov_lim3 = {a = cv_lim[lim_idx+2].a, b = cv_lim[lim_idx+2].b} + /// set depot name + sc_dep_name = find_object("depot", wt_road).get_name() + /// set mail extension name + st_name = find_object("extension", wt_road, null, good_alias.mail).get_name() + /// set powerline name + sc_power_name = find_object("way", wt_power, 0).get_name() + d1_cnr = get_dep_cov_nr(ch5_cov_lim1.a,ch5_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch5_cov_lim2.a,ch5_cov_lim2.b) d3_cnr = get_dep_cov_nr(ch5_cov_lim3.a,ch5_cov_lim3.b) @@ -167,7 +174,7 @@ class tutorial.chapter_05 extends basic_chapter else if (pot0==1 && pot1==0){ text = ttextfile("chapter_05/03_2-2.txt") text.tx="[2/2]" - text.powerline_tool = translate(get_obj_ch5(3)) // tool powerline + text.powerline_tool = translate(sc_power_name) // tool powerline text.toolbar = toolbar local tran_tx = "" @@ -487,7 +494,7 @@ class tutorial.chapter_05 extends basic_chapter local player = player_x(1) local list = [] //extensions_tiles - local good = get_good_data(6, 2) + local good = good_alias.mail local accept_post = false for ( local i = 0; i < city1_post_halts.len(); i++ ) { @@ -1057,14 +1064,14 @@ class tutorial.chapter_05 extends basic_chapter local o = null if (label) { tile.remove_object(player_x(1), mo_label) - o = find_object("extension", wt_road, null, get_good_data(6, 2)) + o = find_object("extension", wt_road, null, good_alias.mail) name = o.get_name() } local way = tile.find_object(mo_way) if(way) { way.unmark() - o = find_object("station", wt_road, null, get_good_data(6, 2)) + o = find_object("station", wt_road, null, good_alias.mail) name = o.get_name() city1_post_halts[j] = coord(tile.x, tile.y) } diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 08e4915..61bebe1 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -70,8 +70,8 @@ class tutorial.chapter_06 extends basic_chapter sc_sta1 = get_obj_ch6(3) sc_sta2 = get_obj_ch6(4) - sc_dep1 = get_obj_ch6(5) - sc_dep2 = get_obj_ch6(6) + sc_dep1 = null + sc_dep2 = null function start_chapter() //Inicia solo una vez por capitulo @@ -82,6 +82,11 @@ class tutorial.chapter_06 extends basic_chapter ch6_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} ch6_cov_lim3 = {a = cv_lim[lim_idx+2].a, b = cv_lim[lim_idx+2].b} + /// set road depot name + sc_dep1 = find_object("depot", wt_road).get_name() + /// set air depot name + sc_dep1 = find_object("depot", wt_air).get_name() + d1_cnr = get_dep_cov_nr(ch6_cov_lim1.a,ch6_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch6_cov_lim2.a,ch6_cov_lim2.b) d3_cnr = get_dep_cov_nr(ch6_cov_lim3.a,ch6_cov_lim3.b) From dcea073c4d4aad2b186187fb0a0907f267e99807 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 Jan 2026 00:21:42 +0100 Subject: [PATCH 180/217] CHG check selected tool runway and taxiway befor build --- class/class_basic_chapter.nut | 30 ++++++++++++++++++++++++++++-- class/class_chapter_06.nut | 10 ++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index bee7ca8..b31293a 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3708,8 +3708,8 @@ function find_object(obj, wt, speed = null, good = null) { } /** - * - * @param wt - waytype + * @param name - tool name + * @param wt - waytype * @param good - * * @return error message or null @@ -3756,4 +3756,30 @@ function check_select_station(name, wt, good) { return null } +/** + * @param name - tool name ( by key select = waytype : not implemented) + * @param wt - waytype + * @param st - systemtype + * + * @return error message or null + */ +function check_select_way(name, wt, st = st_flat) { + + local list = way_desc_x.get_available_ways (wt, st) + + local list_name = [] + for (local i = 0; i < list.len(); i++ ) { + if ( list[i].get_system_type() == st ) { + list_name.append(list[i].get_name()) + //gui.add_message(" list_name " + list_name[i]) + } + } + + if ( list_name.find(name) == null ) { + return translate("Selected way is not correct") + } + + return null + +} // END OF FILE diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 61bebe1..5ee5016 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -471,6 +471,11 @@ class tutorial.chapter_06 extends basic_chapter //return climate if (pot0==0){ if ((pos.x>=c1_track.a.x)&&(pos.y>=c1_track.a.y)&&(pos.x<=c1_track.b.x)&&(pos.y<=c1_track.b.y)){ + + // check selected way + local s = check_select_way(name, wt_air, st_runway) + if ( s != null ) return s + if (way && way.get_name() != obj1_way_name){ if(tool_id == tool_remover || tool_id == tool_remove_way) return null @@ -491,6 +496,11 @@ class tutorial.chapter_06 extends basic_chapter } if ((pos.x>=c2_track.a.x)&&(pos.y>=c2_track.a.y)&&(pos.x<=c2_track.b.x)&&(pos.y<=c2_track.b.y)){ + + // check selected way + local s = check_select_way(name, wt_air) + if ( s != null ) return s + if (way && way.get_name() != obj2_way_name){ if(tool_id == tool_remover || tool_id == tool_remove_way) return null From 6043a1e1047412993ba74eba3a67e2df5589e9f2 Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 Jan 2026 00:22:30 +0100 Subject: [PATCH 181/217] FIX coord output in error message --- class/class_chapter_06.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 5ee5016..be53cd2 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -487,7 +487,7 @@ class tutorial.chapter_06 extends basic_chapter if(tool_id == tool_build_way) return null } - else return translate("Build here") + ": ("+c_way.tostring()+")!." + else return translate("Build here") + ": ("+coord3d_to_stringc_way)+")!." } else if (pot0==1 && pot1==0){ if (pos.x == c2_track.a.x && pos.y == c2_track.a.y){ From 736725d9fb8b09636c8f8af3c98a03c8f918f1bf Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 Jan 2026 00:31:58 +0100 Subject: [PATCH 182/217] CHG update texts --- class/class_basic_chapter.nut | 2 +- de.tab | 4 ++++ en.tab | 2 ++ es.tab | 8 ++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index b31293a..20fa4eb 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3776,7 +3776,7 @@ function check_select_way(name, wt, st = st_flat) { } if ( list_name.find(name) == null ) { - return translate("Selected way is not correct") + return translate("Selected way is not correct!") } return null diff --git a/de.tab b/de.tab index 7ed3797..8088976 100644 --- a/de.tab +++ b/de.tab @@ -330,6 +330,8 @@ You can only delete the stations. Sie können nur den Bahnhof löschen You can only delete the stops. Sie können nur die Halte löschen +You can only delete the stops/extensions. +Sie können nur die Haltestellen/Erweiterungen löschen. You can only use this tool in the city Sie können dieses Tool nur in der Stadt verwenden You can only use vehicles: @@ -390,5 +392,7 @@ Selected extension accept not %s. Ausgewählte Erweiterung akzeptiert keine %s. Selected halt accept not %s. Ausgewählter Halt akzeptiert keine %s. +Selected way is not correct! +Ausgewählter Weg ist nicht Korrekt! This stop already accepts mail. Dieser Halt akzeptiert bereits Post. diff --git a/en.tab b/en.tab index 40da694..7a21276 100644 --- a/en.tab +++ b/en.tab @@ -26,6 +26,8 @@ Dock No.%d must accept [%s] Dock No.%d must accept %s Here Here. +Only water schedules allowed +Only shipping schedules allowed Place Singnal here!. Place Singnal here. Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time at the first stop!. diff --git a/es.tab b/es.tab index 877ea6d..c299804 100644 --- a/es.tab +++ b/es.tab @@ -132,6 +132,8 @@ OK Correcto Only %d stops are necessary. Sólo son necesarias %d paradas. +Only air schedules allowed +Solo se permiten horarios de aeronaves Only delete signals. Solo puedes eliminar señales. Only one train is allowed, press the [Sell] button. @@ -140,6 +142,8 @@ Only railway schedules allowed Sólo se permiten itinerarios de tren Only road schedules allowed Solo se permiten rutas por carretera +Only water schedules allowed +Solo se permiten horarios de envío Place a block signal here Coloca señal de bloqueo aquí Place a Tunnel here!. @@ -330,6 +334,8 @@ You can only delete the stations. Solo puedes eliminar estaciones. You can only delete the stops. Solo se permite eliminar paradas. +You can only delete the stops/extensions. +Solo puedes eliminar las paradas/extensiones. You can only use this tool in the city Solo puedes usar esta herramienta en la ciudad You can only use vehicles: @@ -390,5 +396,7 @@ Selected extension accept not %s. La extensión seleccionada no acepta %s. Selected halt accept not %s. La parada seleccionada no acepta %s. +Selected way is not correct! +¡La ruta seleccionada es incorrecta! This stop already accepts mail. Esta parada ya acepta correo. From fe2f1fd428a998ffe700e59e89bb1613da83443e Mon Sep 17 00:00:00 2001 From: Andarix Date: Thu, 29 Jan 2026 00:39:40 +0100 Subject: [PATCH 183/217] FIX errors chapter 6 --- class/class_chapter_06.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index be53cd2..9ef7d63 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -82,10 +82,10 @@ class tutorial.chapter_06 extends basic_chapter ch6_cov_lim2 = {a = cv_lim[lim_idx+1].a, b = cv_lim[lim_idx+1].b} ch6_cov_lim3 = {a = cv_lim[lim_idx+2].a, b = cv_lim[lim_idx+2].b} - /// set road depot name - sc_dep1 = find_object("depot", wt_road).get_name() /// set air depot name sc_dep1 = find_object("depot", wt_air).get_name() + /// set road depot name + sc_dep2 = find_object("depot", wt_road).get_name() d1_cnr = get_dep_cov_nr(ch6_cov_lim1.a,ch6_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch6_cov_lim2.a,ch6_cov_lim2.b) @@ -487,7 +487,7 @@ class tutorial.chapter_06 extends basic_chapter if(tool_id == tool_build_way) return null } - else return translate("Build here") + ": ("+coord3d_to_stringc_way)+")!." + else return translate("Build here") + ": ("+coord3d_to_string(c_way)+")!." } else if (pot0==1 && pot1==0){ if (pos.x == c2_track.a.x && pos.y == c2_track.a.y){ From 6ebc1c18d85819707ab7a022dfcf8427ef847338 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 30 Jan 2026 16:04:13 +0100 Subject: [PATCH 184/217] CHG comments --- class/class_basic_chapter.nut | 12 ++++++------ class/class_basic_coords_p64.nut | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 20fa4eb..1fbf035 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -8,11 +8,10 @@ */ /** - * @brief class_basic_chapter.nut * @brief global parameters and functions */ -//Global coordinate for mark build tile +// Global coordinate for mark build tile currt_pos <- null //----------------Para las señales de paso------------------------ @@ -118,10 +117,11 @@ class basic_chapter //Para arrancar vehiculos usando comm ---------------------------------------------------------------- function comm_set_convoy( cov_nr, coord, name, veh_nr = false ) { - /*1 Numero de convoy actual,****** - * 2 coord del deposito, * - * 3 Name del vehiculo, * - * 4 Numero de remolques/bagones)*/ + /* 1 Numero de convoy actual, + * 2 coord del deposito, + * 3 Name del vehiculo, + * 4 Numero de remolques/bagones + */ local pl = player_x(0) local depot = depot_x(coord.x, coord.y, coord.z) // Deposito /Garaje diff --git a/class/class_basic_coords_p64.nut b/class/class_basic_coords_p64.nut index 6e4bcba..c3e782c 100644 --- a/class/class_basic_coords_p64.nut +++ b/class/class_basic_coords_p64.nut @@ -1,6 +1,6 @@ /** * @file class_basic_coords_p64.nut - * @brief class_basic_coords_p64.nut sets the pakset specific map coords for pak64 + * @brief sets the pakset specific map coords for pak64 */ /** From a3e64b7e474de60b5101a6c27f6a8622e7a86e03 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 30 Jan 2026 17:06:37 +0100 Subject: [PATCH 185/217] CHG optimization Array definitions --- class/class_basic_chapter.nut | 43 ++++++++++++++++------------------- scenario.nut | 20 +++++++++++----- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 1fbf035..243b4b2 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -51,15 +51,15 @@ class basic_chapter glpos = coord3d(0,0,0) gltool = null glresult = null - tmpsw = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + tmpsw = [] tmpcoor = [] - stop_flag = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + stop_flag = [] st_cover = settings.get_station_coverage() glmark = coord3d(0,0,0) //coordenadas para realizar unmark //Para las pendientes - slope_estatus = [0,0,0,0,0,0] + slope_estatus = [] //--------------------way scan ------------------------------------ cursor_sw = false @@ -85,6 +85,11 @@ class basic_chapter general_disabled_tools(pl) //this.set_all_rules(pl) this.step = 1 + + // fill arrays + reset_tmpsw() + reset_stop_flag() + slope_estatus.resize(6, 0) } // FUNCTIONS TO REWRITE @@ -1086,46 +1091,36 @@ class basic_chapter pot8 = 0 pot9 = 0 pot10 = 0 - persistent.pot[0]=0 - persistent.pot[1]=0 - persistent.pot[2]=0 - persistent.pot[3]=0 - persistent.pot[4]=0 - persistent.pot[5]=0 - persistent.pot[6]=0 - persistent.pot[7]=0 - persistent.pot[8]=0 - persistent.pot[9]=0 - persistent.pot[10]=0 + + persistent.pot.clear() + persistent.pot.resize(11, 0) return null } function reset_glsw() { - for(local j=0;j<20;j++){ - glsw[j]=0 - persistent.glsw[j]=glsw[j] - } + persistent.glsw.clear() + persistent.glsw.resize(20, 0) + glsw.clear() + glsw.resize(20, 0) return null } function reset_tmpsw() { - for(local j=0;j<20;j++){ - tmpsw[j] = 0 + tmpsw.clear() + tmpsw.resize(20, 0) - } tmpcoor = [] return null } function reset_stop_flag() { - for(local j=0;j<20;j++){ - stop_flag[j]=0 - } + stop_flag.clear() + stop_flag.resize(20, 0) return null } diff --git a/scenario.nut b/scenario.nut index bc0ed33..397acd2 100644 --- a/scenario.nut +++ b/scenario.nut @@ -70,11 +70,17 @@ ignore_save <- [{id = -1, ig = true}] //Marca convoys ingnorados persistent.ignore_save <- [] -//-------------Guarda el estado del script------------------------ -persistent.pot <- [0,0,0,0,0,0,0,0,0,0,0] +//-------------Save the script state------------------------ +persistent.pot <- [] +persistent.pot.resize(11, 0) -persistent.glsw <- [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] -pglsw <- [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] +persistent.glsw <- [] +persistent.glsw.resize(20, 0) +glsw <- [] +glsw.resize(20, 0) + +pglsw <- [] +pglsw.resize(20, 0) pot0 <- 0 pot1 <- 0 @@ -87,9 +93,8 @@ pot7 <- 0 pot8 <- 0 pot9 <- 0 pot10 <- 0 -glsw <- [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] -//---------------------Contador global de vehiculos---------------------------- +//---------------------Global vehicle counter---------------------------- persistent.gcov_nr <- 0 gcov_nr <- 0 persistent.gcov_id <- 1 @@ -133,6 +138,9 @@ function get_set_name(name) return name } +/** + * Check version and pakset name + */ function string_analyzer() { local result = {pak= false , st = false} From 1a420a85c7a9de6a6d8ffd48c3d8a9f300154ca0 Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 30 Jan 2026 17:31:32 +0100 Subject: [PATCH 186/217] CHG pot* to array pot[*] --- class/class_basic_chapter.nut | 59 ++----- class/class_chapter_01.nut | 40 ++--- class/class_chapter_02.nut | 90 +++++----- class/class_chapter_03.nut | 316 +++++++++++++++++----------------- class/class_chapter_04.nut | 78 ++++----- class/class_chapter_05.nut | 86 ++++----- class/class_chapter_06.nut | 64 +++---- scenario.nut | 26 +-- 8 files changed, 356 insertions(+), 403 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 243b4b2..6f47aa1 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1012,29 +1012,15 @@ class basic_chapter function save_pot() { - if (persistent.pot[0]!=0)pot0=persistent.pot[0] - if (persistent.pot[1]!=0)pot1=persistent.pot[1] - if (persistent.pot[2]!=0)pot2=persistent.pot[2] - if (persistent.pot[3]!=0)pot3=persistent.pot[3] - if (persistent.pot[4]!=0)pot4=persistent.pot[4] - if (persistent.pot[5]!=0)pot5=persistent.pot[5] - if (persistent.pot[6]!=0)pot6=persistent.pot[6] - if (persistent.pot[7]!=0)pot7=persistent.pot[7] - if (persistent.pot[8]!=0)pot8=persistent.pot[8] - if (persistent.pot[9]!=0)pot9=persistent.pot[9] - if (persistent.pot[10]!=0)pot10=persistent.pot[10] - - persistent.pot[0]=pot0 - persistent.pot[1]=pot1 - persistent.pot[2]=pot2 - persistent.pot[3]=pot3 - persistent.pot[4]=pot4 - persistent.pot[5]=pot5 - persistent.pot[6]=pot6 - persistent.pot[7]=pot7 - persistent.pot[8]=pot8 - persistent.pot[9]=pot9 - persistent.pot[10]=pot10 + + for ( local j = 0; j < pot.len(); j++ ) { + if ( persistent.pot[j] != 0 ) { + pot[0] = persistent.pot[j] + } + } + + persistent.pot.clear() + persistent.pot.extend(pot) return null } @@ -1052,17 +1038,9 @@ class basic_chapter function backward_pot(pnr) { - if (pnr==0) {pot0 = 0; persistent.pot[pnr]=pot0} - if (pnr==1) {pot1 = 0; persistent.pot[pnr]=pot1} - if (pnr==2) {pot2 = 0; persistent.pot[pnr]=pot2} - if (pnr==3) {pot3 = 0; persistent.pot[pnr]=pot3} - if (pnr==4) {pot4 = 0; persistent.pot[pnr]=pot4} - if (pnr==5) {pot5 = 0; persistent.pot[pnr]=pot5} - if (pnr==6) {pot6 = 0; persistent.pot[pnr]=pot6} - if (pnr==7) {pot7 = 0; persistent.pot[pnr]=pot7} - if (pnr==8) {pot8 = 0; persistent.pot[pnr]=pot8} - if (pnr==9) {pot9 = 0; persistent.pot[pnr]=pot9} - if (pnr==10) {pot10 = 0; persistent.pot[pnr]=pot10} + + pot[pnr] = 0 + persistent.pot[pnr] = 0 return null } @@ -1080,17 +1058,8 @@ class basic_chapter function reset_pot() { - pot0 = 0 - pot1 = 0 - pot2 = 0 - pot3 = 0 - pot4 = 0 - pot5 = 0 - pot6 = 0 - pot7 = 0 - pot8 = 0 - pot9 = 0 - pot10 = 0 + pot.clear() + pot.resize(11, 0) persistent.pot.clear() persistent.pot.resize(11, 0) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 2eec3b7..54f6db0 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -92,14 +92,14 @@ class tutorial.chapter_01 extends basic_chapter local txt=c_test.tostring() switch (this.step) { case 1: - if (pot0 == 1) { + if (pot[0] == 1) { this.next_step() } //return chapter_percentage(persistent.ch_max_steps, 1, 0, 0) break case 2: - if (txt!="0,0,1" || pot0 == 1) { + if (txt!="0,0,1" || pot[0] == 1) { //Creea un cuadro label local opt = 0 local del = false @@ -115,7 +115,7 @@ class tutorial.chapter_01 extends basic_chapter local c_list1 = [my_tile(city1_mon)] local c_list2 = [my_tile(city1_cur)] local stop_mark = true - if (pot0==0) { + if (pot[0]==0) { try { next_mark = delay_mark_tile(c_list_mon) } @@ -123,16 +123,16 @@ class tutorial.chapter_01 extends basic_chapter return 0 } } - else if (pot0==1 && pot1==0) { + else if (pot[0]==1 && pot[1]==0) { try { next_mark = delay_mark_tile(c_list_mon, stop_mark) } catch(ev) { return 0 } - pot1=1 + pot[1]=1 } - if (pot1==1 && pot2==0) { + if (pot[1]==1 && pot[2]==0) { try { next_mark = delay_mark_tile(c_list_cur) } @@ -140,16 +140,16 @@ class tutorial.chapter_01 extends basic_chapter return 0 } } - else if (pot2==1 && pot3==0) { + else if (pot[2]==1 && pot[3]==0) { try { next_mark = delay_mark_tile(c_list_cur, stop_mark) } catch(ev) { return 0 } - pot3=1 + pot[3]=1 } - if (pot3==1 && pot4==0){ + if (pot[3]==1 && pot[4]==0){ comm_script = false this.next_step() } @@ -166,7 +166,7 @@ class tutorial.chapter_01 extends basic_chapter catch(ev) { return 0 } - if (pot0 == 1 && next_mark) { + if (pot[0] == 1 && next_mark) { next_mark = delay_mark_tile(list, stop_mark) comm_script = false this.next_step() @@ -196,15 +196,15 @@ class tutorial.chapter_01 extends basic_chapter break case 3: if(tool_id == 4096) { - if(pot0==0){ + if(pot[0]==0){ if ((pos.x == city1_mon.x)&&(pos.y == city1_mon.y)){ - pot0 = 1 + pot[0] = 1 return null } } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if ((pos.x == city1_cur.x)&&(pos.y == city1_cur.y)){ - pot2 = 1 + pot[2] = 1 return null } } @@ -215,7 +215,7 @@ class tutorial.chapter_01 extends basic_chapter local list = cit_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { - pot0 = 1 + pot[0] = 1 return null } } @@ -250,10 +250,10 @@ class tutorial.chapter_01 extends basic_chapter function script_text() { if (this.step==1){ - pot0=1 + pot[0]=1 } else if (this.step==2){ - pot0 = 1 + pot[0] = 1 } else if(this.step==3){ comm_script = true @@ -262,12 +262,12 @@ class tutorial.chapter_01 extends basic_chapter local del = false local text = "X" label_bord(city1_limit1.a, city1_limit1.b, opt, del, text) - pot0=1 - pot2=1 + pot[0]=1 + pot[2]=1 } else if (this.step==4){ comm_script = true - pot0 = 1 + pot[0] = 1 } return null } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 35372fc..c5f7aa5 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -210,13 +210,13 @@ class tutorial.chapter_02 extends basic_chapter //text.list = create_halt_list(city2_halt_1) //text.nr = city2_halt_1.len() } - else if (pot0==0){ + else if (pot[0]==0){ text = ttextfile("chapter_02/07_1-4.txt") text.tx = ttext("[1/4]") text.list = create_halt_list(city2_halt_1.slice(1)) } - else if (pot2==0){ + else if (pot[2]==0){ text = ttextfile("chapter_02/07_2-4.txt") text.tx = ttext("[2/4]") @@ -225,7 +225,7 @@ class tutorial.chapter_02 extends basic_chapter else text.cbor = coord(r_way.c.x, r_way.c.y).href("("+r_way.c.tostring()+")") } - else if (pot3==0){ + else if (pot[3]==0){ text = ttextfile("chapter_02/07_3-4.txt") text.tx = ttext("[3/4]") @@ -235,7 +235,7 @@ class tutorial.chapter_02 extends basic_chapter text.list = create_schedule_list(city2_halt_1) text.nr = city2_halt_1.len() } - else if (pot4==0){ + else if (pot[4]==0){ text = ttextfile("chapter_02/07_4-4.txt") text.tx = ttext("[4/4]") @@ -376,19 +376,19 @@ class tutorial.chapter_02 extends basic_chapter //return 0 break; case 3: - if (pot0==0){ + if (pot[0]==0){ //Marca tiles para evitar construccion de objetos local del = false local pl_nr = 1 local text = "X" - pot0=1 + pot[0]=1 } local c_list = city1_halt_1 local name = translate("Place Stop here!.") local load = good_alias.passa local all_stop = is_stop_building(c_list, name, load) - if (all_stop && pot0==1){ + if (all_stop && pot[0]==1){ this.next_step() } //return 10+percentage @@ -397,10 +397,10 @@ class tutorial.chapter_02 extends basic_chapter local conv = current_cov > 0 ? cov_save[current_cov-1] : null local cov_valid = is_cov_valid(conv) if(cov_valid){ - pot0 = 1 + pot[0] = 1 } local c_list1 = [my_tile(city1_road_depot)] - if (pot0 == 0){ + if (pot[0] == 0){ local next_mark = true try { next_mark = delay_mark_tile(c_list1) @@ -409,7 +409,7 @@ class tutorial.chapter_02 extends basic_chapter return 0 } } - else if (pot0 == 1 && pot1 ==0){ + else if (pot[0] == 1 && pot[1] ==0){ local next_mark = true local stop_mark = true try { @@ -418,10 +418,10 @@ class tutorial.chapter_02 extends basic_chapter catch(ev) { return 0 } - pot1 = 1 + pot[1] = 1 } - if (pot1 == 1 ){ + if (pot[1] == 1 ){ local c_dep = this.my_tile(city1_road_depot) local line_name = line1_name //"Test 1" set_convoy_schedule(pl, c_dep, gl_wt, line_name) @@ -442,10 +442,10 @@ class tutorial.chapter_02 extends basic_chapter } if (cov_valid && current_cov == ch2_cov_lim1.b){ - pot2=1 + pot[2]=1 } - if (pot2 == 1 ){ + if (pot[2] == 1 ){ this.next_step() //Crear cuadro label local opt = 0 @@ -461,7 +461,7 @@ class tutorial.chapter_02 extends basic_chapter local label = t_label.find_object(mo_label) local next_mark = true - if (pot0 == 0){ + if (pot[0] == 0){ if(!label) label_x.create(bridge1_coords.a, pl_unown, get_label_text(2)) label_x.create(bridge1_coords.b, pl_unown, "") @@ -472,7 +472,7 @@ class tutorial.chapter_02 extends basic_chapter return 0 } } - else if (pot0 == 1 && pot1 ==0){ + else if (pot[0] == 1 && pot[1] ==0){ stop_mark = true try { next_mark = delay_mark_tile(t_list_brd, stop_mark) @@ -480,9 +480,9 @@ class tutorial.chapter_02 extends basic_chapter catch(ev) { return 0 } - pot1 = 1 + pot[1] = 1 } - if (pot1==1) { + if (pot[1]==1) { //Comprueba la conexion de la via local tx = 0 local ty = 1 @@ -549,7 +549,7 @@ class tutorial.chapter_02 extends basic_chapter case 7: persistent.ch_max_sub_steps = 3 - if (pot0==0){ + if (pot[0]==0){ local c_list = city2_halt_1 local name = get_label_text(1) @@ -557,12 +557,12 @@ class tutorial.chapter_02 extends basic_chapter local all_stop = is_stop_building(c_list, name, load) if (all_stop) { - pot0=1 + pot[0]=1 reset_glsw() } } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ //Elimina cuadro label local opt = 0 label_bord(city2_limit1.a, city2_limit1.b, opt, true, "X") @@ -575,10 +575,10 @@ class tutorial.chapter_02 extends basic_chapter opt = 2 label_bord(c_way_limit1.a, c_way_limit1.b, opt, true, "X", gl_wt) - pot1=1 + pot[1]=1 } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ persistent.ch_sub_step = 1 // sub step finish //Comprueba la conexion de la via local coora = coord3d(way1_coords.a.x,way1_coords.a.y,way1_coords.a.z) @@ -609,11 +609,11 @@ class tutorial.chapter_02 extends basic_chapter label_bord(city1_limit1.a, city1_limit1.b, opt, false, "X") label_bord(city2_limit1.a, city2_limit1.b, opt, false, "X") - pot2=1 + pot[2]=1 } } - else if (pot2==1) { + else if (pot[2]==1) { persistent.ch_sub_step = 2 // sub step finish local c_dep = this.my_tile(city1_road_depot) local line_name = line3_name //"Test 3" @@ -629,16 +629,16 @@ class tutorial.chapter_02 extends basic_chapter sch_cov_correct = all_result.res == null ? true : false if (current_cov == ch2_cov_lim3.b){ - pot3=1 + pot[3]=1 } - if (pot3==1 && pot4==0) { + if (pot[3]==1 && pot[4]==0) { local conv = cov_save[current_cov-1] local cov_valid = is_cov_valid(conv) if (cov_valid && current_cov == ch2_cov_lim3.b){ if (conv.is_followed()) { - pot4 = 1 + pot[4] = 1 } } else{ @@ -646,7 +646,7 @@ class tutorial.chapter_02 extends basic_chapter break } } - else if (pot4==1 && pot5==0){ + else if (pot[4]==1 && pot[5]==0){ //Desmarca la via en la parada local way_mark = my_tile(line_connect_halt).find_object(mo_way) way_mark.unmark() @@ -664,7 +664,7 @@ class tutorial.chapter_02 extends basic_chapter break case 8: - if (pot0==0){ + if (pot[0]==0){ local halt1 = my_tile(city1_halt_2[city1_halt_2.len()-1]).get_halt() if (pl != halt1.get_owner().nr && glsw[0] == 0) glsw[0]=1 @@ -793,7 +793,7 @@ class tutorial.chapter_02 extends basic_chapter //Enrutar vehiculo if ((pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ if(tool_id==4096){ - pot0 = 1 + pot[0] = 1 return null } } @@ -808,7 +808,7 @@ class tutorial.chapter_02 extends basic_chapter if (tool_id==tool_build_bridge || tool_id==tool_build_way) { if ((pos.x>=c_bridge1_limit1.a.x)&&(pos.y>=c_bridge1_limit1.a.y)&&(pos.x<=c_bridge1_limit1.b.x)&&(pos.y<=c_bridge1_limit1.b.y)){ - pot0 = 1 + pot[0] = 1 result=null } else @@ -818,7 +818,7 @@ class tutorial.chapter_02 extends basic_chapter //Segundo Autobus case 6: //Enrutar vehiculo - if (pot0==0){ + if (pot[0]==0){ if ((tool_id==4096)&&(pos.x == city1_road_depot.x && pos.y == city1_road_depot.y)){ stop_mark = true return null @@ -834,7 +834,7 @@ class tutorial.chapter_02 extends basic_chapter break; case 7: // Construye las paradas - if (pot0==0){ + if (pot[0]==0){ if ((tool_id==tool_build_station)){ if (pos.x>city2_limit1.a.x && pos.y>city2_limit1.a.y && pos.x=c_way_limit1.a.x)&&(pos.y>=c_way_limit1.a.y)&&(pos.x<=c_way_limit1.b.x)&&(pos.y<=c_way_limit1.b.y)){ if((pos.x==way1_coords.a.x)&&(pos.y==way1_coords.a.y)){ if (tool_id==tool_remover || tool_id==tool_remove_way) @@ -878,7 +878,7 @@ class tutorial.chapter_02 extends basic_chapter } //Para enrutar vehiculos - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ if (tool_id==4108){ //Paradas de la primera ciudad result = translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+city1_road_depot.tostring()+")." @@ -1093,8 +1093,8 @@ class tutorial.chapter_02 extends basic_chapter case 4: local list = [my_tile(city1_road_depot)] delay_mark_tile(list, true) - if (pot0 == 0){ - pot0 = 1 + if (pot[0] == 0){ + pot[0] = 1 } if (current_cov>ch2_cov_lim1.a && current_cov[1/2]") } @@ -152,7 +152,7 @@ class tutorial.chapter_03 extends basic_chapter local c3 = way2_fac1_fac2[3].href("("+way2_fac1_fac2[3].tostring()+")") local c4 = way2_fac1_fac2[5].href("("+way2_fac1_fac2[5].tostring()+")") - if (pot0==0){ + if (pot[0]==0){ local c = way2_fac1_fac2[1] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) @@ -161,11 +161,11 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/02_1-3.txt") text.tx = ttext("[1/3]") } - else if (pot1==0){ + else if (pot[1]==0){ text = ttextfile("chapter_03/02_2-3.txt") text.tx = ttext("[2/3]") } - else if (pot2==0){ + else if (pot[2]==0){ local c = way2_fac1_fac2[4] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) @@ -187,26 +187,26 @@ class tutorial.chapter_03 extends basic_chapter break case 3: - if (pot0==0){ + if (pot[0]==0){ text = ttextfile("chapter_03/03_1-2.txt") text.tx = ttext("[1/2]") } - else if (pot0==1&&pot1==0){ + else if (pot[0]==1&&pot[1]==0){ text = ttextfile("chapter_03/03_2-2.txt") text.tx = ttext("[2/2]") } text.tile = loc1_tile break case 4: - if (pot0==0){ + if (pot[0]==0){ text = ttextfile("chapter_03/04_1-3.txt") text.tx=ttext("[1/3]") } - else if (pot0==1&&pot1==0){ + else if (pot[0]==1&&pot[1]==0){ text = ttextfile("chapter_03/04_2-3.txt") text.tx=ttext("[2/3]") } - else if (pot1==1){ + else if (pot[1]==1){ text = ttextfile("chapter_03/04_3-3.txt") text.tx=ttext("[3/3]") } @@ -233,7 +233,7 @@ class tutorial.chapter_03 extends basic_chapter local c3 = way2_fac2_fac3[3].href("("+way2_fac2_fac3[3].tostring()+")") local c4 = way2_fac2_fac3[5].href("("+way2_fac2_fac3[5].tostring()+")") - if (pot0==0){ + if (pot[0]==0){ local c = way2_fac2_fac3[1] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) @@ -242,11 +242,11 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/06_1-5.txt") text.tx=ttext("[1/5]") } - else if (pot1==0){ + else if (pot[1]==0){ text = ttextfile("chapter_03/06_2-5.txt") text.tx=ttext("[2/5]") } - else if (pot2==0){ + else if (pot[2]==0){ local c = way2_fac2_fac3[4] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) @@ -255,11 +255,11 @@ class tutorial.chapter_03 extends basic_chapter text = ttextfile("chapter_03/06_3-5.txt") text.tx=ttext("[3/5]") } - else if (pot3==0){ + else if (pot[3]==0){ text = ttextfile("chapter_03/06_4-5.txt") text.tx=ttext("[4/5]") } - else if (pot4==0){ + else if (pot[4]==0){ text = ttextfile("chapter_03/06_5-5.txt") text.tx = ttext("[5/5]") } @@ -287,23 +287,23 @@ class tutorial.chapter_03 extends basic_chapter break case 8: - if(pot0==0){ + if(pot[0]==0){ text = ttextfile("chapter_03/08_1-5.txt") text.tx = ttext("[1/5]") text.w1 = c_way3_lim.b.href("("+c_way3_lim.b.tostring()+")") text.w2 = c_way3_lim.a.href("("+c_way3_lim.a.tostring()+")") } - else if(pot1==0){ + else if(pot[1]==0){ text = ttextfile("chapter_03/08_2-5.txt") text.tx = ttext("[2/5]") text.br = bridge3_coords.a.href("("+bridge3_coords.a.tostring()+")") } - else if (pot2==0){ + else if (pot[2]==0){ text = ttextfile("chapter_03/08_3-5.txt") text.tx = ttext("[3/5]") text.t1 = "("+ way3_tun_coord[0].tostring()+")" } - else if(pot3==0){ + else if(pot[3]==0){ local slope = tile_x(r_way.c.x, r_way.c.y, r_way.c.z).get_slope() if(r_way.c.z[1/2]") @@ -378,7 +378,7 @@ class tutorial.chapter_03 extends basic_chapter text.w1 = way3_cy1_cy6[w_nr].b.href("("+way3_cy1_cy6[w_nr].b.tostring()+")") } - else if (pot1==0){ + else if (pot[1]==0){ text = ttextfile("chapter_03/09_2-2.txt") text.tx = ttext("[2/2]") local sigtxt = "" @@ -402,7 +402,7 @@ class tutorial.chapter_03 extends basic_chapter break case 10: - if (pot0==0){ + if (pot[0]==0){ if (glsw[1]==0){ text = ttextfile("chapter_03/10_1-4.txt") text.tx = ttext("[1/4]") @@ -412,11 +412,11 @@ class tutorial.chapter_03 extends basic_chapter text.tx = ttext("[2/4]") } } - else if (pot1==0){ + else if (pot[1]==0){ text = ttextfile("chapter_03/10_3-4.txt") text.tx = ttext("[3/4]") } - else if (pot2==0){ + else if (pot[2]==0){ text = ttextfile("chapter_03/10_4-4.txt") text.tx = ttext("[4/4]") } @@ -552,7 +552,7 @@ class tutorial.chapter_03 extends basic_chapter case 1: persistent.ch_max_sub_steps = 2 local next_mark = false - if (pot0==0 || pot1 == 0) { + if (pot[0]==0 || pot[1] == 0) { local list = fac_2.c_list try { next_mark = delay_mark_tile(list) @@ -560,11 +560,11 @@ class tutorial.chapter_03 extends basic_chapter catch(ev) { return 0 } - if(next_mark && pot0 == 1) { - pot1=1 + if(next_mark && pot[0] == 1) { + pot[1]=1 } } - else if (pot2==0 || pot3==0) { + else if (pot[2]==0 || pot[3]==0) { local list = fac_1.c_list try { next_mark = delay_mark_tile(list) @@ -572,12 +572,12 @@ class tutorial.chapter_03 extends basic_chapter catch(ev) { return 0 } - if(next_mark && pot2 == 1) { - pot3=1 + if(next_mark && pot[2] == 1) { + pot[3]=1 } persistent.ch_sub_step = 1 } - else if (pot3==1 && pot4==0) { + else if (pot[3]==1 && pot[4]==0) { this.next_step() } //return 5 @@ -585,7 +585,7 @@ class tutorial.chapter_03 extends basic_chapter case 2: persistent.ch_max_sub_steps = 3 //Primer tramo de rieles - if (pot0==0){ + if (pot[0]==0){ local limi = my_tile(way2_fac1_fac2[1]) local tile1 = my_tile(way2_fac1_fac2[0]) if (!tile1.find_object(mo_way)){ @@ -647,12 +647,12 @@ class tutorial.chapter_03 extends basic_chapter local text = "X" label_bord(limit_ch3_rail_line_1a.a, limit_ch3_rail_line_1a.b, opt, del, text) - pot0=1 + pot[0]=1 wayend=0 } } //Para el puente - else if (pot0==1&&pot1==0) { + else if (pot[0]==1&&pot[1]==0) { persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(bridge2_coords.a) if ((!tile.find_object(mo_bridge))){ @@ -665,12 +665,12 @@ class tutorial.chapter_03 extends basic_chapter my_tile(bridge2_coords.b).remove_object(player_x(1), mo_label) if (my_tile(bridge2_coords.a).find_object(mo_bridge)){ - pot1=1 + pot[1]=1 } } } //Segundo tramo de rieles - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ persistent.ch_sub_step = 2 // sub step finish local limi = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) local tile1 = limi @@ -724,7 +724,7 @@ class tutorial.chapter_03 extends basic_chapter local passa = good_alias.passa local mail = good_alias.mail - if (pot1==0){ + if (pot[1]==0){ //Estaciones de la Fabrica local pl_nr = 1 local c_list = station_tiles(way2_fac1_fac2[5], way2_fac1_fac2[4], loc1_tile) @@ -733,11 +733,11 @@ class tutorial.chapter_03 extends basic_chapter local result = is_stations_building(pl_nr, c_list, st_nr, good) if(result){ - pot0=1 + pot[0]=1 } } - if (pot0==1 && pot1==0){ + if (pot[0]==1 && pot[1]==0){ persistent.ch_sub_step = 1 // sub step finish //Estaciones de la Fabrica @@ -756,7 +756,7 @@ class tutorial.chapter_03 extends basic_chapter case 4: persistent.ch_max_sub_steps = 3 local tile = my_tile(ch3_rail_depot1.b) - if(pot0==0){ + if(pot[0]==0){ local c_list = [my_tile(ch3_rail_depot1.b), my_tile(ch3_rail_depot1.a)] local siz = c_list.len() @@ -778,11 +778,11 @@ class tutorial.chapter_03 extends basic_chapter catch(ev) { return 0 } - pot0=1 + pot[0]=1 } } - else if(pot0==1 && pot1==0){ + else if(pot[0]==1 && pot[1]==0){ persistent.ch_sub_step = 1 // sub step finish local label = tile.find_object(mo_label) if(!tile.find_object(mo_depot_rail)){ @@ -790,15 +790,15 @@ class tutorial.chapter_03 extends basic_chapter } else{ tile.remove_object(player_x(1), mo_label) - pot1=1 + pot[1]=1 } } - else if ( pot0==1 && pot1==1 && pot2==0 ) { + else if ( pot[0]==1 && pot[1]==1 && pot[2]==0 ) { persistent.ch_sub_step = 2 // sub step finish } - else if(pot2==1){ + else if(pot[2]==1){ this.next_step() } //return 16 @@ -812,11 +812,11 @@ class tutorial.chapter_03 extends basic_chapter if (current_cov == ch3_cov_lim1.b){ reached = get_reached_target(fac_2.c, good_alias.wood ) if (reached>= f1_reached){ - pot1=1 + pot[1]=1 } } - if (pot1==1 && pot0==0){ + if (pot[1]==1 && pot[0]==0){ //Marca tiles para evitar construccion de objetos /*local c_list = c_lock local siz = c_lock.len() @@ -834,7 +834,7 @@ class tutorial.chapter_03 extends basic_chapter case 6: persistent.ch_max_sub_steps = 5 //Primer tramo de rieles - if (pot0==0){ + if (pot[0]==0){ local limi = way2_fac2_fac3[1] local tile1 = my_tile(way2_fac2_fac3[0]) @@ -885,12 +885,12 @@ class tutorial.chapter_03 extends basic_chapter local text = "X" label_bord(limit_ch3_rail_line_2a.a, limit_ch3_rail_line_2a.b, opt, del, text) - pot0 = 1 + pot[0] = 1 wayend = 0 } } //Para el tunel - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(way2_fac2_fac3[2]) if ((!tile.find_object(mo_tunnel))){ @@ -912,12 +912,12 @@ class tutorial.chapter_03 extends basic_chapter wayend = coorb r_way = get_fullway(coora, coorb, dir, obj, tunnel) if (r_way.r){ - pot1=1 + pot[1]=1 wayend = 0 } } //Segundo tramo de rieles - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ persistent.ch_sub_step = 2 // sub step finish local limi = way2_fac2_fac3[4] local tile1 = my_tile(limi) @@ -957,13 +957,13 @@ class tutorial.chapter_03 extends basic_chapter local text = "X" label_bord(limit_ch3_rail_line_2b.a, limit_ch3_rail_line_2b.b, opt, del, text) - pot2=1 + pot[2]=1 wayend = 0 } } //Text label para las estaciones - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ persistent.ch_sub_step = 3 // sub step finish glresult = null local passa = good_alias.passa @@ -977,10 +977,10 @@ class tutorial.chapter_03 extends basic_chapter local result = is_stations_building(pl_nr, c_list, st_nr, good) if(result){ - pot3 = 1 + pot[3] = 1 } } - else if (pot3==1 && pot4==0){ + else if (pot[3]==1 && pot[4]==0){ persistent.ch_sub_step = 4 // sub step finish glresult = null local passa = good_alias.passa @@ -994,10 +994,10 @@ class tutorial.chapter_03 extends basic_chapter local result = is_stations_building(pl_nr, c_list, st_nr, good) if(result){ - pot4 = 1 + pot[4] = 1 } } - else if (pot4==1 && pot5==0){ + else if (pot[4]==1 && pot[5]==0){ //Elimina las Marcas de tiles /*local c_list = c_lock local siz = c_lock.len() @@ -1017,7 +1017,7 @@ class tutorial.chapter_03 extends basic_chapter local opt = 2 local wt = gl_wt local tile = my_tile(ch3_rail_depot2.a) - if(pot0==0){ + if(pot[0]==0){ local c_list = [my_tile(ch3_rail_depot2.b), my_tile(ch3_rail_depot2.a)] local siz = c_list.len() @@ -1039,29 +1039,29 @@ class tutorial.chapter_03 extends basic_chapter catch(ev) { return 0 } - pot0=1 + pot[0]=1 } } - else if(pot0==1 && pot1==0){ + else if(pot[0]==1 && pot[1]==0){ local label = tile.find_object(mo_label) if(!tile.find_object(mo_depot_rail)){ label.set_text(translate("Build Train Depot here!.")) } else{ tile.remove_object(player_x(1), mo_label) - pot1=1 + pot[1]=1 } } else if(current_cov == ch3_cov_lim2.b){ reached = get_reached_target(fac_3.c, good_alias.plan) if (reached>=f3_reached){ - pot3=1 + pot[3]=1 } } - if (pot3==1 && pot4==0){ + if (pot[3]==1 && pot[4]==0){ this.next_step() reset_stop_flag() reached = 0 @@ -1072,7 +1072,7 @@ class tutorial.chapter_03 extends basic_chapter case 8: persistent.ch_max_sub_steps = 5 //Para el tramo de via - if (pot0==0){ + if (pot[0]==0){ local coora = coord3d(way3_cy1_cy3.a.x, way3_cy1_cy3.a.y, way3_cy1_cy3.a.z) local coorb = coord3d(way3_cy1_cy3.b.x, way3_cy1_cy3.b.y, way3_cy1_cy3.b.z) local obj = false @@ -1080,12 +1080,12 @@ class tutorial.chapter_03 extends basic_chapter local dir = get_dir_start(coora) r_way = get_fullway(coora, coorb, dir, obj, tunnel) if (r_way.r){ - pot0=1 + pot[0]=1 //return 45 } } //Para el puente - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ persistent.ch_sub_step = 1 // sub step finish local tile = my_tile(bridge3_coords.a) if ((!tile.find_object(mo_bridge))){ @@ -1098,12 +1098,12 @@ class tutorial.chapter_03 extends basic_chapter my_tile(bridge3_coords.b).remove_object(player_x(1), mo_label) if (my_tile(bridge3_coords.b).find_object(mo_bridge)){ - pot1=1 + pot[1]=1 } } } //Para la entrada del tunel - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ persistent.ch_sub_step = 2 // sub step finish local t_tunn = my_tile(way3_tun_coord[0]) @@ -1129,12 +1129,12 @@ class tutorial.chapter_03 extends basic_chapter } } else{ - pot2=1 + pot[2]=1 t_tunn.remove_object(player_x(1), mo_label) } } //Para conectar las dos entradas del tunel - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ persistent.ch_sub_step = 3 // sub step finish local coora = coord3d(way3_tun_coord[0].x, way3_tun_coord[0].y, way3_tun_coord[0].z) local coorb = coord3d(way3_tun_coord[2].x, way3_tun_coord[2].y, way3_tun_coord[2].z) @@ -1144,7 +1144,7 @@ class tutorial.chapter_03 extends basic_chapter r_way = get_fullway(coora, coorb, dir, obj, tunnel) //gui.add_message("plus "+r_way.p) if (r_way.r){ - pot3=1 + pot[3]=1 //return 45 } @@ -1181,7 +1181,7 @@ class tutorial.chapter_03 extends basic_chapter } } } - else if (pot3==1){ + else if (pot[3]==1){ this.next_step() } //return 45 @@ -1190,7 +1190,7 @@ class tutorial.chapter_03 extends basic_chapter case 9: persistent.ch_max_sub_steps = 2 //Para las vias - if (pot0==0){ + if (pot[0]==0){ for(local j=0;j=bridge2_coords.b.x-1 && pos.y>=bridge2_coords.b.y-1 && pos.x<=bridge2_coords.a.x+1 && pos.y<=bridge2_coords.a.y+1){ if(tool_id==tool_build_way || tool_id==tool_build_bridge) return null @@ -1427,7 +1427,7 @@ class tutorial.chapter_03 extends basic_chapter return translate("You must build the bridge here")+" ("+bridge2_coords.a.tostring()+")." } //Segundo tramo de rieles - if (pot1==1&&pot2==0){ + if (pot[1]==1&&pot[2]==0){ if (pos.x>=way2_fac1_fac2[5].x && pos.y>=way2_fac1_fac2[5].y && pos.x<=way2_fac1_fac2[4].x && pos.y<=way2_fac1_fac2[4].y){ if(tool_id==tool_build_bridge) return result @@ -1445,7 +1445,7 @@ class tutorial.chapter_03 extends basic_chapter break; case 3: - if (pot0==0){ + if (pot[0]==0){ //Estaciones de la Fabrica // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) @@ -1457,7 +1457,7 @@ class tutorial.chapter_03 extends basic_chapter return get_stations(pos, tool_id, result, good, c_list, siz) } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ //Estaciones del Productor // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) @@ -1470,24 +1470,24 @@ class tutorial.chapter_03 extends basic_chapter } break case 4: - if(pot0==0){ + if(pot[0]==0){ if (pos.x>=ch3_rail_depot1.a.x && pos.y>=ch3_rail_depot1.a.y && pos.x<=ch3_rail_depot1.b.x && pos.y<=ch3_rail_depot1.b.y){ if (tool_id==tool_build_way) return null } else return translate("You must build track in")+" ("+ch3_rail_depot1.b.tostring()+")." } - else if(pot0==1 && pot1==0){ + else if(pot[0]==1 && pot[1]==0){ if ((pos.x==ch3_rail_depot1.b.x)&&(pos.y==ch3_rail_depot1.b.y)){ if (tool_id==tool_build_depot) return null } else return translate("You must build the train depot in")+" ("+ch3_rail_depot1.b.tostring()+")." } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if ((pos.x==ch3_rail_depot1.b.x)&&(pos.y==ch3_rail_depot1.b.y)){ if (tool_id==4096){ - pot2=1 + pot[2]=1 return null } else return translate("You must use the inspection tool")+" ("+ch3_rail_depot1.b.tostring()+")." @@ -1542,7 +1542,7 @@ class tutorial.chapter_03 extends basic_chapter //Conectando los rieles con el consumidor final case 6: //Primer tramo de rieles - if (pot0==0){ + if (pot[0]==0){ local lab_t = my_tile(way2_fac2_fac3[1]) local lab = lab_t.find_object(mo_label) if(pos.y > lab_t.y && lab && lab.get_owner().nr == 0){ @@ -1569,7 +1569,7 @@ class tutorial.chapter_03 extends basic_chapter return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." } //Construye un tunel - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ if (pos.x>=way2_fac2_fac3[2].x && pos.y>=way2_fac2_fac3[2].y && pos.x<=way2_fac2_fac3[3].x && pos.y<=way2_fac2_fac3[3].y){ if(tool_id==tool_build_way || tool_id==tool_build_tunnel){ return null @@ -1578,7 +1578,7 @@ class tutorial.chapter_03 extends basic_chapter } //Segundo tramo de rieles - if (pot1==1&&pot2==0){ + if (pot[1]==1&&pot[2]==0){ if (pos.x>=way2_fac2_fac3[4].x && pos.y>=way2_fac2_fac3[4].y && pos.x<=way2_fac2_fac3[5].x && pos.y<=way2_fac2_fac3[5].y){ if(tool_id==tool_build_bridge) return result @@ -1595,7 +1595,7 @@ class tutorial.chapter_03 extends basic_chapter return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." } //Estaciones de la Fabrica - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1606,7 +1606,7 @@ class tutorial.chapter_03 extends basic_chapter return get_stations(pos, tool_id, result, good, c_list, siz) } //Estaciones del Productor - else if (pot3==1 && pot4==0){ + else if (pot[3]==1 && pot[4]==0){ // check selected halt accept goods local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s @@ -1623,25 +1623,25 @@ class tutorial.chapter_03 extends basic_chapter //Construye rieles y deposito if (pos.x>=ch3_rail_depot2.a.x && pos.y>=ch3_rail_depot2.a.y && pos.x<=ch3_rail_depot2.b.x && pos.y<=ch3_rail_depot2.b.y){ - if (pot0==0){ + if (pot[0]==0){ if(tool_id==tool_build_way) return null else return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." } - else if (pot0==1 && pot1==0) + else if (pot[0]==1 && pot[1]==0) if(tool_id==tool_build_depot) return null else return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." } - else if (pot0==0) + else if (pot[0]==0) return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." - else if (pot0==1 && pot1==0) + else if (pot[0]==1 && pot[1]==0) return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." //Enrutar vehiculos (estacion nr1) - if (pot1==1 && pot2==0){ + if (pot[1]==1 && pot[2]==0){ if (building && pos.x>=way2_fac2_fac3[0].x && pos.y>=way2_fac2_fac3[0].y && pos.x<=way2_fac2_fac3[1].x && pos.y<=way2_fac2_fac3[1].y){ if (tool_id==4108 && building){ if (stop_flag[0]==0){ @@ -1680,14 +1680,14 @@ class tutorial.chapter_03 extends basic_chapter return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } } - if (pot2==1 && pot3==0){ + if (pot[2]==1 && pot[3]==0){ return translate("The route is complete, now you may dispatch the vehicle from the depot")+" ("+ch3_rail_depot1.a.tostring()+".)" } break case 8: //Construye tramo de via para el tunel - if (pot0==0){ + if (pot[0]==0){ if (pos.x>=c_way3_lim.a.x && pos.y<=c_way3_lim.a.y && pos.x<=c_way3_lim.b.x && pos.y>=c_way3_lim.b.y){ if (tool_id==tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) @@ -1696,7 +1696,7 @@ class tutorial.chapter_03 extends basic_chapter else return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." } //Construye un puente - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ if (pos.x>=c_bridge3_limit.a.x && pos.y>=c_bridge3_limit.a.y && pos.x<=c_bridge3_limit.b.x && pos.y<=c_bridge3_limit.b.y){ if(tool_id==tool_build_way || tool_id==tool_build_bridge){ return null @@ -1706,7 +1706,7 @@ class tutorial.chapter_03 extends basic_chapter return translate("You must build the bridge here")+" ("+bridge3_coords.a.tostring()+")." } //Construye Entrada del tunel - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if (tool_id==tool_build_way){ if(t.find_object(mo_bridge)) return null @@ -1723,7 +1723,7 @@ class tutorial.chapter_03 extends basic_chapter } } //Conecta los dos extremos del tunel - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ if (r_way.c==0) return "" local squ_bor = square_x(r_way.c.x, r_way.c.y) local z_bor = squ_bor.get_ground_tile().z @@ -1833,7 +1833,7 @@ class tutorial.chapter_03 extends basic_chapter } break case 9: - if (pot0==0){ + if (pot[0]==0){ result = r_way.c != 0? translate("Connect the Track here")+" ("+r_way.c.tostring()+").":result for(local j=0;j way3_cate_list1[j].b.x || way3_cate_list1[j].a.y > way3_cate_list1[j].b.y ) { @@ -1929,7 +1929,7 @@ class tutorial.chapter_03 extends basic_chapter } if ((tool_id == 4114)&&(pos.x==ch3_rail_depot3.b.x)&&(pos.y==ch3_rail_depot3.b.y)) return null } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ local limit_t = [] if ( ch3_rail_depot3.a.x > ch3_rail_depot3.b.x || ch3_rail_depot3.a.y > ch3_rail_depot3.b.y ) { limit_t.append(ch3_rail_depot3.b) @@ -1947,7 +1947,7 @@ class tutorial.chapter_03 extends basic_chapter } result = translate("Connect the Track here")+" ("+ch3_rail_depot3.a.tostring()+")." } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if ((pos.x==ch3_rail_depot3.b.x)&&(pos.y==ch3_rail_depot3.b.y)){ if (tool_id==tool_build_depot){ return null @@ -2158,17 +2158,17 @@ class tutorial.chapter_03 extends basic_chapter local player = player_x(0) switch (this.step) { case 1: - if(pot0==0){ - pot0=1 + if(pot[0]==0){ + pot[0]=1 } - if (pot2==0){ - pot2=1 + if (pot[2]==0){ + pot[2]=1 } return null break; case 2: //Primer tramo de rieles - if (pot0==0){ + if (pot[0]==0){ //Station tramo ---------------------------------------------------------------------- local t_start = my_tile(coord(way2_fac1_fac2[0].x, way2_fac1_fac2[0].y)) local t_end = my_tile(coord(way2_fac1_fac2[1].x, way2_fac1_fac2[1].y)) @@ -2192,7 +2192,7 @@ class tutorial.chapter_03 extends basic_chapter label_bord(limit_ch3_rail_line_1a.a, limit_ch3_rail_line_1a.b, opt, del, text) } //Para el puente - if (pot1==0){ + if (pot[1]==0){ local t_start = my_tile(bridge2_coords.a) local t_end = my_tile(bridge2_coords.b) if ( !t_start.find_object(mo_bridge) ) { @@ -2202,7 +2202,7 @@ class tutorial.chapter_03 extends basic_chapter } } //Segundo tramo de rieles - if (pot4==0){ + if (pot[4]==0){ //Outside tramo ---------------------------------------------------------------------- local t_start = my_tile(coord(way2_fac1_fac2[3].x, way2_fac1_fac2[3].y)) local t_end = my_tile(coord(way2_fac1_fac2[4].x, way2_fac1_fac2[4].y)) @@ -2224,7 +2224,7 @@ class tutorial.chapter_03 extends basic_chapter break; case 3: - if (pot0==0){ + if (pot[0]==0){ //Estaciones de la Fabrica local st_list = station_tiles(way2_fac1_fac2[5], way2_fac1_fac2[4], loc1_tile) for(local j=0;jch3_cov_lim2.a && current_cov[1/2]") } @@ -141,16 +141,16 @@ class tutorial.chapter_04 extends basic_chapter text = ttextfile("chapter_04/05_3-3.txt") text.tx=ttext("[3/3]") } - else if (pot0==0){ + else if (pot[0]==0){ text = ttextfile("chapter_04/05_1-3.txt") text.tx=ttext("[1/3]") } - else if (pot1==0){ + else if (pot[1]==0){ text = ttextfile("chapter_04/05_2-3.txt") text.tx=ttext("[2/3]") text.cdock = translate(get_obj_ch4(3)) } - else if (pot2==0){ + else if (pot[2]==0){ text = ttextfile("chapter_04/05_3-3.txt") text.tx=ttext("[3/3]") } @@ -241,7 +241,7 @@ class tutorial.chapter_04 extends basic_chapter persistent.ch_max_sub_steps = 2 local next_mark = false local stop_mark = true - if(pot0==0 || pot1 == 0){ + if(pot[0]==0 || pot[1] == 0){ local list = fac_2.c_list try { next_mark = delay_mark_tile(list) @@ -249,11 +249,11 @@ class tutorial.chapter_04 extends basic_chapter catch(ev) { return 0 } - if(next_mark && pot0 == 1){ - pot1=1 + if(next_mark && pot[0] == 1){ + pot[1]=1 } } - else if (pot2==0 || pot3==0){ + else if (pot[2]==0 || pot[3]==0){ persistent.ch_sub_step = 1 local list = fac_1.c_list try { @@ -262,11 +262,11 @@ class tutorial.chapter_04 extends basic_chapter catch(ev) { return 0 } - if(next_mark && pot2 == 1){ - pot3=1 + if(next_mark && pot[2] == 1){ + pot[3]=1 } } - else if (pot3==1 && pot4==0){ + else if (pot[3]==1 && pot[4]==0){ this.next_step() } //return 5 @@ -296,9 +296,9 @@ class tutorial.chapter_04 extends basic_chapter } else{ t1.remove_object(player_x(1), mo_label) - pot0=1 + pot[0]=1 } - if (pot1==1){ + if (pot[1]==1){ this.next_step() } //return 10+percentage @@ -317,7 +317,7 @@ class tutorial.chapter_04 extends basic_chapter persistent.ch_sub_step = 0 //Para el canal acuatico - if (pot0==0){ + if (pot[0]==0){ //Inicio del canal local c_start = coord(way4_cannal[0].x, way4_cannal[0].y) local t_start = my_tile(c_start) @@ -355,13 +355,13 @@ class tutorial.chapter_04 extends basic_chapter local fullway = update_way(coora, coorb, vel_min, wt) //test if (fullway.result){ - pot0=1 + pot[0]=1 } else c_way = fullway.c } //Para el cuarto muelle - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ persistent.ch_sub_step = 2 local t = my_tile(ch4_ship2_halts[1]) //sch_list2 local dock4 = t.find_object(mo_building) @@ -369,19 +369,19 @@ class tutorial.chapter_04 extends basic_chapter if(dock4){ if(is_station_build(0, ch4_ship2_halts[1], good_alias.goods)==null){ //sch_list2 t.remove_object(player_x(1), mo_label) - pot1=1 + pot[1]=1 } } } //Vehiculos en circulacion - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ persistent.ch_sub_step = 1 cov_cir = get_convoy_nr((ch4_cov_lim2.a ), d2_cnr) if (cov_cir==d2_cnr) - pot2=1 + pot[2]=1 } - if (pot2==1 && pot3==0){ + if (pot[2]==1 && pot[3]==0){ reset_stop_flag() this.next_step() } @@ -460,20 +460,20 @@ class tutorial.chapter_04 extends basic_chapter switch (this.step) { case 1: if (tool_id == 4096){ - if (pot0==0){ + if (pot[0]==0){ local list = fac_2.c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { - pot0 = 1 + pot[0] = 1 return null } } } - else if (pot1==1){ + else if (pot[1]==1){ local list = fac_1.c_list foreach(t in list){ if(pos.x == t.x && pos.y == t.y) { - pot2 = 1 + pot[2] = 1 return null } } @@ -497,20 +497,20 @@ class tutorial.chapter_04 extends basic_chapter case 3: //Primer Astillero if (pos.x==ship_depot.x && pos.y==ship_depot.y){ - if (pot0==0){ + if (pot[0]==0){ if (tool_id == tool_build_depot){ - pot0=1 + pot[0]=1 return null } } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ if (tool_id == 4096){ - pot1=1 + pot[1]=1 return null } } } - else if (pot0==0) + else if (pot[0]==0) result = translate("Place the shipyard here")+" ("+ship_depot.tostring()+")." break //Enrutar barcos @@ -525,7 +525,7 @@ class tutorial.chapter_04 extends basic_chapter } break case 5: - if (pot0==0){ + if (pot[0]==0){ if(pos.x==way4_cannal[0].x && pos.y==way4_cannal[0].y){ if(tool_id==tool_remove_way || tool_id==4097) return result @@ -536,7 +536,7 @@ class tutorial.chapter_04 extends basic_chapter } } //Cuarto muelle - else if(pot0==1 && pot1==0){ + else if(pot[0]==1 && pot[1]==0){ if(my_tile(ch4_ship2_halts[1]).find_object(mo_building)){ if (tool_id==4097) return null @@ -550,7 +550,7 @@ class tutorial.chapter_04 extends basic_chapter } } //Enrutar Barcos - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if (tool_id==4108){ local c_list = ch4_ship2_halts //Lista de todas las paradas de autobus local c_dep = ship_depot //Coordeadas del deposito @@ -733,11 +733,11 @@ class tutorial.chapter_04 extends basic_chapter local pl = 0 switch (this.step) { case 1: - if(pot0==0){ - pot0=1 + if(pot[0]==0){ + pot[0]=1 } - if (pot2==0){ - pot2=1 + if (pot[2]==0){ + pot[2]=1 } return null break; @@ -766,7 +766,7 @@ class tutorial.chapter_04 extends basic_chapter local tool = command_x(tool_build_depot) local err = tool.work(player_x(pl), t1, sc_dep_name) if (t1.find_object(mo_depot_water)){ - pot1=1 + pot[1]=1 } return null break; @@ -810,7 +810,7 @@ class tutorial.chapter_04 extends basic_chapter case 5: //Para el canal acuatico - if (pot0==0){ + if (pot[0]==0){ local t1 = my_tile(coord(way4_cannal[0].x, way4_cannal[0].y)) local t2 = my_tile(ch4_ship3_halts[1]) local way = t1.find_object(mo_way) @@ -841,7 +841,7 @@ class tutorial.chapter_04 extends basic_chapter } //Para el cuarto muelle - if (pot1==0){ + if (pot[1]==0){ local t = my_tile(ch4_ship2_halts[1]) t.unmark() local label = t.find_object(mo_label) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 2e6313d..f36d968 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -153,7 +153,7 @@ class tutorial.chapter_05 extends basic_chapter text.wait = get_wait_time_text(veh1_wait) break case 3: - if (pot0==0){ + if (pot[0]==0){ text = ttextfile("chapter_05/03_1-2.txt") text.tx="[1/2]" text.trf_name = trf_name @@ -171,7 +171,7 @@ class tutorial.chapter_05 extends basic_chapter text.tran = tran_tx } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ text = ttextfile("chapter_05/03_2-2.txt") text.tx="[2/2]" text.powerline_tool = translate(sc_power_name) // tool powerline @@ -193,7 +193,7 @@ class tutorial.chapter_05 extends basic_chapter } break case 4: - if (pot0==1 && pot1==0){ + if (pot[0]==1 && pot[1]==0){ text = ttextfile("chapter_05/04_1-3.txt") text.tx="[1/3]" @@ -222,7 +222,7 @@ class tutorial.chapter_05 extends basic_chapter } text.st = st_tx } - else if (pot1==1 && pot2==0 || (current_cov> ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b)){ + else if (pot[1]==1 && pot[2]==0 || (current_cov> ch5_cov_lim2.a && current_cov< ch5_cov_lim2.b)){ text = ttextfile("chapter_05/04_2-3.txt") text.tx = "[2/3]" local list_tx = "" @@ -244,7 +244,7 @@ class tutorial.chapter_05 extends basic_chapter } } - if ( pot1==1 ) { + if ( pot[1]==1 ) { new_set_waiting_halt(city1_post_halts) } local c = coord(c_list[veh2_waiting_halt].x, c_list[veh2_waiting_halt].y) @@ -260,7 +260,7 @@ class tutorial.chapter_05 extends basic_chapter text.wait = get_wait_time_text(veh2_wait) text.nr = siz } - else if (pot2==1 && pot3==0 || (current_cov> ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b)){ + else if (pot[2]==1 && pot[3]==0 || (current_cov> ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b)){ text = ttextfile("chapter_05/04_3-3.txt") text.tx = "[3/3]" local list_tx = "" @@ -325,7 +325,7 @@ class tutorial.chapter_05 extends basic_chapter switch (this.step) { case 1: - if(pot0==1){ + if(pot[0]==1){ //Creea un cuadro label local opt = 0 local del = false @@ -337,7 +337,7 @@ class tutorial.chapter_05 extends basic_chapter //return 0 break; case 2: - if (pot0==0){ + if (pot[0]==0){ local coora = coord3d(way5_fac7_fac8[0].x,way5_fac7_fac8[0].y,way5_fac7_fac8[0].z) local coorb = coord3d(way5_fac7_fac8[1].x,way5_fac7_fac8[1].y,way5_fac7_fac8[1].z) @@ -374,11 +374,11 @@ class tutorial.chapter_05 extends basic_chapter local text = "X" label_bord(way5_fac7_fac8_lim.a, way5_fac7_fac8_lim.b, opt, del, text) - pot0=1 + pot[0]=1 //return 10 } } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ local c_list = way5_fac7_fac8 local name = translate("Place Stop here!.") local load = good_alias.goods @@ -386,10 +386,10 @@ class tutorial.chapter_05 extends basic_chapter if (all_stop){ reset_glsw() - pot1=1 + pot[1]=1 } } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ local tile = my_tile(ch5_road_depot.a) if(!tile.find_object(mo_way)){ label_x.create(ch5_road_depot.a, pl_unown, translate("Place the Road here!.")) @@ -401,11 +401,11 @@ class tutorial.chapter_05 extends basic_chapter } else{ tile.remove_object(player_x(1), mo_label) - pot2=1 + pot[2]=1 } } } - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ cov_cir = get_convoy_nr((ch5_cov_lim1.a), d1_cnr) if (cov_cir == d1_cnr){ @@ -416,7 +416,7 @@ class tutorial.chapter_05 extends basic_chapter break; case 3: persistent.ch_max_sub_steps = 2 - if (pot0==0){ + if (pot[0]==0){ for(local j=0;j= ch5_cov_lim2.b){ sch_cov_correct = false - pot2=1 + pot[2]=1 } } - if (pot2==1 && pot3==0){ + if (pot[2]==1 && pot[3]==0){ persistent.ch_sub_step = 1 local c_dep = this.my_tile(ship_depot) local depot = depot_x(c_dep.x, c_dep.y, c_dep.z) @@ -613,7 +613,7 @@ class tutorial.chapter_05 extends basic_chapter local t_list = fab_list[j].c_list foreach(t in t_list){ if(pos.x == t.x && pos.y == t.y){ - pot0=1 + pot[0]=1 } } } @@ -621,7 +621,7 @@ class tutorial.chapter_05 extends basic_chapter break; case 2: - if(pot0==0){ + if(pot[0]==0){ if(pos.x>=way5_fac7_fac8_lim.a.x && pos.y>=way5_fac7_fac8_lim.a.y && pos.x<=way5_fac7_fac8_lim.b.x && pos.y<=way5_fac7_fac8_lim.b.y){ if (!way && label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." @@ -634,7 +634,7 @@ class tutorial.chapter_05 extends basic_chapter else return all_control(result, wt_road, st_flat, way, ribi, tool_id, pos, r_way.c, name) } } - else if(pot0==1 && pot1==0){ + else if(pot[0]==1 && pot[1]==0){ for(local j=0;j=ch5_road_depot.a.x && pos.y>=ch5_road_depot.a.y && pos.x<=ch5_road_depot.b.x && pos.y<=ch5_road_depot.b.y){ if(tool_id==tool_build_way || tool_id==tool_build_depot){ return null } } } - else if(pot2==1 && pot3==0){ + else if(pot[2]==1 && pot[3]==0){ if (tool_id==4108) { local c_list = way5_fac7_fac8 //Lista de todas las paradas local c_dep = ch5_road_depot.a //Coordeadas del deposito @@ -670,7 +670,7 @@ class tutorial.chapter_05 extends basic_chapter //Conectando los transformadores case 3: - if (pot0==0){ + if (pot[0]==0){ for(local j=0;j=way5_power_lim[j].a.x && pos.y>=way5_power_lim[j].a.y && pos.x<=way5_power_lim[j].b.x && pos.y<=way5_power_lim[j].b.y){ @@ -720,7 +720,7 @@ class tutorial.chapter_05 extends basic_chapter } break case 4: - if (pot0==1 && pot1==0){ + if (pot[0]==1 && pot[1]==0){ // Permite construir paradas if ( tool_id==tool_build_station ) { @@ -753,7 +753,7 @@ class tutorial.chapter_05 extends basic_chapter return translate("You can only delete the stops/extensions.") } } - if ( pot1==1 && pot2==0 ) { + if ( pot[1]==1 && pot[2]==0 ) { if (tool_id==4108) { local c_list = city1_post_halts //Lista de todas las paradas de autobus local c_dep = city1_road_depot //Coordeadas del deposito @@ -762,7 +762,7 @@ class tutorial.chapter_05 extends basic_chapter return is_stop_allowed(result, nr, c_list, pos) } } - if ( pot2==1 && pot3==0 ) { + if ( pot[2]==1 && pot[3]==0 ) { if (tool_id==4108) { local c_list = ch5_post_ship_halts //Lista de todas las paradas de autobus local c_dep = ship_depot //Coordeadas del deposito @@ -930,19 +930,19 @@ class tutorial.chapter_05 extends basic_chapter local player = player_x(0) switch (this.step) { case 1: - if(pot0==0) pot0=1 + if(pot[0]==0) pot[0]=1 return null break; case 2: - if (pot0==0){ + if (pot[0]==0){ local coora = coord3d(way5_fac7_fac8[0].x,way5_fac7_fac8[0].y,way5_fac7_fac8[0].z) local coorb = coord3d(way5_fac7_fac8[1].x,way5_fac7_fac8[1].y,way5_fac7_fac8[1].z) local t = command_x(tool_build_way) local err = t.work(player, coora, coorb, sc_way_name) } - if (pot2==0){ + if (pot[2]==0){ //Para la carretera local t_start = my_tile(ch5_road_depot.a) @@ -956,7 +956,7 @@ class tutorial.chapter_05 extends basic_chapter t.work(player, t_start, sc_dep_name) } - if (pot1==0){ + if (pot[1]==0){ for(local j=0;j=c1_track.a.x)&&(pos.y>=c1_track.a.y)&&(pos.x<=c1_track.b.x)&&(pos.y<=c1_track.b.y)){ // check selected way @@ -489,7 +489,7 @@ class tutorial.chapter_06 extends basic_chapter } else return translate("Build here") + ": ("+coord3d_to_string(c_way)+")!." } - else if (pot0==1 && pot1==0){ + else if (pot[0]==1 && pot[1]==0){ if (pos.x == c2_track.a.x && pos.y == c2_track.a.y){ if(tool_id == tool_remover || tool_id == tool_remove_way) return result else if(tool_build_way) return null @@ -517,7 +517,7 @@ class tutorial.chapter_06 extends basic_chapter else return translate("Build here") + ": ("+c_way.tostring()+")!." } - else if (pot1==1 && pot2==0){ + else if (pot[1]==1 && pot[2]==0){ if(pos.x == city1_city7_air[0].x && pos.y == city1_city7_air[0].y){ if(tool_id == tool_build_way){ if (way){ @@ -535,7 +535,7 @@ class tutorial.chapter_06 extends basic_chapter else return translate("Build here") + ": ("+city1_halt_airport[0].tostring()+")!." } - else if (pot2==1 && pot3==0){ + else if (pot[2]==1 && pot[3]==0){ if(pos.x == city1_halt_airport_extension[0].x && pos.y == city1_halt_airport_extension[0].y){ if(tool_id == tool_build_station){ if (buil){ @@ -547,7 +547,7 @@ class tutorial.chapter_06 extends basic_chapter else return translate("Build here") + ": ("+city1_halt_airport_extension[0].tostring()+")!." } - else if (pot3==1 && pot4==0){ + else if (pot[3]==1 && pot[4]==0){ if((pos.x == ch6_air_depot.b.x && pos.y == ch6_air_depot.b.y) || (pos.x == ch6_air_depot.a.x && pos.y == ch6_air_depot.a.y)){ if(tool_id == tool_build_way){ return null @@ -561,7 +561,7 @@ class tutorial.chapter_06 extends basic_chapter } else return translate("Build here") + ": ("+ch6_air_depot.a.tostring()+")!." } - else if (pot4==1 && pot5==0){ + else if (pot[4]==1 && pot[5]==0){ if(pos.x == city1_halt_airport[0].x && pos.y == city1_halt_airport[0].y){ if(tool_id == tool_make_stop_public){ if(buil){ @@ -607,7 +607,7 @@ class tutorial.chapter_06 extends basic_chapter break; case 4: - if (pot0==0){ + if (pot[0]==0){ if(pos.x == city7_road_depot.x && pos.y == city7_road_depot.y){ if(tool_id == tool_build_depot){ if(depot){ @@ -618,7 +618,7 @@ class tutorial.chapter_06 extends basic_chapter } else return translate("Build here") + ": ("+city7_road_depot.tostring()+")!." } - if (pot0==1 && pot1==0){ + if (pot[0]==1 && pot[1]==0){ if (tool_id==4108) { local c_list = city7_halt //Lista de todas las paradas de autobus local c_dep = city7_road_depot //Coordeadas del deposito @@ -819,7 +819,7 @@ class tutorial.chapter_06 extends basic_chapter switch (this.step) { case 1: // Pista de aterrizaje -------------------------- - if(pot0 == 0) { + if(pot[0] == 0) { local coora = my_tile(c1_track.a) local coorb = my_tile(c1_track.b) @@ -850,7 +850,7 @@ class tutorial.chapter_06 extends basic_chapter } // Pista de maniobras -------------------------- - if(pot1 == 0) { + if(pot[1] == 0) { local coora = my_tile(c2_track.a) local coorb = my_tile(c2_track.b) @@ -883,7 +883,7 @@ class tutorial.chapter_06 extends basic_chapter t.work(player, coora, coorb, obj2_way_name) } // Parada aerea --------------------------------- - if(pot2 == 0) { + if(pot[2] == 0) { local tile = my_tile(city1_city7_air[0]) tile.remove_object(player_x(1), mo_label) local t = command_x(tool_build_station) @@ -892,7 +892,7 @@ class tutorial.chapter_06 extends basic_chapter t.work(player, tile) } // Terminal ------------------------------------- - if(pot3 == 0) { + if(pot[3] == 0) { local tile = my_tile(city1_halt_airport_extension[0]) tile.remove_object(player_x(1), mo_label) local t = command_x(tool_build_station) @@ -900,7 +900,7 @@ class tutorial.chapter_06 extends basic_chapter } // Hangar -------------------------------------- - if(pot4 == 0) { + if(pot[4] == 0) { local coora = my_tile(ch6_air_depot.a) local coorb = my_tile(ch6_air_depot.b) local t = command_x(tool_build_way) @@ -909,7 +909,7 @@ class tutorial.chapter_06 extends basic_chapter t = command_x(tool_build_depot) t.work(player, tile, sc_dep1) } - if(pot5 == 0) { + if(pot[5] == 0) { local t = command_x(tool_make_stop_public) t.work(player, my_tile(city1_halt_airport[0]), "") } @@ -988,11 +988,11 @@ class tutorial.chapter_06 extends basic_chapter break; case 4: local c_depot = my_tile(city7_road_depot) - if(pot0==0){ + if(pot[0]==0){ local tool = command_x(tool_build_depot) tool.work(player, c_depot, sc_dep2) - pot0=1 + pot[0]=1 } comm_destroy_convoy(player, c_depot) // Limpia los vehiculos del deposito //gui.add_message(""+current_cov+" -- "+ch6_cov_lim3.a +" -- "+ ch6_cov_lim3.b) diff --git a/scenario.nut b/scenario.nut index 397acd2..12a69cf 100644 --- a/scenario.nut +++ b/scenario.nut @@ -82,17 +82,8 @@ glsw.resize(20, 0) pglsw <- [] pglsw.resize(20, 0) -pot0 <- 0 -pot1 <- 0 -pot2 <- 0 -pot3 <- 0 -pot4 <- 0 -pot5 <- 0 -pot6 <- 0 -pot7 <- 0 -pot8 <- 0 -pot9 <- 0 -pot10 <- 0 +pot <- [] +pot.resize(11, 0) //---------------------Global vehicle counter---------------------------- persistent.gcov_nr <- 0 @@ -892,16 +883,9 @@ function resume_game() sigcoord = persistent.sigcoord ignore_save = persistent.ignore_save - pot0=persistent.pot[0] - pot1=persistent.pot[1] - pot2=persistent.pot[2] - pot3=persistent.pot[3] - pot4=persistent.pot[4] - pot5=persistent.pot[5] - pot6=persistent.pot[6] - pot7=persistent.pot[7] - pot8=persistent.pot[8] - pot9=persistent.pot[9] + // copy persistent.pot[] to pot[] + pot.clear() + pot.extend(persistent.pot) gl_percentage = persistent.gl_percentage From 42a2cb169ffd82b091c21c21d3ddd1900b6835ba Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 30 Jan 2026 18:55:53 +0100 Subject: [PATCH 187/217] FIX depot search --- class/class_basic_chapter.nut | 4 ++-- class/class_chapter_03.nut | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 6f47aa1..d0eed2a 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3525,7 +3525,7 @@ function find_tiles_after_tile(tile) { * @fn find_object(obj, wt, speed, good) * find object tool * - * @param obj = object type ( bridge, tunnel, way, catenary, station, extension ) + * @param obj = object type ( bridge, tunnel, way, catenary, station, extension, depot ) * @param wt = waytype * @param speed = speed - null by station, extension * @param good = good @@ -3575,7 +3575,7 @@ function find_object(obj, wt, speed = null, good = null) { case "depot": list = building_desc_x.get_building_list(building_desc_x.depot) for ( local i = 0; i < list.len(); i++ ) { - if ( list[i].get_waytype() == wt ) { + if ( list[i].get_waytype() == wt && list[i].get_type() == building_desc_x.depot) { return list[i] } } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 2682d03..6c6a7bc 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -758,7 +758,6 @@ class tutorial.chapter_03 extends basic_chapter local tile = my_tile(ch3_rail_depot1.b) if(pot[0]==0){ local c_list = [my_tile(ch3_rail_depot1.b), my_tile(ch3_rail_depot1.a)] - local siz = c_list.len() local next_mark = true try { @@ -2256,7 +2255,6 @@ class tutorial.chapter_03 extends basic_chapter return null break case 4: - if(pot[0]==0){ local t_start = my_tile(ch3_rail_depot1.a) local t_end = my_tile(ch3_rail_depot1.b) From 8e8e51a9852684cfa47a0e7c229ad164733f1574 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 31 Jan 2026 22:50:45 +0100 Subject: [PATCH 188/217] CHG clean up code --- class/class_basic_chapter.nut | 163 +++++++++++++--------------------- class/class_chapter_02.nut | 43 +++++---- class/class_chapter_05.nut | 17 +++- class/class_messages.nut | 9 +- de.tab | 16 +--- en.tab | 6 +- es.tab | 16 +--- 7 files changed, 113 insertions(+), 157 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index d0eed2a..4206c44 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2503,50 +2503,50 @@ class basic_chapter return false } - function build_stop(c_list, tile, way, slope, ribi, label, pos) + /** + * check the pos tile to build halt + * + */ + function build_stop(c_list, pos) { - local result = 0 - if (!way) - return translate("You can only build stops on roads")+" ("+pos.tostring()+")." - else if (slope!=0) - return translate("You can only build stops on flat ground")+" ("+pos.tostring()+")." - else if (label && label.get_text()=="X") + local t = tile_x(pos.x, pos.y, pos.z) + local bridge = t.find_object(mo_bridge) + + local label = t.find_object(mo_label) + if ( label && label.get_text() == "X" ) return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." - else if (ribi==3 || ribi==6 || ribi==9 || ribi==12) - return translate("You can only build on a straight road")+" ("+pos.tostring()+")." - else if (ribi==7 || ribi==11 || ribi==13 || ribi==14 || ribi==15) - return translate("It is not possible to build stops at intersections")+" ("+pos.tostring()+")." - for( local j = 0; j < c_list.len(); j++ ) { - local halt = tile_x(c_list[j].x, c_list[j].y, 0).get_halt() - if (halt){ - local name = halt.get_name() - local is_good = halt.accepts_good(good_desc_x(good_alias.passa)) - if (!is_good){ - return format(translate("The %s stop must be for %s"), name, translate("Passagiere"))+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." - } - } - } - for ( local j = 0 ; j < c_list.len() ; j++ ) { - local st_c = coord(c_list[j].x, c_list[j].y) - local mail = good_alias.mail - local goods = good_alias.goods - if ((pos.x == st_c.x) && (pos.y == st_c.y)){ + local way = t.find_object(mo_way) + if ( !way ) + return translate("No suitable way on the ground!") // base text error message + + local ribi = way.get_dirs() + if ( !dir.is_straight(ribi) || t.get_slope() != 0 ) + return translate("No suitable way on the ground!") // base text error message + + + for ( local j = 0; j < c_list.len(); j++ ) { + if ( pos.x == c_list[j].x && pos.y == c_list[j].y ) { if ( glsw[j] == 0 ) { way.unmark() return null - } - else + } else { return translate("There is already a stop here")+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." - } - else if ( glsw[j] == 0 ) - result = translate("Place the stops at the marked points")+" ("+coord(c_list[j].x,c_list[j].y).tostring()+")." + } + }/* else if ( glsw[j] == 0 ) { + return + }*/ } - return result + + return translate("Place the stops at the marked points.") } + /** + * + * + */ function get_build_load_type(desc) { local list = [] @@ -2562,6 +2562,10 @@ class basic_chapter return list } + /** + * + * + */ function station_compare_load(good, g_list) { local is_good = false @@ -2587,6 +2591,10 @@ class basic_chapter return is_good } + /** + * + * + */ function get_good_text(good) { local tx = "" @@ -2604,6 +2612,10 @@ class basic_chapter return tx } + /** + * + * + */ function get_build_name(siz, desc, freight, wt) { local list = building_desc_x.get_available_stations(desc, wt, good_desc_x(freight)) @@ -2616,6 +2628,10 @@ class basic_chapter return "No have build!" } + /** + * + * + */ function get_way_name(kh, wt, st) { local list = way_desc_x.get_available_ways(wt, st) @@ -2628,70 +2644,10 @@ class basic_chapter return "No have way!" } - function build_stop_ex ( list, tile ) - { - local result = 0 - for(local j=0; j < list.len(); j++){ - - if ( glsw[j]==1 ) { - continue - } - - local name = get_obj_ch5(6) - local good = get_good_data(6, 2) - local tile = my_tile(list[j].a) - local buil = tile.find_object(mo_building) - local halt = tile.get_halt() - - local accept_post = null - local halt_name = null - if ( halt != null ) { - //accept_post = halt.accepts_good(good_desc_x(good)) - //gui.add_message(coord3d_to_string(tile) + " accept_post " + accept_post) - halt_name = halt.get_name() - } - - if(buil){ - local desc = buil.get_desc() - local g_list = get_build_load_type(desc) - local is_good = station_compare_load(good, g_list) - if (!is_good){ - local tx_good = get_good_text(good) - local tx = "The extension building for station [%s] must be for [%s], use the 'Remove' tool" - return format(translate(tx), halt_name, tx_good)+" ("+c.tostring()+")." - } - - local build_name = buil.get_desc().get_name() - local st_name = translate(""+name+"") - if (name != "" && build_name != name){ - local tx = "The extension building for station [%s] must be a [%s], use the 'Remove' tool" - return format(translate(tx), halt_name, st_name )+" ("+c.tostring()+")." - } - - - } /*else if ( accept_post ) { - }*/ - - - } - - for ( local j = 0; j < list.len(); j++ ) { - local c = list[j].a - //gui.add_message("a "+glsw[j]) - if ((tile.x == c.x) && (tile.y == c.y)){ - if ( glsw[j] == 0 ) { - return null - } - else - return translate("This stop already accepts mail.")+" ("+c.tostring()+")" - } - else if ( glsw[j] == 0 ) - result = translate("Place the extension building at the marked point")+" ("+c.tostring()+")." - } - return result - - } - + /** + * + * + */ function delete_stop(c_list, way, pos) { for( local j = 0 ; j < c_list.len(); j++ ) { @@ -3186,6 +3142,14 @@ function check_halt_wt(halt, search_wt) { return null } +/** + * create halt list for text from tiles array + * + * @param array tile_x coord_list + * + * @return string + * + */ function create_halt_list(cord_list) { local list_tx = "" local c_list = cord_list @@ -3219,7 +3183,7 @@ function create_schedule_list(coord_list) { continue } if(tmpsw[j]==0){ - list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+"("+c.tostring()+")")) + list_tx += format("%s %d: %s
", translate("Stop"), j+1, c.href(st_halt.get_name()+" ("+c.tostring()+")")) } else{ list_tx += format("%s %d: %s %s
", translate("Stop"), j+1, st_halt.get_name(), translate("OK")) @@ -3522,13 +3486,14 @@ function find_tiles_after_tile(tile) { /** - * @fn find_object(obj, wt, speed, good) * find object tool * * @param obj = object type ( bridge, tunnel, way, catenary, station, extension, depot ) * @param wt = waytype - * @param speed = speed - null by station, extension + * @param speed = speed - null by station, extension, depot * @param good = good + * + * @return object */ function find_object(obj, wt, speed = null, good = null) { diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index c5f7aa5..d70a9ec 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -694,21 +694,21 @@ class tutorial.chapter_02 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { local t = tile_x(pos.x, pos.y, pos.z) - local ribi = 0 - local slope = t.get_slope() - local way = t.find_object(mo_way) - local bridge = t.find_object(mo_bridge) - local build = t.find_object(mo_building) + //local ribi = 0 + //local slope = t.get_slope() + //local way = t.find_object(mo_way) + //local bridge = t.find_object(mo_bridge) + //local build = t.find_object(mo_building) local label = t.find_object(mo_label) - local car = t.find_object(mo_car) - if (way){ - if (tool_id!=tool_build_bridge) + //local car = t.find_object(mo_car) + /*if (way){ + if ( tool_id != tool_build_bridge ) ribi = way.get_dirs() - if (!t.has_way(gl_wt)) + if ( !t.has_way(gl_wt) ) ribi = 0 - } - local st_c = coord(pos.x,pos.y) - local result=null // null is equivalent to 'allowed' + }*/ + //local st_c = coord(pos.x,pos.y) + local result = null // null is equivalent to 'allowed' result = translate("Action not allowed")+" ("+pos.tostring()+")." gltool = tool_id switch (this.step) { @@ -716,16 +716,17 @@ class tutorial.chapter_02 extends basic_chapter case 1: if (tool_id==tool_build_way){ local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) - local str_c = tool.start_pos + local str_c = tile_x(tool.start_pos.x, tool.start_pos.y, tool.start_pos.z) + //local str_way = str_c.is_valid () ? t.find_object(mo_way) : null local str_way = world.is_coord_valid(str_c)? tile_x(str_c.x, str_c.y, str_c.z).find_object(mo_way) : null - foreach(desc in way_desc){ - if(desc.get_name() == name){ + foreach ( desc in way_desc ) { + if ( desc.get_name() == name ) { for ( local i = 0; i < build_list.len()-1; i++ ) { - if ( ((pos.x==build_list[i].x)&&(pos.y==build_list[i].y)) || ((pos.x==city1_road_depot.x)&&(pos.y==city1_road_depot.y)) ) { + if ( ( pos.x == build_list[i].x && pos.y == build_list[i].y ) || ( pos.x == city1_road_depot.x && pos.y == city1_road_depot.y ) ) { if(cursor_control(build_list[i])){ return null } - if(!str_way){ + if( !str_way ){ return null } } @@ -761,10 +762,9 @@ class tutorial.chapter_02 extends basic_chapter if ( tool_id == tool_build_station ) { // check selected halt accept passenger local s = check_select_station(name, wt_road, good_alias.passa) - if ( s != null ) return s + if ( s != null ) { return s } - local c_st = city1_halt_1 - return build_stop(c_st, t, way, slope, ribi, label, pos) + return build_stop(city1_halt_1, pos) } //Permite eliminar paradas @@ -842,8 +842,7 @@ class tutorial.chapter_02 extends basic_chapter local s = check_select_station(name, wt_road, good_alias.passa) if ( s != null ) return s - local c_st = city2_halt_1 - return build_stop(c_st, t, way, slope, ribi, label, pos) + return build_stop(city2_halt_1, pos) } else diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index f36d968..543f8ad 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -720,7 +720,7 @@ class tutorial.chapter_05 extends basic_chapter } break case 4: - if (pot[0]==1 && pot[1]==0){ + if ( pot[0] == 1 && pot[1] == 0 ) { // Permite construir paradas if ( tool_id==tool_build_station ) { @@ -734,9 +734,20 @@ class tutorial.chapter_05 extends basic_chapter } // check selected halt accept mail local s = check_select_station(name, wt, good_alias.mail) - if ( s != null ) return s + if ( s != null ) { return s } - return build_stop_ex(extensions_tiles, t) + for ( local j = 0; j < extensions_tiles.len(); j++ ) { + if ( pos.x == extensions_tiles[j].a.x && pos.y == extensions_tiles[j].a.y ) { + if ( glsw[j] == 0 ) { + return null + } else { + return translate("This stop already accepts mail.") + } + } else if ( glsw[j] == 0 ) { + return translate("Place the mail extension at the marked tiles.") + } + + } } // Permite eliminar paradas diff --git a/class/class_messages.nut b/class/class_messages.nut index 6dec9bd..9f3489e 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -1,9 +1,8 @@ /** - * list messages - * - * - * - */ + * @file class_messages.nut + * @brief list messages + * + */ /** * chapter texts diff --git a/de.tab b/de.tab index 8088976..930e545 100644 --- a/de.tab +++ b/de.tab @@ -100,8 +100,6 @@ It is not allowed to start vehicles. Fahrzeuge dürfen nicht gestartet werden. It is not flat terrain. Dies ist keine flache Ebene. -It is not possible to build stops at intersections -Es ist nicht möglich, Haltestellen an Kreuzungen zu bauen It must be a block signal! Es muss ein Blocksignal sein! It must be a slope. @@ -154,8 +152,8 @@ Place the Road here!. Platzieren Sie die Straße hier Place the shipyard here Platzieren Sie die Werft hier -Place the stops at the marked points -Platzieren Sie die Stationen an den markierten Stellen +Place the stops at the marked points. +Platzieren Sie die Stationen an den markierten Stellen. Press [Ctrl] to build a tunnel entrance here Drücken Sie [Strg], um hier einen Tunneleingang zu erstellen Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time at the first stop!. @@ -198,8 +196,6 @@ Taking to the Air In die Luft gehen Text label Textmarker -The %s stop must be for %s -Stop [%s] muss für [%s] sein. Verwenden Sie das Werkzeug 'Entfernen' The bus must be [Passengers]. Der Bus muss [Passagiere] befördern können. The cabin: @@ -320,12 +316,8 @@ Updating text ... Waiting ... Text aktualisieren ... Bitte warten ... You are outside the allowed limits! Sie befinden sich außerhalb der zulässigen Grenzen! -You can only build on a straight road -Sie können nur auf einer geraden Straße bauen You can only build stops on flat ground Sie können Halte nur auf ebenem Boden bauen -You can only build stops on roads -Sie können nur auf Straßen Haltestellen bauen You can only delete the stations. Sie können nur den Bahnhof löschen You can only delete the stops. @@ -386,8 +378,8 @@ Selected harbour accept not %s. Ausgewählter Hafen akzeptiert keine %s. #_________________________________error message_________________________________ #_________________________________error message_________________________________ -Place the extension building at the marked point -Platzieren Sie den Erweiterungsbau an der markierten Stelle +Place the mail extension at the marked tiles. +Platzieren Sie den Post Erweiterungsbau an den markierten Stellen. Selected extension accept not %s. Ausgewählte Erweiterung akzeptiert keine %s. Selected halt accept not %s. diff --git a/en.tab b/en.tab index 7a21276..40b0fcb 100644 --- a/en.tab +++ b/en.tab @@ -34,8 +34,6 @@ Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time Press the [Copy Backward] button, then set Minimum Load and Depart after at the first stop! Straight slope here Steep slope here -The %s stop must be for %s -Stop [%s] must be for [%s], use the 'Remove' tool The load of waystop {nr} '{name}' isn't {load}% {pos} The load of waystop {name} isn't {load}% {pos} The waittime in waystop {nr} '{name}' isn't {wait} {pos} @@ -46,7 +44,7 @@ HWRead #_________________________________errer message_________________________________ #_________________________________error message_________________________________ #_________________________________error message_________________________________ -Place the extension building at the marked point -Place the extension building at the marked points +Place the mail extension at the marked tiles. +Place the post extension building in the marked tiles. Selected halt accept not %s. Selected halt accept not %s diff --git a/es.tab b/es.tab index c299804..2e6b612 100644 --- a/es.tab +++ b/es.tab @@ -100,8 +100,6 @@ It is not allowed to start vehicles. No está permitido arrancar vehículos. It is not flat terrain. No es terreno llano. -It is not possible to build stops at intersections -No es posible construir paradas en intersecciones It must be a block signal! Debe ser una señal de bloqueo It must be a slope. @@ -156,8 +154,8 @@ Place the Road here!. Coloca la Carretera aquí. Place the shipyard here Coloca el astillero aquí -Place the stops at the marked points -Coloca las paradas en los puntos marcados +Place the stops at the marked points. +Coloca las paradas en los puntos marcados. Press [Ctrl] to build a tunnel entrance here Presiona [Ctrl] para construir la entrada del Túnel aquí: Press the [Copy Backward] button, then set the Minimum Load and Month Wait Time at the first stop!. @@ -202,8 +200,6 @@ Taking to the Air Ascendiendo a los Cielos Text label Marcador de texto -The %s stop must be for %s -La parada (%s) debe ser para %s, usa la herramienta [Eliminar] para quitarla The bus must be [Passengers]. El Autobús debe ser para [Pasajeros]. The cabin: @@ -324,12 +320,8 @@ Updating text ... Waiting ... Actualizando texto ... Esperando ... You are outside the allowed limits! ¡Estás fuera de los límites permitidos! -You can only build on a straight road -Solo puedes construir paradas en carreteras rectas You can only build stops on flat ground Solo puedes construir paradas en terreno llano -You can only build stops on roads -Solo puedes construir paradas en carreteras You can only delete the stations. Solo puedes eliminar estaciones. You can only delete the stops. @@ -390,8 +382,8 @@ Selected harbour accept not %s. El puerto seleccionado no acepta %s. #_________________________________error message_________________________________ #_________________________________error message_________________________________ -Place the extension building at the marked point -Coloque el edificio de ampliación en el punto marcado +Place the mail extension at the marked tiles. +Coloque el edificio de extensión de postes en las ubicaciones marcadas. Selected extension accept not %s. La extensión seleccionada no acepta %s. Selected halt accept not %s. From 5376b1ab11d705266329a524f03b3dea43750212 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 1 Feb 2026 01:10:53 +0100 Subject: [PATCH 189/217] FIX autobuild canal --- class/class_chapter_04.nut | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index b393a2e..90b10c6 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -54,7 +54,7 @@ class tutorial.chapter_04 extends basic_chapter //Script //---------------------------------------------------------------------------------- - sc_way_name = get_obj_ch4(1) + sc_way_name = null sc_dock_name1 = get_obj_ch4(2) sc_dock_name2 = get_obj_ch4(3) sc_dock_name3 = get_obj_ch4(4) @@ -79,7 +79,7 @@ class tutorial.chapter_04 extends basic_chapter /// set depot name sc_dep_name = find_object("depot", wt_water).get_name() /// set way canal - sc_way_name = find_object("way", wt_water, 10) //get_obj_ch4(1) + sc_way_name = find_object("way", wt_water, 10).get_name() //get_obj_ch4(1) d1_cnr = get_dep_cov_nr(ch4_cov_lim1.a,ch4_cov_lim1.b) d2_cnr = get_dep_cov_nr(ch4_cov_lim2.a,ch4_cov_lim2.b) From e8e34fa7c50c43b5126a8ecee3a42cb54135db94 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 1 Feb 2026 01:24:40 +0100 Subject: [PATCH 190/217] FIX wrong parameter --- class/class_chapter_05.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 543f8ad..7507e80 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -228,7 +228,7 @@ class tutorial.chapter_05 extends basic_chapter local list_tx = "" local c_list = city1_post_halts - for ( local j = 0; j < list.len(); j++ ) { + for ( local j = 0; j < c_list.len(); j++ ) { local c = coord(c_list[j].x, c_list[j].y) local tile = my_tile(c) local st_halt = tile.get_halt() From da37550ccba03d0a12e669edcf3c63c63de94755 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 1 Feb 2026 13:12:49 +0100 Subject: [PATCH 191/217] FIX check click curisity --- class/class_chapter_01.nut | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 54f6db0..642f5b5 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -197,23 +197,24 @@ class tutorial.chapter_01 extends basic_chapter case 3: if(tool_id == 4096) { if(pot[0]==0){ - if ((pos.x == city1_mon.x)&&(pos.y == city1_mon.y)){ + if ( pos.x == city1_mon.x && pos.y == city1_mon.y ) { pot[0] = 1 return null } } - else if (pot[1]==1 && pot[2]==0){ - if ((pos.x == city1_cur.x)&&(pos.y == city1_cur.y)){ - pot[2] = 1 - return null + else if ( pot[1] == 1 && pot[2] == 0 ) { + foreach(t in c_list_cur){ + if(pos.x == t.x && pos.y == t.y) { + pot[2] = 1 + return null + } } } } break case 4: if (tool_id == 4096){ - local list = cit_list - foreach(t in list){ + foreach( t in cit_list ) { if(pos.x == t.x && pos.y == t.y) { pot[0] = 1 return null From b2b8c76704b8a131f407172a116dbb322a3f2a30 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 1 Feb 2026 13:48:30 +0100 Subject: [PATCH 192/217] CHG coords pak64.german --- class/class_basic_coords_p64g.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index 7c361d4..fdd7409 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -8,15 +8,15 @@ * * */ -city1_limit1 <- {a = coord(109,181), b = coord(128,193)} +city1_limit1 <- {a = coord(109,180), b = coord(128,193)} city2_limit1 <- {a = coord(120,150), b = coord(138,159)} bridge1_limit <- {a = coord(119,193), b = coord(128,201)} c_bridge1_limit1 <- {a = coord(126,192), b = coord(126,196)} change1_city1_limit1 <- {a = coord(120,193), b = coord(127,193)} -c_dock1_limit <- {a = coord(128,181), b = coord(135,193)} -change2_city1_limit1 <- {a = coord(128,182), b = coord(128,192)} +c_dock1_limit <- {a = coord(128,180), b = coord(135,193)} +change2_city1_limit1 <- {a = coord(128,181), b = coord(128,192)} c_way_limit1 <- {a = coord(127,159), b = coord(133,187)} From 41d5d1e083c18feda9684da050349949a9aa2134 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 1 Feb 2026 17:42:01 +0100 Subject: [PATCH 193/217] CHG optimize code --- class/class_chapter_01.nut | 16 ++++++---------- class/class_chapter_03.nut | 18 ++++++------------ class/class_chapter_04.nut | 24 +++++++++--------------- 3 files changed, 21 insertions(+), 37 deletions(-) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 642f5b5..8b4e78b 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -203,22 +203,18 @@ class tutorial.chapter_01 extends basic_chapter } } else if ( pot[1] == 1 && pot[2] == 0 ) { - foreach(t in c_list_cur){ - if(pos.x == t.x && pos.y == t.y) { - pot[2] = 1 - return null - } + if ( search_tile_in_tiles(c_list_cur, pos) ) { + pot[2] = 1 + return null } } } break case 4: if (tool_id == 4096){ - foreach( t in cit_list ) { - if(pos.x == t.x && pos.y == t.y) { - pot[0] = 1 - return null - } + if ( search_tile_in_tiles(cit_list, pos) ) { + pot[0] = 1 + return null } } break diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 6c6a7bc..bc15c19 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1364,21 +1364,15 @@ class tutorial.chapter_03 extends basic_chapter case 1: if (tool_id == 4096){ if (pot[0]==0){ - local list = fac_2.c_list - foreach(t in list){ - if(pos.x == t.x && pos.y == t.y) { - pot[0] = 1 - return null - } + if ( search_tile_in_tiles(fac_2.c_list, pos) { + pot[0] = 1 + return null } } else if (pot[1]==1){ - local list = fac_1.c_list - foreach(t in list){ - if(pos.x == t.x && pos.y == t.y) { - pot[2] = 1 - return null - } + if ( search_tile_in_tiles(fac_1.c_list, pos) { + pot[2] = 1 + return null } } } diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 90b10c6..c74898b 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -459,23 +459,17 @@ class tutorial.chapter_04 extends basic_chapter switch (this.step) { case 1: - if (tool_id == 4096){ - if (pot[0]==0){ - local list = fac_2.c_list - foreach(t in list){ - if(pos.x == t.x && pos.y == t.y) { - pot[0] = 1 - return null - } + if ( tool_id == 4096) { + if ( pot[0] == 0 ) { + if ( search_tile_in_tiles(fac_2.c_list, pos) { + pot[0] = 1 + return null } } - else if (pot[1]==1){ - local list = fac_1.c_list - foreach(t in list){ - if(pos.x == t.x && pos.y == t.y) { - pot[2] = 1 - return null - } + else if ( pot[1] == 1 ) { + if ( search_tile_in_tiles(fac_1.c_list, pos) { + pot[2] = 1 + return null } } } From 5b5ce607e31b23de9361f17c57150761bcc4f668 Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 2 Feb 2026 23:24:56 +0100 Subject: [PATCH 194/217] FIX typo --- class/class_chapter_03.nut | 7 ++----- class/class_chapter_04.nut | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index bc15c19..64ff93e 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -758,7 +758,6 @@ class tutorial.chapter_03 extends basic_chapter local tile = my_tile(ch3_rail_depot1.b) if(pot[0]==0){ local c_list = [my_tile(ch3_rail_depot1.b), my_tile(ch3_rail_depot1.a)] - local next_mark = true try { next_mark = delay_mark_tile(c_list) @@ -1018,8 +1017,6 @@ class tutorial.chapter_03 extends basic_chapter local tile = my_tile(ch3_rail_depot2.a) if(pot[0]==0){ local c_list = [my_tile(ch3_rail_depot2.b), my_tile(ch3_rail_depot2.a)] - local siz = c_list.len() - local next_mark = true try { next_mark = delay_mark_tile(c_list) @@ -1364,13 +1361,13 @@ class tutorial.chapter_03 extends basic_chapter case 1: if (tool_id == 4096){ if (pot[0]==0){ - if ( search_tile_in_tiles(fac_2.c_list, pos) { + if ( search_tile_in_tiles(fac_2.c_list, pos) ) { pot[0] = 1 return null } } else if (pot[1]==1){ - if ( search_tile_in_tiles(fac_1.c_list, pos) { + if ( search_tile_in_tiles(fac_1.c_list, pos) ) { pot[2] = 1 return null } diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index c74898b..d4c35e5 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -461,13 +461,13 @@ class tutorial.chapter_04 extends basic_chapter case 1: if ( tool_id == 4096) { if ( pot[0] == 0 ) { - if ( search_tile_in_tiles(fac_2.c_list, pos) { + if ( search_tile_in_tiles(fac_2.c_list, pos) ) { pot[0] = 1 return null } } else if ( pot[1] == 1 ) { - if ( search_tile_in_tiles(fac_1.c_list, pos) { + if ( search_tile_in_tiles(fac_1.c_list, pos) ) { pot[2] = 1 return null } From b452ce924ed26d0bccc7dd780abbf988783cd8ec Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 3 Feb 2026 01:00:07 +0100 Subject: [PATCH 195/217] CHG clean up code --- class/class_basic_chapter.nut | 11 ++++++- class/class_chapter_02.nut | 4 +-- class/class_chapter_03.nut | 56 +++++++++++++++++------------------ class/class_chapter_05.nut | 4 +-- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 4206c44..83d9811 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1702,10 +1702,19 @@ class basic_chapter } - function all_control(result, wt, st, way, ribi, tool_id, pos, coor, name, plus = 0){ + function all_control(result, wt, st, tool_id, pos, coor, name, plus = 0){ local t = tile_x(coor.x, coor.y, coor.z) + local way = t.find_object(mo_way) local brig = t.find_object(mo_bridge) local desc = way_desc_x.get_available_ways(wt, st) + local ribi = 0 + if ( way ) { + if ( tool_id != tool_build_bridge ) + ribi = way.get_dirs() + if ( !t.has_way(gl_wt) ) + ribi = 0 + } + if ((tool_id==tool_remove_way)||(tool_id==tool_remover)){ if (way && way.get_waytype() != wt) return result diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index d70a9ec..a675070 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -694,13 +694,13 @@ class tutorial.chapter_02 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { local t = tile_x(pos.x, pos.y, pos.z) - //local ribi = 0 //local slope = t.get_slope() //local way = t.find_object(mo_way) //local bridge = t.find_object(mo_bridge) //local build = t.find_object(mo_building) local label = t.find_object(mo_label) //local car = t.find_object(mo_car) + //local ribi = 0 /*if (way){ if ( tool_id != tool_build_bridge ) ribi = way.get_dirs() @@ -872,7 +872,7 @@ class tutorial.chapter_02 extends basic_chapter return null } else - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 64ff93e..edf19ba 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1334,22 +1334,22 @@ class tutorial.chapter_03 extends basic_chapter gl_tool = tool_id //glpos = coord3d(pos.x, pos.y, pos.z) local t = tile_x(pos.x, pos.y, pos.z) - local ribi = 0 + //local ribi = 0 local wt = 0 local slope = t.get_slope() - local way = t.find_object(mo_way) + //local way = t.find_object(mo_way) local bridge = t.find_object(mo_bridge) local label = t.find_object(mo_label) local building = t.find_object(mo_building) local sign = t.find_object(mo_signal) local roadsign = t.find_object(mo_roadsign) - if (way){ + /*if (way){ wt = way.get_waytype() if (tool_id!=tool_build_bridge) ribi = way.get_dirs() if (!t.has_way(wt_rail)) ribi = 0 - } + }*/ local fac_1 = factory_data.rawget("1") local fac_2 = factory_data.rawget("2") @@ -1399,13 +1399,13 @@ class tutorial.chapter_03 extends basic_chapter } } if (pos.x>=limit_ch3_rail_line_1a.a.x && pos.y>=limit_ch3_rail_line_1a.a.y && pos.x<=limit_ch3_rail_line_1a.b.x && pos.y<=limit_ch3_rail_line_1a.b.y){ - if (!way && label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." + if ( label && label.get_text() == "X" ) { + return translate("Indicates the limits for using construction tools")+" ( "+coord3d_to_string(pos)+")." } - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Construye un puente if (pot[0]==1 && pot[1]==0){ @@ -1414,23 +1414,23 @@ class tutorial.chapter_03 extends basic_chapter return null } else - return translate("You must build the bridge here")+" ("+bridge2_coords.a.tostring()+")." + return translate("You must build the bridge here")+" ("+coord3d_to_string(bridge2_coords.a)+")." } //Segundo tramo de rieles if (pot[1]==1&&pot[2]==0){ if (pos.x>=way2_fac1_fac2[5].x && pos.y>=way2_fac1_fac2[5].y && pos.x<=way2_fac1_fac2[4].x && pos.y<=way2_fac1_fac2[4].y){ if(tool_id==tool_build_bridge) return result - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } if (pos.x>=limit_ch3_rail_line_1b.a.x && pos.y>=limit_ch3_rail_line_1b.a.y && pos.x<=limit_ch3_rail_line_1b.b.x && pos.y<=limit_ch3_rail_line_1b.b.y){ - if (!way && label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + if ( label && label.get_text() == "X" ) { + return translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." } - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } break; @@ -1553,7 +1553,7 @@ class tutorial.chapter_03 extends basic_chapter if (label && label.get_text()=="X"){ return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." } - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." @@ -1572,17 +1572,17 @@ class tutorial.chapter_03 extends basic_chapter if (pos.x>=way2_fac2_fac3[4].x && pos.y>=way2_fac2_fac3[4].y && pos.x<=way2_fac2_fac3[5].x && pos.y<=way2_fac2_fac3[5].y){ if(tool_id==tool_build_bridge) return result - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } if (pos.x>=limit_ch3_rail_line_2b.a.x && pos.y>=limit_ch3_rail_line_2b.a.y && pos.x<=limit_ch3_rail_line_2b.b.x && pos.y<=limit_ch3_rail_line_2b.b.y){ - if (!way && label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + if ( label && label.get_text()=="X"){ + return translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." } - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Estaciones de la Fabrica else if (pot[2]==1 && pot[3]==0){ @@ -1617,7 +1617,7 @@ class tutorial.chapter_03 extends basic_chapter if(tool_id==tool_build_way) return null else - return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." + return translate("You must build track in")+" ("+coord3d_to_string(ch3_rail_depot2.a)+")." } else if (pot[0]==1 && pot[1]==0) if(tool_id==tool_build_depot) @@ -1680,10 +1680,10 @@ class tutorial.chapter_03 extends basic_chapter if (pot[0]==0){ if (pos.x>=c_way3_lim.a.x && pos.y<=c_way3_lim.a.y && pos.x<=c_way3_lim.b.x && pos.y>=c_way3_lim.b.y){ if (tool_id==tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } } - else return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + else return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Construye un puente else if (pot[0]==1 && pot[1]==0){ @@ -1730,7 +1730,7 @@ class tutorial.chapter_03 extends basic_chapter if (pos.x>=c_way3_tun_limit.a.x && pos.y<=c_way3_tun_limit.a.y && pos.x<=c_way3_tun_limit.b.x && pos.y>=c_way3_tun_limit.b.y){ //El Tunel ya tiene la altura correcta if (r_way.c.z+plus == way3_tun_coord[2].z) { - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name, plus) } if(!count_tunn && slope==0 && way && way.is_marked()) return null @@ -1743,7 +1743,7 @@ class tutorial.chapter_03 extends basic_chapter //El Tunel ya tiene la altura correcta if (r_way.c.z+plus == way3_tun_coord[2].z) { //gui.add_message("Z: "+r_way.c.z+plus) - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name, plus) } local dir = dir_1.r local t_r_way = my_tile(r_way.c) @@ -1761,7 +1761,7 @@ class tutorial.chapter_03 extends basic_chapter if(new_max < max){ result = tunnel_build_check(start, pos, under, max, dir) if(result == null){ - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name, plus) } } else{ @@ -1779,7 +1779,7 @@ class tutorial.chapter_03 extends basic_chapter local new_max = tunnel_get_max(start, pos, max, dir) //return new_max if(new_max < max){ - return all_control(result, gl_wt, gl_st, way, ribi, tool_id, pos, r_way.c, name, plus) + return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name, plus) } } else{ @@ -1824,7 +1824,7 @@ class tutorial.chapter_03 extends basic_chapter break case 9: if (pot[0]==0){ - result = r_way.c != 0? translate("Connect the Track here")+" ("+r_way.c.tostring()+").":result + result = r_way.c != 0? translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+").":result for(local j=0;j Date: Tue, 3 Feb 2026 08:36:21 +0100 Subject: [PATCH 196/217] CHG error message and move to class_messages.nut --- class/class_basic_chapter.nut | 2 +- class/class_chapter_01.nut | 4 ++-- class/class_chapter_02.nut | 6 +++--- class/class_chapter_03.nut | 12 ++++++------ class/class_chapter_04.nut | 4 ++-- class/class_chapter_05.nut | 8 ++++---- class/class_messages.nut | 21 ++++++++++++++++++--- de.tab | 4 ++-- es.tab | 4 ++-- 9 files changed, 40 insertions(+), 25 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 83d9811..2136a8a 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2524,7 +2524,7 @@ class basic_chapter local label = t.find_object(mo_label) if ( label && label.get_text() == "X" ) - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." local way = t.find_object(mo_way) if ( !way ) diff --git a/class/class_chapter_01.nut b/class/class_chapter_01.nut index 8b4e78b..d090448 100644 --- a/class/class_chapter_01.nut +++ b/class/class_chapter_01.nut @@ -223,13 +223,13 @@ class tutorial.chapter_01 extends basic_chapter if (label && label.get_text()=="X") //local message = get_tile_message(5, pos.x, pos.y) //return message - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index a675070..129494e 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -731,7 +731,7 @@ class tutorial.chapter_02 extends basic_chapter } } } - return get_tile_message(2, city1_road_depot.x, city1_road_depot.y)//translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." + return get_tile_message(2, city1_road_depot)//translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." } } } @@ -897,7 +897,7 @@ class tutorial.chapter_02 extends basic_chapter } if (tool_id==4096){ if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." @@ -905,7 +905,7 @@ class tutorial.chapter_02 extends basic_chapter result = null // Always allow query tool } if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index edf19ba..21716d1 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1400,7 +1400,7 @@ class tutorial.chapter_03 extends basic_chapter } if (pos.x>=limit_ch3_rail_line_1a.a.x && pos.y>=limit_ch3_rail_line_1a.a.y && pos.x<=limit_ch3_rail_line_1a.b.x && pos.y<=limit_ch3_rail_line_1a.b.y){ if ( label && label.get_text() == "X" ) { - return translate("Indicates the limits for using construction tools")+" ( "+coord3d_to_string(pos)+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ( "+coord3d_to_string(pos)+")." } return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } @@ -1425,7 +1425,7 @@ class tutorial.chapter_03 extends basic_chapter } if (pos.x>=limit_ch3_rail_line_1b.a.x && pos.y>=limit_ch3_rail_line_1b.a.y && pos.x<=limit_ch3_rail_line_1b.b.x && pos.y<=limit_ch3_rail_line_1b.b.y){ if ( label && label.get_text() == "X" ) { - return translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." } return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } @@ -1551,7 +1551,7 @@ class tutorial.chapter_03 extends basic_chapter } if (pos.x>=limit_ch3_rail_line_2a.a.x && pos.y>=limit_ch3_rail_line_2a.a.y && pos.x<=limit_ch3_rail_line_2a.b.x && pos.y<=limit_ch3_rail_line_2a.b.y){ if (label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." } return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } @@ -1576,7 +1576,7 @@ class tutorial.chapter_03 extends basic_chapter } if (pos.x>=limit_ch3_rail_line_2b.a.x && pos.y>=limit_ch3_rail_line_2b.a.y && pos.x<=limit_ch3_rail_line_2b.b.x && pos.y<=limit_ch3_rail_line_2b.b.y){ if ( label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+coord3d_to_string(pos)+")." } return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } @@ -1976,13 +1976,13 @@ class tutorial.chapter_03 extends basic_chapter } if (tool_id == 4096){ if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index d4c35e5..7a034cd 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -580,13 +580,13 @@ class tutorial.chapter_04 extends basic_chapter } if (tool_id == 4096){ if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index e714485..726dea2 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -624,7 +624,7 @@ class tutorial.chapter_05 extends basic_chapter if(pot[0]==0){ if(pos.x>=way5_fac7_fac8_lim.a.x && pos.y>=way5_fac7_fac8_lim.a.y && pos.x<=way5_fac7_fac8_lim.b.x && pos.y<=way5_fac7_fac8_lim.b.y){ if (!way && label && label.get_text()=="X"){ - return translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." } local label = tile_x(r_way.c.x, r_way.c.y, r_way.c.z).find_object(mo_label) if(label){ @@ -694,7 +694,7 @@ class tutorial.chapter_05 extends basic_chapter if (tool_id == tool_build_way || tool_id == tool_build_bridge || tool_id == tool_build_tunnel){ if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else return null @@ -788,13 +788,13 @@ class tutorial.chapter_05 extends basic_chapter } if (tool_id == 4096){ if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } if (label && label.get_text()=="X") - return translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } diff --git a/class/class_messages.nut b/class/class_messages.nut index 9f3489e..0020123 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -87,16 +87,31 @@ function get_message(id) { * * */ -function get_tile_message(id, tx, ty, tz = null) { +function get_tile_message(id, tile) { local txt_tile = "" - if ( tz == null ) { + /*if ( tz == null ) { local tile = coord(tx, ty) txt_tile = coord_to_string(tile) } else { local tile = coord3d(tx, ty, tz) txt_tile = coord3d_to_string(tile) + }*/ + local count = 0 + try { + count = tile.len() + if ( count == 2 ) { + txt_tile = coord_to_string(tile) + } else if ( tile.len() == 3 ) { + txt_tile = coord3d_to_string(tile) + } else { + txt_tile = tile + } + } + catch(ev) { + txt_tile = coord_to_string(tile) } + local txt_message = "" switch(id) { @@ -113,7 +128,7 @@ function get_tile_message(id, tx, ty, tz = null) { txt_message = translate("You must build the bridge here")+" ("+txt_tile+")." break case 5: - txt_message = translate("Indicates the limits for using construction tools")+" ("+txt_tile+")." + txt_message = format(translate("Indicates the limits for using construction tools (%s)."), txt_tile) break case 6: txt_message = translate("Text label")+" ("+txt_tile+")." diff --git a/de.tab b/de.tab index 930e545..a24fdb3 100644 --- a/de.tab +++ b/de.tab @@ -90,8 +90,8 @@ Here Hier Incorrect vehicle configuration, check vehicle status. Falsche Fahrzeugkonfiguration, Fahrzeugstatus prüfen. -Indicates the limits for using construction tools -Gibt die Grenzwerte für die Verwendung von Konstruktionswerkzeugen an. +Indicates the limits for using construction tools (%s). +Gibt die Grenzwerte für die Verwendung von Konstruktionswerkzeugen an. (%s) Industrial Efficiency Produktion steigern bei Industrien It is not a slope. diff --git a/es.tab b/es.tab index 2e6b612..12f6212 100644 --- a/es.tab +++ b/es.tab @@ -90,8 +90,8 @@ Here Aquí Incorrect vehicle configuration, check vehicle status. Configuración incorrecta del vehículo, comprueba el estado del vehículo. -Indicates the limits for using construction tools -Indica los limites para usar herramientas de construcción +Indicates the limits for using construction tools (%s). +Indica los limites para usar herramientas de construcción (%s). Industrial Efficiency Eficiencia Industrial It is not a slope. From 28938ccb3fe847cedf4cf45a01c46078e6abbe20 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 3 Feb 2026 08:58:40 +0100 Subject: [PATCH 197/217] CHG error message and move to class_messages.nut --- class/class_basic_chapter.nut | 8 ++++---- class/class_chapter_00.nut | 7 +------ class/class_chapter_02.nut | 4 ++-- class/class_chapter_03.nut | 12 ++++++------ class/class_chapter_04.nut | 10 +++++----- class/class_chapter_05.nut | 2 +- class/class_chapter_06.nut | 4 ++-- class/class_messages.nut | 8 ++++---- de.tab | 2 ++ en.tab | 2 ++ es.tab | 2 ++ scenario.nut | 2 +- 12 files changed, 32 insertions(+), 31 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 2136a8a..5c4b720 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1721,7 +1721,7 @@ class basic_chapter else { local cur_key = coord3d_to_key(pos) - result = translate("Action not allowed")+" ("+pos.tostring()+")." + result = get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." if(way && way.get_desc().get_system_type() == st_elevated) return null @@ -1768,7 +1768,7 @@ class basic_chapter return null } } - return translate("Action not allowed")+" ("+pos.tostring()+")." + return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." } else{ under_lv = settings.get_underground_view_level() @@ -1785,7 +1785,7 @@ class basic_chapter } } else - return translate("Action not allowed")+" ("+pos.tostring()+")." + return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." } else if(brig) { if (tool_id==tool_build_way) { @@ -1801,7 +1801,7 @@ class basic_chapter return translate("Connect the Track here")+" ("+coord3d(coor.x, coor.y, coor.z).tostring()+")." } } - return translate("Action not allowed")+" ("+pos.tostring()+")." + return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." } return "" } diff --git a/class/class_chapter_00.nut b/class/class_chapter_00.nut index 2e96e86..5aee1b4 100644 --- a/class/class_chapter_00.nut +++ b/class/class_chapter_00.nut @@ -44,12 +44,7 @@ class tutorial.chapter_00 extends basic_chapter } function is_work_allowed_here(pl, tool_id, pos) { - local label = tile_x(pos.x,pos.y,pos.z).find_object(mo_label) - local result=null // null is equivalent to 'allowed' - - result = translate("Action not allowed") - - return result + return get_message(2) //translate("Action not allowed") } function is_tool_active(pl, tool_id, wt) { diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 129494e..f1ee813 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -709,7 +709,7 @@ class tutorial.chapter_02 extends basic_chapter }*/ //local st_c = coord(pos.x,pos.y) local result = null // null is equivalent to 'allowed' - result = translate("Action not allowed")+" ("+pos.tostring()+")." + result = get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." gltool = tool_id switch (this.step) { //Construye un tramo de carretera @@ -954,7 +954,7 @@ class tutorial.chapter_02 extends basic_chapter return result break } - return translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } function is_convoy_allowed(pl, convoy, depot) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 21716d1..99dd39b 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1355,7 +1355,7 @@ class tutorial.chapter_03 extends basic_chapter local fac_2 = factory_data.rawget("2") local fac_3 = factory_data.rawget("3") - local result = translate("Action not allowed") // null is equivalent to 'allowed' + local result = get_message(2) //translate("Action not allowed") // null is equivalent to 'allowed' switch (this.step) { case 1: @@ -1374,7 +1374,7 @@ class tutorial.chapter_03 extends basic_chapter } } else - return translate("You must use the inspection tool")+" ("+pos.tostring()+")." + return get_tile_message(9, pos) //translate("You must use the inspection tool")+" ("+pos.tostring()+")." break; //Conectando los rieles con la segunda fabrica case 2: @@ -1480,7 +1480,7 @@ class tutorial.chapter_03 extends basic_chapter pot[2]=1 return null } - else return translate("You must use the inspection tool")+" ("+ch3_rail_depot1.b.tostring()+")." + else return get_tile_message(9, ch3_rail_depot1.b) //translate("You must use the inspection tool")+" ("+ch3_rail_depot1.b.tostring()+")." } } break @@ -1805,7 +1805,7 @@ class tutorial.chapter_03 extends basic_chapter return null } else if(name == t_name.down){ - return translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } return translate("Only up and down movement in the underground!") } @@ -1815,7 +1815,7 @@ class tutorial.chapter_03 extends basic_chapter return translate("The tunnel is already at the correct level")+" ("+end_z+")." } else{ - return translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } if(slope==0) return translate("Modify the terrain here")+" ("+r_way.c.tostring()+")." } @@ -2029,7 +2029,7 @@ class tutorial.chapter_03 extends basic_chapter return result break } - return result = translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } function is_convoy_allowed(pl, convoy, depot) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 7a034cd..b334379 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -453,7 +453,7 @@ class tutorial.chapter_04 extends basic_chapter //if (!t.has_way(gl_wt)) //ribi = 0 } - local result = translate("Action not allowed") // null is equivalent to 'allowed' + local result = get_message(2) //translate("Action not allowed") // null is equivalent to 'allowed' //glbpos = coord3d(pos.x,pos.y,pos.y) gltool = tool_id @@ -474,7 +474,7 @@ class tutorial.chapter_04 extends basic_chapter } } else - return translate("You must use the inspection tool")+" ("+pos.tostring()+")." + return tile_message(9, pos) //translate("You must use the inspection tool")+" ("+pos.tostring()+")." break; //Construyendo los Muelles @@ -622,7 +622,7 @@ class tutorial.chapter_04 extends basic_chapter return result break } - return translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } function is_convoy_allowed(pl, convoy, depot) @@ -1047,10 +1047,10 @@ class tutorial.chapter_04 extends basic_chapter } if(!st.all_correct){ - result = st.c ? format(err_tx, st.nr, translate(good))+" ("+st.c.tostring()+")." : translate("Action not allowed") + result = st.c ? format(err_tx, st.nr, translate(good))+" ("+st.c.tostring()+")." : get_message(2) //translate("Action not allowed") } if(result == 0){ - result = translate("Action not allowed") + result = get_message(2) //translate("Action not allowed") } } } diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 726dea2..21f54ff 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -604,7 +604,7 @@ class tutorial.chapter_05 extends basic_chapter factory_data.rawget("8") ] - local result = translate("Action not allowed") // null is equivalent to 'allowed' + local result = get_message(2) //translate("Action not allowed") // null is equivalent to 'allowed' switch (this.step) { case 1: if (tool_id == 4096){ diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index cb30002..1bf9435 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -436,7 +436,7 @@ class tutorial.chapter_06 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { local result = null // null is equivalent to 'allowed' - result = translate("Action not allowed") + result = get_message(2) //translate("Action not allowed") local t = tile_x(pos.x, pos.y, pos.z) local ribi = 0 local wt = 0 @@ -687,7 +687,7 @@ class tutorial.chapter_06 extends basic_chapter return result break } - return translate("Action not allowed") + return get_message(2) //translate("Action not allowed") } function is_convoy_allowed(pl, convoy, depot) diff --git a/class/class_messages.nut b/class/class_messages.nut index 0020123..b5828dd 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -68,7 +68,7 @@ function get_message(id) { } -/* +/** * messages with a tile * * id - message id @@ -83,7 +83,7 @@ function get_message(id) { * 6 = Text label (x, y, z). * 7 = You must first build a stretch of road (x, y, z). * 8 = You must build the depot in (x, y, z). - * + * 9 = You must use the inspection tool (x, y, z). * * */ @@ -116,7 +116,7 @@ function get_tile_message(id, tile) { switch(id) { case 1: - txt_message = translate("Action not allowed")+" ("+txt_tile+")." + txt_message = format(translate("Action not allowed (%s)."), txt_tile) break case 2: txt_message = translate("Connect the road here")+" ("+txt_tile+")." @@ -140,7 +140,7 @@ function get_tile_message(id, tile) { txt_message = translate("You must build the depot in")+" ("+txt_tile+")." break case 9: - + txt_message = format(translate("You must use the inspection tool (%s)."), txt_tile) break } diff --git a/de.tab b/de.tab index a24fdb3..e42cd5c 100644 --- a/de.tab +++ b/de.tab @@ -378,6 +378,8 @@ Selected harbour accept not %s. Ausgewählter Hafen akzeptiert keine %s. #_________________________________error message_________________________________ #_________________________________error message_________________________________ +Action not allowed (%s). +Aktion auf Feld (%s) nicht erlaubt. Place the mail extension at the marked tiles. Platzieren Sie den Post Erweiterungsbau an den markierten Stellen. Selected extension accept not %s. diff --git a/en.tab b/en.tab index 40b0fcb..a25c5d4 100644 --- a/en.tab +++ b/en.tab @@ -44,6 +44,8 @@ HWRead #_________________________________errer message_________________________________ #_________________________________error message_________________________________ #_________________________________error message_________________________________ +Action not allowed (%s). +Action on field (%s) is not allowed. Place the mail extension at the marked tiles. Place the post extension building in the marked tiles. Selected halt accept not %s. diff --git a/es.tab b/es.tab index 12f6212..b237e69 100644 --- a/es.tab +++ b/es.tab @@ -382,6 +382,8 @@ Selected harbour accept not %s. El puerto seleccionado no acepta %s. #_________________________________error message_________________________________ #_________________________________error message_________________________________ +Action not allowed (%s). +No se permite la acción en el campo (%s). Place the mail extension at the marked tiles. Coloque el edificio de extensión de postes en las ubicaciones marcadas. Selected extension accept not %s. diff --git a/scenario.nut b/scenario.nut index 12a69cf..7ee730b 100644 --- a/scenario.nut +++ b/scenario.nut @@ -744,7 +744,7 @@ function is_work_allowed_here(pl, tool_id, name, pos, tool) if(scr_jump){ return null } - local result = translate("Action not allowed") + local result = get_message(2) //translate("Action not allowed") if (correct_cov){ local result = chapter.is_work_allowed_here(pl, tool_id, name, pos, tool) return fail_count_message(result, tool_id, tool) From 0be171ce3b4a7bd021c006925b41be578105ff28 Mon Sep 17 00:00:00 2001 From: Andarix Date: Tue, 3 Feb 2026 11:55:06 +0100 Subject: [PATCH 198/217] CHG message move to class_messages.nut --- class/class_chapter_02.nut | 2 +- class/class_chapter_03.nut | 6 +++--- class/class_chapter_04.nut | 2 +- class/class_chapter_05.nut | 2 +- class/class_chapter_06.nut | 2 +- class/class_chapter_07.nut | 2 +- class/class_messages.nut | 28 ++++++++++++++++++---------- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index f1ee813..29e1636 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -1038,7 +1038,7 @@ class tutorial.chapter_02 extends basic_chapter case 1: break } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 99dd39b..f22b5d0 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2034,12 +2034,12 @@ class tutorial.chapter_03 extends basic_chapter function is_convoy_allowed(pl, convoy, depot) { - local result = translate("It is not allowed to start vehicles.") + local result = get_message(3) //translate("It is not allowed to start vehicles.") switch (this.step) { case 5: local wt = gl_wt if ((depot.x != ch3_rail_depot1.b.x)||(depot.y != ch3_rail_depot1.b.y)) - return "Depot coordinate is incorrect (" + coord3d_to_string(depot) + ")." + return get_tile_message(10, depot) //"Depot coordinate is incorrect (" + coord3d_to_string(depot) + ")." local cov = 1 local veh = set_train_lenght(1) + 1 local good_list = [good_desc_x(good_alias.wood).get_catg_index()] //Wood @@ -2137,7 +2137,7 @@ class tutorial.chapter_03 extends basic_chapter break } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index b334379..a568a54 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -719,7 +719,7 @@ class tutorial.chapter_04 extends basic_chapter } break } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 21f54ff..0c3d7c5 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -933,7 +933,7 @@ class tutorial.chapter_05 extends basic_chapter } break } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 1bf9435..02c6c63 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -810,7 +810,7 @@ class tutorial.chapter_06 extends basic_chapter } break } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_chapter_07.nut b/class/class_chapter_07.nut index 0a4e4bb..cd2f692 100644 --- a/class/class_chapter_07.nut +++ b/class/class_chapter_07.nut @@ -310,7 +310,7 @@ class tutorial.chapter_07 extends basic_chapter ignore_save.push({id = convoy.id, ig = true}) //Ingnora el vehiculo return null } - return result = translate("It is not allowed to start vehicles.") + return get_message(3) //translate("It is not allowed to start vehicles.") } function script_text() diff --git a/class/class_messages.nut b/class/class_messages.nut index b5828dd..7cbe58e 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -22,14 +22,14 @@ ch5_name <- "Industrial Efficiency" ch6_name <- "The forgotten Air transport" ch7_name <- "Bus networks" -/* +/** * single messages * * id - message id * 1 = You can only delete the stops. * 2 = Action not allowed * 3 = Only road schedules allowed - * + * 4 = It is not allowed to start vehicles. * * * @@ -84,6 +84,12 @@ function get_message(id) { * 7 = You must first build a stretch of road (x, y, z). * 8 = You must build the depot in (x, y, z). * 9 = You must use the inspection tool (x, y, z). + * 10 = Depot coordinate is incorrect (x, y, z). + * + * + * + * + * * * */ @@ -142,13 +148,16 @@ function get_tile_message(id, tile) { case 9: txt_message = format(translate("You must use the inspection tool (%s)."), txt_tile) break + case 10: + txt_message = format(translate("Depot coordinate is incorrect (%s)."), txt_tile) + break } return txt_message } -/* +/** * messages with a string/digit include * * id - message id @@ -195,7 +204,7 @@ function get_data_message(id, data) { } -/* +/** * messages with a string/digit and tile * * id - message id @@ -258,19 +267,18 @@ function get_tiledata_message(id, data, tile) { } - function bus_result_message(nr, name, veh, cov) - { +function bus_result_message(nr, name, veh, cov) { switch (nr) { case 0: - return format(translate("Select the Bus [%s]."),name) + return format(translate("Select the Bus [%s]."), name) break case 1: - return format(translate("The number of bus must be [%d]."),cov) + return format(translate("The number of bus must be [%d]."), cov) break case 2: - return format(translate("The number of convoys must be [%d], press the [Sell] button."),cov) + return format(translate("The number of convoys must be [%d], press the [Sell] button."), cov) case 3: return translate("The bus must be [Passengers].") @@ -284,7 +292,7 @@ function get_tiledata_message(id, data, tile) { return translate("The convoy is not correct.") break } - } +} /** * label messages From 3309484bbdacf76198e6cbf4a019fc305fc0cbcb Mon Sep 17 00:00:00 2001 From: Andarix Date: Fri, 6 Feb 2026 15:53:04 +0100 Subject: [PATCH 199/217] CHG clean up code and change text messages --- class/class_basic_chapter.nut | 2 +- class/class_chapter_03.nut | 103 ++++++++++++++++++---------------- class/class_chapter_05.nut | 2 +- class/class_messages.nut | 23 +++++++- de.tab | 12 ++-- es.tab | 12 ++-- 6 files changed, 92 insertions(+), 62 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 5c4b720..9fae746 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1798,7 +1798,7 @@ class basic_chapter foreach(d in desc){ //gui.add_message(d.get_name()+" :: "+name) if(d.get_name() == name){ - return translate("Connect the Track here")+" ("+coord3d(coor.x, coor.y, coor.z).tostring()+")." + return get_tile_message(11, coor) //translate("Connect the Track here")+" ("+coord3d(coor.x, coor.y, coor.z).tostring()+")." } } return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index f22b5d0..fabf8c3 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1333,22 +1333,27 @@ class tutorial.chapter_03 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { gl_tool = tool_id //glpos = coord3d(pos.x, pos.y, pos.z) - local t = tile_x(pos.x, pos.y, pos.z) + //local t = tile_x(pos.x, pos.y, pos.z) + local label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) //local ribi = 0 local wt = 0 - local slope = t.get_slope() + //local slope = t.get_slope() //local way = t.find_object(mo_way) - local bridge = t.find_object(mo_bridge) - local label = t.find_object(mo_label) - local building = t.find_object(mo_building) - local sign = t.find_object(mo_signal) - local roadsign = t.find_object(mo_roadsign) + //local bridge = t.find_object(mo_bridge) + //local building = t.find_object(mo_building) + //local sign = t.find_object(mo_signal) + //local roadsign = t.find_object(mo_roadsign) /*if (way){ wt = way.get_waytype() if (tool_id!=tool_build_bridge) ribi = way.get_dirs() if (!t.has_way(wt_rail)) ribi = 0 + } + + local s_step = [] + if ( s_step.find(this.step) ) { + }*/ local fac_1 = factory_data.rawget("1") @@ -1359,14 +1364,14 @@ class tutorial.chapter_03 extends basic_chapter switch (this.step) { case 1: - if (tool_id == 4096){ - if (pot[0]==0){ + if ( tool_id == 4096 ) { + if ( pot[0] == 0 ) { if ( search_tile_in_tiles(fac_2.c_list, pos) ) { pot[0] = 1 return null } } - else if (pot[1]==1){ + else if ( pot[1] == 1 ) { if ( search_tile_in_tiles(fac_1.c_list, pos) ) { pot[2] = 1 return null @@ -1378,21 +1383,21 @@ class tutorial.chapter_03 extends basic_chapter break; //Conectando los rieles con la segunda fabrica case 2: - if (tool_id == 4096) return result = null + if ( tool_id == 4096 ) return result = null //Primer tramo de rieles - if (pot[0]==0){ + if ( pot[0] == 0 ) { local lab_t = my_tile(way2_fac1_fac2[1]) local lab = lab_t.find_object(mo_label) - if(pos.x < lab_t.x && lab && lab.get_owner().nr == 0){ - if(tool_id==tool_build_way) + if ( pos.x < lab_t.x && lab && lab.get_owner().nr == 0 ) { + if ( tool_id == tool_build_way ) return "" } - if (pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ - if(tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover){ + if ( pos.x >= way2_fac1_fac2[1].x && pos.y >= way2_fac1_fac2[1].y && pos.x <= way2_fac1_fac2[0].x && pos.y <= way2_fac1_fac2[0].y ) { + if( tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover ) { local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) - foreach(desc in way_desc){ - if(desc.get_name() == name){ + foreach ( desc in way_desc ) { + if( desc.get_name() == name ) { return null } } @@ -1405,7 +1410,7 @@ class tutorial.chapter_03 extends basic_chapter return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." + return get_tile_message(11, r_way.c) //translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Construye un puente if (pot[0]==1 && pot[1]==0){ @@ -1430,7 +1435,7 @@ class tutorial.chapter_03 extends basic_chapter return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." + return get_tile_message(11, r_way.c) //translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } break; @@ -1441,10 +1446,8 @@ class tutorial.chapter_03 extends basic_chapter local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s - local good = good_alias.goods local c_list = station_tiles(way2_fac1_fac2[5], way2_fac1_fac2[4], loc1_tile) - local siz = c_list.len() - return get_stations(pos, tool_id, result, good, c_list, siz) + return get_stations(pos, tool_id, result, good_alias.goods, c_list) } else if (pot[0]==1 && pot[1]==0){ @@ -1453,10 +1456,8 @@ class tutorial.chapter_03 extends basic_chapter local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s - local good = good_alias.goods local c_list = station_tiles(way2_fac1_fac2[0], way2_fac1_fac2[1], loc1_tile) - local siz = c_list.len() - return get_stations(pos, tool_id, result, good, c_list, siz) + return get_stations(pos, tool_id, result, good_alias.goods, c_list) } break case 4: @@ -1472,7 +1473,7 @@ class tutorial.chapter_03 extends basic_chapter if (tool_id==tool_build_depot) return null } - else return translate("You must build the train depot in")+" ("+ch3_rail_depot1.b.tostring()+")." + else return get_tile_message(12, ch3_rail_depot1.b) //translate("You must build the train depot in")+" ("+ch3_rail_depot1.b.tostring()+")." } else if (pot[1]==1 && pot[2]==0){ if ((pos.x==ch3_rail_depot1.b.x)&&(pos.y==ch3_rail_depot1.b.y)){ @@ -1486,6 +1487,8 @@ class tutorial.chapter_03 extends basic_chapter break case 5: //Enrutar vehiculos (estacion nr1) + local t = tile_x(pos.x, pos.y, pos.z) + local building = t.find_object(mo_building) local st_check = check_rail_station(my_tile(way2_fac1_fac2[0]), 0, pos) if (building && st_check){ //if (building && pos.x>=way2_fac1_fac2[1].x && pos.y>=way2_fac1_fac2[1].y && pos.x<=way2_fac1_fac2[0].x && pos.y<=way2_fac1_fac2[0].y){ @@ -1556,7 +1559,7 @@ class tutorial.chapter_03 extends basic_chapter return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+r_way.c.tostring()+")." + return get_tile_message(11, r_way.c) //translate("Connect the Track here")+" ("+r_way.c.tostring()+")." } //Construye un tunel else if (pot[0]==1 && pot[1]==0){ @@ -1582,7 +1585,7 @@ class tutorial.chapter_03 extends basic_chapter } else if(tool_id==tool_build_way) - return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." + return get_tile_message(11, r_way.c) //translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Estaciones de la Fabrica else if (pot[2]==1 && pot[3]==0){ @@ -1590,10 +1593,8 @@ class tutorial.chapter_03 extends basic_chapter local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s - local good = good_alias.goods local c_list = station_tiles(way2_fac2_fac3[5], way2_fac2_fac3[4], loc2_tile) - local siz = c_list.len() - return get_stations(pos, tool_id, result, good, c_list, siz) + return get_stations(pos, tool_id, result, good_alias.goods, c_list) } //Estaciones del Productor else if (pot[3]==1 && pot[4]==0){ @@ -1601,10 +1602,8 @@ class tutorial.chapter_03 extends basic_chapter local s = check_select_station(name, wt_rail, good_alias.goods) if ( s != null ) return s - local good = good_alias.goods local c_list = station_tiles(way2_fac2_fac3[0], way2_fac2_fac3[1], loc2_tile) - local siz = c_list.len() - return get_stations(pos, tool_id, result, good, c_list, siz) + return get_stations(pos, tool_id, result, good_alias.goods, c_list) } break case 7: @@ -1623,12 +1622,15 @@ class tutorial.chapter_03 extends basic_chapter if(tool_id==tool_build_depot) return null else - return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." + return get_tile_message(12, ch3_rail_depot2.a) //translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." } else if (pot[0]==0) return translate("You must build track in")+" ("+ch3_rail_depot2.a.tostring()+")." else if (pot[0]==1 && pot[1]==0) - return result = translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." + return result = get_tile_message(12, ch3_rail_depot2.a) //translate("You must build the train depot in")+" ("+ch3_rail_depot2.a.tostring()+")." + + local t = tile_x(pos.x, pos.y, pos.z) + local building = t.find_object(mo_building) //Enrutar vehiculos (estacion nr1) if (pot[1]==1 && pot[2]==0){ @@ -1676,6 +1678,9 @@ class tutorial.chapter_03 extends basic_chapter break case 8: + local t = tile_x(pos.x, pos.y, pos.z) + local slope = t.get_slope() + local way = t.find_object(mo_way) //Construye tramo de via para el tunel if (pot[0]==0){ if (pos.x>=c_way3_lim.a.x && pos.y<=c_way3_lim.a.y && pos.x<=c_way3_lim.b.x && pos.y>=c_way3_lim.b.y){ @@ -1683,7 +1688,7 @@ class tutorial.chapter_03 extends basic_chapter return all_control(result, gl_wt, gl_st, tool_id, pos, r_way.c, name) } } - else return translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." + else return get_tile_message(11, r_way.c) //translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")." } //Construye un puente else if (pot[0]==1 && pot[1]==0){ @@ -1823,8 +1828,12 @@ class tutorial.chapter_03 extends basic_chapter } break case 9: + local t = tile_x(pos.x, pos.y, pos.z) + local sign = t.find_object(mo_signal) + local roadsign = t.find_object(mo_roadsign) + if (pot[0]==0){ - result = r_way.c != 0? translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+").":result + result = r_way.c != 0? get_tile_message(11, r_way.c) /*translate("Connect the Track here")+" ("+coord3d_to_string(r_way.c)+")."*/ : result for(local j=0;j Date: Sat, 7 Feb 2026 15:34:07 +0100 Subject: [PATCH 200/217] CHG version --- scenario.nut | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scenario.nut b/scenario.nut index 7ee730b..0cd1cbb 100644 --- a/scenario.nut +++ b/scenario.nut @@ -6,7 +6,7 @@ * */ const nut_path = "class/" // path to folder with *.nut files -const version = 2006 +const version = 2007 scenario_name <- "Tutorial Scenario" scenario.short_description = scenario_name scenario.author = "Yona-TYT & Andarix" @@ -47,9 +47,9 @@ include(nut_path+"class_basic_chapter") // include class for basic chapter struc translate_objects_list <- {} // translate list translate_objects() // add objects to translate list -resul_version <- {pak= false , st = false} +resul_version <- {pak = false , st = false} -persistent.status <- {chapter=1, step=1} // save step y chapter +persistent.status <- {chapter = 1, step = 1} // save step y chapter script_test <- true From 598da5b32b4ab1ba110785ac175c33c8dc4124e7 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 7 Feb 2026 15:35:43 +0100 Subject: [PATCH 201/217] CHG clean up code and change text messages --- class/class_basic_chapter.nut | 24 ++++++++-------- class/class_chapter_02.nut | 11 ++------ class/class_chapter_03.nut | 18 +++++------- class/class_chapter_04.nut | 53 +++++++++++++---------------------- class/class_chapter_05.nut | 19 ++----------- class/class_chapter_06.nut | 27 ++---------------- class/class_messages.nut | 47 ++++++++++++++++++++++--------- de.tab | 8 +++--- es.tab | 8 +++--- 9 files changed, 90 insertions(+), 125 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 9fae746..ace7e56 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2214,16 +2214,17 @@ class basic_chapter return null } - function is_stop_allowed(result, siz, c_list, pos) - { + function is_stop_allowed(tile, c_list, pos) { + + local result = get_tile_message(3, tile) local st_count=0 - for(local j=0;j Date: Sun, 8 Feb 2026 13:38:19 +0100 Subject: [PATCH 202/217] CHG clean up code and fix errors --- class/class_chapter_05.nut | 54 ++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 97eef73..0943d2b 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -27,8 +27,8 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh1_obj = get_veh_ch5(1) - veh1_load = set_loading_capacity(8) - veh1_wait = set_waiting_time(6) + veh1_load = 100 + veh1_wait = 0 d1_cnr = null //auto started f1_good = get_good_data(5, 2) @@ -42,7 +42,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el Camion veh2_obj = get_veh_ch5(3) - veh2_load = 100 + veh2_load = set_loading_capacity(8) veh2_wait = set_waiting_time(6) d2_cnr = null //auto started veh2_waiting_halt = get_waiting_halt(9) @@ -54,7 +54,7 @@ class tutorial.chapter_05 extends basic_chapter //Para el barco //sch_list3 = [coord(133,189), coord_fac_4] veh3_obj = get_veh_ch5(4) - veh3_load = 100 + veh3_load = set_loading_capacity(9) veh3_wait = set_waiting_time(7) //c_dep3 = coord(150,190) // depot d3_cnr = null //auto started @@ -258,7 +258,7 @@ class tutorial.chapter_05 extends basic_chapter text.cir = cov_cir text.load = veh2_load text.wait = get_wait_time_text(veh2_wait) - text.nr = siz + text.nr = c_list.len() } else if (pot[2]==1 && pot[3]==0 || (current_cov> ch5_cov_lim3.a && current_cov< ch5_cov_lim3.b)){ text = ttextfile("chapter_05/04_3-3.txt") @@ -579,14 +579,15 @@ class tutorial.chapter_05 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { //return tool_id glpos = coord3d(pos.x, pos.y, pos.z) - local t = tile_x(pos.x, pos.y, pos.z) - local ribi = 0 - local wt = 0 - local slope = t.get_slope() + local label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) + //local t = tile_x(pos.x, pos.y, pos.z) + //local ribi = 0 + //local wt = 0 + //local slope = t.get_slope() //local way = t.find_object(mo_way) //local powerline = t.find_object(mo_powerline) //local bridge = t.find_object(mo_bridge) - local label = t.find_object(mo_label) + //local label = t.find_object(mo_label) //local building = t.find_object(mo_building) //local sign = t.find_object(mo_signal) //local roadsign = t.find_object(mo_roadsign) @@ -597,6 +598,7 @@ class tutorial.chapter_05 extends basic_chapter if (!t.has_way(gl_wt)) ribi = 0 }*/ + local fab_list = [ factory_data.rawget("5"), factory_data.rawget("3"), @@ -621,6 +623,7 @@ class tutorial.chapter_05 extends basic_chapter break; case 2: + local way = tile_x(pos.x, pos.y, pos.z).find_object(mo_way) if(pot[0]==0){ if(pos.x>=way5_fac7_fac8_lim.a.x && pos.y>=way5_fac7_fac8_lim.a.y && pos.x<=way5_fac7_fac8_lim.b.x && pos.y<=way5_fac7_fac8_lim.b.y){ if (!way && label && label.get_text()=="X"){ @@ -635,17 +638,14 @@ class tutorial.chapter_05 extends basic_chapter } } else if(pot[0]==1 && pot[1]==0){ - for(local j=0;j Date: Sun, 8 Feb 2026 13:38:54 +0100 Subject: [PATCH 203/217] CHG clean up code and change text messages --- class/class_basic_chapter.nut | 4 +- class/class_basic_data.nut | 2 +- class/class_chapter_03.nut | 6 +-- class/class_chapter_04.nut | 71 +++++++++++++++++++---------------- class/class_chapter_06.nut | 6 +-- class/class_messages.nut | 10 ++--- de.tab | 4 +- es.tab | 4 +- 8 files changed, 56 insertions(+), 51 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index ace7e56..0d571d5 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -2222,7 +2222,7 @@ class basic_chapter if (glsw[j]==1) st_count++ } - if (st_countch3_cov_lim3.a && current_cov=c_cannel_lim.a.x && pos.y>=c_cannel_lim.a.y && pos.x<=c_cannel_lim.b.x && pos.y<=c_cannel_lim.b.y){ - if (tool_id == tool_build_way && way && wt == wt_water) + local way = tile_x(pos.x, pos.y, pos.z).find_object(mo_way) + if (tool_id == tool_build_way && way && way.get_waytype() == wt_water) return null } } //Cuarto muelle else if(pot[0]==1 && pot[1]==0){ - if(my_tile(ch4_ship2_halts[1]).find_object(mo_building)){ + if ( my_tile(ch4_ship2_halts[1]).find_object(mo_building) ) { if (tool_id==4097) return null - if (is_station_build(0, ch4_ship2_halts[1], good_alias.goods) != null) + if ( is_station_build(0, ch4_ship2_halts[1], good_alias.goods) != null ) return get_tiledata_message(4, 4, ch4_ship2_halts[1]) //format(translate("Dock No.%d must accept goods"),4)+" ("+ch4_ship2_halts[1].tostring()+")." } - if(pos.x==ch4_ship2_halts[1].x && pos.y==ch4_ship2_halts[1].y){ - if(tool_id==tool_build_station){ + if ( pos.x == ch4_ship2_halts[1].x && pos.y == ch4_ship2_halts[1].y ) { + if ( tool_id == tool_build_station ) { return null } } } //Enrutar Barcos - else if (pot[1]==1 && pot[2]==0){ - if (tool_id==4108){ + else if ( pot[1] == 1 && pot[2] == 0 ) { + if ( tool_id == 4108 ) { return is_stop_allowed_ex(ship_depot, ch4_ship2_halts, pos, gl_wt) } } @@ -548,31 +551,33 @@ class tutorial.chapter_04 extends basic_chapter case 6: - local c_list = ch4_ship3_halts - local good = good_alias.passa - if((tool_id != 4096)) + if( tool_id == tool_build_station ) { // check selected halt accept passenger local s = check_select_station(name, wt_water, good_alias.passa) if ( s != null ) return s - return is_dock_build(pos, tool_id, c_list, good) - + return is_dock_build(pos, tool_id, ch4_ship3_halts, good_alias.passa) + } else if ( tool_id == 4096 ) { + return null + } break case 7: - if (tool_id==4108){ + if ( tool_id == 4108 ) { return is_stop_allowed_ex(ship_depot, ch4_schedule_line3, pos, gl_wt) } break } + + local label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) if (tool_id == 4096){ - if (label && label.get_text()=="X") + if ( label && label.get_text() == "X" ) return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." else if (label) return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } - if (label && label.get_text()=="X") + if ( label && label.get_text() == "X" ) return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result @@ -619,7 +624,7 @@ class tutorial.chapter_04 extends basic_chapter switch (this.step) { case 4: if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) - return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." + return get_tile_message(15, ship_depot) //translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = d1_cnr local in_dep = true local veh = 1 @@ -653,7 +658,7 @@ class tutorial.chapter_04 extends basic_chapter break case 5: if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) - return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." + return get_tile_message(15, ship_depot) //translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = d2_cnr local in_dep = true local veh = 1 @@ -683,7 +688,7 @@ class tutorial.chapter_04 extends basic_chapter break case 7: if ((depot.x != ship_depot.x)||(depot.y != ship_depot.y)) - return translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." + return get_tile_message(15, ship_depot) //translate("You must select the deposit located in")+" ("+ship_depot.tostring()+")." local cov = 1 local veh = 1 local good_list = [good_desc_x(good_alias.passa).get_catg_index()] //Passengers diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 80d1104..1e99a9b 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -676,7 +676,7 @@ class tutorial.chapter_06 extends basic_chapter case 2: local wt = gl_wt if ((depot.x != ch6_air_depot.a.x)||(depot.y != ch6_air_depot.a.y)) - return translate("You must select the deposit located in")+" ("+ch6_air_depot.a.tostring()+")." + return get_tile_message(15, ch6_air_depot.a) //translate("You must select the deposit located in")+" ("+ch6_air_depot.a.tostring()+")." if (current_cov>ch6_cov_lim1.a && current_covch6_cov_lim2.a && current_covch6_cov_lim3.a && current_cov Date: Sun, 8 Feb 2026 13:39:09 +0100 Subject: [PATCH 204/217] ADD inspections tool id --- info_files/tool_id_list.ods | Bin 31626 -> 27242 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/info_files/tool_id_list.ods b/info_files/tool_id_list.ods index 9845a3b12a27e8af74fb6c895892af3c8088b35c..c990506a1bac8cbd7ffca64323b4cdfb17722e9f 100644 GIT binary patch literal 27242 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 From 66547ace1c16f87ea284d79bec132bc63f30fb12 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 8 Feb 2026 15:21:57 +0100 Subject: [PATCH 205/217] CHG optimize code --- class/class_chapter_05.nut | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 0943d2b..1dbb91c 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -579,7 +579,6 @@ class tutorial.chapter_05 extends basic_chapter function is_work_allowed_here(pl, tool_id, name, pos, tool) { //return tool_id glpos = coord3d(pos.x, pos.y, pos.z) - local label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) //local t = tile_x(pos.x, pos.y, pos.z) //local ribi = 0 //local wt = 0 @@ -599,6 +598,12 @@ class tutorial.chapter_05 extends basic_chapter ribi = 0 }*/ + local label = null + local st_nr = [2, 3] + if ( st_nr.find(this.step) ) { + label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) + } + local fab_list = [ factory_data.rawget("5"), factory_data.rawget("3"), @@ -607,6 +612,7 @@ class tutorial.chapter_05 extends basic_chapter ] local result = get_message(2) //translate("Action not allowed") // null is equivalent to 'allowed' + switch (this.step) { case 1: if (tool_id == 4096){ @@ -629,8 +635,8 @@ class tutorial.chapter_05 extends basic_chapter if (!way && label && label.get_text()=="X"){ return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ( "+pos.tostring()+")." } - local label = tile_x(r_way.c.x, r_way.c.y, r_way.c.z).find_object(mo_label) - if(label){ + + if( tile_x(r_way.c.x, r_way.c.y, r_way.c.z).find_object(mo_label) ){ if(tool_id==tool_build_way || tool_id==4113 || tool_id==tool_remover) return null } @@ -706,7 +712,7 @@ class tutorial.chapter_05 extends basic_chapter return result } } - else if (j== way5_power_lim.len()-1){ + else if ( j == way5_power_lim.len()-1 ) { result = get_tile_message(13, pos) //translate("You are outside the allowed limits!")+" ("+pos.tostring()+")." } } @@ -781,15 +787,16 @@ class tutorial.chapter_05 extends basic_chapter } - if (tool_id == 4096){ + if ( tool_id == 4096 ){ + local label = tile_x(pos.x, pos.y, pos.z).find_object(mo_label) if (label && label.get_text()=="X") return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." - else if (label) - return translate("Text label")+" ("+pos.tostring()+")." + //else if (label) + // return translate("Text label")+" ("+pos.tostring()+")." result = null // Always allow query tool } - if (label && label.get_text()=="X") - return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." + //if (label && label.get_text()=="X") + // return get_tile_message(5, pos) //translate("Indicates the limits for using construction tools")+" ("+pos.tostring()+")." return result } From 6f0e88d2b177b198d724a16210a5e1264cf2d1fe Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 8 Feb 2026 15:22:22 +0100 Subject: [PATCH 206/217] FIX tool bar icon pak64.german --- class/class_basic_gui.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_basic_gui.nut b/class/class_basic_gui.nut index 35aac6c..11f18a2 100644 --- a/class/class_basic_gui.nut +++ b/class/class_basic_gui.nut @@ -940,7 +940,7 @@ function chapter_step_enabled_tools ( pl ) { enabled_tools.extend(_enabled_tools) local _pak64_tools = [ 0x8009 ] - local _pak64german_tools = [ 0x8011 ] + local _pak64german_tools = [ 0x8002, 0x8011 ] local _pak128_tools = [ 0x800b ] enabled_tools_pak64.extend(_pak64_tools) From b8bc6c3adef87152200430375e1bd69ae70517ae Mon Sep 17 00:00:00 2001 From: Andarix Date: Mon, 9 Feb 2026 16:53:07 +0100 Subject: [PATCH 207/217] FIX tool select with key --- class/class_basic_chapter.nut | 24 ++++++++++++++++++++---- class/class_chapter_02.nut | 23 ++++++++++++++--------- class/class_chapter_03.nut | 14 ++++++++++---- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 0d571d5..7fc6eee 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -1706,7 +1706,7 @@ class basic_chapter local t = tile_x(coor.x, coor.y, coor.z) local way = t.find_object(mo_way) local brig = t.find_object(mo_bridge) - local desc = way_desc_x.get_available_ways(wt, st) + //local desc = way_desc_x.get_available_ways(wt, st) local ribi = 0 if ( way ) { if ( tool_id != tool_build_bridge ) @@ -1762,13 +1762,17 @@ class basic_chapter if(t.find_object(mo_tunnel)){ return null } - foreach(d in desc){ + // check selected way + return check_select_way(name, wt) + + /*foreach(d in desc){ //gui.add_message(d.get_name()+" :: "+name) if(d.get_name() == name){ return null } - } - return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." + }*/ + //return get_tile_message(1, pos) //translate("Action not allowed")+" ("+pos.tostring()+")." + } else{ under_lv = settings.get_underground_view_level() @@ -3705,6 +3709,18 @@ function check_select_station(name, wt, good) { */ function check_select_way(name, wt, st = st_flat) { + gui.add_message(" list name " + name.len()) + // Selection tool with key + if ( name.len() == 1 ) { + local s = name.tointeger() + if ( s == wt ) { + return null + } else { + return translate("Selected way is not correct!") + } + + } + local list = way_desc_x.get_available_ways (wt, st) local list_name = [] diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 596466d..194fa20 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -714,13 +714,18 @@ class tutorial.chapter_02 extends basic_chapter switch (this.step) { //Construye un tramo de carretera case 1: - if (tool_id==tool_build_way){ - local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) + if ( tool_id == tool_build_way ) { + + // check selected way + local s = check_select_way(name, wt_road) + if ( s != null ) return s + + //local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) local str_c = tile_x(tool.start_pos.x, tool.start_pos.y, tool.start_pos.z) //local str_way = str_c.is_valid () ? t.find_object(mo_way) : null local str_way = world.is_coord_valid(str_c)? tile_x(str_c.x, str_c.y, str_c.z).find_object(mo_way) : null - foreach ( desc in way_desc ) { - if ( desc.get_name() == name ) { + //foreach ( desc in way_desc ) { + //if ( desc.get_name() == name ) { for ( local i = 0; i < build_list.len()-1; i++ ) { if ( ( pos.x == build_list[i].x && pos.y == build_list[i].y ) || ( pos.x == city1_road_depot.x && pos.y == city1_road_depot.y ) ) { if(cursor_control(build_list[i])){ @@ -732,8 +737,8 @@ class tutorial.chapter_02 extends basic_chapter } } return get_tile_message(2, city1_road_depot)//translate("Connect the road here")+" ("+city1_road_depot.tostring()+")." - } - } + //} + //} } break; //Construye un deposito de carreteras @@ -860,9 +865,9 @@ class tutorial.chapter_02 extends basic_chapter } //Para construir la carretera else if (pot[1]==1 && pot[2]==0){ - if ((pos.x>=c_way_limit1.a.x)&&(pos.y>=c_way_limit1.a.y)&&(pos.x<=c_way_limit1.b.x)&&(pos.y<=c_way_limit1.b.y)){ - if((pos.x==way1_coords.a.x)&&(pos.y==way1_coords.a.y)){ - if (tool_id==tool_remover || tool_id==tool_remove_way) + if ( (pos.x>=c_way_limit1.a.x) && (pos.y >= c_way_limit1.a.y) && (pos.x <= c_way_limit1.b.x) && (pos.y <= c_way_limit1.b.y) ) { + if( (pos.x == way1_coords.a.x) && (pos.y == way1_coords.a.y) ) { + if (tool_id == tool_remover || tool_id == tool_remove_way) return result else if (tool_id==tool_build_way) return null diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 54da935..d17724a 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -1395,12 +1395,15 @@ class tutorial.chapter_03 extends basic_chapter } if ( pos.x >= way2_fac1_fac2[1].x && pos.y >= way2_fac1_fac2[1].y && pos.x <= way2_fac1_fac2[0].x && pos.y <= way2_fac1_fac2[0].y ) { if( tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover ) { - local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) + /*local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach ( desc in way_desc ) { if( desc.get_name() == name ) { return null } - } + }*/ + // check selected way + local s = check_select_way(name, gl_wt) + if ( s != null ) { return s } else { return null } } } if (pos.x>=limit_ch3_rail_line_1a.a.x && pos.y>=limit_ch3_rail_line_1a.a.y && pos.x<=limit_ch3_rail_line_1a.b.x && pos.y<=limit_ch3_rail_line_1a.b.y){ @@ -1544,12 +1547,15 @@ class tutorial.chapter_03 extends basic_chapter } if (pos.x>=way2_fac2_fac3[0].x && pos.y>=way2_fac2_fac3[0].y && pos.x<=way2_fac2_fac3[1].x && pos.y<=way2_fac2_fac3[1].y){ if(tool_id==tool_build_way || tool_id==tool_remove_way || tool_id==tool_remover){ - local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) + /*local way_desc = way_desc_x.get_available_ways(gl_wt, gl_st) foreach(desc in way_desc){ if(desc.get_name() == name){ return null } - } + }*/ + // check selected way + local s = check_select_way(name, gl_wt) + if ( s != null ) { return s } else { return null } } } if (pos.x>=limit_ch3_rail_line_2a.a.x && pos.y>=limit_ch3_rail_line_2a.a.y && pos.x<=limit_ch3_rail_line_2a.b.x && pos.y<=limit_ch3_rail_line_2a.b.y){ From 0c7f5b16f00951a7797e57d32ba262db707b26e3 Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Sat, 14 Feb 2026 22:12:36 -0400 Subject: [PATCH 208/217] Fix red mark in rails CH3 ST D --- class/class_chapter_03.nut | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index d17724a..3ec448b 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2265,8 +2265,6 @@ class tutorial.chapter_03 extends basic_chapter t_start.remove_object(player_x(1), mo_label) local t = command_x(tool_build_way) local err = t.work(player, t_start, t_end, sc_way_name) - - pot[0]=1 } if(pot[1]==0){ @@ -2274,8 +2272,8 @@ class tutorial.chapter_03 extends basic_chapter t.remove_object(player_x(1), mo_label) local tool = command_x(tool_build_depot) tool.work(player, t, sc_dep_name) - pot[1]=1 } + if(pot[1]==1 && pot[2]==0){ pot[2]=1 } @@ -2952,3 +2950,4 @@ class tutorial.chapter_03 extends basic_chapter } // END of class // END OF FILE + From cda93ef9865172f5be7aa46619a37b4ca2181e1d Mon Sep 17 00:00:00 2001 From: Yona-TYT Date: Sat, 14 Feb 2026 22:31:37 -0400 Subject: [PATCH 209/217] Fix red mark in rails CH3 ST G --- class/class_chapter_03.nut | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index 3ec448b..d68e3c8 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -2450,20 +2450,15 @@ class tutorial.chapter_03 extends basic_chapter if(pot[0]==0){ local t_start = my_tile(ch3_rail_depot2.b) local t_end = my_tile(ch3_rail_depot2.a) - t_start.unmark() - t_end.unmark() - t_end.remove_object(player_x(1), mo_label) local t = command_x(tool_build_way) t.work(player, t_start, t_end, sc_way_name) - - pot[0]=1 } if(pot[0]==1 && pot[1]==0){ local t = command_x(tool_build_depot) t.work(player, my_tile(ch3_rail_depot2.a), sc_dep_name) - pot[1]=1 } + if(pot[1]==1 && pot[2]==0){ local wt = wt_rail if (current_cov>ch3_cov_lim2.a && current_cov Date: Mon, 16 Feb 2026 09:04:28 +0100 Subject: [PATCH 210/217] CHG way tool select with key (require Simutrans r11881) --- class/class_basic_chapter.nut | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index 7fc6eee..ca8caec 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -3701,7 +3701,7 @@ function check_select_station(name, wt, good) { } /** - * @param name - tool name ( by key select = waytype : not implemented) + * @param name - tool name ( by key select = waytype ) * @param wt - waytype * @param st - systemtype * @@ -3709,19 +3709,13 @@ function check_select_station(name, wt, good) { */ function check_select_way(name, wt, st = st_flat) { - gui.add_message(" list name " + name.len()) + //gui.add_message(" list name " + name.len()) // Selection tool with key - if ( name.len() == 1 ) { - local s = name.tointeger() - if ( s == wt ) { - return null - } else { - return translate("Selected way is not correct!") - } - + if ( wt.tostring() == name ) { + name = way_desc_x.get_default_way_desc(wt).get_name() } - local list = way_desc_x.get_available_ways (wt, st) + local list = way_desc_x.get_available_ways(wt, st) local list_name = [] for (local i = 0; i < list.len(); i++ ) { From 3fe95987ca0e01496d16d4c5a69ba345f1d9d178 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:22:38 +0100 Subject: [PATCH 211/217] CHG coord or coord3d --- class/class_messages.nut | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/class/class_messages.nut b/class/class_messages.nut index 2b34053..77819b5 100644 --- a/class/class_messages.nut +++ b/class/class_messages.nut @@ -118,7 +118,12 @@ function get_tile_message(id, tile) { } } catch(ev) { - txt_tile = coord_to_string(tile) + try { + txt_tile = coord_to_string(tile) + } + catch(ev) { + txt_tile = coord3d_to_string(tile) + } } From 9a6bde037765cde6d19b0db76f07c48579fc8db0 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:23:49 +0100 Subject: [PATCH 212/217] CHG code style --- class/class_chapter_04.nut | 2 +- class/class_chapter_05.nut | 2 +- class/class_chapter_06.nut | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_04.nut b/class/class_chapter_04.nut index 4af486d..4f9fb39 100644 --- a/class/class_chapter_04.nut +++ b/class/class_chapter_04.nut @@ -521,7 +521,7 @@ class tutorial.chapter_04 extends basic_chapter if ( tool_id == tool_remove_way || tool_id == 4097 ) return result } - if (pos.x>=c_cannel_lim.a.x && pos.y>=c_cannel_lim.a.y && pos.x<=c_cannel_lim.b.x && pos.y<=c_cannel_lim.b.y){ + if (pos.x >= c_cannel_lim.a.x && pos.y >= c_cannel_lim.a.y && pos.x <= c_cannel_lim.b.x && pos.y <= c_cannel_lim.b.y) { local way = tile_x(pos.x, pos.y, pos.z).find_object(mo_way) if (tool_id == tool_build_way && way && way.get_waytype() == wt_water) return null diff --git a/class/class_chapter_05.nut b/class/class_chapter_05.nut index 1dbb91c..96965b0 100644 --- a/class/class_chapter_05.nut +++ b/class/class_chapter_05.nut @@ -637,7 +637,7 @@ class tutorial.chapter_05 extends basic_chapter } if( tile_x(r_way.c.x, r_way.c.y, r_way.c.z).find_object(mo_label) ){ - if(tool_id==tool_build_way || tool_id==4113 || tool_id==tool_remover) + if(tool_id == tool_build_way || tool_id == 4113 || tool_id == tool_remover) return null } else return all_control(result, wt_road, st_flat, tool_id, pos, r_way.c, name) diff --git a/class/class_chapter_06.nut b/class/class_chapter_06.nut index 1e99a9b..a745a55 100644 --- a/class/class_chapter_06.nut +++ b/class/class_chapter_06.nut @@ -476,8 +476,8 @@ class tutorial.chapter_06 extends basic_chapter local s = check_select_way(name, wt_air, st_runway) if ( s != null ) return s - if (way && way.get_name() != obj1_way_name){ - if(tool_id == tool_remover || tool_id == tool_remove_way) return null + if ( way && way.get_name() != obj1_way_name ) { + if ( tool_id == tool_remover || tool_id == tool_remove_way ) return null result = format(translate("The track is not correct it must be: %s, use the 'Remove' tool"),translate(obj1_way_name)) + " ("+c1_start.tostring()+")." From 3bb50a83b5f0ad1d18e761d3448feea324031df5 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:25:09 +0100 Subject: [PATCH 213/217] CHG test way check with astar (not work, disabled) --- class/class_chapter_02.nut | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/class/class_chapter_02.nut b/class/class_chapter_02.nut index 194fa20..0d8f4bb 100644 --- a/class/class_chapter_02.nut +++ b/class/class_chapter_02.nut @@ -587,6 +587,10 @@ class tutorial.chapter_02 extends basic_chapter local obj = false local r_way = get_fullway(coora, coorb, dir, obj) + //check_way_last_tile + //test_select_way(my_tile(way1_coords.a), my_tile(way1_coords.b), wt_road) + + //Para marcar inicio y fin de la via local waya = tile_x(coora.x,coora.y,coora.z).find_object(mo_way) local wayb = tile_x(coorb.x,coorb.y,coorb.z).find_object(mo_way) From f9dee5094a29256677fbe46e0d910e5372b4e76c Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:25:37 +0100 Subject: [PATCH 214/217] CHG zone limit --- class/class_basic_coords_p64g.nut | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/class_basic_coords_p64g.nut b/class/class_basic_coords_p64g.nut index fdd7409..7b4514b 100644 --- a/class/class_basic_coords_p64g.nut +++ b/class/class_basic_coords_p64g.nut @@ -216,7 +216,7 @@ way1_coords <- {a = coord3d(130,160,0), b = coord3d(130,185,0), dir = 3} // start - 5 tiles after start - bridge tile - bridge tile - 5 tiles before the end - end way2_fac1_fac2 <- [coord3d(125,163,0), coord3d(120,163,0), coord3d(107,158,0), coord3d(102,158,0), coord3d(96,155,1), coord3d(96,151,1)] -limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(122, 166)} +limit_ch3_rail_line_1a <- {a = coord(105, 153), b = coord(120, 166)} limit_ch3_rail_line_1b <- {a = coord(95, 154), b = coord(103, 160)} // start - 5 tiles after start - tunnel tile - tunnel tile - 5 tiles before the end - end From 1b5ff4a11174375cb7699f15c2fcdc26bc0a254a Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:27:19 +0100 Subject: [PATCH 215/217] CHG add new parameter for way check with astar --- class/class_basic_chapter.nut | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/class/class_basic_chapter.nut b/class/class_basic_chapter.nut index ca8caec..28bd6dd 100644 --- a/class/class_basic_chapter.nut +++ b/class/class_basic_chapter.nut @@ -24,6 +24,8 @@ sigcoord <- null r_way <- { c = coord3d(0, 0, 0), p = 0, r = false, m = false, l = false, s = 0, z = null} r_way_list <- {} wayend <- coord3d(0, 0, 0) +check_way_last_tile <- null +check_way_mark_tile <- null //------------------------------------------------------------------------------------------------------------- // Mark / Unmark build in to link @@ -1706,7 +1708,7 @@ class basic_chapter local t = tile_x(coor.x, coor.y, coor.z) local way = t.find_object(mo_way) local brig = t.find_object(mo_bridge) - //local desc = way_desc_x.get_available_ways(wt, st) + local desc = way_desc_x.get_available_ways(wt, st) local ribi = 0 if ( way ) { if ( tool_id != tool_build_bridge ) From 78f2df309261f6dbfcb1d9037528d535eddda1dd Mon Sep 17 00:00:00 2001 From: Andarix Date: Sun, 22 Feb 2026 13:29:52 +0100 Subject: [PATCH 216/217] CHG add code for way check with astar --- class/astar.nut | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/class/astar.nut b/class/astar.nut index 1ab0380..ced738a 100644 --- a/class/astar.nut +++ b/class/astar.nut @@ -143,6 +143,10 @@ class astar // investigate neighbours and put them into open list process_node(current_node) + if ( current_node != null ) { + check_way_last_tile = current_node + } + current_node = null } @@ -768,6 +772,28 @@ function test_select_way(start, end, wt = wt_rail) { local wayline = asf.search_route([start], [end]) if ( "err" in wayline ) { //gui.add_message_at("no route from " + coord3d_to_string(start) + " to " + coord3d_to_string(end) , start) + if ( check_way_last_tile != null ) { + local tile = tile_x(check_way_last_tile.x, check_way_last_tile.y, check_way_last_tile.z) + //gui.add_message("test_select_way last tile " + coord3d_to_string(tile)) + r_way.c = tile + + //if ( check_way_mark_tile == null ) { check_way_mark_tile = check_way_last_tile } + /*local sasf = astar_route_finder(wt) + local waybuild = sasf.search_route([start], [tile]) + if ( "err" in waybuild ) { + //gui.add_message("error build ") + } else { + foreach(node in waybuild.routes) { + local t = tile_x(node.x, node.y, node.z) + // gui.add_message("test tile " + coord3d_to_string(t)) + + + } + }*/ + + } else { + //gui.add_message("test_select_way last tile - null") + } return false } else { @@ -776,3 +802,21 @@ function test_select_way(start, end, wt = wt_rail) { return true } } + +function unmark_waybuild() { + if ( check_way_mark_tile != null ) { + + local w_dir = my_tile(check_way_mark_tile).get_way_dirs(wt_rail) + if ( dir.is_twoway(w_dir) ) { + + gui.add_message("### check_way_mark_tile " + coord3d_to_string(check_way_mark_tile)) + local r = my_tile(check_way_mark_tile).find_object(mo_way) + if ( r ) { r.unmark() } + //r = my_tile(check_way_mark_tile).find_object(mo_label) + //if ( r ) { r.remove_object(player_x(0), mo_label) } + check_way_mark_tile = check_way_last_tile + } + } else { + check_way_mark_tile = check_way_last_tile + } +} \ No newline at end of file From 907d778ca7a6d7168c1f60812e4d5c801b446427 Mon Sep 17 00:00:00 2001 From: Andarix Date: Sat, 28 Feb 2026 17:09:38 +0100 Subject: [PATCH 217/217] FIX text coord --- class/class_chapter_03.nut | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/class/class_chapter_03.nut b/class/class_chapter_03.nut index d68e3c8..0be0d35 100644 --- a/class/class_chapter_03.nut +++ b/class/class_chapter_03.nut @@ -166,7 +166,7 @@ class tutorial.chapter_03 extends basic_chapter text.tx = ttext("[2/3]") } else if (pot[2]==0){ - local c = way2_fac1_fac2[4] + local c = way2_fac1_fac2[5] local c_label = c.href("("+c.tostring()+")") local way = tile_x(c.x, c.y, c.z).find_object(mo_way) if(!way) c4 = c_label @@ -2273,7 +2273,7 @@ class tutorial.chapter_03 extends basic_chapter local tool = command_x(tool_build_depot) tool.work(player, t, sc_dep_name) } - + if(pot[1]==1 && pot[2]==0){ pot[2]=1 } @@ -2458,7 +2458,7 @@ class tutorial.chapter_03 extends basic_chapter local t = command_x(tool_build_depot) t.work(player, my_tile(ch3_rail_depot2.a), sc_dep_name) } - + if(pot[1]==1 && pot[2]==0){ local wt = wt_rail if (current_cov>ch3_cov_lim2.a && current_cov