Here is a Rust version of the script, it is always interesting to work in a new language. There are probably better ways to do this but I followed my old patterns.
fn level_th(number: i32) -> String {
//Take an interger in but return a String
let mut number_th = number.to_string();
if number_th == "11" || number_th == "12" || number_th == "13" {
number_th.push_str("th");
} else if number_th.ends_with("1") {
number_th.push_str("st");
} else if number_th.ends_with("2") {
number_th.push_str("nd");
} else if number_th.ends_with("3") {
number_th.push_str("rd");
} else {
number_th.push_str("th");
}
return number_th;
}
fn main() {
let max_lvl: i32 = 40;
//any way to clear screen?
//Headers
println!("Char \t \tClass Skill\tCC Skill\t \tStat\t");
println!("Level\tXP\tMax Ranks\tMax Ranks\tFeats\tIncreases\t");
//Main loop
let mut xp: i32 = 0;
let mut feats: i32 = 0;
let mut stats: i32 = 0;
for level in 1..(max_lvl + 1) {
xp = xp + (level - 1) * 1000;
let maxranks: i32 = level + 3;
let maxcc: f32 = maxranks as f32 / 2.0;
let feat_check: i32 = level % 3;
let mut feats_out = "--".to_string();
if feat_check == 0 || level == 1 {
feats = feats + 1;
feats_out = level_th(feats);
}
let stat_check = level % 4;
let mut stats_out = "--".to_string();
if stat_check == 0 {
stats = stats + 1;
stats_out = level_th(stats);
}
let level_out = level_th(level);
println!(" {}\t{}\t\t{}\t\t{}\t{}\t{}", level_out, xp, maxranks, maxcc, feats_out, stats_out);
}
}
//vi: shiftwidth=3 tabstop=3 et