Remove dwarfexport plugin (obsolete)
The Runesmith utility has long been replaced by Dwarf Therapist, and it's attribute-editing functions are very well supported directly by DFHack.develop
							parent
							
								
									836e1a3a37
								
							
						
					
					
						commit
						5f8f0c72aa
					
				@ -1,31 +0,0 @@
 | 
			
		||||
PROJECT (export)
 | 
			
		||||
# A list of source files
 | 
			
		||||
SET(PROJECT_SRCS
 | 
			
		||||
    dwarfexport.cpp
 | 
			
		||||
)
 | 
			
		||||
# A list of headers
 | 
			
		||||
SET(PROJECT_HDRS
 | 
			
		||||
    dwarfexport.h
 | 
			
		||||
)
 | 
			
		||||
SET_SOURCE_FILES_PROPERTIES( ${PROJECT_HDRS} PROPERTIES HEADER_FILE_ONLY TRUE)
 | 
			
		||||
 | 
			
		||||
# mash them together (headers are marked as headers and nothing will try to compile them)
 | 
			
		||||
LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS})
 | 
			
		||||
 | 
			
		||||
#linux
 | 
			
		||||
IF(UNIX)
 | 
			
		||||
    add_definitions(-DLINUX_BUILD)
 | 
			
		||||
    SET(PROJECT_LIBS
 | 
			
		||||
        # add any extra linux libs here
 | 
			
		||||
        ${PROJECT_LIBS}
 | 
			
		||||
    )
 | 
			
		||||
# windows
 | 
			
		||||
ELSE(UNIX)
 | 
			
		||||
    SET(PROJECT_LIBS
 | 
			
		||||
        # add any extra linux libs here
 | 
			
		||||
        ${PROJECT_LIBS}
 | 
			
		||||
        $(NOINHERIT)
 | 
			
		||||
    )
 | 
			
		||||
ENDIF(UNIX)
 | 
			
		||||
# this makes sure all the stuff is put in proper places and linked to dfhack
 | 
			
		||||
DFHACK_PLUGIN(dwarfexport ${PROJECT_SRCS} LINK_LIBRARIES ${PROJECT_LIBS})
 | 
			
		||||
@ -1,244 +0,0 @@
 | 
			
		||||
// some headers required for a plugin. Nothing special, just the basics.
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
#define DFHACK_WANT_MISCUTILS
 | 
			
		||||
#include <Core.h>
 | 
			
		||||
#include <VersionInfo.h>
 | 
			
		||||
#include <Console.h>
 | 
			
		||||
#include <Export.h>
 | 
			
		||||
#include <PluginManager.h>
 | 
			
		||||
#include <modules/Units.h>
 | 
			
		||||
#include <modules/Translation.h>
 | 
			
		||||
 | 
			
		||||
#include <df/ui.h>
 | 
			
		||||
#include <df/world.h>
 | 
			
		||||
#include <df/unit.h>
 | 
			
		||||
#include <df/unit_soul.h>
 | 
			
		||||
#include <df/unit_labor.h>
 | 
			
		||||
#include <df/unit_skill.h>
 | 
			
		||||
/*
 | 
			
		||||
dwarfexport
 | 
			
		||||
===========
 | 
			
		||||
Export dwarves to RuneSmith-compatible XML; also unused by modern tools.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using namespace DFHack;
 | 
			
		||||
using df::global::ui;
 | 
			
		||||
using df::global::world;
 | 
			
		||||
 | 
			
		||||
// our own, empty header.
 | 
			
		||||
#include "dwarfexport.h"
 | 
			
		||||
#include <df/personality_facet_type.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Here go all the command declarations...
 | 
			
		||||
// mostly to allow having the mandatory stuff on top of the file and commands on the bottom
 | 
			
		||||
command_result export_dwarves (color_ostream &con, std::vector <std::string> & parameters);
 | 
			
		||||
 | 
			
		||||
DFHACK_PLUGIN("dwarfexport");
 | 
			
		||||
 | 
			
		||||
// Mandatory init function. If you have some global state, create it here.
 | 
			
		||||
DFhackCExport command_result plugin_init (color_ostream &con, std::vector <PluginCommand> &commands)
 | 
			
		||||
{
 | 
			
		||||
    // Fill the command list with your commands.
 | 
			
		||||
    commands.push_back(PluginCommand("dwarfexport",
 | 
			
		||||
                                     "Export dwarves to RuneSmith-compatible XML.",
 | 
			
		||||
                                     export_dwarves /*,
 | 
			
		||||
                                     true or false - true means that the command can't be used from non-interactive user interface'*/));
 | 
			
		||||
    return CR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is called right before the plugin library is removed from memory.
 | 
			
		||||
