0 Members and 1 Guest are viewing this topic.
simple_tool[36]=,:# colon key is assigned to this function.
What about a mode where general ribis on waytiles is shown, especially concerning the long time asked solution to the two unintentional endtiles making roads and rails unconnected, creating "no route" messages?
function get_fullway(coora, coorb, dir, obj, tun=false) { local tilea = tile_x(coora.x,coora.y,coora.z) local tileb = tile_x(coorb.x,coorb.y,coorb.z) local way = tilea.find_object(mo_way) if (!way) return coora if (obj){ if (obj == mo_wayobj){ if(!way.is_electrified()){ way.mark() if (!tun) label_x.create(coora, player_x(1), translate("Connect here!.")) return coora } else{ tilea.remove_object(player_x(1), mo_label) way.unmark() } } } local r_dir = way_x(coora.x, coora.y, coora.z).get_dirs() if (dir == 0) dir = c_dir(coora, coorb, r_dir) local c_way = coora local c_z = false local ribi = 0 local vl = array(10) vl[3]=3 vl[5]=5 vl[2]=2 vl[6]=6 if (dir==1){ if (r_dir==2 || r_dir==10) dir=6 else if (r_dir==4 || r_dir==5) dir=2 else if (r_dir==3){ tilea.find_object(mo_way).unmark() dir=2 coora.y-- } else if (r_dir==6){ tilea.find_object(mo_way).unmark() dir=3 coora.y++ } } else if (dir==2){ if (r_dir==1) coora.y-- } else if (dir==3){ if (r_dir==4) coora.y++ } else if (dir==4){ if (r_dir==1 || r_dir==5) dir=3 else if (r_dir==8 || r_dir==10) dir=5 else if (r_dir==3){ tilea.find_object(mo_way).unmark() dir=5 coora.x++ } else if (r_dir==9){ tilea.find_object(mo_way).unmark() dir=6 coora.x-- } } else if (dir==5){ if (r_dir==2) coora.x++ } else if (dir==6){ if (r_dir==8) coora.x-- } while(true){ local til = tile_x(coora.x,coora.y,coora.z) local tunnel = til.find_object(mo_tunnel) local bridge = til.find_object(mo_bridge) local slope = til.get_slope() local type = false local t_type = false local way = false local ribi = false if (!tunnel && !bridge){ coora.z = square_x(coora.x,coora.y).get_ground_tile().z } if (tun){ type = mo_tunnel local height_min = -3 local height_max = my_tile(coord(coora.x, coora.y)).z for(;height_max>=height_min;height_max--){ local tile = tile_x(coora.x, coora.y, height_max) if (tile.is_tunnel()){ coora.z = height_max break } } } local t = tile_x(coora.x, coora.y, coora.z) if (t.find_object(mo_way)) type = mo_way if (t.find_object(mo_tunnel)) type = mo_tunnel if (t.find_object(mo_crossing)) type = mo_crossing if (tun || obj) type = mo_way if (!type) return coora way = t.find_object(type) ribi = t.find_object(mo_way).get_dirs() if (obj){ if (obj == mo_wayobj){ if(!way.is_electrified()){ way.mark() if (!tun) label_x.create(coora, player_x(1), translate("Connect here!.")) return coora } else{ t.remove_object(player_x(1), mo_label) way.unmark() } } } if(coora.x==coorb.x && coora.y==coorb.y && coora.z==coorb.z){ if (t_type) way.unmark() return 0 } if ((ribi==1)||(ribi==2)||(ribi==4)||(ribi==8)){ local waymark = tile_x(glmark.x, glmark.y, glmark.z).find_object(type) if (waymark){ waymark.unmark() } glmark = coord3d(coora.x, coora.y, coora.z) way.mark() return coora } else way.unmark() if (dir==2){ if (t.is_bridge()){ coora.y -= way_is_bridge(coora, 5) continue } if (ribi==5){ coora.y-- continue } else if (ribi==6){ dir = vl[5] coora.x++ continue } else if (ribi==12){ dir = vl[6] coora.x-- continue } else if (ribi==14){ dir = vl[5] coora.x++ continue } else if ((ribi==7 || ribi==11 || ribi==13 || ribi==15)){ coora.y-- continue } } else if (dir==3){ if (t.is_bridge()){ coora.y += way_is_bridge(coora, 5) continue } if (ribi==5){ coora.y++ continue } else if (ribi==3){ dir = vl[5] coora.x++ continue } else if (ribi==9){ dir = vl[6] coora.x-- continue } else if (ribi==11){ dir = vl[5] coora.x++ continue } else if ((ribi==7 || ribi==13 || ribi==14 || ribi==15)){ coora.y++ continue } } else if (dir==5){ if (t.is_bridge()){ coora.x += way_is_bridge(coora, 10) continue } if (ribi==10){ coora.x++ continue } else if (ribi==12){ dir = vl[3] coora.y++ continue } else if (ribi==9){ dir = vl[2] coora.y-- continue } else if (ribi==13){ dir = vl[2] coora.y-- continue } else if ((ribi==7 || ribi==11 || ribi==14 || ribi==15)){ coora.x++ continue } } else if (dir==6){ if (t.is_bridge()){ coora.x -= way_is_bridge(coora, 10) continue } if (ribi==10){ coora.x-- continue } else if (ribi==3){ dir = vl[2] coora.y-- continue } else if (ribi==6){ dir = vl[3] coora.y++ continue } else if (ribi==7){ dir = vl[3] coora.y++ continue } else if ((ribi==11 || ribi==14 || ribi==15)){ coora.x-- continue } } return coora } }
This patch is so useful when we build oneway roads. We can check very easily whether direction is set correctly.