|
From: Crossfire C. r. messages.
<cro...@li...> - 2015-02-22 19:19:30
|
Revision: 19790
http://sourceforge.net/p/crossfire/code/19790
Author: ryo_saeba
Date: 2015-02-22 19:19:27 +0000 (Sun, 22 Feb 2015)
Log Message:
-----------
Track scripts on a map.
Modified Paths:
--------------
server/trunk/utils/cre/CREMainWindow.cpp
server/trunk/utils/cre/CREMainWindow.h
server/trunk/utils/cre/CREMapInformationManager.cpp
server/trunk/utils/cre/CREMapInformationManager.h
server/trunk/utils/cre/CREMapPanel.cpp
server/trunk/utils/cre/CREMapPanel.h
server/trunk/utils/cre/CREResourcesWindow.cpp
server/trunk/utils/cre/CREResourcesWindow.h
server/trunk/utils/cre/cre.pro
Added Paths:
-----------
server/trunk/utils/cre/ScriptFile.cpp
server/trunk/utils/cre/ScriptFile.h
server/trunk/utils/cre/ScriptFileManager.cpp
server/trunk/utils/cre/ScriptFileManager.h
Modified: server/trunk/utils/cre/CREMainWindow.cpp
===================================================================
--- server/trunk/utils/cre/CREMainWindow.cpp 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMainWindow.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -14,6 +14,7 @@
#include "CRECombatSimulator.h"
#include "Quest.h"
#include "CREHPBarMaker.h"
+#include "ScriptFileManager.h"
extern "C" {
#include "global.h"
@@ -44,7 +45,9 @@
myMessageManager = new MessageManager();
myMessageManager->loadMessages();
- myMapManager = new CREMapInformationManager(this, myMessageManager, myQuestManager);
+ myScriptManager = new ScriptFileManager();
+
+ myMapManager = new CREMapInformationManager(this, myMessageManager, myQuestManager, myScriptManager);
connect(myMapManager, SIGNAL(browsingMap(const QString&)), this, SLOT(browsingMap(const QString&)));
connect(myMapManager, SIGNAL(finished()), this, SLOT(browsingFinished()));
myMapManager->start();
@@ -212,7 +215,7 @@
void CREMainWindow::doResourceWindow(DisplayMode mode)
{
- QWidget* resources = new CREResourcesWindow(myMapManager, myQuestManager, myMessageManager, myResourcesManager, mode);
+ QWidget* resources = new CREResourcesWindow(myMapManager, myQuestManager, myMessageManager, myResourcesManager, myScriptManager, mode);
connect(this, SIGNAL(updateFilters()), resources, SLOT(updateFilters()));
connect(resources, SIGNAL(filtersModified()), this, SLOT(onFiltersModified()));
connect(this, SIGNAL(updateReports()), resources, SLOT(updateReports()));
Modified: server/trunk/utils/cre/CREMainWindow.h
===================================================================
--- server/trunk/utils/cre/CREMainWindow.h 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMainWindow.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -17,6 +17,7 @@
class QuestManager;
class MessageManager;
class ResourcesManager;
+class ScriptFileManager;
class CREMainWindow : public QMainWindow
{
@@ -69,6 +70,7 @@
QuestManager* myQuestManager;
MessageManager* myMessageManager;
ResourcesManager* myResourcesManager;
+ ScriptFileManager* myScriptManager;
protected:
void closeEvent(QCloseEvent* event);
Modified: server/trunk/utils/cre/CREMapInformationManager.cpp
===================================================================
--- server/trunk/utils/cre/CREMapInformationManager.cpp 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMapInformationManager.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -5,17 +5,58 @@
#include "MessageFile.h"
#include "QuestManager.h"
#include "Quest.h"
+#include "ScriptFileManager.h"
+#include "ScriptFile.h"
extern "C" {
#include "global.h"
}
-CREMapInformationManager::CREMapInformationManager(QObject* parent, MessageManager* messageManager, QuestManager* questManager) : QObject(parent)
+const char* eventNames[NR_EVENTS] = {
+ "EVENT_NONE",
+ "EVENT_APPLY",
+ "EVENT_ATTACKED",
+ "EVENT_DEATH",
+ "EVENT_DROP",
+ "EVENT_PICKUP",
+ "EVENT_SAY",
+ "EVENT_STOP",
+ "EVENT_TIME",
+ "EVENT_THROW",
+ "EVENT_TRIGGER",
+ "EVENT_CLOSE",
+ "EVENT_TIMER",
+ "EVENT_DESTROY",
+ "EVENT_BORN",
+ "EVENT_CLOCK",
+ "EVENT_CRASH",
+ "EVENT_PLAYER_DEATH",
+ "EVENT_GKILL",
+ "EVENT_LOGIN",
+ "EVENT_LOGOUT",
+ "EVENT_MAPENTER",
+ "EVENT_MAPLEAVE",
+ "EVENT_MAPRESET",
+ "EVENT_REMOVE",
+ "EVENT_SHOUT",
+ "EVENT_TELL",
+ "EVENT_MUZZLE",
+ "EVENT_KICK",
+ "EVENT_MAPUNLOAD",
+ "EVENT_MAPLOAD",
+ "EVENT_USER",
+ "EVENT_SELLING",
+ "EVENT_ATTACKS",
+};
+
+CREMapInformationManager::CREMapInformationManager(QObject* parent, MessageManager* messageManager, QuestManager* questManager, ScriptFileManager* scriptManager) : QObject(parent)
{
Q_ASSERT(messageManager != NULL);
Q_ASSERT(questManager != NULL);
+ Q_ASSERT(scriptManager != NULL);
myMessageManager = messageManager;
myQuestManager = questManager;
+ myScriptManager = scriptManager;
}
CREMapInformationManager::~CREMapInformationManager()
@@ -36,15 +77,15 @@
myWorker = QtConcurrent::run(this, &CREMapInformationManager::browseMaps);
}
-void CREMapInformationManager::checkInventory(const object* item, CREMapInformation* information)
+void CREMapInformationManager::checkInventory(const object* item, CREMapInformation* information, const object* env)
{
FOR_INV_PREPARE(item, inv)
{
archetype *arch = find_archetype(inv->arch->name);
addArchetypeUse(arch->name, information);
information->addArchetype(arch->name);
- checkEvent(inv, information);
- checkInventory(inv, information);
+ checkEvent(inv, information, env);
+ checkInventory(inv, information, env);
} FOR_INV_FINISH();
}
@@ -84,6 +125,9 @@
return;
}
+ /* remove scripts to avoid duplications */
+ myScriptManager->removeMap(information);
+
mapstruct *m = ready_map_name(path.toAscii(), 0);
// qDebug() << "processing" << path << information->mapTime() << info.lastModified();
information->setName(m->name);
@@ -141,7 +185,7 @@
information->addArchetype(arch->name);
}
- checkInventory(item, information);
+ checkInventory(item, information, item);
if (item->type == EXIT || item->type == TELEPORTER || item->type == PLAYER_CHANGER) {
char ep[500];
@@ -211,6 +255,11 @@
}
}
}
+ else if (item->type == EVENT_CONNECTOR && item->subtype > 0 && item->subtype < NR_EVENTS)
+ {
+ ScriptFile* script = myScriptManager->getFile(item->slaying);
+ script->addHook(new HookInformation(information, x, y, item->name, item->title, eventNames[item->subtype]));
+ }
if (QUERY_FLAG(item, FLAG_MONSTER))
exp += item->stats.exp;
@@ -429,6 +478,17 @@
quint64 max = reader.readElementText().toULongLong();
map->setShopMax(max);
}
+ if (reader.isStartElement() && reader.name() == "script")
+ {
+ int x = reader.attributes().value("x").toString().toInt();
+ int y = reader.attributes().value("x").toString().toInt();
+ QString item = reader.attributes().value("itemName").toString();
+ QString plugin = reader.attributes().value("pluginName").toString();
+ QString event = reader.attributes().value("eventName").toString();
+ QString script = reader.readElementText();
+ myScriptManager->getFile(script)->addHook(new HookInformation(map, x, y, item, plugin, event));
+ }
+
if (reader.isEndElement() && reader.name() == "map")
{
map = NULL;
@@ -506,6 +566,26 @@
{
writer.writeTextElement("shopMax", QString::number(map->shopMax()));
}
+
+ QList<ScriptFile*> scripts = myScriptManager->scriptsForMap(map);
+ foreach(ScriptFile* script, scripts)
+ {
+ foreach(const HookInformation* hook, script->hooks())
+ {
+ if (hook->map() == map)
+ {
+ writer.writeStartElement("script");
+ writer.writeAttribute("x", QString::number(hook->x()));
+ writer.writeAttribute("y", QString::number(hook->y()));
+ writer.writeAttribute("itemName", hook->itemName());
+ writer.writeAttribute("pluginName", hook->pluginName());
+ writer.writeAttribute("eventName", hook->eventName());
+ writer.writeCharacters(script->path());
+ writer.writeEndElement();
+ }
+ }
+ }
+
writer.writeEndElement();
}
@@ -531,14 +611,23 @@
myArchetypeUse.insert(name, map);
}
-void CREMapInformationManager::checkEvent(const object* item, CREMapInformation* map)
+void CREMapInformationManager::checkEvent(const object* item, CREMapInformation* map, const object* env)
{
const QString slaying = "/python/dialog/npc_dialog.py";
const QString python = "Python";
- if (item->type != EVENT_CONNECTOR || python != item->title)
+ if (item->type != EVENT_CONNECTOR)
return;
+ if (item->subtype > 0 && item->subtype < NR_EVENTS)
+ {
+ ScriptFile* script = myScriptManager->getFile(item->slaying);
+ script->addHook(new HookInformation(map, env->x, env->y, env->name, item->title, eventNames[item->subtype]));
+ }
+
+ if (python != item->title)
+ return;
+
if (item->subtype == EVENT_SAY && slaying == item->slaying)
{
//qDebug() << "message event in" << map->path() << item->name;
Modified: server/trunk/utils/cre/CREMapInformationManager.h
===================================================================
--- server/trunk/utils/cre/CREMapInformationManager.h 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMapInformationManager.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -10,13 +10,14 @@
class MessageManager;
class QuestManager;
+class ScriptFileManager;
class CREMapInformationManager : public QObject
{
Q_OBJECT
public:
- CREMapInformationManager(QObject* parent, MessageManager* messageManager, QuestManager* questManager);
+ CREMapInformationManager(QObject* parent, MessageManager* messageManager, QuestManager* questManager, ScriptFileManager* scriptManager);
virtual ~CREMapInformationManager();
bool browseFinished() const;
@@ -34,6 +35,7 @@
protected:
MessageManager* myMessageManager;
QuestManager* myQuestManager;
+ ScriptFileManager* myScriptManager;
QHash<QString, CREMapInformation*> myInformation;
QMultiHash<QString, CREMapInformation*> myArchetypeUse;
QStringList myToProcess;
@@ -45,12 +47,12 @@
void browseMaps();
void process(const QString& path);
- void checkInventory(const object* item, CREMapInformation* information);
+ void checkInventory(const object* item, CREMapInformation* information, const object* env);
void loadCache();
void storeCache();
CREMapInformation* getOrCreateMapInformation(const QString& path);
void addArchetypeUse(const QString& name, CREMapInformation* map);
- void checkEvent(const object* item, CREMapInformation* map);
+ void checkEvent(const object* item, CREMapInformation* map, const object* env);
};
#endif // CLASS_CRE_MAP_INFORMATION_MANAGER_H
Modified: server/trunk/utils/cre/CREMapPanel.cpp
===================================================================
--- server/trunk/utils/cre/CREMapPanel.cpp 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMapPanel.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -1,9 +1,13 @@
#include "CREMapPanel.h"
#include "CREMapInformation.h"
#include "CREMainWindow.h"
+#include "ScriptFileManager.h"
+#include "ScriptFile.h"
-CREMapPanel::CREMapPanel()
+CREMapPanel::CREMapPanel(ScriptFileManager* manager)
{
+ Q_ASSERT(manager != NULL);
+ myManager = manager;
QGridLayout* layout = new QGridLayout(this);
layout->addWidget(new QLabel(tr("Name:"), this), 0, 0);
@@ -17,6 +21,10 @@
myExitsTo = new QTreeWidget(this);
myExitsTo->setHeaderLabel(tr("Exits leading to this map"));
layout->addWidget(myExitsTo, 2, 0, 1, 2);
+
+ myScripts = new QTreeWidget(this);
+ myScripts->setHeaderLabel(tr("Scripts on this map"));
+ layout->addWidget(myScripts, 3, 0, 1, 2);
}
CREMapPanel::~CREMapPanel()
@@ -34,4 +42,16 @@
myExitsTo->clear();
foreach(QString path, map->exitsTo())
myExitsTo->addTopLevelItem(new QTreeWidgetItem(QStringList(path)));
+
+ myScripts->clear();
+ foreach(ScriptFile* script, myManager->scriptsForMap(map))
+ {
+ foreach(HookInformation* hook, script->hooks())
+ {
+ if (hook->map() == map)
+ {
+ myScripts->addTopLevelItem(new QTreeWidgetItem(QStringList(QString("%1 [%2, %3], %4, %5, %6").arg(hook->itemName()).arg(hook->x()).arg(hook->y()).arg(hook->eventName()).arg(hook->pluginName()).arg(script->path()))));
+ }
+ }
+ }
}
Modified: server/trunk/utils/cre/CREMapPanel.h
===================================================================
--- server/trunk/utils/cre/CREMapPanel.h 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREMapPanel.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -6,19 +6,22 @@
#include "CREPanel.h"
class CREMapInformation;
+class ScriptFileManager;
class CREMapPanel : public CREPanel
{
public:
- CREMapPanel();
+ CREMapPanel(ScriptFileManager* manager);
virtual ~CREMapPanel();
void setMap(CREMapInformation* map);
protected:
+ ScriptFileManager* myManager;
QLabel* myName;
QTreeWidget* myExitsTo;
QTreeWidget* myExitsFrom;
+ QTreeWidget* myScripts;
};
#endif /* _CREMAPPANEL_H */
Modified: server/trunk/utils/cre/CREResourcesWindow.cpp
===================================================================
--- server/trunk/utils/cre/CREResourcesWindow.cpp 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREResourcesWindow.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -56,7 +56,7 @@
#include "ResourcesManager.h"
}
-CREResourcesWindow::CREResourcesWindow(CREMapInformationManager* store, QuestManager* quests, MessageManager* messages, ResourcesManager* resources, DisplayMode mode)
+CREResourcesWindow::CREResourcesWindow(CREMapInformationManager* store, QuestManager* quests, MessageManager* messages, ResourcesManager* resources, ScriptFileManager* scripts, DisplayMode mode)
{
QApplication::setOverrideCursor(Qt::WaitCursor);
@@ -70,6 +70,8 @@
myMessages = messages;
Q_ASSERT(resources);
myResources = resources;
+ Q_ASSERT(scripts);
+ myScripts = scripts;
setAttribute(Qt::WA_DeleteOnClose);
@@ -509,7 +511,7 @@
}
addPanel("Region", new CRERegionPanel());
- addPanel("Map", new CREMapPanel());
+ addPanel("Map", new CREMapPanel(myScripts));
}
void CREResourcesWindow::fillQuests()
Modified: server/trunk/utils/cre/CREResourcesWindow.h
===================================================================
--- server/trunk/utils/cre/CREResourcesWindow.h 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/CREResourcesWindow.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -15,6 +15,7 @@
class QuestManager;
class MessageManager;
class ResourcesManager;
+class ScriptFileManager;
enum DisplayMode {
DisplayAll = 0xFFFF,
@@ -34,7 +35,7 @@
Q_OBJECT
public:
- CREResourcesWindow(CREMapInformationManager* store, QuestManager* quests, MessageManager* messages, ResourcesManager* resources, DisplayMode mode = DisplayAll);
+ CREResourcesWindow(CREMapInformationManager* store, QuestManager* quests, MessageManager* messages, ResourcesManager* resources, ScriptFileManager* scripts, DisplayMode mode = DisplayAll);
virtual ~CREResourcesWindow();
void deleteQuest(Quest* quest);
@@ -59,6 +60,7 @@
QuestManager* myQuests;
MessageManager* myMessages;
ResourcesManager* myResources;
+ ScriptFileManager* myScripts;
DisplayMode myDisplay;
CREFilter myFilter;
QList<QObject*> myDisplayedItems;
Added: server/trunk/utils/cre/ScriptFile.cpp
===================================================================
--- server/trunk/utils/cre/ScriptFile.cpp (rev 0)
+++ server/trunk/utils/cre/ScriptFile.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -0,0 +1,98 @@
+#include "ScriptFile.h"
+#include "CREMapInformation.h"
+
+ScriptFile::ScriptFile(const QString& path)
+{
+ myPath = path;
+}
+
+ScriptFile::~ScriptFile()
+{
+ qDeleteAll(myHooks);
+}
+
+void ScriptFile::addHook(HookInformation* hook)
+{
+ myHooks.append(hook);
+}
+
+bool ScriptFile::forMap(CREMapInformation* map) const
+{
+ foreach(HookInformation* hook, myHooks)
+ {
+ if (hook->map() == map)
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+QList<HookInformation*> ScriptFile::hooks() const
+{
+ return myHooks;
+}
+
+const QString& ScriptFile::path() const
+{
+ return myPath;
+}
+
+bool ScriptFile::removeMap(CREMapInformation* map)
+{
+ QList<HookInformation*>::iterator hook = myHooks.begin();
+ while (hook != myHooks.end())
+ {
+ if ((*hook)->map() == map)
+ {
+ HookInformation* h = *hook;
+ hook = myHooks.erase(hook);
+ delete h;
+ }
+ else
+ {
+ hook++;
+ }
+ }
+ return myHooks.empty();
+}
+
+HookInformation::HookInformation(CREMapInformation* map, int x, int y, const QString& itemName, const QString& pluginName, const QString& eventName)
+{
+ myMap = map;
+ myX = x;
+ myY = y;
+ myItemName = itemName;
+ myPluginName = pluginName;
+ myEventName = eventName;
+}
+
+const CREMapInformation* HookInformation::map() const
+{
+ return myMap;
+}
+
+int HookInformation::x() const
+{
+ return myX;
+}
+
+int HookInformation::y() const
+{
+ return myY;
+}
+
+QString HookInformation::itemName() const
+{
+ return myItemName;
+}
+
+QString HookInformation::pluginName() const
+{
+ return myPluginName;
+}
+
+QString HookInformation::eventName() const
+{
+ return myEventName;
+}
\ No newline at end of file
Added: server/trunk/utils/cre/ScriptFile.h
===================================================================
--- server/trunk/utils/cre/ScriptFile.h (rev 0)
+++ server/trunk/utils/cre/ScriptFile.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -0,0 +1,47 @@
+#ifndef SCRIPTFILE_H
+#define SCRIPTFILE_H
+
+#include <QList>
+
+class CREMapInformation;
+
+class HookInformation
+{
+ public:
+ HookInformation(CREMapInformation* map, int x, int y, const QString& itemName, const QString& pluginName, const QString& eventName);
+
+ const CREMapInformation* map() const;
+ int x() const;
+ int y() const;
+ QString itemName() const;
+ QString pluginName() const;
+ QString eventName() const;
+
+ private:
+ CREMapInformation* myMap;
+ int myX;
+ int myY;
+ QString myItemName;
+ QString myPluginName;
+ QString myEventName;
+};
+
+class ScriptFile
+{
+ public:
+ ScriptFile(const QString& path);
+ virtual ~ScriptFile();
+
+ void addHook(HookInformation* hook);
+ bool forMap(CREMapInformation* map) const;
+ bool removeMap(CREMapInformation* map);
+ QList<HookInformation*> hooks() const;
+ const QString& path() const;
+
+ private:
+ QString myPath;
+ QList<HookInformation*> myHooks;
+};
+
+#endif /* SCRIPTFILE_H */
+
Added: server/trunk/utils/cre/ScriptFileManager.cpp
===================================================================
--- server/trunk/utils/cre/ScriptFileManager.cpp (rev 0)
+++ server/trunk/utils/cre/ScriptFileManager.cpp 2015-02-22 19:19:27 UTC (rev 19790)
@@ -0,0 +1,51 @@
+#include "ScriptFileManager.h"
+#include "ScriptFile.h"
+
+ScriptFileManager::ScriptFileManager()
+{
+}
+
+ScriptFileManager::~ScriptFileManager()
+{
+ qDeleteAll(myScripts.values());
+}
+
+QList<ScriptFile*> ScriptFileManager::scriptsForMap(CREMapInformation* map)
+{
+ QList<ScriptFile*> list;
+ foreach(ScriptFile* script, myScripts.values())
+ {
+ if (script->forMap(map))
+ {
+ list.append(script);
+ }
+ }
+ return list;
+}
+
+ScriptFile* ScriptFileManager::getFile(const QString& path)
+{
+ if (!myScripts.contains(path))
+ {
+ myScripts.insert(path, new ScriptFile(path));
+ }
+ return myScripts[path];
+}
+
+void ScriptFileManager::removeMap(CREMapInformation* map)
+{
+ QHash<QString, ScriptFile*>::iterator script = myScripts.begin();
+ while (script != myScripts.end())
+ {
+ if ((*script)->removeMap(map))
+ {
+ ScriptFile* s = *script;
+ script = myScripts.erase(script);
+ delete s;
+ }
+ else
+ {
+ script++;
+ }
+ }
+}
\ No newline at end of file
Added: server/trunk/utils/cre/ScriptFileManager.h
===================================================================
--- server/trunk/utils/cre/ScriptFileManager.h (rev 0)
+++ server/trunk/utils/cre/ScriptFileManager.h 2015-02-22 19:19:27 UTC (rev 19790)
@@ -0,0 +1,24 @@
+#ifndef SCRIPTFILEMANAGER_H
+#define SCRIPTFILEMANAGER_H
+
+#include <QHash>
+
+class ScriptFile;
+class CREMapInformation;
+
+class ScriptFileManager
+{
+ public:
+ ScriptFileManager();
+ virtual ~ScriptFileManager();
+
+ QList<ScriptFile*> scriptsForMap(CREMapInformation* map);
+ ScriptFile* getFile(const QString& path);
+ void removeMap(CREMapInformation* map);
+
+ private:
+ QHash<QString, ScriptFile*> myScripts;
+};
+
+#endif /* SCRIPTFILEMANAGER_H */
+
Modified: server/trunk/utils/cre/cre.pro
===================================================================
--- server/trunk/utils/cre/cre.pro 2015-02-22 15:09:18 UTC (rev 19789)
+++ server/trunk/utils/cre/cre.pro 2015-02-22 19:19:27 UTC (rev 19790)
@@ -63,7 +63,9 @@
CREHPBarMaker.cpp \
CRESmoothFaceMaker.cpp \
ResourcesManager.cpp \
- CRECombatSimulator.cpp
+ CRECombatSimulator.cpp \
+ ScriptFileManager.cpp \
+ ScriptFile.cpp
HEADERS += CREMainWindow.h \
CREPixmap.h \
CREUtils.h \
@@ -125,7 +127,9 @@
CREHPBarMaker.h \
CRESmoothFaceMaker.h \
ResourcesManager.h \
- CRECombatSimulator.h
+ CRECombatSimulator.h \
+ ScriptFileManager.h \
+ ScriptFile.h
LIBS += ../../server/libserver.a ../../common/libcross.a ../../socket/libsocket.a ../../random_maps/librandom_map.a ../../types/libtypes.a -lcurl -lcrypt -ldl
RESOURCES += cre.qrc
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|