/* statconvert.c * A utility which reduces or raises SetSkill and SetStat lines * in a file by a specified percentage. * created by Blitz@Dead Souls */ void GetHelp(string str); string ConvertLine(string str, int change, int line, string search) { string s1, s2, cut, n, tmp; int a, b, val; if(!archp(previous_object())) return 0; while( (a = strsrch(str, search)) > -1 ) { tmp = str[a..]; b = strsrch(tmp, ")"); if( b < 0) break; cut = tmp[0..b]; if( sscanf(cut, "%s,%s", s1, s2) != 2 ) break; s2 = replace_string(s2, " ", ""); sscanf(s2, "%s)", s2); val = to_int(s2); if( !val ) break; val = val - (val / (100 / change)); n = sprintf("%s, %d)", s1[0] + "@@@" + s1[1..], val); str = replace_string(str, cut, n); write("Line "+line+": "+cut+" -> "+val+"."); } str = replace_string(str, search[0] + "@@@" + search[1..], search); return str; } void Convert(string s, int change) { string args, file, str; string *files, *tmp; int i; if(!archp(previous_object())) return 0; if( !sizeof(s) ) args = "*.c"; else args = s; files = wild_card(args); if( !i = sizeof(files) ) { message("info", "No file(s) found: "+implode(files, " "), this_player() ); return; } foreach(file in files) { string line; int changed = 0; str = read_file(file); if( !sizeof(str) ) continue; i = sizeof(tmp = explode(str, "\n")); write("Checking: "+file); while(i--) { line = tmp[i]; line = ConvertLine(line, change, i, "SetSkill"); line = ConvertLine(line, change, i, "SetStat"); if( tmp[i] != line ) changed = 1; if( changed ) tmp[i] = line; } if( changed ) { rename(file, file+"~"); write(file+": Writing new file..."); write_file(file, implode(tmp, "\n")); } } } mixed cmd(string str) { string files; int change; if(!archp(previous_object())) return 0; if( !sizeof(str) || (sscanf(str, "%s %d", files, change) != 2) || !change) { GetHelp(0); return 1; } files = absolute_path(this_player()->query_cwd(), files); Convert(files, change); return 1; } string GetHelp(){ return ("Syntax: statconvert \n\n" "This command searches through the specified file(s) and lowers " "all occurrences of SetSkill and SetStat by a " "amount.\n\n" "Example: statconvert *.c 10\n" " - Searches all .c files in your currenct path, and reduces\n" " all skill and stat settings by 10%\n\n" "Note: It is possible to raise settings by passing " "a negative number."); }