dsI/bin/
dsI/extra/creremote/
dsI/extra/mingw/
dsI/extra/wolfpaw/
dsI/fluffos-2.7-ds2.018/
dsI/fluffos-2.7-ds2.018/ChangeLog.old/
dsI/fluffos-2.7-ds2.018/Win32/
dsI/fluffos-2.7-ds2.018/compat/
dsI/fluffos-2.7-ds2.018/compat/simuls/
dsI/fluffos-2.7-ds2.018/testsuite/
dsI/fluffos-2.7-ds2.018/testsuite/clone/
dsI/fluffos-2.7-ds2.018/testsuite/command/
dsI/fluffos-2.7-ds2.018/testsuite/data/
dsI/fluffos-2.7-ds2.018/testsuite/etc/
dsI/fluffos-2.7-ds2.018/testsuite/include/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/master/
dsI/fluffos-2.7-ds2.018/testsuite/log/
dsI/fluffos-2.7-ds2.018/testsuite/single/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
dsI/fluffos-2.7-ds2.018/testsuite/u/
dsI/fluffos-2.7-ds2.018/tmp/
dsI/lib/cfg/
dsI/lib/cmds/common/
dsI/lib/cmds/creators/include/
dsI/lib/cmds/creators/include/SCCS/
dsI/lib/daemon/services/
dsI/lib/doc/
dsI/lib/domains/Ylsrim/
dsI/lib/domains/Ylsrim/adm/
dsI/lib/domains/Ylsrim/armour/
dsI/lib/domains/Ylsrim/broken/
dsI/lib/domains/Ylsrim/fish/
dsI/lib/domains/Ylsrim/meal/
dsI/lib/domains/Ylsrim/npc/
dsI/lib/domains/Ylsrim/virtual/
dsI/lib/domains/Ylsrim/weapon/
dsI/lib/domains/default/creator/
dsI/lib/domains/default/etc/
dsI/lib/domains/default/room/
dsI/lib/lib/comp/
dsI/lib/lib/lvs/
dsI/lib/lib/user/
dsI/lib/lib/virtual/
dsI/lib/obj/
dsI/lib/obj/include/
dsI/lib/realms/
dsI/lib/save/kills/a/
dsI/lib/save/kills/b/
dsI/lib/save/kills/f/
dsI/lib/save/kills/m/
dsI/lib/save/kills/q/
dsI/lib/save/kills/r/
dsI/lib/secure/cfg/
dsI/lib/secure/cfg/classes/
dsI/lib/secure/cfg/races/SCCS/
dsI/lib/secure/cmds/creators/include/
dsI/lib/secure/cmds/players/
dsI/lib/secure/cmds/players/include/
dsI/lib/secure/daemon/include/
dsI/lib/secure/lib/
dsI/lib/secure/lib/include/
dsI/lib/secure/lib/net/
dsI/lib/secure/lib/net/include/
dsI/lib/secure/lib/std/
dsI/lib/secure/obj/
dsI/lib/secure/obj/include/
dsI/lib/secure/save/
dsI/lib/spells/
dsI/lib/verbs/admins/include/
dsI/lib/verbs/common/
dsI/lib/verbs/common/include/
dsI/lib/verbs/creators/
dsI/lib/verbs/creators/include/
dsI/lib/verbs/players/include/SCCS/
dsI/lib/verbs/rooms/
dsI/lib/verbs/rooms/include/
dsI/lib/www/
dsI/v22.2b14/
dsI/win32/
/*   sconvert.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;
 
  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, skill;
 
  if( !sizeof(s) ) args = "*.c";
  else args = s;
  files = (string *)this_player()->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( !sizeof(str) || (sscanf(str, "%s %d", files, change) != 2) || !change) {
    GetHelp(0);
    return 1;
  }
  files = absolute_path((string)this_player()->query_cwd(), files);
  Convert(files, change);
  return 1;
}
 
 
void GetHelp(string str) {
  message("info",
    "Syntax: sconvert <filename | wild card> <percentage>\n\n"
    "This command searches through the specified file(s) and lowers "
    "all occurrences of SetSkill and SetStat by a <percentage> "
    "amount.\n\n"
    "Example: sconvert *.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.",
  this_player() );
}