DFhackCExport command_result plugin_shutdown (color_ostream &con)
 | 
			
		||||
{
 | 
			
		||||
    return CR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char* physicals[] = {
 | 
			
		||||
    "Strength",
 | 
			
		||||
    "Agility",
 | 
			
		||||
    "Toughness",
 | 
			
		||||
    "Endurance",
 | 
			
		||||
    "Recuperation",
 | 
			
		||||
    "DiseaseResistance",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* mentals[] = {
 | 
			
		||||
    "AnalyticalAbility",
 | 
			
		||||
    "Focus",
 | 
			
		||||
    "Willpower",
 | 
			
		||||
    "Creatvity", //Speeling deliberate
 | 
			
		||||
    "Intuition",
 | 
			
		||||
    "Patience",
 | 
			
		||||
    "Memory",
 | 
			
		||||
    "LinguisticAbility",
 | 
			
		||||
    "SpatialSense",
 | 
			
		||||
    "Musicality",
 | 
			
		||||
    "KinaestheticSense",
 | 
			
		||||
    "Empathy",
 | 
			
		||||
    "SocialAwareness",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void element(const char* name, const char* content, ostream& out, const char* extra_indent="") {
 | 
			
		||||
    out << extra_indent << "    <" << name << ">" << content << "</" << name << ">" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void element(const char* name, const uint32_t content, ostream& out, const char* extra_indent="") {
 | 
			
		||||
    out << extra_indent << "    <" << name << ">" << content << "</" << name << ">" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void printAttributes(color_ostream &con, df::unit* cre, ostream& out) {
 | 
			
		||||
    out << "    <Attributes>" << endl;
 | 
			
		||||
    for (int i = 0; i < NUM_CREATURE_PHYSICAL_ATTRIBUTES; i++) {
 | 
			
		||||
        element(physicals[i], cre->body.physical_attrs[i].value, out, "  ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    df::unit_soul * s = cre->status.current_soul;
 | 
			
		||||
    if (s) {
 | 
			
		||||
        for (int i = 0; i < NUM_CREATURE_MENTAL_ATTRIBUTES; i++) {
 | 
			
		||||
            element(mentals[i], s->mental_attrs[i].value, out, "  ");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    out << "    </Attributes>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void printTraits(color_ostream &con, df::unit* cre, ostream& out)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    out << "    <Traits>" << endl;
 | 
			
		||||
    df::unit_soul * s = cre->status.current_soul;
 | 
			
		||||
    if (s)
 | 
			
		||||
    {
 | 
			
		||||
        FOR_ENUM_ITEMS(personality_facet_type,index)
 | 
			
		||||
        {
 | 
			
		||||
            out << "      <Trait name='" << ENUM_KEY_STR(personality_facet_type, index) <<
 | 
			
		||||
                "' value='" << s->traits[index] << "'>";
 | 
			
		||||
            //FIXME: needs reimplementing trait string generation
 | 
			
		||||
            /*
 | 
			
		||||
            string trait = con->vinfo->getTrait(i, s->traits[i]);
 | 
			
		||||
            if (!trait.empty()) {
 | 
			
		||||
                out << trait.c_str();
 | 
			
		||||
            }
 | 
			
		||||
            */
 | 
			
		||||
            out << "</Trait>" << endl;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    out << "    </Traits>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int32_t getCreatureAge(df::unit* cre)
 | 
			
		||||
{
 | 
			
		||||
    int32_t yearDifference = *df::global::cur_year - cre->relations.birth_year;
 | 
			
		||||
 | 
			
		||||
    // If the birthday this year has not yet passed, subtract one year.
 | 
			
		||||
    // ASSUMPTION: birth_time is on the same scale as cur_year_tick
 | 
			
		||||
    if (cre->relations.birth_time >= *df::global::cur_year_tick) {
 | 
			
		||||
        yearDifference--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return yearDifference;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void printLabors(color_ostream &con, df::unit* cre, ostream& out)
 | 
			
		||||
{
 | 
			
		||||
    // Using British spelling here, consistent with Runesmith
 | 
			
		||||
    out << "  <Labours>" << endl;
 | 
			
		||||
    FOR_ENUM_ITEMS(unit_labor, iCount)
 | 
			
		||||
    {
 | 
			
		||||
        if (cre->status.labors[iCount]) {
 | 
			
		||||
            // Get the caption for the labor index.
 | 
			
		||||
            element("Labour", ENUM_ATTR_STR(unit_labor, caption, iCount), out);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    out << "  </Labours>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void printSkill(color_ostream &con, df::unit_skill* skill, ostream& out)
 | 
			
		||||
{
 | 
			
		||||
    out << "    <Skill>" << endl;
 | 
			
		||||
 | 
			
		||||
    element("Name", ENUM_ATTR_STR(job_skill, caption, skill->id), out);
 | 
			
		||||
    element("Level", skill->rating, out);
 | 
			
		||||
 | 
			
		||||
    out << "    </Skill>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void printSkills(color_ostream &con, df::unit* cre, ostream& out)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    std::vector<df::unit_skill* > vSkills = cre->status.current_soul->skills;
 | 
			
		||||
 | 
			
		||||
    out << "  <Skills>" << endl;
 | 
			
		||||
    for (int iCount = 0; iCount < vSkills.size(); iCount++)
 | 
			
		||||
    {
 | 
			
		||||
        printSkill(con, vSkills.at(iCount), out);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    out << "  </Skills>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GDC needs:
 | 
			
		||||
// Name
 | 
			
		||||
// Nickname
 | 
			
		||||
// Sex
 | 
			
		||||
// Attributes
 | 
			
		||||
// Traits
 | 
			
		||||
static void export_dwarf(color_ostream &con, df::unit* cre, ostream& out) {
 | 
			
		||||
    string info = cre->name.first_name;
 | 
			
		||||
    info += " ";
 | 
			
		||||
    info += Translation::TranslateName(&cre->name, false);
 | 
			
		||||
    info[0] = toupper(info[0]);
 | 
			
		||||
    con.print("Exporting %s\n", info.c_str());
 | 
			
		||||
 | 
			
		||||
    out << "  <Creature>" << endl;
 | 
			
		||||
    element("Name", info.c_str(), out);
 | 
			
		||||
    element("Nickname", cre->name.nickname.c_str(), out);
 | 
			
		||||
    element("Sex", cre->sex == 0 ? "Female" : "Male", out);
 | 
			
		||||
    element("Age", getCreatureAge(cre), out);       // Added age, active labors, and skills March 9, 2012
 | 
			
		||||
    printAttributes(con, cre, out);
 | 
			
		||||
    printTraits(con, cre, out);
 | 
			
		||||
    printLabors(con, cre, out);
 | 
			
		||||
    printSkills(con, cre, out);
 | 
			
		||||
 | 
			
		||||
    out << "  </Creature>" << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
command_result export_dwarves (color_ostream &con, std::vector <std::string> & parameters)
 | 
			
		||||
{
 | 
			
		||||
    string filename;
 | 
			
		||||
    if (parameters.size() == 1) {
 | 
			
		||||
        filename = parameters[0];
 | 
			
		||||
    } else {
 | 
			
		||||
        con.print("export <filename>\n");
 | 
			
		||||
        return CR_OK;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ofstream outf(filename.c_str());
 | 
			
		||||
    if (!outf) {
 | 
			
		||||
        con.printerr("Failed to open file %s\n", filename.c_str());
 | 
			
		||||
        return CR_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    CoreSuspender suspend;
 | 
			
		||||
 | 
			
		||||
    uint32_t race = ui->race_id;
 | 
			
		||||
    uint32_t civ = ui->civ_id;
 | 
			
		||||
 | 
			
		||||
    outf << "<?xml version='1.0' encoding='ibm850'?>" << endl << "<Creatures>" << endl;
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < world->units.all.size(); ++i)
 | 
			
		||||
    {
 | 
			
		||||
        df::unit* cre = world->units.all[i];
 | 
			
		||||
        if (cre->race == race && cre->civ_id == civ) {
 | 
			
		||||
            export_dwarf(con, cre, outf);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    outf << "</Creatures>" << endl;
 | 
			
		||||
 | 
			
		||||
    return CR_OK;
 | 
			
		||||
}
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
		Loading…
	
		Reference in New Issue