Участник:Cypselus/usefultools

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску

Выход новой версии

В подавляющем большинстве релизов происходило изменение ./raw файлов для существ, достаточно вставить содержимое файла, добавив в конце строку:

<noinclude>[[Category:Raw files]]</noinclude>

Особым файлом является Creature_standard.txt, из-за его размеров его разделили на 3, при этом в начале каждого идут строки:

creature_standard 

[OBJECT:CREATURE]

Всякое-разное

cat `find ./raw -iname "*txt"` |perl -wlne '
{SWITCH:
       if (/.*\[OBJECT\:(.*?)\].*/g)
               { $obj = lc $1; $OBJ = $1}
       if (/.*\[(?:PLANT|INORGANIC|CREATURE)\:(.*?)\].*/g)
               {print "*[[$name]] --> [[$name]] --> [[$name/raw]]<br/> <noinclude>{{raw header|$obj|$item}}</noinclude>{{raw|$fname.txt|$OBJ|$item}}<noinclude>{{raw footer|$obj|$item}}</noinclude>";
               $item=$1;}
       if (/((?:inorganic|plant|creature)_[a-z_]+)\r/g)
               { $fname=$1;}
       if (/.*\[(?:NAME|INORGANIC)\:(.*?)[:\]]+.*/g)
               { $name = lc $1;}
}'
Результат работы
  • muck root --> muck root --> muck root/raw
    <noinclude>{{raw header|plant|ROOT_MUCK}}</noinclude>{{raw|:plant_standard.txt|PLANT|ROOT_MUCK}}<noinclude>{{raw footer|plant|ROOT_MUCK}}</noinclude>
  • bloated tuber --> bloated tuber --> bloated tuber/raw
    <noinclude>{{raw header|plant|TUBER_BLOATED}}</noinclude>{{raw|:plant_standard.txt|PLANT|TUBER_BLOATED}}<noinclude>{{raw footer|plant|TUBER_BLOATED}}</noinclude>
  • spinel_red --> spinel_red --> spinel_red/raw
    <noinclude>{{raw header|inorganic|SPINEL_RED}}</noinclude>{{raw|inorganic_stone_gem.txt|INORGANIC|SPINEL_RED}}<noinclude>{{raw footer|inorganic|SPINEL_RED}}</noinclude>
  • fairy --> fairy --> fairy/raw
    <noinclude>{{raw header|creature|FAIRY}}</noinclude>{{raw|:creature_standard.txt|CREATURE|FAIRY}}<noinclude>{{raw footer|creature|FAIRY}}</noinclude>
  • pixie --> pixie --> pixie/raw
    <noinclude>{{raw header|creature|PIXIE}}</noinclude>{{raw|:creature_standard.txt|CREATURE|PIXIE}}<noinclude>{{raw footer|creature|PIXIE}}</noinclude>
  • beak dog --> beak dog --> beak dog/raw
    <noinclude>{{raw header|creature|BEAK_DOG}}</noinclude>{{raw|:creature_standard.txt|CREATURE|BEAK_DOG}}<noinclude>{{raw footer|creature|BEAK_DOG}}</noinclude>

...


grep -RF "[POSITION:" ./raw/ |perl -wlne 'print "$2=$1\|" if /\.\/raw\/objects\/(.*)\:.*\:(.*)]/' |sort >"dwarf file lookup"
  • поиск петов
cat `find ./raw -type f` |perl -wlne 'if (/.*((?:\[PETVALUE\:\d+\]|\[CREATURE\:.*?\])).*/g) {$a= substr $1,1,8; if ($a eq "CREATURE") {$b=$1;} else {print "$1 $b";};}'
  • поиск источников шерсти
cat `find ./raw -type f` |perl -wlne 'if (/.*((?:\[SHEARABLE_TISSUE_LAYER.*?\]|\[CREATURE\:.*?\])).*/g) {$a= substr $1,1,8; if ($a eq "CREATURE") {$b=$1;} else {print "$1 $b";};}'
  • поиск существа по тагу с параметром, например GRASSTRAMPLE
cat `find ./raw -type f` |perl -wlne 'if (/.*((?:\[GRASSTRAMPLE.*?]|\[CREATURE\:.*?\])).*/g) {$a= substr $1,1,8; if ($a eq "CREATURE") {$b=$1;} else {print "$1 $b";};}'
  • создание частотного словаря значений тега [CV_REMOVE_TAG:] или [BIOME:]
cat `find ./raw -type f` |perl -e 'while (<>){if (/.*\[CV_REMOVE_TAG\:(.*?)\].*/g){if(exists($list{$1})){$list{$1}++;}else{%list = (%list, $1, 1)}}} foreach(sort {$list{$a} <=> $list{$b}} keys %list) {print "$list{$_}\t$_\n";}'
cat `find ./raw -type f` |perl -e 'while (<>){if (/.*\[BIOME\:(.*?)\].*/g){if(exists($list{$1})){$list{$1}++;}else{%list = (%list, $1, 1)}}} foreach(sort {$list{$a} <=> $list{$b}} keys %list) {print "$list{$_}\t$_\n";}'
  • создание wiki-списка существ по критерию, в данном случае по наличию тега [CANOPENDOORS.*?\]
cat `find ./raw -type f` |perl -wlne 'if (/.*((?:\[CANOPENDOORS.*?\]|\[NAME\:(.*?)\:)).*/g) {$a= substr $1,1,4; if ($a eq "NAME") {$b=$2;} else {print "* $b";};}'
Результат работы

...

    • то же, но с иконкой
cat `find ./raw -iname "*txt"` |perl -wlne '
{SWITCH:
        if (/.*\[CANOPENDOORS.*?\].*/g)
                {print "*$tile [[$name]]";}
        if (/.*\[(?:CREATURE_TILE)\:(.*?)\].*/g)
           {$tile=$1;}
        if (/.*\[(?:NAME)\:(.*?)\:.*/g)
           {$name=$1;}
}'
Результат работы

...