紺野さんの道路でアップデートが必要な道路をハイライト表示するスクリプト

こんにちは神乃木です。今日はCities Skylines のお話です。

先日紺野さんが道路アセットをアップデートし、橋の描画に関するバグを修正されました。

アップデートに関する紺野さんのブログ

これに伴い、古い道路を新しい道路にアップデートしていかなきゃならないのですが、紺野さん本人が言っている通り、道路の識別は難しいし、マップ上のどこにアップデートが必要な道路があるのか探すのは非常に困難です。

というわけで以下のスクリプトを書きました。このスクリプトをコピーしてModToolsのコンソールに張り付ける(張り付け方はCSLコンテストの記事参照)と、古い道路(Ver2.1の道路)はピンク色にハイライトされます。道路を引くときもピンク色になるので間違って引いてしまうことを防げます。セーブデータには影響しません。ゲームを再起動するとピンク色は消えます。

道路の色は実行後すぐに反映されないので、一度地下ビューや渋滞ビューなどに切り替えてから戻すと、色が反映されます。

これで、置き換えるべき道路がわかりやすくなって作業が進むと思います。

// 2.1
string[] highlight_workshop_ids = new string[] {
	"1838149115","1864625632","1864625841","1864626196","1991444810",
	"1991445238","1991445516","1991447906","1991448372","1991450559",
	"1997702954","1997703095","1997703201","1997703506","1997704310",
	"1997704440","1997704825","1997706295","1997706744","1997714575",
	"2045583051","2053816982","2061609675","2061610175","2061610424",
	"2061613538","2061613939","2061614113","2063121788","2063122088",
	"2063122534","2063122767","2063122977","2079217000","2079217238",
	"2079217788","2079219811","2079220178","2079221074","2079221446",
	"2079221751","2079307050","2079307372","2079308060","2079308782"
	};

var networks = Resources.FindObjectsOfTypeAll();

Debug.Log("Detected: " + networks.Length + "networks");

for(uint i = 0; i < networks.Length; i++) 
{
	var network = networks[i];
	if(network == null) continue;
	if(network.m_netAI == null) continue;
	{
		// Matching workshop ids
		for(uint j = 0; j < highlight_workshop_ids.Length; j++){
			if(network.m_netAI.name.Contains(highlight_workshop_ids[j])){
				network.m_color = new Color(1f, 0f, 1f);

			}	
		}
	}
}

// 2.0-1.0 old roads
highlight_workshop_ids = new string[] {
"1857814625","1857812902","1857811000","1857807937","1857280575",
"1857280330","1857280048","1857279671","1849777842","1849771975",
"1849771174","1849770668","1849769984","1849767281","1844706014",
"1844705503","1838335778","1838389818",
"1212618891","1219724561","1219724792","1227174071","1227174411",
"1240666360","1255652797","1273305772","1273310532","1273317204",
"1273326827","1273339278","1273341670","1273345623","1275250720",
"1275253012","1576838118","2016920607"
	};

networks = Resources.FindObjectsOfTypeAll();

for(uint i = 0; i < networks.Length; i++) 
{
	var network = networks[i];
	if(network == null) continue;
	if(network.m_netAI == null) continue;
	{
		// Matching workshop ids
		for(uint j = 0; j < highlight_workshop_ids.Length; j++){
			if(network.m_netAI.name.Contains(highlight_workshop_ids[j])){
				network.m_color = new Color(1f, 0f, 0f);
				//Debug.Log("Marked: " + network.m_netAI);
			}	
		}
	}
}

5/10更新 紺野さんから古い道路のWorkshopIDを貰いましたので、それらの道路もハイライトするようにしました。


見ての通り、冒頭にVer2.1のワークショップIDをすべて定義しています。ほかの古い道路についても定義したいとは思うのですが、既に非公開にされた道路がありワークショップIDの抽出が困難なので今はそのままです。もし古い道路のワークショップIDがわかれば更新しようと思います。

問題点として、Network Skins 2を利用している場合、NS2でカスタマイズされた道路についてはハイライトされません。これはNS2側で道路色の変更値を持っていることが原因です。
作者に確認したところ、これを解消するには道路オブジェクトからスキンデータを取り除く作業が必要で相当複雑になるとのことなので、私のスクリプトではこれ以上はできなさそうです。このため、リプレース作業をやるときにはNetwork Skins 2をオフにして行う必要があり、かつ道路を変更したら再度街灯などの設定を行う必要がでてきます。

感想をお聞かせください。

  • ためになった・面白かった (5)
  • ためにならなかった・面白くなかった (0)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)