parent
bde3616015
commit
86577d4f8a
@ -0,0 +1,71 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef CL_MOD_NOTES
|
||||||
|
#define CL_MOD_NOTES
|
||||||
|
/**
|
||||||
|
* \defgroup grp_notes In game notes (and routes)
|
||||||
|
* @ingroup grp_notes
|
||||||
|
*/
|
||||||
|
#include "dfhack/Export.h"
|
||||||
|
#include "dfhack/Module.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
namespace DFHack
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* Game's structure for a note.
|
||||||
|
* \ingroup grp_notes
|
||||||
|
*/
|
||||||
|
struct t_note
|
||||||
|
{
|
||||||
|
// First note created has id 0, second has id 1, etc. Not affected
|
||||||
|
// by lower id notes being deleted.
|
||||||
|
uint32_t id;
|
||||||
|
|
||||||
|
uint8_t symbol;
|
||||||
|
uint8_t unk1;
|
||||||
|
uint16_t foreground;
|
||||||
|
uint16_t background;
|
||||||
|
uint16_t unk2;
|
||||||
|
|
||||||
|
std::string name;
|
||||||
|
std::string text;
|
||||||
|
|
||||||
|
uint16_t x;
|
||||||
|
uint16_t y;
|
||||||
|
uint16_t z;
|
||||||
|
|
||||||
|
// Is there more?
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The notes module - allows reading DF in-game notes
|
||||||
|
* \ingroup grp_modules
|
||||||
|
* \ingroup grp_notes
|
||||||
|
*/
|
||||||
|
class DFHACK_EXPORT Notes : public Module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Notes();
|
||||||
|
~Notes();
|
||||||
|
|
||||||
|
bool Finish();
|
||||||
|
|
||||||
|
// Returns NULL if there's no notes yet.
|
||||||
|
std::vector<t_note*>* getNotes();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Private;
|
||||||
|
Private *d;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
www.sourceforge.net/projects/dfhack
|
||||||
|
Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any
|
||||||
|
damages arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any
|
||||||
|
purpose, including commercial applications, and to alter it and
|
||||||
|
redistribute it freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must
|
||||||
|
not claim that you wrote the original software. If you use this
|
||||||
|
software in a product, an acknowledgment in the product documentation
|
||||||
|
would be appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and
|
||||||
|
must not be misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Internal.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "dfhack/VersionInfo.h"
|
||||||
|
#include "dfhack/Types.h"
|
||||||
|
#include "dfhack/Error.h"
|
||||||
|
#include "dfhack/Process.h"
|
||||||
|
#include "ModuleFactory.h"
|
||||||
|
#include "dfhack/Core.h"
|
||||||
|
#include "dfhack/modules/Notes.h"
|
||||||
|
using namespace DFHack;
|
||||||
|
|
||||||
|
struct Notes::Private
|
||||||
|
{
|
||||||
|
uint32_t notes_vector;
|
||||||
|
Process * owner;
|
||||||
|
bool Inited;
|
||||||
|
bool Started;
|
||||||
|
};
|
||||||
|
|
||||||
|
Module* DFHack::createNotes()
|
||||||
|
{
|
||||||
|
return new Notes();
|
||||||
|
}
|
||||||
|
|
||||||
|
Notes::Notes()
|
||||||
|
{
|
||||||
|
Core & c = Core::getInstance();
|
||||||
|
|
||||||
|
d = new Private;
|
||||||
|
d->owner = c.p;
|
||||||
|
d->Inited = d->Started = false;
|
||||||
|
VersionInfo * mem = c.vinfo;
|
||||||
|
d->Inited = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OffsetGroup * OG_Notes = mem->getGroup("Notes");
|
||||||
|
|
||||||
|
d->notes_vector = OG_Notes->getAddress("vector");
|
||||||
|
}
|
||||||
|
catch(DFHack::Error::AllMemdef &e)
|
||||||
|
{
|
||||||
|
c.con << "Notes not available... " << e.what() << endl;
|
||||||
|
d->Inited = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Notes::~Notes()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<t_note*>* Notes::getNotes()
|
||||||
|
{
|
||||||
|
if (!d->Inited)
|
||||||
|
{
|
||||||
|
Core & c = Core::getInstance();
|
||||||
|
c.con << "Notes not available... " << endl;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ptr = d->notes_vector;
|
||||||
|
|
||||||
|
if ( *( (uint32_t*) ptr) == 0)
|
||||||
|
// Notes vector not set up yet.
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (std::vector<t_note*>*) ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Notes::Finish()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
#include <dfhack/Core.h>
|
||||||
|
#include <dfhack/Console.h>
|
||||||
|
#include <dfhack/Export.h>
|
||||||
|
#include <dfhack/PluginManager.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <dfhack/modules/Notes.h>
|
||||||
|
|
||||||
|
using std::vector;
|
||||||
|
using std::string;
|
||||||
|
using namespace DFHack;
|
||||||
|
|
||||||
|
DFhackCExport command_result df_notes (Core * c, vector <string> & parameters);
|
||||||
|
|
||||||
|
DFhackCExport const char * plugin_name ( void )
|
||||||
|
{
|
||||||
|
return "notes";
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand> &commands)
|
||||||
|
{
|
||||||
|
commands.clear();
|
||||||
|
commands.push_back(PluginCommand("dumpnotes",
|
||||||
|
"Dumps in-game notes",
|
||||||
|
df_notes));
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result plugin_shutdown ( Core * c )
|
||||||
|
{
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
DFhackCExport command_result df_notes (Core * c, vector <string> & parameters)
|
||||||
|
{
|
||||||
|
Console & con = c->con;
|
||||||
|
c->Suspend();
|
||||||
|
|
||||||
|
DFHack::Notes * note_mod = c->getNotes();
|
||||||
|
std::vector<t_note*>* note_list = note_mod->getNotes();
|
||||||
|
|
||||||
|
if (note_list == NULL)
|
||||||
|
{
|
||||||
|
con << "No notes yet." << std::endl;
|
||||||
|
c->Resume();
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (note_list->empty())
|
||||||
|
{
|
||||||
|
con << "All notes deleted." << std::endl;
|
||||||
|
c->Resume();
|
||||||
|
return CR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (size_t i = 0; i < note_list->size(); i++)
|
||||||
|
{
|
||||||
|
t_note* note = (*note_list)[i];
|
||||||
|
|
||||||
|
con.print("Note at: %d/%d/%d\n", note->x, note->y, note->z);
|
||||||
|
con.print("Note id: %d\n", note->id);
|
||||||
|
con.print("Note symbol: '%c'\n", note->symbol);
|
||||||
|
|
||||||
|
if (note->name.length() > 0)
|
||||||
|
con << "Note name: " << (note->name) << std::endl;
|
||||||
|
if (note->text.length() > 0)
|
||||||
|
con << "Note text: " << (note->text) << std::endl;
|
||||||
|
|
||||||
|
if (note->unk1 != 0)
|
||||||
|
con.print("unk1: %x\n", note->unk1);
|
||||||
|
if (note->unk2 != 0)
|
||||||
|
con.print("unk2: %x\n", note->unk2);
|
||||||
|
|
||||||
|
con << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
c->Resume();
|
||||||
|
return CR_OK;
|
||||||
|
}
|
Loading…
Reference in New Issue