Welcome to the POSSESSION.jp!

We are the global gaming community from Japan. By registering with us, you'll be able to discuss, share and private message with other members of our community.
POSSESSION は日本発祥のゲーミングコミュニティです。 私たちのコミュニティに参加して、様々なディスカッションや情報共有をしてみましょう。

SignUp Now!

[SaySounds] saysounds installer

Urucy

uwu
Staff member
Joined
Apr 14, 2019
Messages
66
Steam
View


SaySounds Installer



SaySoundsの導入がよくわからない人向けに簡単にSaySoundsを導入できるツールを作成しました。

Q: そもそもSaySoundsって何?
A: チャットで特定の単語を打つと音が鳴ります。他の人が打っても音が鳴ります。
使い方
ツールをダウンロード(リンクは下にもあります): SaySounds Installer
SaySoundsのzipファイルをダウンロード: SaySounds File
ツールを起動して Y を入力 (csgoフォルダがデフォルトの場所じゃない場合は選択するようにダイアログが出るので、選択してから Y)
SaySoundsのzipファイルを選択
終わり


ツールの特徴
  • SaySoundsのZipを選ぶだけで導入が可能 Zipファイルの解凍も必要ありません。
  • CSGOのインストール場所をデフォルト以外の場所にしていると、CSGOのフォルダを選択するダイアログが自動で出ます
  • 全部入りSaySoundsのZipファイル、新規追加SaySoundsのZipファイル両方対応
  • 新規追加のSaySoundsの場合、導入スピードは1秒前後!全部入りでも、余程の低スペックじゃない限り10~20秒で終わります

デフォルトのCSGOフォルダというのはここです
C:\\Program Files (x86)\\Steam\\steamapps\\common\\Counter-Strike Global Offensive\\csgo

187

注意点
  • Zipファイル以外を選択しないでください
  • 現在の解凍後の構成であるsound/misc...という構造が変わった場合、ツールが動作しなくなります
  • 細かく動作をチェックしていないため、未定義の動作を起こす可能性があるかもしれないので、何か問題があればすぐに報告してください

スクリーンショット
188

189

い つ も の (ソースコードです)
使用言語はRustです

Cargo.toml
YAML:
[package]
name = "saysounds-installer"
version = "0.1.0"
authors = ["Urucy"]
edition = "2018"

[dependencies]
anyhow = "*"
nfd = { git = "https://github.com/saurvs/nfd-rs.git" }
dialoguer = "0.5.0"
zip = "0.5.4"
console = "0.9.1"
fs_extra = "1.1.0"
main.rs
C-like:
const CDRIVE_CSGO: &'static str = "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Counter-Strike Global Offensive\\csgo";

use anyhow::Context as _;

use nfd::Response;
use console::style;
use dialoguer::Confirmation;
use fs_extra::dir::move_dir;

use std::io;
use std::fs;
use std::path::Path;
use std::{thread, time};

fn main() -> anyhow::Result<()> {
    let csgo_directory = if !Path::new(CDRIVE_CSGO).exists() {
        println!("{}", style("not found csgo directory / csgoを見つけることができませんでした。").green());
        println!("{}", style("Select csgo directory / csgoディレクトリを選択してください").green());

        let result = nfd::open_pick_folder(None).unwrap_or_else(|e| {
            panic!(e);
        });

        match result {
            Response::Okay(file_path) => file_path,
            Response::OkayMultiple(_) => "FILES".to_string(),
            Response::Cancel => {
                println!("{}", style("Canceled. Exit / キャンセルされました。終了します。").red());
                return Ok(());
            }
        }
    } else { CDRIVE_CSGO.to_string() };

    if !Confirmation::new()
                     .with_text("Select Zip file of SaySounds / SaySoundsのZipファイルを選択してください")
                     .interact()
                     .unwrap()
    {
        println!("{}", style("Exit / 終了します").red());
        return Ok(());
    }

    let result = nfd::open_file_dialog(None, None).unwrap_or_else(|e| {
        panic!(e);
    });

    let saysounds_zip_path = match result {
        Response::Okay(file_path) => file_path,
        Response::OkayMultiple(_) => "FILES".to_string(),
        Response::Cancel => {
            println!("{}", style("Canceled. Exit / キャンセルされました。終了します。").red());
            return Ok(());
        }
    };

    let mut saysounds_path = "".to_string();

    let file = fs::File::open(&saysounds_zip_path).unwrap();
    let mut archive = zip::ZipArchive::new(file).unwrap();

    for i in 0..archive.len() {
        let mut file = archive.by_index(i).unwrap();
        let outpath = file.sanitized_name();

        if (&*file.name()).ends_with('/') {
            if (&*file.name()) != "sound/" && !saysounds_path.split('/').collect::<Vec<&str>>().contains(&"sound") {
                saysounds_path = saysounds_path + (&*file.name());
            };
            fs::create_dir_all(&outpath).unwrap();
        } else {
            if let Some(p) = outpath.parent() {
                if !p.exists() {
                    fs::create_dir_all(&p).unwrap();
                }
            }
            let mut outfile = fs::File::create(&outpath).unwrap();
            io::copy(&mut file, &mut outfile).unwrap();
        }
    }

    let mut options = fs_extra::dir::CopyOptions::new();
    options.skip_exist = true;

    move_dir(&saysounds_path, csgo_directory, &options).with_context(|| "Could not move saysounds folder / saysoundsフォルダーを移動することができませんでした。")?;
    println!("{}", style("SaySounds installed! / SaySoundsが導入されました!").green());
    fs::remove_dir_all(saysounds_path.split('/').collect::<Vec<&str>>()[0])?;
    thread::sleep(time::Duration::from_millis(2000));

    Ok(())
}
 

Attachments

Last edited:
Top