glest-source/source/glest_game/game/script_manager.cpp
2018-02-01 13:39:41 -06:00

7252 lines
259 KiB
C++

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2005 Martio Figueroa
//
// You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published
// by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version
// ==============================================================
#include "script_manager.h"
#include "world.h"
#include "lang.h"
#include "game_camera.h"
#include "game.h"
#include "config.h"
#include "leak_dumper.h"
using namespace
Shared::Platform;
using namespace
Shared::Lua;
using namespace
Shared::Util;
namespace
Glest
{
namespace
Game
{
ScriptManagerMessage::ScriptManagerMessage ():
text (""),
header ("")
{
this->factionIndex = -1;
this->
teamIndex = -1;
this->
messageNotTranslated = true;
}
ScriptManagerMessage::ScriptManagerMessage (const string & textIn,
const string & headerIn,
int factionIndex,
int teamIndex,
bool messageNotTranslated):
text (textIn),
header (headerIn)
{
this->factionIndex = factionIndex;
this->
teamIndex = teamIndex;
this->
messageNotTranslated = messageNotTranslated;
}
void
ScriptManagerMessage::saveGame (XmlNode * rootNode)
{
std::map < string, string > mapTagReplacements;
XmlNode *
scriptManagerMessageNode =
rootNode->addChild ("ScriptManagerMessage");
//string text;
scriptManagerMessageNode->addAttribute ("text", text,
mapTagReplacements);
//string header;
scriptManagerMessageNode->addAttribute ("header", header,
mapTagReplacements);
scriptManagerMessageNode->addAttribute ("factionIndex",
intToStr (factionIndex),
mapTagReplacements);
scriptManagerMessageNode->addAttribute ("teamIndex",
intToStr (teamIndex),
mapTagReplacements);
scriptManagerMessageNode->addAttribute ("messageNotTranslated",
intToStr (messageNotTranslated),
mapTagReplacements);
}
void
ScriptManagerMessage::loadGame (const XmlNode * rootNode)
{
const XmlNode *
scriptManagerMessageNode = rootNode;
text = scriptManagerMessageNode->getAttribute ("text")->getValue ();
header = scriptManagerMessageNode->getAttribute ("header")->getValue ();
factionIndex =
scriptManagerMessageNode->getAttribute ("factionIndex")->
getIntValue ();
teamIndex =
scriptManagerMessageNode->getAttribute ("teamIndex")->getIntValue ();
messageNotTranslated = true;
if (scriptManagerMessageNode->hasAttribute ("messageNotTranslated") ==
true)
{
messageNotTranslated =
(scriptManagerMessageNode->getAttribute ("messageNotTranslated")->
getIntValue () != 0);
}
}
// =====================================================
// class PlayerModifiers
// =====================================================
PlayerModifiers::PlayerModifiers ()
{
winner = false;
aiEnabled = true;
consumeEnabled = true;
}
void
PlayerModifiers::saveGame (XmlNode * rootNode)
{
std::map < string, string > mapTagReplacements;
XmlNode *
playerModifiersNode = rootNode->addChild ("PlayerModifiers");
//bool winner;
playerModifiersNode->addAttribute ("winner", intToStr (winner),
mapTagReplacements);
//bool aiEnabled;
playerModifiersNode->addAttribute ("aiEnabled", intToStr (aiEnabled),
mapTagReplacements);
//bool consumeEnabled;
playerModifiersNode->addAttribute ("consumeEnabled",
intToStr (consumeEnabled),
mapTagReplacements);
}
void
PlayerModifiers::loadGame (const XmlNode * rootNode)
{
const XmlNode *
playerModifiersNode = rootNode;
winner =
playerModifiersNode->getAttribute ("winner")->getIntValue () != 0;
aiEnabled =
playerModifiersNode->getAttribute ("aiEnabled")->getIntValue () != 0;
consumeEnabled =
playerModifiersNode->getAttribute ("consumeEnabled")->
getIntValue () != 0;
}
CellTriggerEvent::CellTriggerEvent ()
{
type = ctet_Unit;
sourceId = 0;
destId = 0;
//Vec2i destPos;
triggerCount = 0;
}
void
CellTriggerEvent::saveGame (XmlNode * rootNode)
{
std::map < string, string > mapTagReplacements;
XmlNode *
cellTriggerEventNode = rootNode->addChild ("CellTriggerEvent");
// CellTriggerEventType type;
cellTriggerEventNode->addAttribute ("type", intToStr (type),
mapTagReplacements);
// int sourceId;
cellTriggerEventNode->addAttribute ("sourceId", intToStr (sourceId),
mapTagReplacements);
// int destId;
cellTriggerEventNode->addAttribute ("destId", intToStr (destId),
mapTagReplacements);
// Vec2i destPos;
cellTriggerEventNode->addAttribute ("destPos", destPos.getString (),
mapTagReplacements);
// int triggerCount;
cellTriggerEventNode->addAttribute ("triggerCount",
intToStr (triggerCount),
mapTagReplacements);
// Vec2i destPosEnd;
cellTriggerEventNode->addAttribute ("destPosEnd",
destPosEnd.getString (),
mapTagReplacements);
}
void
CellTriggerEvent::loadGame (const XmlNode * rootNode)
{
const XmlNode *
cellTriggerEventNode = rootNode->getChild ("CellTriggerEvent");
type =
static_cast < CellTriggerEventType >
(cellTriggerEventNode->getAttribute ("type")->getIntValue ());
sourceId =
cellTriggerEventNode->getAttribute ("sourceId")->getIntValue ();
destId = cellTriggerEventNode->getAttribute ("destId")->getIntValue ();
destPos =
Vec2i::strToVec2 (cellTriggerEventNode->getAttribute ("destPos")->
getValue ());
triggerCount =
cellTriggerEventNode->getAttribute ("triggerCount")->getIntValue ();
if (cellTriggerEventNode->hasAttribute ("destPosEnd") == true)
{
destPosEnd =
Vec2i::strToVec2 (cellTriggerEventNode->
getAttribute ("destPosEnd")->getValue ());
}
}
TimerTriggerEvent::TimerTriggerEvent ()
{
running = false;
startFrame = 0;
endFrame = 0;
triggerSecondsElapsed = 0;
}
void
TimerTriggerEvent::saveGame (XmlNode * rootNode)
{
std::map < string, string > mapTagReplacements;
XmlNode *
timerTriggerEventNode = rootNode->addChild ("TimerTriggerEvent");
// bool running;
timerTriggerEventNode->addAttribute ("running", intToStr (running),
mapTagReplacements);
// //time_t startTime;
// //time_t endTime;
// int startFrame;
timerTriggerEventNode->addAttribute ("startFrame",
intToStr (startFrame),
mapTagReplacements);
// int endFrame;
timerTriggerEventNode->addAttribute ("endFrame", intToStr (endFrame),
mapTagReplacements);
if (triggerSecondsElapsed > 0)
{
timerTriggerEventNode->addAttribute ("triggerSecondsElapsed",
intToStr
(triggerSecondsElapsed),
mapTagReplacements);
}
}
void
TimerTriggerEvent::loadGame (const XmlNode * rootNode)
{
const XmlNode *
timerTriggerEventNode = rootNode->getChild ("TimerTriggerEvent");
running =
timerTriggerEventNode->getAttribute ("running")->getIntValue () != 0;
startFrame =
timerTriggerEventNode->getAttribute ("startFrame")->getIntValue ();
endFrame =
timerTriggerEventNode->getAttribute ("endFrame")->getIntValue ();
if (timerTriggerEventNode->hasAttribute ("triggerSecondsElapsed") ==
true)
{
triggerSecondsElapsed =
timerTriggerEventNode->getAttribute ("triggerSecondsElapsed")->
getIntValue ();
}
}
// =====================================================
// class ScriptManager
// =====================================================
ScriptManager *
ScriptManager::thisScriptManager = NULL;
const int
ScriptManager::messageWrapCount = 35;
const int
ScriptManager::displayTextWrapCount = 64;
ScriptManager::ScriptManager ()
{
world = NULL;
gameCamera = NULL;
lastCreatedUnitId = -1;
lastDeadUnitId = 0;
lastDeadUnitCauseOfDeath = 0;
lastDeadUnitKillerId = 0;
lastAttackedUnitId = 0;
lastAttackingUnitId = 0;
gameOver = false;
gameWon = false;
currentTimerTriggeredEventId = 0;
currentCellTriggeredEventId = 0;
currentCellTriggeredEventUnitId = 0;
currentEventId = 0;
inCellTriggerEvent = false;
rootNode = NULL;
currentCellTriggeredEventAreaEntryUnitId = 0;
currentCellTriggeredEventAreaExitUnitId = 0;
lastDayNightTriggerStatus = 0;
registeredDayNightEvent = false;
errorCount = 0;
lastUnitTriggerEventUnitId = -1;
lastUnitTriggerEventType = utet_None;
}
ScriptManager::~ScriptManager ()
{
}
void
ScriptManager::init (World * world, GameCamera * gameCamera,
const XmlNode * rootNode)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
//printf("In [%s::%s Line: %d] rootNode [%p][%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,rootNode,(rootNode != NULL ? rootNode->getName().c_str() : "none"));
this->rootNode = rootNode;
const Scenario *
scenario = world->getScenario ();
this->world = world;
this->gameCamera = gameCamera;
//set static instance
thisScriptManager = this;
//printf("In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
currentEventId = 1;
CellTriggerEventList.clear ();
TimerTriggerEventList.clear ();
//printf("In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
//register functions
luaScript.registerFunction (networkShowMessageForFaction,
"networkShowMessageForFaction");
luaScript.registerFunction (networkShowMessageForTeam,
"networkShowMessageForTeam");
luaScript.registerFunction (networkSetCameraPositionForFaction,
"networkSetCameraPositionForFaction");
luaScript.registerFunction (networkSetCameraPositionForTeam,
"networkSetCameraPositionForTeam");
luaScript.registerFunction (showMessage, "showMessage");
luaScript.registerFunction (setDisplayText, "setDisplayText");
luaScript.registerFunction (addConsoleText, "addConsoleText");
luaScript.registerFunction (addConsoleLangText, "addConsoleLangText");
luaScript.registerFunction (DisplayFormattedText,
"DisplayFormattedText");
luaScript.registerFunction (DisplayFormattedText,
"displayFormattedText");
luaScript.registerFunction (DisplayFormattedLangText,
"DisplayFormattedLangText");
luaScript.registerFunction (DisplayFormattedLangText,
"displayFormattedLangText");
luaScript.registerFunction (clearDisplayText, "clearDisplayText");
luaScript.registerFunction (setCameraPosition, "setCameraPosition");
luaScript.registerFunction (shakeCamera, "shakeCamera");
luaScript.registerFunction (shakeCameraOnUnit, "shakeCameraOnUnit");
luaScript.registerFunction (createUnit, "createUnit");
luaScript.registerFunction (createUnitNoSpacing, "createUnitNoSpacing");
luaScript.registerFunction (setLockedUnitForFaction,
"setLockedUnitForFaction");
luaScript.registerFunction (destroyUnit, "destroyUnit");
luaScript.registerFunction (giveKills, "giveKills");
luaScript.registerFunction (morphToUnit, "morphToUnit");
luaScript.registerFunction (moveToUnit, "moveToUnit");
luaScript.registerFunction (playStaticSound, "playStaticSound");
luaScript.registerFunction (playStreamingSound, "playStreamingSound");
luaScript.registerFunction (stopStreamingSound, "stopStreamingSound");
luaScript.registerFunction (stopAllSound, "stopAllSound");
luaScript.registerFunction (togglePauseGame, "togglePauseGame");
luaScript.registerFunction (playStaticVideo, "playStaticVideo");
//luaScript.registerFunction(playStreamingVideo, "playStreamingVideo");
//luaScript.registerFunction(stopStreamingVideo, "stopStreamingVideo");
luaScript.registerFunction (stopAllVideo, "stopAllVideo");
luaScript.registerFunction (giveResource, "giveResource");
luaScript.registerFunction (givePositionCommand, "givePositionCommand");
luaScript.registerFunction (giveProductionCommand,
"giveProductionCommand");
luaScript.registerFunction (giveAttackCommand, "giveAttackCommand");
luaScript.registerFunction (giveUpgradeCommand, "giveUpgradeCommand");
luaScript.registerFunction (giveAttackStoppedCommand,
"giveAttackStoppedCommand");
luaScript.registerFunction (disableAi, "disableAi");
luaScript.registerFunction (enableAi, "enableAi");
luaScript.registerFunction (getAiEnabled, "getAiEnabled");
luaScript.registerFunction (disableConsume, "disableConsume");
luaScript.registerFunction (enableConsume, "enableConsume");
luaScript.registerFunction (getConsumeEnabled, "getConsumeEnabled");
luaScript.registerFunction (setPlayerAsWinner, "setPlayerAsWinner");
luaScript.registerFunction (endGame, "endGame");
luaScript.registerFunction (startPerformanceTimer,
"startPerformanceTimer");
luaScript.registerFunction (endPerformanceTimer, "endPerformanceTimer");
luaScript.registerFunction (getPerformanceTimerResults,
"getPerformanceTimerResults");
luaScript.registerFunction (registerCellTriggerEventForUnitToUnit,
"registerCellTriggerEventForUnitToUnit");
luaScript.registerFunction (registerCellTriggerEventForUnitToLocation,
"registerCellTriggerEventForUnitToLocation");
luaScript.registerFunction (registerCellTriggerEventForFactionToUnit,
"registerCellTriggerEventForFactionToUnit");
luaScript.
registerFunction (registerCellTriggerEventForFactionToLocation,
"registerCellTriggerEventForFactionToLocation");
luaScript.
registerFunction (registerCellAreaTriggerEventForUnitToLocation,
"registerCellAreaTriggerEventForUnitToLocation");
luaScript.
registerFunction (registerCellAreaTriggerEventForFactionToLocation,
"registerCellAreaTriggerEventForFactionToLocation");
luaScript.registerFunction (registerCellAreaTriggerEvent,
"registerCellAreaTriggerEvent");
luaScript.registerFunction (getCellTriggerEventCount,
"getCellTriggerEventCount");
luaScript.registerFunction (unregisterCellTriggerEvent,
"unregisterCellTriggerEvent");
luaScript.registerFunction (startTimerEvent, "startTimerEvent");
luaScript.registerFunction (startEfficientTimerEvent,
"startEfficientTimerEvent");
luaScript.registerFunction (resetTimerEvent, "resetTimerEvent");
luaScript.registerFunction (stopTimerEvent, "stopTimerEvent");
luaScript.registerFunction (getTimerEventSecondsElapsed,
"timerEventSecondsElapsed");
luaScript.registerFunction (getCellTriggeredEventId,
"triggeredCellEventId");
luaScript.registerFunction (getTimerTriggeredEventId,
"triggeredTimerEventId");
luaScript.registerFunction (getCellTriggeredEventAreaEntryUnitId,
"triggeredEventAreaEntryUnitId");
luaScript.registerFunction (getCellTriggeredEventAreaExitUnitId,
"triggeredEventAreaExitUnitId");
luaScript.registerFunction (getCellTriggeredEventUnitId,
"triggeredCellEventUnitId");
luaScript.registerFunction (setRandomGenInit, "setRandomGenInit");
luaScript.registerFunction (getRandomGen, "getRandomGen");
luaScript.registerFunction (getWorldFrameCount, "getWorldFrameCount");
luaScript.registerFunction (getStartLocation, "startLocation");
luaScript.registerFunction (getIsUnitAlive, "isUnitAlive");
luaScript.registerFunction (getUnitPosition, "unitPosition");
luaScript.registerFunction (setUnitPosition, "setUnitPosition");
luaScript.registerFunction (addCellMarker, "addCellMarker");
luaScript.registerFunction (removeCellMarker, "removeCellMarker");
luaScript.registerFunction (showMarker, "showMarker");
luaScript.registerFunction (getUnitFaction, "unitFaction");
luaScript.registerFunction (getUnitName, "unitName");
luaScript.registerFunction (getResourceAmount, "resourceAmount");
luaScript.registerFunction (getLastCreatedUnitName,
"lastCreatedUnitName");
luaScript.registerFunction (getLastCreatedUnitId, "lastCreatedUnit");
luaScript.registerFunction (getLastDeadUnitName, "lastDeadUnitName");
luaScript.registerFunction (getLastDeadUnitId, "lastDeadUnit");
luaScript.registerFunction (getLastDeadUnitCauseOfDeath,
"lastDeadUnitCauseOfDeath");
luaScript.registerFunction (getLastDeadUnitKillerName,
"lastDeadUnitKillerName");
luaScript.registerFunction (getLastDeadUnitKillerId,
"lastDeadUnitKiller");
luaScript.registerFunction (getLastAttackedUnitName,
"lastAttackedUnitName");
luaScript.registerFunction (getLastAttackedUnitId, "lastAttackedUnit");
luaScript.registerFunction (getLastAttackingUnitName,
"lastAttackingUnitName");
luaScript.registerFunction (getLastAttackingUnitId,
"lastAttackingUnit");
luaScript.registerFunction (getUnitCount, "unitCount");
luaScript.registerFunction (getUnitCountOfType, "unitCountOfType");
luaScript.registerFunction (getIsGameOver, "isGameOver");
luaScript.registerFunction (getGameWon, "gameWon");
luaScript.registerFunction (getSystemMacroValue, "getSystemMacroValue");
luaScript.registerFunction (scenarioDir, "scenarioDir");
luaScript.registerFunction (getPlayerName, "getPlayerName");
luaScript.registerFunction (getPlayerName, "playerName");
luaScript.registerFunction (loadScenario, "loadScenario");
luaScript.registerFunction (getUnitsForFaction, "getUnitsForFaction");
luaScript.registerFunction (getUnitCurrentField, "getUnitCurrentField");
luaScript.registerFunction (isFreeCellsOrHasUnit,
"isFreeCellsOrHasUnit");
luaScript.registerFunction (isFreeCells, "isFreeCells");
luaScript.registerFunction (getHumanFactionId, "humanFaction");
luaScript.registerFunction (highlightUnit, "highlightUnit");
luaScript.registerFunction (unhighlightUnit, "unhighlightUnit");
luaScript.registerFunction (giveStopCommand, "giveStopCommand");
luaScript.registerFunction (selectUnit, "selectUnit");
luaScript.registerFunction (unselectUnit, "unselectUnit");
luaScript.registerFunction (addUnitToGroupSelection,
"addUnitToGroupSelection");
luaScript.registerFunction (recallGroupSelection,
"recallGroupSelection");
luaScript.registerFunction (removeUnitFromGroupSelection,
"removeUnitFromGroupSelection");
luaScript.registerFunction (setAttackWarningsEnabled,
"setAttackWarningsEnabled");
luaScript.registerFunction (getAttackWarningsEnabled,
"getAttackWarningsEnabled");
luaScript.registerFunction (getIsDayTime, "getIsDayTime");
luaScript.registerFunction (getIsNightTime, "getIsNightTime");
luaScript.registerFunction (getTimeOfDay, "getTimeOfDay");
luaScript.registerFunction (registerDayNightEvent,
"registerDayNightEvent");
luaScript.registerFunction (unregisterDayNightEvent,
"unregisterDayNightEvent");
luaScript.registerFunction (registerUnitTriggerEvent,
"registerUnitTriggerEvent");
luaScript.registerFunction (unregisterUnitTriggerEvent,
"unregisterUnitTriggerEvent");
luaScript.registerFunction (getLastUnitTriggerEventUnitId,
"lastUnitTriggerEventUnit");
luaScript.registerFunction (getLastUnitTriggerEventType,
"lastUnitTriggerEventType");
luaScript.registerFunction (getUnitProperty, "getUnitProperty");
luaScript.registerFunction (getUnitPropertyName, "getUnitPropertyName");
luaScript.registerFunction (disableSpeedChange, "disableSpeedChange");
luaScript.registerFunction (enableSpeedChange, "enableSpeedChange");
luaScript.registerFunction (getSpeedChangeEnabled,
"getSpeedChangeEnabled");
luaScript.registerFunction (storeSaveGameData, "storeSaveGameData");
luaScript.registerFunction (loadSaveGameData, "loadSaveGameData");
luaScript.registerFunction (getFactionPlayerType,
"getFactionPlayerType");
//load code
for (int i = 0; i < scenario->getScriptCount (); ++i)
{
const Script *
script = scenario->getScript (i);
luaScript.loadCode ("function " + script->getName () + "()" +
script->getCode () + "end\n",
script->getName ());
}
//!!!
// string data_path= getGameReadWritePath(GameConstants::path_data_CacheLookupKey);
// if(data_path != ""){
// endPathWithSlash(data_path);
// }
// string sandboxScriptFilename = data_path + "data/core/scripts/sandbox.lua";
// string sandboxLuaCode = getFileTextContents(sandboxScriptFilename);
//
// //luaScript.loadCode(sandboxLuaCode + "\n", "megaglest_lua_sandbox");
// luaScript.setSandboxWrapperFunctionName("runsandboxed");
// luaScript.setSandboxCode(sandboxLuaCode);
// luaScript.runCode(sandboxLuaCode);
// // Setup the lua security sandbox here
// luaScript.beginCall("megaglest_lua_sandbox");
// luaScript.endCall();
//setup message box
messageBox.init (Lang::getInstance ().getString ("Ok"));
messageBox.setEnabled (false);
//messageBox.setAutoWordWrap(false);
//last created unit
lastCreatedUnitId = -1;
lastDeadUnitName = "";
lastDeadUnitId = -1;
lastDeadUnitCauseOfDeath = ucodNone;
lastDeadUnitKillerName = "";
lastDeadUnitKillerId = -1;
lastAttackedUnitName = "";
lastAttackedUnitId = -1;
lastAttackingUnitName = "";
lastAttackingUnitId = -1;
gameOver = false;
gameWon = false;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
// Setup global functions and vars here
luaScript.beginCall ("global");
luaScript.endCall ();
//call startup function
if (this->rootNode == NULL)
{
luaScript.beginCall ("startup");
luaScript.endCall ();
}
else
{
loadGame (this->rootNode);
this->rootNode = NULL;
if (LuaScript::getDebugModeEnabled () == true)
printf ("Calling onLoad luaSavedGameData.size() = %d\n",
(int) luaSavedGameData.size ());
luaScript.beginCall ("onLoad");
luaScript.endCall ();
}
}
catch (const megaglest_runtime_error & ex)
{
//string sErrBuf = "";
//if(ex.wantStackTrace() == true) {
char
szErrBuf[8096] = "";
//snprintf(szErrBuf,8096,"In [%s::%s %d]",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
string
sErrBuf =
string (szErrBuf) +
string ("The game may no longer be stable!\n\n\t [") +
string (ex.what ()) + string ("]\n");
//}
SystemFlags::OutputDebug (SystemFlags::debugError, sErrBuf.c_str ());
if (SystemFlags::getSystemSettingType (SystemFlags::debugSystem).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugSystem,
sErrBuf.c_str ());
thisScriptManager->
addMessageToQueue (ScriptManagerMessage
(sErrBuf.c_str (), "error", -1, -1, true));
thisScriptManager->onMessageBoxOk (false);
}
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
}
// ========================== events ===============================================
void
ScriptManager::onMessageBoxOk (bool popFront)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
Lang & lang = Lang::getInstance ();
for (int index = 0; messageQueue.empty () == false; ++index)
{
//printf("i = %d messageQueue.size() = %d popFront = %d\n",i,messageQueue.size(),popFront);
if (popFront == true)
{
messageQueue.pop_front ();
}
if (messageQueue.empty () == false)
{
// printf("onMessageBoxOk [%s] factionIndex = %d [%d] teamIndex = %d [%d][%d]\n",
// wrapString(lang.getScenarioString(messageQueue.front().getText()), messageWrapCount).c_str(),
// messageQueue.front().getFactionIndex(), this->world->getThisFactionIndex(),
// messageQueue.front().getTeamIndex(),this->world->getThisTeamIndex(),this->world->getThisFaction()->getTeam());
if ((messageQueue.front ().getFactionIndex () < 0
&& messageQueue.front ().getTeamIndex () < 0)
|| messageQueue.front ().getFactionIndex () ==
this->world->getThisFactionIndex ()
|| messageQueue.front ().getTeamIndex () ==
this->world->getThisTeamIndex ())
{
messageBox.setEnabled (true);
string
msgText = messageQueue.front ().getText ();
string
msgHeader = messageQueue.front ().getHeader ();
if (messageQueue.front ().getMessageNotTranslated () ==
false)
{
msgText =
lang.getScenarioString (messageQueue.front ().
getText ());
msgHeader =
lang.getScenarioString (messageQueue.front ().
getHeader ());
}
messageBox.setText (msgText);
messageBox.setHeader (msgHeader);
break;
}
popFront = true;
}
}
}
void
ScriptManager::onResourceHarvested ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (this->rootNode == NULL)
{
luaScript.beginCall ("resourceHarvested");
luaScript.endCall ();
}
}
void
ScriptManager::onUnitCreated (const Unit * unit)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (this->rootNode == NULL)
{
lastCreatedUnitName = unit->getType ()->getName (false);
lastCreatedUnitId = unit->getId ();
luaScript.beginCall ("unitCreated");
luaScript.endCall ();
luaScript.beginCall ("unitCreatedOfType_" +
unit->getType ()->getName ());
luaScript.endCall ();
}
}
void
ScriptManager::onUnitDied (const Unit * unit)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (this->rootNode == NULL)
{
if (unit->getLastAttackerUnitId () >= 0)
{
Unit *
killer = world->findUnitById (unit->getLastAttackerUnitId ());
if (killer != NULL)
{
lastAttackingUnitName = killer->getType ()->getName (false);
lastAttackingUnitId = killer->getId ();
lastDeadUnitKillerName =
killer->getType ()->getName (false);
lastDeadUnitKillerId = killer->getId ();
}
else
{
lastDeadUnitKillerName = "";
lastDeadUnitKillerId = -1;
}
}
lastAttackedUnitName = unit->getType ()->getName (false);
lastAttackedUnitId = unit->getId ();
lastDeadUnitName = unit->getType ()->getName (false);
lastDeadUnitId = unit->getId ();
lastDeadUnitCauseOfDeath = unit->getCauseOfDeath ();
luaScript.beginCall ("unitDied");
luaScript.endCall ();
}
}
void
ScriptManager::onUnitAttacked (const Unit * unit)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (this->rootNode == NULL)
{
lastAttackedUnitName = unit->getType ()->getName (false);
lastAttackedUnitId = unit->getId ();
luaScript.beginCall ("unitAttacked");
luaScript.endCall ();
}
}
void
ScriptManager::onUnitAttacking (const Unit * unit)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (this->rootNode == NULL)
{
lastAttackingUnitName = unit->getType ()->getName (false);
lastAttackingUnitId = unit->getId ();
luaScript.beginCall ("unitAttacking");
luaScript.endCall ();
}
}
void
ScriptManager::onGameOver (bool won)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
gameWon = won;
luaScript.beginCall ("gameOver");
luaScript.endCall ();
}
void
ScriptManager::onTimerTriggerEvent ()
{
if (TimerTriggerEventList.empty () == true)
{
return;
}
if (this->rootNode != NULL)
{
return;
}
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] TimerTriggerEventList.size() = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
TimerTriggerEventList.size ());
for (std::map < int, TimerTriggerEvent >::iterator iterMap =
TimerTriggerEventList.begin ();
iterMap != TimerTriggerEventList.end (); ++iterMap)
{
TimerTriggerEvent & event = iterMap->second;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] event.running = %d, event.startTime = %lld, event.endTime = %lld, diff = %f\n",
__FILE__, __FUNCTION__, __LINE__,
event.running,
(long long int) event.startFrame,
(long long int) event.endFrame,
(event.endFrame - event.startFrame));
if (event.running == true)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (), __FUNCTION__,
__LINE__);
// If using an efficient timer, check if its time to trigger
// on the elapsed check
if (event.triggerSecondsElapsed > 0)
{
int
elapsed =
(world->getFrameCount () -
event.startFrame) / GameConstants::updateFps;
if (elapsed < event.triggerSecondsElapsed)
{
continue;
}
}
currentTimerTriggeredEventId = iterMap->first;
luaScript.beginCall ("timerTriggerEvent");
luaScript.endCall ();
if (event.triggerSecondsElapsed > 0)
{
int
timerId = iterMap->first;
stopTimerEvent (timerId);
}
}
}
}
void
ScriptManager::onCellTriggerEvent (Unit * movingUnit)
{
if (CellTriggerEventList.empty () == true)
{
return;
}
if (this->rootNode != NULL)
{
return;
}
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %p, CellTriggerEventList.size() = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
movingUnit, CellTriggerEventList.size ());
// remove any delayed removals
unregisterCellTriggerEvent (-1);
inCellTriggerEvent = true;
if (movingUnit != NULL)
{
//ScenarioInfo scenarioInfoStart = world->getScenario()->getInfo();
for (std::map < int, CellTriggerEvent >::iterator iterMap =
CellTriggerEventList.begin ();
iterMap != CellTriggerEventList.end (); ++iterMap)
{
CellTriggerEvent & event = iterMap->second;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s\n",
__FILE__, __FUNCTION__, __LINE__,
movingUnit->getId (), event.type,
movingUnit->getPos ().getString ().
c_str (), event.sourceId,
event.destId,
event.destPos.getString ().
c_str ());
bool
triggerEvent = false;
currentCellTriggeredEventAreaEntryUnitId = 0;
currentCellTriggeredEventAreaExitUnitId = 0;
currentCellTriggeredEventUnitId = 0;
switch (event.type)
{
case ctet_Unit:
{
Unit *
destUnit = world->findUnitById (event.destId);
if (destUnit != NULL)
{
if (movingUnit->getId () == event.sourceId)
{
bool
srcInDst =
world->getMap ()->isInUnitTypeCells (destUnit->
getType (),
destUnit->
getPos (),
movingUnit->
getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, destUnit->getPos() = %s, srcInDst = %d\n",
__FILE__,
__FUNCTION__,
__LINE__,
movingUnit->getId (),
event.type,
movingUnit->getPos ().
getString ().c_str (),
event.sourceId,
event.destId,
event.destPos.
getString ().c_str (),
destUnit->getPos ().
getString ().c_str (),
srcInDst);
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::
debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).
c_str (),
__FUNCTION__,
__LINE__);
}
else
{
srcInDst =
world->getMap ()->
isNextToUnitTypeCells (destUnit->getType (),
destUnit->getPos (),
movingUnit->
getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::
debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, destUnit->getPos() = %s, srcInDst = %d\n",
__FILE__,
__FUNCTION__,
__LINE__,
movingUnit->
getId (),
event.type,
movingUnit->
getPos ().
getString ().
c_str (),
event.sourceId,
event.destId,
event.destPos.
getString ().
c_str (),
destUnit->
getPos ().
getString ().
c_str (),
srcInDst);
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
}
break;
case ctet_UnitPos:
{
if (movingUnit->getId () == event.sourceId)
{
bool
srcInDst =
world->getMap ()->isInUnitTypeCells (movingUnit->
getType (),
event.destPos,
movingUnit->
getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, srcInDst = %d\n",
__FILE__, __FUNCTION__,
__LINE__,
movingUnit->getId (),
event.type,
movingUnit->getPos ().
getString ().c_str (),
event.sourceId,
event.destId,
event.destPos.
getString ().c_str (),
srcInDst);
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__,
__LINE__);
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
break;
case ctet_UnitAreaPos:
{
if (movingUnit->getId () == event.sourceId)
{
bool
srcInDst = false;
// Cache area lookup so for each unitsize and pos its done only once
bool
foundInCache = false;
std::map < int,
std::map <
Vec2i,
bool > >::iterator
iterFind1 =
event.eventLookupCache.find (movingUnit->
getType ()->
getSize ());
if (iterFind1 != event.eventLookupCache.end ())
{
std::map < Vec2i, bool >::iterator iterFind2 =
iterFind1->second.find (movingUnit->getPos ());
if (iterFind2 != iterFind1->second.end ())
{
foundInCache = true;
srcInDst = iterFind2->second;
}
}
if (foundInCache == false)
{
for (int x = event.destPos.x;
srcInDst == false && x <= event.destPosEnd.x;
++x)
{
for (int y = event.destPos.y;
srcInDst == false
&& y <= event.destPosEnd.y; ++y)
{
srcInDst =
world->getMap ()->
isInUnitTypeCells (movingUnit->
getType (), Vec2i (x,
y),
movingUnit->
getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::
debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, srcInDst = %d\n",
__FILE__,
__FUNCTION__,
__LINE__,
movingUnit->
getId (),
event.type,
movingUnit->
getPos ().
getString ().
c_str (),
event.
sourceId,
event.destId,
Vec2i (x,
y).
getString ().
c_str (),
srcInDst);
}
}
event.eventLookupCache[movingUnit->getType ()->
getSize ()][movingUnit->
getPos ()] =
srcInDst;
}
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__,
__LINE__);
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
break;
case ctet_Faction:
{
Unit *
destUnit = world->findUnitById (event.destId);
if (destUnit != NULL &&
movingUnit->getFactionIndex () == event.sourceId)
{
bool
srcInDst =
world->getMap ()->isInUnitTypeCells (destUnit->
getType (),
destUnit->
getPos (),
movingUnit->
getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, srcInDst = %d\n",
__FILE__, __FUNCTION__,
__LINE__,
movingUnit->getId (),
event.type,
movingUnit->getPos ().
getString ().c_str (),
event.sourceId,
event.destId,
event.destPos.
getString ().c_str (),
srcInDst);
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__,
__LINE__);
}
else
{
srcInDst =
world->getMap ()->
isNextToUnitTypeCells (destUnit->getType (),
destUnit->getPos (),
movingUnit->getPos ());
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] movingUnit = %d, event.type = %d, movingUnit->getPos() = %s, event.sourceId = %d, event.destId = %d, event.destPos = %s, destUnit->getPos() = %s, srcInDst = %d\n",
__FILE__,
__FUNCTION__,
__LINE__,
movingUnit->getId (),
event.type,
movingUnit->getPos ().
getString ().c_str (),
event.sourceId,
event.destId,
event.destPos.
getString ().c_str (),
destUnit->getPos ().
getString ().c_str (),
srcInDst);
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
break;
case ctet_FactionPos:
{
if (movingUnit->getFactionIndex () == event.sourceId)
{
//printf("ctet_FactionPos event.destPos = [%s], movingUnit->getPos() [%s]\n",event.destPos.getString().c_str(),movingUnit->getPos().getString().c_str());
bool
srcInDst =
world->getMap ()->isInUnitTypeCells (movingUnit->
getType (),
event.destPos,
movingUnit->
getPos ());
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__,
__LINE__);
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
break;
case ctet_FactionAreaPos:
{
if (movingUnit->getFactionIndex () == event.sourceId)
{
//if(event.sourceId == 1) printf("ctet_FactionPos event.destPos = [%s], movingUnit->getPos() [%s] Unit id = %d\n",event.destPos.getString().c_str(),movingUnit->getPos().getString().c_str(),movingUnit->getId());
bool
srcInDst = false;
// Cache area lookup so for each unitsize and pos its done only once
bool
foundInCache = false;
std::map < int,
std::map <
Vec2i,
bool > >::iterator
iterFind1 =
event.eventLookupCache.find (movingUnit->
getType ()->
getSize ());
if (iterFind1 != event.eventLookupCache.end ())
{
std::map < Vec2i, bool >::iterator iterFind2 =
iterFind1->second.find (movingUnit->getPos ());
if (iterFind2 != iterFind1->second.end ())
{
foundInCache = true;
srcInDst = iterFind2->second;
}
}
if (foundInCache == false)
{
for (int x = event.destPos.x;
srcInDst == false && x <= event.destPosEnd.x;
++x)
{
for (int y = event.destPos.y;
srcInDst == false
&& y <= event.destPosEnd.y; ++y)
{
srcInDst =
world->getMap ()->
isInUnitTypeCells (movingUnit->
getType (), Vec2i (x,
y),
movingUnit->
getPos ());
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType
(SystemFlags::debugLUA).enabled)
SystemFlags::
OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__,
__LINE__);
}
}
}
event.eventLookupCache[movingUnit->getType ()->
getSize ()][movingUnit->
getPos ()] =
srcInDst;
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
//printf("!!!UNIT IN AREA!!! Faction area pos, moving unit faction= %d, trigger faction = %d, unit id = %d\n",movingUnit->getFactionIndex(),event.sourceId,movingUnit->getId());
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
}
break;
case ctet_AreaPos:
{
// Is the unit already in the cell range? If no check if they are entering it
if (event.eventStateInfo.find (movingUnit->getId ()) ==
event.eventStateInfo.end ())
{
//printf("ctet_FactionPos event.destPos = [%s], movingUnit->getPos() [%s]\n",event.destPos.getString().c_str(),movingUnit->getPos().getString().c_str());
bool
srcInDst = false;
for (int x = event.destPos.x;
srcInDst == false && x <= event.destPosEnd.x;
++x)
{
for (int y = event.destPos.y;
srcInDst == false && y <= event.destPosEnd.y;
++y)
{
srcInDst =
world->getMap ()->
isInUnitTypeCells (movingUnit->getType (),
Vec2i (x, y),
movingUnit->getPos ());
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::
debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).
c_str (),
__FUNCTION__,
__LINE__);
currentCellTriggeredEventAreaEntryUnitId =
movingUnit->getId ();
event.eventStateInfo[movingUnit->
getId ()] =
Vec2i (x, y).getString ();
}
}
}
triggerEvent = srcInDst;
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
}
// If unit is already in cell range check if they are leaving?
else
{
bool
srcInDst = false;
for (int x = event.destPos.x;
srcInDst == false && x <= event.destPosEnd.x;
++x)
{
for (int y = event.destPos.y;
srcInDst == false && y <= event.destPosEnd.y;
++y)
{
srcInDst =
world->getMap ()->
isInUnitTypeCells (movingUnit->getType (),
Vec2i (x, y),
movingUnit->getPos ());
if (srcInDst == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::
debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::
debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).
c_str (),
__FUNCTION__,
__LINE__);
//event.eventStateInfo[movingUnit->getId()] = Vec2i(x,y);
}
}
}
triggerEvent = (srcInDst == false);
if (triggerEvent == true)
{
currentCellTriggeredEventUnitId =
movingUnit->getId ();
}
if (triggerEvent == true)
{
currentCellTriggeredEventAreaExitUnitId =
movingUnit->getId ();
event.eventStateInfo.erase (movingUnit->getId ());
}
}
}
break;
}
if (triggerEvent == true)
{
if (SystemFlags::
getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath
(__FILE__).c_str (),
__FUNCTION__, __LINE__);
currentCellTriggeredEventId = iterMap->first;
event.triggerCount++;
luaScript.beginCall ("cellTriggerEvent");
luaScript.endCall ();
}
// ScenarioInfo scenarioInfoEnd = world->getScenario()->getInfo();
// if(scenarioInfoStart.file != scenarioInfoEnd.file) {
// break;
// }
}
}
inCellTriggerEvent = false;
}
// ========================== lua wrappers ===============================================
string
ScriptManager::wrapString (const string & str, int wrapCount)
{
string
returnString;
int
letterCount = 0;
for (int i = 0; i < (int) str.size (); ++i)
{
if (letterCount > wrapCount && str[i] == ' ')
{
returnString += '\n';
letterCount = 0;
}
else
{
returnString += str[i];
}
++letterCount;
}
return returnString;
}
void
ScriptManager::networkShowMessageForFaction (const string & text,
const string & header,
int factionIndex)
{
messageQueue.
push_back (ScriptManagerMessage (text, header, factionIndex));
thisScriptManager->onMessageBoxOk (false);
}
void
ScriptManager::networkShowMessageForTeam (const string & text,
const string & header,
int teamIndex)
{
// Team indexes are 0 based internally (but 1 based in the lua script) so convert
teamIndex--;
messageQueue.
push_back (ScriptManagerMessage (text, header, -1, teamIndex));
thisScriptManager->onMessageBoxOk (false);
}
void
ScriptManager::networkSetCameraPositionForFaction (int factionIndex,
const Vec2i & pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex == this->world->getThisFactionIndex ())
{
gameCamera->centerXZ (pos.x, pos.y);
}
}
void
ScriptManager::networkSetCameraPositionForTeam (int teamIndex,
const Vec2i & pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (teamIndex == this->world->getThisTeamIndex ())
{
gameCamera->centerXZ (pos.x, pos.y);
}
}
void
ScriptManager::showMessage (const string & text, const string & header)
{
messageQueue.push_back (ScriptManagerMessage (text, header));
thisScriptManager->onMessageBoxOk (false);
}
void
ScriptManager::clearDisplayText ()
{
displayText = "";
}
void
ScriptManager::setDisplayText (const string & text)
{
displayText =
wrapString (Lang::getInstance ().getScenarioString (text),
displayTextWrapCount);
}
void
ScriptManager::addConsoleText (const string & text)
{
world->addConsoleText (text);
}
void
ScriptManager::addConsoleLangText (const char *fmt, ...)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
va_list
argList;
va_start (argList, fmt);
const int
max_debug_buffer_size = 8096;
char
szBuf[max_debug_buffer_size] = "";
vsnprintf (szBuf, max_debug_buffer_size - 1, fmt, argList);
world->addConsoleTextWoLang (szBuf);
va_end (argList);
}
void
ScriptManager::DisplayFormattedText (const char *fmt, ...)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
va_list
argList;
va_start (argList, fmt);
const int
max_debug_buffer_size = 8096;
char
szBuf[max_debug_buffer_size] = "";
vsnprintf (szBuf, max_debug_buffer_size - 1, fmt, argList);
displayText = szBuf;
va_end (argList);
}
void
ScriptManager::DisplayFormattedLangText (const char *fmt, ...)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
va_list
argList;
va_start (argList, fmt);
const int
max_debug_buffer_size = 8096;
char
szBuf[max_debug_buffer_size] = "";
vsnprintf (szBuf, max_debug_buffer_size - 1, fmt, argList);
displayText = szBuf;
va_end (argList);
}
void
ScriptManager::setCameraPosition (const Vec2i & pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
gameCamera->centerXZ (pos.x, pos.y);
}
void
ScriptManager::shakeCamera (int shakeIntensity, int shakeDuration,
bool cameraDistanceAffected, int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (cameraDistanceAffected)
{
Unit *
unit = world->findUnitById (unitId);
if (unit)
{
gameCamera->shake (shakeDuration, shakeIntensity,
cameraDistanceAffected,
unit->getCurrMidHeightVector ());
}
}
else
{
gameCamera->shake (shakeDuration, shakeIntensity,
cameraDistanceAffected, Vec3f (0.f, 0.f, 0.f));
}
}
void
ScriptManager::createUnit (const string & unitName, int factionIndex,
Vec2i pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
unitName.c_str (), factionIndex);
world->createUnit (unitName, factionIndex, pos);
}
void
ScriptManager::createUnitNoSpacing (const string & unitName,
int factionIndex, Vec2i pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
unitName.c_str (), factionIndex);
world->createUnit (unitName, factionIndex, pos, false);
}
void
ScriptManager::setLockedUnitForFaction (const string & unitName,
int factionIndex, bool lock)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
unitName.c_str (), factionIndex);
if (world->getFactionCount () > factionIndex)
{
const UnitType *
ut =
world->getFaction (factionIndex)->getType ()->
getUnitType (unitName);
world->getFaction (factionIndex)->setLockedUnitForFaction (ut,
lock);
}
else
{
throw
megaglest_runtime_error
("Invalid faction index in setLockedUnitForFaction: " +
intToStr (factionIndex), true);
}
}
void
ScriptManager::destroyUnit (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__, unitId);
Unit *
unit = world->findUnitById (unitId);
if (unit != NULL)
{
// Make sure they die
bool
unit_dead = unit->decHp (unit->getHp () * unit->getHp ());
if (unit_dead == false)
{
throw
megaglest_runtime_error ("unit_dead == false", true);
}
unit->kill ();
// If called from an existing die event we get a stack overflow
//onUnitDied(unit);
}
}
void
ScriptManager::giveKills (int unitId, int amount)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__, unitId);
Unit *
unit = world->findUnitById (unitId);
if (unit != NULL)
{
for (int index = 1; index <= amount; ++index)
{
unit->incKills (-1);
}
}
}
void
ScriptManager::playStaticSound (const string & playSound)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playSound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playSound.c_str ());
world->playStaticSound (playSound);
}
void
ScriptManager::playStreamingSound (const string & playSound)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playSound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playSound.c_str ());
world->playStreamingSound (playSound);
}
void
ScriptManager::stopStreamingSound (const string & playSound)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playSound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playSound.c_str ());
world->stopStreamingSound (playSound);
}
void
ScriptManager::stopAllSound ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->stopAllSound ();
}
void
ScriptManager::playStaticVideo (const string & playVideo)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playVideo [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playVideo.c_str ());
world->playStaticVideo (playVideo);
}
void
ScriptManager::playStreamingVideo (const string & playVideo)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playVideo [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playVideo.c_str ());
world->playStreamingVideo (playVideo);
}
void
ScriptManager::stopStreamingVideo (const string & playVideo)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] playVideo [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
playVideo.c_str ());
world->stopStreamingVideo (playVideo);
}
void
ScriptManager::stopAllVideo ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->stopAllVideo ();
}
void
ScriptManager::togglePauseGame (int pauseStatus)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] pauseStatus = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
pauseStatus);
world->togglePauseGame ((pauseStatus != 0), true);
}
void
ScriptManager::morphToUnit (int unitId, const string & morphName,
int ignoreRequirements)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d] morphName [%s] forceUpgradesIfRequired = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__, unitId,
morphName.c_str (), ignoreRequirements);
world->morphToUnit (unitId, morphName, (ignoreRequirements == 1));
}
void
ScriptManager::moveToUnit (int unitId, int destUnitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d] destUnitId [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__, unitId,
destUnitId);
world->moveToUnit (unitId, destUnitId);
}
void
ScriptManager::giveResource (const string & resourceName,
int factionIndex, int amount)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveResource (resourceName, factionIndex, amount);
}
void
ScriptManager::givePositionCommand (int unitId,
const string & commandName,
const Vec2i & pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->givePositionCommand (unitId, commandName, pos);
}
void
ScriptManager::giveAttackCommand (int unitId, int unitToAttackId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveAttackCommand (unitId, unitToAttackId);
}
void
ScriptManager::giveProductionCommand (int unitId,
const string & producedName)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveProductionCommand (unitId, producedName);
}
void
ScriptManager::giveUpgradeCommand (int unitId,
const string & producedName)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveUpgradeCommand (unitId, producedName);
}
void
ScriptManager::giveAttackStoppedCommand (int unitId,
const string & itemName,
int ignoreRequirements)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveAttackStoppedCommand (unitId, itemName,
(ignoreRequirements == 1));
}
void
ScriptManager::disableAi (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
playerModifiers[factionIndex].disableAi ();
disableConsume (factionIndex); // by this we stay somehow compatible with old behaviour
}
}
void
ScriptManager::enableAi (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
playerModifiers[factionIndex].enableAi ();
}
}
bool
ScriptManager::getAiEnabled (int factionIndex)
{
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
return playerModifiers[factionIndex].getAiEnabled ();
}
return false;
}
void
ScriptManager::disableConsume (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
playerModifiers[factionIndex].disableConsume ();
}
}
void
ScriptManager::enableConsume (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
playerModifiers[factionIndex].enableConsume ();
}
}
bool
ScriptManager::getConsumeEnabled (int factionIndex)
{
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
return playerModifiers[factionIndex].getConsumeEnabled ();
}
return false;
}
int
ScriptManager::registerCellTriggerEventForUnitToUnit (int sourceUnitId,
int destUnitId)
{
CellTriggerEvent
trigger;
trigger.type = ctet_Unit;
trigger.sourceId = sourceUnitId;
trigger.destId = destUnitId;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] Unit: %d will trigger cell event when reaching unit: %d, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceUnitId, destUnitId, eventId);
return eventId;
}
int
ScriptManager::
registerCellTriggerEventForUnitToLocation (int sourceUnitId,
const Vec2i & pos)
{
CellTriggerEvent
trigger;
trigger.type = ctet_UnitPos;
trigger.sourceId = sourceUnitId;
trigger.destPos = pos;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] Unit: %d will trigger cell event when reaching pos: %s, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceUnitId, pos.getString ().c_str (),
eventId);
return eventId;
}
int
ScriptManager::
registerCellAreaTriggerEventForUnitToLocation (int sourceUnitId,
const Vec4i & pos)
{
CellTriggerEvent
trigger;
trigger.type = ctet_UnitAreaPos;
trigger.sourceId = sourceUnitId;
trigger.destPos.x = pos.x;
trigger.destPos.y = pos.y;
trigger.destPosEnd.x = pos.z;
trigger.destPosEnd.y = pos.w;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] Unit: %d will trigger cell event when reaching pos: %s, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceUnitId, pos.getString ().c_str (),
eventId);
return eventId;
}
int
ScriptManager::
registerCellTriggerEventForFactionToUnit (int sourceFactionId,
int destUnitId)
{
CellTriggerEvent
trigger;
trigger.type = ctet_Faction;
trigger.sourceId = sourceFactionId;
trigger.destId = destUnitId;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] Faction: %d will trigger cell event when reaching unit: %d, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceFactionId, destUnitId, eventId);
return eventId;
}
int
ScriptManager::
registerCellTriggerEventForFactionToLocation (int sourceFactionId,
const Vec2i & pos)
{
CellTriggerEvent
trigger;
trigger.type = ctet_FactionPos;
trigger.sourceId = sourceFactionId;
trigger.destPos = pos;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]Faction: %d will trigger cell event when reaching pos: %s, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceFactionId, pos.getString ().c_str (),
eventId);
return eventId;
}
int
ScriptManager::
registerCellAreaTriggerEventForFactionToLocation (int sourceFactionId,
const Vec4i & pos)
{
CellTriggerEvent
trigger;
trigger.type = ctet_FactionAreaPos;
trigger.sourceId = sourceFactionId;
trigger.destPos.x = pos.x;
trigger.destPos.y = pos.y;
trigger.destPosEnd.x = pos.z;
trigger.destPosEnd.y = pos.w;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]Faction: %d will trigger cell event when reaching pos: %s, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
sourceFactionId, pos.getString ().c_str (),
eventId);
return eventId;
}
int
ScriptManager::registerCellAreaTriggerEvent (const Vec4i & pos)
{
CellTriggerEvent
trigger;
trigger.type = ctet_AreaPos;
trigger.sourceId = -1;
trigger.destPos.x = pos.x;
trigger.destPos.y = pos.y;
trigger.destPosEnd.x = pos.z;
trigger.destPosEnd.y = pos.w;
int
eventId = currentEventId++;
CellTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] trigger cell event when reaching pos: %s, eventId = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
pos.getString ().c_str (), eventId);
return eventId;
}
int
ScriptManager::getCellTriggerEventCount (int eventId)
{
int
result = 0;
if (CellTriggerEventList.find (eventId) != CellTriggerEventList.end ())
{
result = CellTriggerEventList[eventId].triggerCount;
}
return result;
}
void
ScriptManager::unregisterCellTriggerEvent (int eventId)
{
if (CellTriggerEventList.find (eventId) != CellTriggerEventList.end ())
{
if (inCellTriggerEvent == false)
{
CellTriggerEventList.erase (eventId);
}
else
{
unRegisterCellTriggerEventList.push_back (eventId);
}
}
if (inCellTriggerEvent == false)
{
if (unRegisterCellTriggerEventList.empty () == false)
{
for (int i = 0;
i < (int) unRegisterCellTriggerEventList.size (); ++i)
{
int
delayedEventId = unRegisterCellTriggerEventList[i];
CellTriggerEventList.erase (delayedEventId);
}
unRegisterCellTriggerEventList.clear ();
}
}
}
int
ScriptManager::startTimerEvent ()
{
TimerTriggerEvent
trigger;
trigger.running = true;
//trigger.startTime = time(NULL);
trigger.startFrame = world->getFrameCount ();
//trigger.endTime = 0;
trigger.endFrame = 0;
int
eventId = currentEventId++;
TimerTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] TimerTriggerEventList.size() = %d, eventId = %d, trigger.startTime = %lld, trigger.endTime = %lld\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
TimerTriggerEventList.size (), eventId,
(long long int) trigger.startFrame,
(long long int) trigger.endFrame);
return eventId;
}
int
ScriptManager::startEfficientTimerEvent (int triggerSecondsElapsed)
{
TimerTriggerEvent
trigger;
trigger.running = true;
//trigger.startTime = time(NULL);
trigger.startFrame = world->getFrameCount ();
//trigger.endTime = 0;
trigger.endFrame = 0;
trigger.triggerSecondsElapsed = triggerSecondsElapsed;
int
eventId = currentEventId++;
TimerTriggerEventList[eventId] = trigger;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] TimerTriggerEventList.size() = %d, eventId = %d, trigger.startTime = %lld, trigger.endTime = %lld\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
TimerTriggerEventList.size (), eventId,
(long long int) trigger.startFrame,
(long long int) trigger.endFrame);
return eventId;
}
int
ScriptManager::resetTimerEvent (int eventId)
{
int
result = 0;
if (TimerTriggerEventList.find (eventId) !=
TimerTriggerEventList.end ())
{
TimerTriggerEvent & trigger = TimerTriggerEventList[eventId];
result = getTimerEventSecondsElapsed (eventId);
//trigger.startTime = time(NULL);
trigger.startFrame = world->getFrameCount ();
//trigger.endTime = 0;
trigger.endFrame = 0;
trigger.running = true;
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] TimerTriggerEventList.size() = %d, eventId = %d, trigger.startTime = %lld, trigger.endTime = %lld, result = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
TimerTriggerEventList.size (), eventId,
(long long int) trigger.startFrame,
(long long int) trigger.endFrame,
result);
}
return result;
}
int
ScriptManager::stopTimerEvent (int eventId)
{
int
result = 0;
if (TimerTriggerEventList.find (eventId) !=
TimerTriggerEventList.end ())
{
TimerTriggerEvent & trigger = TimerTriggerEventList[eventId];
//trigger.endTime = time(NULL);
trigger.endFrame = world->getFrameCount ();
trigger.running = false;
result = getTimerEventSecondsElapsed (eventId);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] TimerTriggerEventList.size() = %d, eventId = %d, trigger.startTime = %lld, trigger.endTime = %lld, result = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
TimerTriggerEventList.size (), eventId,
(long long int) trigger.startFrame,
(long long int) trigger.endFrame,
result);
}
return result;
}
int
ScriptManager::getTimerEventSecondsElapsed (int eventId)
{
int
result = 0;
if (TimerTriggerEventList.find (eventId) !=
TimerTriggerEventList.end ())
{
TimerTriggerEvent & trigger = TimerTriggerEventList[eventId];
if (trigger.running)
{
//result = (int)difftime(time(NULL),trigger.startTime);
result =
(world->getFrameCount () -
trigger.startFrame) / GameConstants::updateFps;
}
else
{
//result = (int)difftime(trigger.endTime,trigger.startTime);
result =
(trigger.endFrame -
trigger.startFrame) / GameConstants::updateFps;
}
//printf("Timer event id = %d seconmds elapsed = %d\n",eventId,result);
}
return result;
}
void
ScriptManager::setPlayerAsWinner (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
if (factionIndex >= 0 && factionIndex < GameConstants::maxPlayers)
{
playerModifiers[factionIndex].setAsWinner ();
}
}
void
ScriptManager::endGame ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
gameOver = true;
}
void
ScriptManager::startPerformanceTimer ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#1 world->getGame() == NULL", true);
}
world->getGame ()->startPerformanceTimer ();
}
void
ScriptManager::endPerformanceTimer ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#2 world->getGame() == NULL", true);
}
world->getGame ()->endPerformanceTimer ();
}
Vec2i
ScriptManager::getPerformanceTimerResults ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#3 world->getGame() == NULL", true);
}
return world->getGame ()->getPerformanceTimerResults ();
}
Vec2i
ScriptManager::getStartLocation (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getStartLocation (factionIndex);
}
Vec2i
ScriptManager::getUnitPosition (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
Vec2i
result = world->getUnitPosition (unitId);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s] unitId = %d, pos [%s]\n",
__FUNCTION__, unitId,
result.getString ().c_str ());
return result;
}
void
ScriptManager::setUnitPosition (int unitId, Vec2i pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->setUnitPosition (unitId, pos);
}
void
ScriptManager::addCellMarker (Vec2i pos, int factionIndex,
const string & note,
const string & textureFile)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->addCellMarker (pos, factionIndex, note, textureFile);
}
void
ScriptManager::removeCellMarker (Vec2i pos, int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->removeCellMarker (pos, factionIndex);
}
void
ScriptManager::showMarker (Vec2i pos, int factionIndex,
const string & note,
const string & textureFile, int flashCount)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->showMarker (pos, factionIndex, note, textureFile, flashCount);
}
int
ScriptManager::getIsUnitAlive (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getIsUnitAlive (unitId);
}
int
ScriptManager::getUnitFaction (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitFactionIndex (unitId);
}
const string
ScriptManager::getUnitName (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
string
result = "";
Unit *
unit = world->findUnitById (unitId);
if (unit)
{
result = world->findUnitById (unitId)->getType ()->getName (false);
}
return result;
}
const string
ScriptManager::getUnitDisplayName (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitName (unitId);
}
int
ScriptManager::getResourceAmount (const string & resourceName,
int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getResourceAmount (resourceName, factionIndex);
}
const
string &
ScriptManager::getLastCreatedUnitName ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastCreatedUnitName;
}
int
ScriptManager::getCellTriggeredEventId ()
{
return currentCellTriggeredEventId;
}
int
ScriptManager::getTimerTriggeredEventId ()
{
return currentTimerTriggeredEventId;
}
int
ScriptManager::getCellTriggeredEventAreaEntryUnitId ()
{
return currentCellTriggeredEventAreaEntryUnitId;
}
int
ScriptManager::getCellTriggeredEventAreaExitUnitId ()
{
return currentCellTriggeredEventAreaExitUnitId;
}
int
ScriptManager::getCellTriggeredEventUnitId ()
{
return currentCellTriggeredEventUnitId;
}
void
ScriptManager::setRandomGenInit (int seed)
{
random.init (seed);
}
int
ScriptManager::getRandomGen (int minVal, int maxVal)
{
return random.randRange (minVal, maxVal);
}
int
ScriptManager::getWorldFrameCount ()
{
return world->getFrameCount ();
}
bool
ScriptManager::getGameWon () const
{
return
gameWon;
}
bool
ScriptManager::getIsGameOver () const
{
return
gameOver;
}
int
ScriptManager::getLastCreatedUnitId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastCreatedUnitId;
}
const
string &
ScriptManager::getLastDeadUnitName ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastDeadUnitName;
}
int
ScriptManager::getLastDeadUnitId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastDeadUnitId;
}
int
ScriptManager::getLastDeadUnitCauseOfDeath ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastDeadUnitCauseOfDeath;
}
const
string &
ScriptManager::getLastDeadUnitKillerName ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastDeadUnitKillerName;
}
int
ScriptManager::getLastDeadUnitKillerId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastDeadUnitKillerId;
}
const
string &
ScriptManager::getLastAttackedUnitName ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastAttackedUnitName;
}
int
ScriptManager::getLastAttackedUnitId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastAttackedUnitId;
}
const
string &
ScriptManager::getLastAttackingUnitName ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastAttackingUnitName;
}
int
ScriptManager::getLastAttackingUnitId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return lastAttackingUnitId;
}
int
ScriptManager::getUnitCount (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitCount (factionIndex);
}
int
ScriptManager::getUnitCountOfType (int factionIndex,
const string & typeName)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitCountOfType (factionIndex, typeName);
}
const string
ScriptManager::getSystemMacroValue (const string & key)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getSystemMacroValue (key);
}
const string
ScriptManager::getPlayerName (int factionIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getPlayerName (factionIndex);
}
void
ScriptManager::loadScenario (const string & name, bool keepFactions)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->setQueuedScenario (name, keepFactions);
}
vector < int >
ScriptManager::getUnitsForFaction (int factionIndex,
const string & commandTypeName,
int field)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitsForFaction (factionIndex, commandTypeName, field);
}
int
ScriptManager::getUnitCurrentField (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getUnitCurrentField (unitId);
}
int
ScriptManager::isFreeCellsOrHasUnit (int field, int unitId, Vec2i pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
Unit *
unit = world->findUnitById (unitId);
if (unit == NULL)
{
throw
megaglest_runtime_error ("unit == NULL", true);
}
int
result =
world->getMap ()->isFreeCellsOrHasUnit (pos,
unit->getType ()->getSize (),
static_cast < Field > (field),
unit);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s] unitId = %d, [%s] pos [%s] field = %d result = %d\n",
__FUNCTION__, unitId,
unit->getType ()->getName (false).c_str (),
pos.getString ().c_str (), field, result);
return result;
}
int
ScriptManager::isFreeCells (int unitSize, int field, Vec2i pos)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
int
result =
world->getMap ()->isFreeCellsOrHasUnit (pos, unitSize,
static_cast < Field > (field),
NULL);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s] unitSize = %d, pos [%s] field = %d result = %d\n",
__FUNCTION__, unitSize,
pos.getString ().c_str (), field, result);
return result;
}
int
ScriptManager::getHumanFactionId ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return this->world->getThisFactionIndex ();
}
void
ScriptManager::highlightUnit (int unitId, float radius, float thickness,
Vec4f color)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->highlightUnit (unitId, radius, thickness, color);
}
void
ScriptManager::unhighlightUnit (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->unhighlightUnit (unitId);
}
void
ScriptManager::giveStopCommand (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->giveStopCommand (unitId);
}
bool
ScriptManager::selectUnit (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->selectUnit (unitId);
}
void
ScriptManager::unselectUnit (int unitId)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->unselectUnit (unitId);
}
void
ScriptManager::addUnitToGroupSelection (int unitId, int groupIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->addUnitToGroupSelection (unitId, groupIndex);
}
void
ScriptManager::recallGroupSelection (int groupIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->recallGroupSelection (groupIndex);
}
void
ScriptManager::removeUnitFromGroupSelection (int unitId, int groupIndex)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->removeUnitFromGroupSelection (unitId, groupIndex);
}
void
ScriptManager::setAttackWarningsEnabled (bool enabled)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
world->setAttackWarningsEnabled (enabled);
}
bool
ScriptManager::getAttackWarningsEnabled ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
return world->getAttackWarningsEnabled ();
}
void
ScriptManager::registerUnitTriggerEvent (int unitId)
{
UnitTriggerEventList[unitId] = utet_None;
}
void
ScriptManager::unregisterUnitTriggerEvent (int unitId)
{
UnitTriggerEventList.erase (unitId);
}
int
ScriptManager::getLastUnitTriggerEventUnitId ()
{
return lastUnitTriggerEventUnitId;
}
UnitTriggerEventType
ScriptManager::getLastUnitTriggerEventType ()
{
return lastUnitTriggerEventType;
}
int
ScriptManager::getUnitProperty (int unitId, UnitTriggerEventType type)
{
int
result = -1;
//printf("File: %s line: %d type: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,type);
Unit *
unit = world->findUnitById (unitId);
if (unit != NULL)
{
switch (type)
{
case utet_None:
result = -2;
break;
case utet_HPChanged:
result = unit->getHp ();
break;
case utet_EPChanged:
result = unit->getEp ();
break;
case utet_LevelChanged:
result = -3;
if (unit->getLevel () != NULL)
{
result = unit->getLevel ()->getKills ();
}
break;
case utet_FieldChanged:
result = unit->getCurrField ();
break;
case utet_SkillChanged:
result = -4;
if (unit->getCurrSkill () != NULL)
{
result = unit->getCurrSkill ()->getClass ();
}
break;
default:
result = -1000;
break;
}
}
//printf("File: %s line: %d result: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,result);
return result;
}
const string
ScriptManager::getUnitPropertyName (int unitId, UnitTriggerEventType type)
{
string
result = "";
Unit *
unit = world->findUnitById (unitId);
if (unit != NULL)
{
switch (type)
{
case utet_None:
result = "";
break;
case utet_HPChanged:
result = "";
break;
case utet_EPChanged:
result = "";
break;
case utet_LevelChanged:
result = "";
if (unit->getLevel () != NULL)
{
result = unit->getLevel ()->getName (false);
}
break;
case utet_FieldChanged:
result = "";
break;
case utet_SkillChanged:
result = "";
if (unit->getCurrSkill () != NULL)
{
result = unit->getCurrSkill ()->getName ();
}
break;
default:
result = "???";
break;
}
}
return result;
}
void
ScriptManager::onUnitTriggerEvent (const Unit * unit,
UnitTriggerEventType event)
{
//static bool inEvent = false;
//if(inEvent == true) {
// printf("\n\n!!!!!!!!!!!!!!! File: %s line: %d unit [%d - %s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,unit->getId(),unit->getType()->getName().c_str());
// return;
//}
//inEvent = true;
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
if (UnitTriggerEventList.empty () == false)
{
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
std::map < int,
UnitTriggerEventType >::iterator
iterFind = UnitTriggerEventList.find (unit->getId ());
if (iterFind != UnitTriggerEventList.end ())
{
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
lastUnitTriggerEventUnitId = unit->getId ();
lastUnitTriggerEventType = event;
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
luaScript.beginCall ("unitTriggerEvent");
luaScript.endCall ();
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
}
}
//inEvent = false;
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
}
void
ScriptManager::registerDayNightEvent ()
{
registeredDayNightEvent = true;
}
void
ScriptManager::unregisterDayNightEvent ()
{
registeredDayNightEvent = false;
}
void
ScriptManager::onDayNightTriggerEvent ()
{
if (registeredDayNightEvent == true)
{
bool
isDay = (this->getIsDayTime () == 1);
if ((lastDayNightTriggerStatus != 1 && isDay == true) ||
(lastDayNightTriggerStatus != 2 && isDay == false))
{
if (isDay == true)
{
lastDayNightTriggerStatus = 1;
}
else
{
lastDayNightTriggerStatus = 2;
}
printf ("Triggering daynight event isDay: %d [%f]\n", isDay,
getTimeOfDay ());
luaScript.beginCall ("dayNightTriggerEvent");
luaScript.endCall ();
}
}
}
int
ScriptManager::getIsDayTime ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
const TimeFlow *
tf = world->getTimeFlow ();
if (tf == NULL)
{
throw
megaglest_runtime_error ("#1 tf == NULL", true);
}
return tf->isDay ();
}
int
ScriptManager::getIsNightTime ()
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
const TimeFlow *
tf = world->getTimeFlow ();
if (tf == NULL)
{
throw
megaglest_runtime_error ("#2 tf == NULL", true);
}
return tf->isNight ();
}
float
ScriptManager::getTimeOfDay ()
{
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
const TimeFlow *
tf = world->getTimeFlow ();
if (tf == NULL)
{
throw
megaglest_runtime_error ("#3 tf == NULL", true);
}
//printf("File: %s line: %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__);
return tf->getTime ();
}
void
ScriptManager::disableSpeedChange ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#4 world->getGame() == NULL");
}
world->getGame ()->setDisableSpeedChange (true);
}
void
ScriptManager::enableSpeedChange ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#5 world->getGame() == NULL");
}
world->getGame ()->setDisableSpeedChange (false);
}
bool
ScriptManager::getSpeedChangeEnabled ()
{
if (world->getGame () == NULL)
{
throw
megaglest_runtime_error ("#6 world->getGame() == NULL");
}
return world->getGame ()->getDisableSpeedChange ();
}
void
ScriptManager::addMessageToQueue (ScriptManagerMessage msg)
{
messageQueue.push_back (msg);
}
void
ScriptManager::storeSaveGameData (string name, string value)
{
if (LuaScript::getDebugModeEnabled () == true)
printf ("storeSaveGameData name [%s] value [%s]\n", name.c_str (),
value.c_str ());
luaSavedGameData[name] = value;
}
string
ScriptManager::loadSaveGameData (string name)
{
string
value = luaSavedGameData[name];
if (LuaScript::getDebugModeEnabled () == true)
printf ("loadSaveGameData result name [%s] value [%s]\n",
name.c_str (), value.c_str ());
return value;
}
ControlType
ScriptManager::getFactionPlayerType (int factionIndex)
{
Faction *
faction = world->getFaction (factionIndex);
if (faction != NULL)
{
return faction->getControlType ();
}
return ctClosed;
}
// ========================== lua callbacks ===============================================
int
ScriptManager::showMessage (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
thisScriptManager->showMessage (luaArguments.getString (-2),
luaArguments.getString (-1));
return luaArguments.getReturnCount ();
}
int
ScriptManager::networkShowMessageForFaction (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->networkShowMessageForFaction (luaArguments.
getString (-3),
luaArguments.
getString (-2),
luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::networkShowMessageForTeam (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->networkShowMessageForTeam (luaArguments.
getString (-3),
luaArguments.
getString (-2),
luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::networkSetCameraPositionForFaction (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->networkSetCameraPositionForFaction (luaArguments.
getInt (-2),
luaArguments.
getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::networkSetCameraPositionForTeam (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->networkSetCameraPositionForTeam (luaArguments.
getInt (-2),
luaArguments.
getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setDisplayText (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->setDisplayText (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::addConsoleText (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->addConsoleText (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::clearDisplayText (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->clearDisplayText ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setCameraPosition (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->
setCameraPosition (Vec2i (luaArguments.getVec2i (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::shakeCamera (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->shakeCamera (luaArguments.getInt (-2),
luaArguments.getInt (-1), false, 0);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::shakeCameraOnUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->shakeCamera (luaArguments.getInt (-3),
luaArguments.getInt (-2), true,
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::createUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-3).c_str (),
luaArguments.getInt (-2));
try
{
thisScriptManager->createUnit (luaArguments.getString (-3),
luaArguments.getInt (-2),
luaArguments.getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
void
ScriptManager::error (LuaHandle * luaHandle,
const megaglest_runtime_error * mgErr,
const char *file, const char *function, int line)
{
char
szErrBuf[8096] = "";
char
szErrBuf2[8096] = "";
int
luaLine = -1;
const char *
luaSource = "";
if (luaHandle != NULL)
{
lua_Debug
ar;
lua_getstack (luaHandle, 1, &ar);
lua_getinfo (luaHandle, "nSl", &ar);
luaLine = ar.currentline;
luaSource = ar.source;
}
snprintf (szErrBuf, 8096, "in %s::%s %d ",
extractFileFromDirectoryPath (file).c_str (), function, line);
snprintf (szErrBuf2, 8096, "Lua: tag=<%s> line=%d ", luaSource,
luaLine - 1);
string
sErrBuf = string ("Error! The game may no longer be stable!\n\n")
+ string (szErrBuf) + "\n" + string (szErrBuf2) + "\n\n"
+ string (mgErr->what ());
SystemFlags::OutputDebug (SystemFlags::debugError, sErrBuf.c_str ());
if (SystemFlags::getSystemSettingType (SystemFlags::debugSystem).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugSystem, sErrBuf.c_str ());
thisScriptManager->
addMessageToQueue (ScriptManagerMessage
(sErrBuf.c_str (),
"error " +
intToStr (thisScriptManager->errorCount), -1, -1,
true));
thisScriptManager->errorCount++;
thisScriptManager->onMessageBoxOk (false);
}
int
ScriptManager::createUnitNoSpacing (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-3).c_str (),
luaArguments.getInt (-2));
try
{
thisScriptManager->createUnitNoSpacing (luaArguments.getString (-3),
luaArguments.getInt (-2),
luaArguments.getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::destroyUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getInt (-1));
try
{
thisScriptManager->destroyUnit (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setLockedUnitForFaction (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%s] factionIndex = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-3).c_str (),
luaArguments.getInt (-2));
try
{
thisScriptManager->setLockedUnitForFaction (luaArguments.
getString (-3),
luaArguments.getInt (-2),
(luaArguments.
getInt (-1) ==
0 ? false : true));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveKills (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getInt (-1));
try
{
thisScriptManager->giveKills (luaArguments.getInt (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::morphToUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d] morphName [%s] forceUpgrade = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getInt (-3),
luaArguments.getString (-2).c_str (),
luaArguments.getInt (-1));
try
{
thisScriptManager->morphToUnit (luaArguments.getInt (-3),
luaArguments.getString (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::moveToUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] unit [%d] dest unit [%d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getInt (-2),
luaArguments.getInt (-1));
try
{
thisScriptManager->moveToUnit (luaArguments.getInt (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::playStaticSound (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->playStaticSound (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::playStreamingSound (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->playStreamingSound (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::stopStreamingSound (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->stopStreamingSound (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::stopAllSound (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
thisScriptManager->stopAllSound ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::playStaticVideo (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->playStaticVideo (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::playStreamingVideo (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->playStreamingVideo (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::stopStreamingVideo (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] sound [%s]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getString (-1).c_str ());
try
{
thisScriptManager->stopStreamingVideo (luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::stopAllVideo (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
thisScriptManager->stopAllVideo ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::togglePauseGame (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d] value = %d\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__,
luaArguments.getInt (-1));
try
{
thisScriptManager->togglePauseGame (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveResource (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveResource (luaArguments.getString (-3),
luaArguments.getInt (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::givePositionCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->givePositionCommand (luaArguments.getInt (-3),
luaArguments.getString (-2),
luaArguments.getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveAttackCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveAttackCommand (luaArguments.getInt (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveProductionCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveProductionCommand (luaArguments.getInt (-2),
luaArguments.
getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveUpgradeCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveUpgradeCommand (luaArguments.getInt (-2),
luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveAttackStoppedCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveAttackStoppedCommand (luaArguments.getInt (-3),
luaArguments.
getString (-2),
luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::disableAi (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->disableAi (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::enableAi (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->enableAi (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getAiEnabled (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
bool
result = thisScriptManager->getAiEnabled (luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::disableConsume (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->disableConsume (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::enableConsume (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->enableConsume (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getConsumeEnabled (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
bool
result =
thisScriptManager->getConsumeEnabled (luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellTriggerEventForUnitToUnit (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellTriggerEventForUnitToUnit (luaArguments.getInt (-2),
luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellTriggerEventForUnitToLocation (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellTriggerEventForUnitToLocation (luaArguments.getInt (-2),
luaArguments.
getVec2i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellAreaTriggerEventForUnitToLocation (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellAreaTriggerEventForUnitToLocation (luaArguments.
getInt (-2),
luaArguments.
getVec4i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellTriggerEventForFactionToUnit (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellTriggerEventForFactionToUnit (luaArguments.getInt (-2),
luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellTriggerEventForFactionToLocation (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellTriggerEventForFactionToLocation (luaArguments.
getInt (-2),
luaArguments.
getVec2i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::
registerCellAreaTriggerEventForFactionToLocation (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->
registerCellAreaTriggerEventForFactionToLocation (luaArguments.
getInt (-2),
luaArguments.
getVec4i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerCellAreaTriggerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->registerCellAreaTriggerEvent (luaArguments.
getVec4i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getCellTriggerEventCount (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->getCellTriggerEventCount (luaArguments.
getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::unregisterCellTriggerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->unregisterCellTriggerEvent (luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::startTimerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result = thisScriptManager->startTimerEvent ();
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::startEfficientTimerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->startEfficientTimerEvent (luaArguments.
getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::stopTimerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->stopTimerEvent (luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::resetTimerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->resetTimerEvent (luaArguments.getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getTimerEventSecondsElapsed (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->getTimerEventSecondsElapsed (luaArguments.
getInt (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setPlayerAsWinner (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->setPlayerAsWinner (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::endGame (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->endGame ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::startPerformanceTimer (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->startPerformanceTimer ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::endPerformanceTimer (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->endPerformanceTimer ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getPerformanceTimerResults (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
Vec2i
results = thisScriptManager->getPerformanceTimerResults ();
luaArguments.returnVec2i (results);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getStartLocation (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
Vec2i
pos =
thisScriptManager->getStartLocation (luaArguments.getInt (-1));
luaArguments.returnVec2i (pos);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitPosition (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
Vec2i
pos = thisScriptManager->getUnitPosition (luaArguments.getInt (-1));
luaArguments.returnVec2i (pos);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setUnitPosition (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->setUnitPosition (luaArguments.getInt (-2),
luaArguments.getVec2i (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::addCellMarker (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
//printf("LUA addCellMarker --> START\n");
int
factionIndex = luaArguments.getInt (-4);
//printf("LUA addCellMarker --> START 1\n");
Vec2i
pos = luaArguments.getVec2i (-1);
//printf("LUA addCellMarker --> START 2\n");
string
note = luaArguments.getString (-3);
//printf("LUA addCellMarker --> START 3\n");
string
texture = luaArguments.getString (-2);
//printf("LUA addCellMarker --> faction [%d] pos [%s] note [%s] texture [%s]\n",factionIndex,pos.getString().c_str(),note.c_str(),texture.c_str());
thisScriptManager->addCellMarker (pos, factionIndex, note, texture);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::removeCellMarker (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
factionIndex = luaArguments.getInt (-2);
Vec2i
pos = luaArguments.getVec2i (-1);
thisScriptManager->removeCellMarker (pos, factionIndex);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::showMarker (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
flashCount = luaArguments.getInt (-5);
//printf("LUA addCellMarker --> START\n");
int
factionIndex = luaArguments.getInt (-4);
//printf("LUA addCellMarker --> START 1\n");
Vec2i
pos = luaArguments.getVec2i (-1);
//printf("LUA addCellMarker --> START 2\n");
string
note = luaArguments.getString (-3);
//printf("LUA addCellMarker --> START 3\n");
string
texture = luaArguments.getString (-2);
//printf("LUA addCellMarker --> faction [%d] pos [%s] note [%s] texture [%s]\n",factionIndex,pos.getString().c_str(),note.c_str(),texture.c_str());
thisScriptManager->showMarker (pos, factionIndex, note, texture,
flashCount);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitFaction (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
factionIndex =
thisScriptManager->getUnitFaction (luaArguments.getInt (-1));
luaArguments.returnInt (factionIndex);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
const string
unitname =
thisScriptManager->getUnitName (luaArguments.getInt (-1));
luaArguments.returnString (unitname);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitDisplayName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
const string
unitname =
thisScriptManager->getUnitDisplayName (luaArguments.getInt (-1));
luaArguments.returnString (unitname);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getResourceAmount (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getResourceAmount (luaArguments.
getString (-2),
luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastCreatedUnitName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getLastCreatedUnitName ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastCreatedUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getLastCreatedUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getCellTriggeredEventId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getCellTriggeredEventId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getTimerTriggeredEventId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getTimerTriggeredEventId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getCellTriggeredEventAreaEntryUnitId (LuaHandle *
luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getCellTriggeredEventAreaEntryUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getCellTriggeredEventAreaExitUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getCellTriggeredEventAreaExitUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getCellTriggeredEventUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getCellTriggeredEventUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setRandomGenInit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->setRandomGenInit (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getRandomGen (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getRandomGen (luaArguments.getInt (-2),
luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getWorldFrameCount (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getWorldFrameCount ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastDeadUnitName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->getLastDeadUnitName ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastDeadUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getLastDeadUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastDeadUnitCauseOfDeath (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getLastDeadUnitCauseOfDeath ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastDeadUnitKillerName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getLastDeadUnitKillerName ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastDeadUnitKillerId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getLastDeadUnitKillerId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastAttackedUnitName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getLastAttackedUnitName ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastAttackedUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getLastAttackedUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastAttackingUnitName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getLastAttackingUnitName ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastAttackingUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getLastAttackingUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getSystemMacroValue (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getSystemMacroValue (luaArguments.
getString (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::scenarioDir (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getSystemMacroValue ("$SCENARIO_PATH"));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getPlayerName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
getPlayerName (luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitCount (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getUnitCount (luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitCountOfType (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getUnitCountOfType (luaArguments.getInt (-2),
luaArguments.
getString (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::DisplayFormattedText (LuaHandle * luaHandle)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
//const char *ret;
//lua_lock(luaHandle);
//luaC_checkGC(luaHandle);
int
args = lua_gettop (luaHandle);
if (lua_checkstack (luaHandle, args + 1))
{
LuaArguments
luaArguments (luaHandle);
string
fmt = luaArguments.getString (-args);
//va_list argList;
//va_start(argList, fmt.c_str() );
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"DisplayFormattedText args = %d!\n",
args);
const int
max_args_allowed = 8;
if (args == 1)
{
thisScriptManager->DisplayFormattedText (fmt.c_str ());
}
else if (args == 2)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+
1));
}
else if (args == 3)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+
2));
}
else if (args == 4)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+ 2),
luaArguments.
getGenericData (-args
+
3));
}
else if (args == 5)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+ 2),
luaArguments.
getGenericData (-args
+ 3),
luaArguments.
getGenericData (-args
+
4));
}
else if (args == 6)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+ 2),
luaArguments.
getGenericData (-args
+ 3),
luaArguments.
getGenericData (-args
+ 4),
luaArguments.
getGenericData (-args
+
5));
}
else if (args == 7)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+ 2),
luaArguments.
getGenericData (-args
+ 3),
luaArguments.
getGenericData (-args
+ 4),
luaArguments.
getGenericData (-args
+ 5),
luaArguments.
getGenericData (-args
+
6));
}
else if (args == max_args_allowed)
{
thisScriptManager->DisplayFormattedText (fmt.c_str (),
luaArguments.
getGenericData (-args
+ 1),
luaArguments.
getGenericData (-args
+ 2),
luaArguments.
getGenericData (-args
+ 3),
luaArguments.
getGenericData (-args
+ 4),
luaArguments.
getGenericData (-args
+ 5),
luaArguments.
getGenericData (-args
+ 6),
luaArguments.
getGenericData (-args
+
7));
}
else
{
char
szBuf[8096] = "";
snprintf (szBuf, 8096,
"Invalid parameter count in method [%s] args = %d [argument count must be between 1 and %d]",
__FUNCTION__, args, max_args_allowed);
throw
megaglest_runtime_error (szBuf);
}
//va_end(argList);
}
//lua_unlock(luaHandle);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return 1;
/*
int args=lua_gettop(luaHandle);
if(lua_checkstack(luaHandle, args+1))
{
va_list argList;
int i;
//lua_getfield(luaHandle, LUA_GLOBALSINDEX, "print");
for(i = 1;i <= args; i++) {
lua_pushvalue(luaHandle, i);
}
lua_call(luaHandle, args, 0);
}
else
{
return luaL_error(luaHandle, "cannot grow stack");
}
*/
/*
luax_getfunction(L, mod, fn);
for (int i = 0; i < n; i++) {
lua_pushvalue(L, idxs[i]); // The arguments.
}
lua_call(L, n, 1); // Call the function, n args, one return value.
lua_replace(L, idxs[0]); // Replace the initial argument with the new object.
return 0;
*/
}
int
ScriptManager::addConsoleLangText (LuaHandle * luaHandle)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
//const char *ret;
//lua_lock(luaHandle);
//luaC_checkGC(luaHandle);
int
args = lua_gettop (luaHandle);
if (lua_checkstack (luaHandle, args + 1))
{
LuaArguments
luaArguments (luaHandle);
string
fmt = luaArguments.getString (-args);
//va_list argList;
//va_start(argList, fmt.c_str() );
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"DisplayFormattedText args = %d!\n",
args);
const int
max_args_allowed = 8;
if (args == 1)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str ());
}
else if (args == 2)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1));
}
else if (args == 3)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2));
}
else if (args == 4)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2),
luaArguments.
getGenericData (-args +
3));
}
else if (args == 5)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2),
luaArguments.
getGenericData (-args +
3),
luaArguments.
getGenericData (-args +
4));
}
else if (args == 6)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2),
luaArguments.
getGenericData (-args +
3),
luaArguments.
getGenericData (-args +
4),
luaArguments.
getGenericData (-args +
5));
}
else if (args == 7)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2),
luaArguments.
getGenericData (-args +
3),
luaArguments.
getGenericData (-args +
4),
luaArguments.
getGenericData (-args +
5),
luaArguments.
getGenericData (-args +
6));
}
else if (args == max_args_allowed)
{
thisScriptManager->addConsoleLangText (Lang::getInstance ().
getScenarioString
(fmt).c_str (),
luaArguments.
getGenericData (-args +
1),
luaArguments.
getGenericData (-args +
2),
luaArguments.
getGenericData (-args +
3),
luaArguments.
getGenericData (-args +
4),
luaArguments.
getGenericData (-args +
5),
luaArguments.
getGenericData (-args +
6),
luaArguments.
getGenericData (-args +
7));
}
else
{
char
szBuf[8096] = "";
snprintf (szBuf, 8096,
"Invalid parameter count in method [%s] args = %d [argument count must be between 1 and %d]",
__FUNCTION__, args, max_args_allowed);
throw
megaglest_runtime_error (szBuf);
}
//va_end(argList);
}
//lua_unlock(luaHandle);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return 1;
}
int
ScriptManager::DisplayFormattedLangText (LuaHandle * luaHandle)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
try
{
//const char *ret;
//lua_lock(luaHandle);
//luaC_checkGC(luaHandle);
int
args = lua_gettop (luaHandle);
if (lua_checkstack (luaHandle, args + 1))
{
LuaArguments
luaArguments (luaHandle);
string
fmt = luaArguments.getString (-args);
//va_list argList;
//va_start(argList, fmt.c_str() );
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).
enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"DisplayFormattedText args = %d!\n",
args);
const int
max_args_allowed = 8;
if (args == 1)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str ());
}
else if (args == 2)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1));
}
else if (args == 3)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2));
}
else if (args == 4)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2),
luaArguments.
getGenericData (-args + 3));
}
else if (args == 5)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2),
luaArguments.
getGenericData (-args + 3),
luaArguments.
getGenericData (-args + 4));
}
else if (args == 6)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2),
luaArguments.
getGenericData (-args + 3),
luaArguments.
getGenericData (-args + 4),
luaArguments.
getGenericData (-args + 5));
}
else if (args == 7)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2),
luaArguments.
getGenericData (-args + 3),
luaArguments.
getGenericData (-args + 4),
luaArguments.
getGenericData (-args + 5),
luaArguments.
getGenericData (-args + 6));
}
else if (args == max_args_allowed)
{
thisScriptManager->
DisplayFormattedLangText (Lang::getInstance ().
getScenarioString (fmt).c_str (),
luaArguments.
getGenericData (-args + 1),
luaArguments.
getGenericData (-args + 2),
luaArguments.
getGenericData (-args + 3),
luaArguments.
getGenericData (-args + 4),
luaArguments.
getGenericData (-args + 5),
luaArguments.
getGenericData (-args + 6),
luaArguments.
getGenericData (-args + 7));
}
else
{
char
szBuf[8096] = "";
snprintf (szBuf, 8096,
"Invalid parameter count in method [%s] args = %d [argument count must be between 1 and %d]",
__FUNCTION__, args, max_args_allowed);
throw
megaglest_runtime_error (szBuf);
}
//va_end(argList);
}
//lua_unlock(luaHandle);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return 1;
}
int
ScriptManager::getGameWon (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getGameWon ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getIsGameOver (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getIsGameOver ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::loadScenario (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->loadScenario (luaArguments.getString (-2),
luaArguments.getInt (-1) != 0);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitsForFaction (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
vector < int >
units =
thisScriptManager->getUnitsForFaction (luaArguments.getInt (-3),
luaArguments.getString (-2),
luaArguments.getInt (-1));
luaArguments.returnVectorInt (units);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitCurrentField (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getUnitCurrentField (luaArguments.
getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getIsUnitAlive (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getIsUnitAlive (luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::isFreeCellsOrHasUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result =
thisScriptManager->isFreeCellsOrHasUnit (luaArguments.getInt (-3),
luaArguments.getInt (-2),
luaArguments.
getVec2i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::isFreeCells (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
result = thisScriptManager->isFreeCells (luaArguments.getInt (-3),
luaArguments.getInt (-2),
luaArguments.
getVec2i (-1));
luaArguments.returnInt (result);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getHumanFactionId (LuaHandle * luaHandle)
{
if (SystemFlags::getSystemSettingType (SystemFlags::debugLUA).enabled)
SystemFlags::OutputDebug (SystemFlags::debugLUA,
"In [%s::%s Line: %d]\n",
extractFileFromDirectoryPath (__FILE__).
c_str (), __FUNCTION__, __LINE__);
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getHumanFactionId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::highlightUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->highlightUnit (luaArguments.getInt (-4),
luaArguments.getFloat (-3),
luaArguments.getFloat (-2),
luaArguments.getVec4f (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::unhighlightUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->unhighlightUnit (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::giveStopCommand (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->giveStopCommand (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::selectUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
selectUnit (luaArguments.getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::unselectUnit (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->unselectUnit (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::addUnitToGroupSelection (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->addUnitToGroupSelection (luaArguments.getInt (-2),
luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::recallGroupSelection (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->recallGroupSelection (luaArguments.getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::removeUnitFromGroupSelection (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->removeUnitFromGroupSelection (luaArguments.
getInt (-2),
luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::setAttackWarningsEnabled (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->
setAttackWarningsEnabled ((luaArguments.getInt (-1) ==
0 ? false : true));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getAttackWarningsEnabled (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getAttackWarningsEnabled ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getIsDayTime (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getIsDayTime ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getIsNightTime (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getIsNightTime ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getTimeOfDay (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnFloat (thisScriptManager->getTimeOfDay ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerDayNightEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->registerDayNightEvent ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::unregisterDayNightEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->unregisterDayNightEvent ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::registerUnitTriggerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->registerUnitTriggerEvent (luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::unregisterUnitTriggerEvent (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->unregisterUnitTriggerEvent (luaArguments.
getInt (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastUnitTriggerEventUnitId (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getLastUnitTriggerEventUnitId ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getLastUnitTriggerEventType (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (static_cast <
int >(thisScriptManager->
getLastUnitTriggerEventType ()));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitProperty (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
int
value =
thisScriptManager->getUnitProperty (luaArguments.getInt (-2),
static_cast <
UnitTriggerEventType >
(luaArguments.getInt (-1)));
luaArguments.returnInt (value);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getUnitPropertyName (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
const string
unitname =
thisScriptManager->getUnitPropertyName (luaArguments.getInt (-2),
static_cast <
UnitTriggerEventType >
(luaArguments.getInt (-1)));
luaArguments.returnString (unitname);
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::disableSpeedChange (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->disableSpeedChange ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::enableSpeedChange (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->enableSpeedChange ();
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getSpeedChangeEnabled (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->getSpeedChangeEnabled ());
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::storeSaveGameData (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
thisScriptManager->storeSaveGameData (luaArguments.getString (-2),
luaArguments.getString (-1));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::loadSaveGameData (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnString (thisScriptManager->
loadSaveGameData (luaArguments.
getString (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
int
ScriptManager::getFactionPlayerType (LuaHandle * luaHandle)
{
LuaArguments
luaArguments (luaHandle);
try
{
luaArguments.returnInt (thisScriptManager->
getFactionPlayerType (luaArguments.
getInt (-1)));
}
catch (const megaglest_runtime_error & ex)
{
error (luaHandle, &ex, __FILE__, __FUNCTION__, __LINE__);
}
return luaArguments.getReturnCount ();
}
void
ScriptManager::saveGame (XmlNode * rootNode)
{
std::map < string, string > mapTagReplacements;
XmlNode *
scriptManagerNode = rootNode->addChild ("ScriptManager");
//lua
// string code;
scriptManagerNode->addAttribute ("code", code, mapTagReplacements);
// LuaScript luaScript;
luaScript.beginCall ("onSave");
luaScript.endCall ();
if (LuaScript::getDebugModeEnabled () == true)
printf ("After onSave luaSavedGameData.size() = %d\n",
(int) luaSavedGameData.size ());
for (std::map < string, string >::iterator iterMap =
luaSavedGameData.begin (); iterMap != luaSavedGameData.end ();
++iterMap)
{
XmlNode *
savedGameDataItemNode =
scriptManagerNode->addChild ("SavedGameDataItem");
savedGameDataItemNode->addAttribute ("key", iterMap->first,
mapTagReplacements);
savedGameDataItemNode->addAttribute ("value", iterMap->second,
mapTagReplacements);
}
// //world
// World *world;
// GameCamera *gameCamera;
//
// //misc
// MessageQueue messageQueue;
for (std::list < ScriptManagerMessage >::iterator it =
messageQueue.begin (); it != messageQueue.end (); ++it)
{
(*it).saveGame (scriptManagerNode);
}
//printf("==== ScriptManager Savegame messageBox [%d][%s][%s] displayText [%s]\n",messageBox.getEnabled(),messageBox.getText().c_str(),messageBox.getHeader().c_str(),displayText.c_str());
// GraphicMessageBox messageBox;
scriptManagerNode->addAttribute ("messageBox_enabled",
intToStr (messageBox.getEnabled ()),
mapTagReplacements);
scriptManagerNode->addAttribute ("messageBox_text",
messageBox.getText (),
mapTagReplacements);
scriptManagerNode->addAttribute ("messageBox_header",
messageBox.getHeader (),
mapTagReplacements);
// string displayText;
scriptManagerNode->addAttribute ("displayText", displayText,
mapTagReplacements);
//
// //last created unit
// string lastCreatedUnitName;
scriptManagerNode->addAttribute ("lastCreatedUnitName",
lastCreatedUnitName,
mapTagReplacements);
// int lastCreatedUnitId;
scriptManagerNode->addAttribute ("lastCreatedUnitId",
intToStr (lastCreatedUnitId),
mapTagReplacements);
//
// //last dead unit
// string lastDeadUnitName;
scriptManagerNode->addAttribute ("lastDeadUnitName", lastDeadUnitName,
mapTagReplacements);
// int lastDeadUnitId;
scriptManagerNode->addAttribute ("lastDeadUnitId",
intToStr (lastDeadUnitId),
mapTagReplacements);
// int lastDeadUnitCauseOfDeath;
scriptManagerNode->addAttribute ("lastDeadUnitCauseOfDeath",
intToStr (lastDeadUnitCauseOfDeath),
mapTagReplacements);
//
// //last dead unit's killer
// string lastDeadUnitKillerName;
scriptManagerNode->addAttribute ("lastDeadUnitKillerName",
lastDeadUnitKillerName,
mapTagReplacements);
// int lastDeadUnitKillerId;
scriptManagerNode->addAttribute ("lastDeadUnitKillerId",
intToStr (lastDeadUnitKillerId),
mapTagReplacements);
//
// //last attacked unit
// string lastAttackedUnitName;
scriptManagerNode->addAttribute ("lastAttackedUnitName",
lastAttackedUnitName,
mapTagReplacements);
// int lastAttackedUnitId;
scriptManagerNode->addAttribute ("lastAttackedUnitId",
intToStr (lastAttackedUnitId),
mapTagReplacements);
//
// //last attacking unit
// string lastAttackingUnitName;
scriptManagerNode->addAttribute ("lastAttackingUnitName",
lastAttackingUnitName,
mapTagReplacements);
// int lastAttackingUnitId;
scriptManagerNode->addAttribute ("lastAttackingUnitId",
intToStr (lastAttackingUnitId),
mapTagReplacements);
//
// // end game state
// bool gameOver;
scriptManagerNode->addAttribute ("gameOver", intToStr (gameOver),
mapTagReplacements);
// bool gameWon;
scriptManagerNode->addAttribute ("gameWon", intToStr (gameWon),
mapTagReplacements);
// PlayerModifiers playerModifiers[GameConstants::maxPlayers];
for (unsigned int i = 0; i < (unsigned int) GameConstants::maxPlayers;
++i)
{
PlayerModifiers & player = playerModifiers[i];
player.saveGame (scriptManagerNode);
}
// int currentTimerTriggeredEventId;
scriptManagerNode->addAttribute ("currentTimerTriggeredEventId",
intToStr
(currentTimerTriggeredEventId),
mapTagReplacements);
// int currentCellTriggeredEventId;
scriptManagerNode->addAttribute ("currentCellTriggeredEventId",
intToStr (currentCellTriggeredEventId),
mapTagReplacements);
// int currentEventId;
scriptManagerNode->addAttribute ("currentEventId",
intToStr (currentEventId),
mapTagReplacements);
// std::map<int,CellTriggerEvent> CellTriggerEventList;
for (std::map < int, CellTriggerEvent >::iterator iterMap =
CellTriggerEventList.begin ();
iterMap != CellTriggerEventList.end (); ++iterMap)
{
XmlNode *
cellTriggerEventListNode =
scriptManagerNode->addChild ("CellTriggerEventList");
cellTriggerEventListNode->addAttribute ("key",
intToStr (iterMap->first),
mapTagReplacements);
iterMap->second.saveGame (cellTriggerEventListNode);
}
// std::map<int,TimerTriggerEvent> TimerTriggerEventList;
for (std::map < int, TimerTriggerEvent >::iterator iterMap =
TimerTriggerEventList.begin ();
iterMap != TimerTriggerEventList.end (); ++iterMap)
{
XmlNode *
timerTriggerEventListNode =
scriptManagerNode->addChild ("TimerTriggerEventList");
timerTriggerEventListNode->addAttribute ("key",
intToStr (iterMap->first),
mapTagReplacements);
iterMap->second.saveGame (timerTriggerEventListNode);
}
// bool inCellTriggerEvent;
scriptManagerNode->addAttribute ("inCellTriggerEvent",
intToStr (inCellTriggerEvent),
mapTagReplacements);
// std::vector<int> unRegisterCellTriggerEventList;
for (unsigned int i = 0; i < unRegisterCellTriggerEventList.size ();
++i)
{
XmlNode *
unRegisterCellTriggerEventListNode =
scriptManagerNode->addChild ("unRegisterCellTriggerEventList");
unRegisterCellTriggerEventListNode->addAttribute ("eventId",
intToStr
(unRegisterCellTriggerEventList
[i]),
mapTagReplacements);
}
scriptManagerNode->addAttribute ("registeredDayNightEvent",
intToStr (registeredDayNightEvent),
mapTagReplacements);
scriptManagerNode->addAttribute ("lastDayNightTriggerStatus",
intToStr (lastDayNightTriggerStatus),
mapTagReplacements);
for (std::map < int, UnitTriggerEventType >::iterator iterMap =
UnitTriggerEventList.begin ();
iterMap != UnitTriggerEventList.end (); ++iterMap)
{
XmlNode *
unitTriggerEventListNode =
scriptManagerNode->addChild ("UnitTriggerEventList");
unitTriggerEventListNode->addAttribute ("unitId",
intToStr (iterMap->first),
mapTagReplacements);
unitTriggerEventListNode->addAttribute ("eventType",
intToStr (iterMap->second),
mapTagReplacements);
}
scriptManagerNode->addAttribute ("lastUnitTriggerEventUnitId",
intToStr (lastUnitTriggerEventUnitId),
mapTagReplacements);
scriptManagerNode->addAttribute ("lastUnitTriggerEventType",
intToStr (lastUnitTriggerEventType),
mapTagReplacements);
luaScript.saveGame (scriptManagerNode);
}
void
ScriptManager::loadGame (const XmlNode * rootNode)
{
const XmlNode *
scriptManagerNode = rootNode->getChild ("ScriptManager");
// string code;
code = scriptManagerNode->getAttribute ("code")->getValue ();
// LuaScript luaScript;
vector < XmlNode * >savedGameDataItemNodeList =
scriptManagerNode->getChildList ("SavedGameDataItem");
if (LuaScript::getDebugModeEnabled () == true)
printf ("In loadGame savedGameDataItemNodeList.size() = %d\n",
(int) savedGameDataItemNodeList.size ());
for (unsigned int i = 0; i < savedGameDataItemNodeList.size (); ++i)
{
XmlNode *
node = savedGameDataItemNodeList[i];
string
key = node->getAttribute ("key")->getValue ();
string
value = node->getAttribute ("value")->getValue ();
luaSavedGameData[key] = value;
}
// //world
// World *world;
// GameCamera *gameCamera;
//
// //misc
// MessageQueue messageQueue;
messageQueue.clear ();
vector < XmlNode * >messageQueueNodeList =
scriptManagerNode->getChildList ("ScriptManagerMessage");
for (unsigned int i = 0; i < messageQueueNodeList.size (); ++i)
{
XmlNode *
node = messageQueueNodeList[i];
ScriptManagerMessage
msg;
msg.loadGame (node);
messageQueue.push_back (msg);
}
// GraphicMessageBox messageBox;
messageBox.setEnabled (scriptManagerNode->
getAttribute ("messageBox_enabled")->
getIntValue () != 0);
messageBox.setText (scriptManagerNode->
getAttribute ("messageBox_text")->getValue ());
messageBox.setHeader (scriptManagerNode->
getAttribute ("messageBox_header")->getValue ());
// string displayText;
displayText =
scriptManagerNode->getAttribute ("displayText")->getValue ();
//
// //last created unit
// string lastCreatedUnitName;
lastCreatedUnitName =
scriptManagerNode->getAttribute ("lastCreatedUnitName")->getValue ();
// int lastCreatedUnitId;
lastCreatedUnitId =
scriptManagerNode->getAttribute ("lastCreatedUnitId")->getIntValue ();
//
// //last dead unit
// string lastDeadUnitName;
lastDeadUnitName =
scriptManagerNode->getAttribute ("lastDeadUnitName")->getValue ();
// int lastDeadUnitId;
lastDeadUnitId =
scriptManagerNode->getAttribute ("lastDeadUnitId")->getIntValue ();
// int lastDeadUnitCauseOfDeath;
lastDeadUnitCauseOfDeath =
scriptManagerNode->getAttribute ("lastDeadUnitCauseOfDeath")->
getIntValue ();
//
// //last dead unit's killer
// string lastDeadUnitKillerName;
lastDeadUnitKillerName =
scriptManagerNode->getAttribute ("lastDeadUnitKillerName")->
getValue ();
// int lastDeadUnitKillerId;
lastDeadUnitKillerId =
scriptManagerNode->getAttribute ("lastDeadUnitKillerId")->
getIntValue ();
//
// //last attacked unit
// string lastAttackedUnitName;
lastAttackedUnitName =
scriptManagerNode->getAttribute ("lastAttackedUnitName")->getValue ();
// int lastAttackedUnitId;
lastAttackedUnitId =
scriptManagerNode->getAttribute ("lastAttackedUnitId")->
getIntValue ();
//
// //last attacking unit
// string lastAttackingUnitName;
lastAttackingUnitName =
scriptManagerNode->getAttribute ("lastAttackingUnitName")->
getValue ();
// int lastAttackingUnitId;
lastAttackingUnitId =
scriptManagerNode->getAttribute ("lastAttackingUnitId")->
getIntValue ();
//
// // end game state
// bool gameOver;
gameOver =
scriptManagerNode->getAttribute ("gameOver")->getIntValue () != 0;
// bool gameWon;
gameWon =
scriptManagerNode->getAttribute ("gameWon")->getIntValue () != 0;
// PlayerModifiers playerModifiers[GameConstants::maxPlayers];
vector < XmlNode * >playerModifiersNodeList =
scriptManagerNode->getChildList ("PlayerModifiers");
for (unsigned int i = 0; i < playerModifiersNodeList.size (); ++i)
{
XmlNode *
node = playerModifiersNodeList[i];
playerModifiers[i].loadGame (node);
}
// int currentTimerTriggeredEventId;
currentTimerTriggeredEventId =
scriptManagerNode->getAttribute ("currentTimerTriggeredEventId")->
getIntValue ();
// int currentCellTriggeredEventId;
currentCellTriggeredEventId =
scriptManagerNode->getAttribute ("currentCellTriggeredEventId")->
getIntValue ();
// int currentEventId;
currentEventId =
scriptManagerNode->getAttribute ("currentEventId")->getIntValue ();
// std::map<int,CellTriggerEvent> CellTriggerEventList;
vector < XmlNode * >cellTriggerEventListNodeList =
scriptManagerNode->getChildList ("CellTriggerEventList");
for (unsigned int i = 0; i < cellTriggerEventListNodeList.size (); ++i)
{
XmlNode *
node = cellTriggerEventListNodeList[i];
CellTriggerEvent
event;
event.loadGame (node);
CellTriggerEventList[node->getAttribute ("key")->getIntValue ()] =
event;
}
// std::map<int,TimerTriggerEvent> TimerTriggerEventList;
vector < XmlNode * >timerTriggerEventListNodeList =
scriptManagerNode->getChildList ("TimerTriggerEventList");
for (unsigned int i = 0; i < timerTriggerEventListNodeList.size (); ++i)
{
XmlNode *
node = timerTriggerEventListNodeList[i];
TimerTriggerEvent
event;
event.loadGame (node);
TimerTriggerEventList[node->getAttribute ("key")->getIntValue ()] =
event;
}
// bool inCellTriggerEvent;
inCellTriggerEvent =
scriptManagerNode->getAttribute ("inCellTriggerEvent")->
getIntValue () != 0;
// std::vector<int> unRegisterCellTriggerEventList;
vector < XmlNode * >unRegisterCellTriggerEventListNodeList =
scriptManagerNode->getChildList ("unRegisterCellTriggerEventList");
for (unsigned int i = 0;
i < unRegisterCellTriggerEventListNodeList.size (); ++i)
{
XmlNode *
node = unRegisterCellTriggerEventListNodeList[i];
unRegisterCellTriggerEventList.push_back (node->
getAttribute ("eventId")->
getIntValue ());
}
if (scriptManagerNode->hasAttribute ("registeredDayNightEvent") == true)
{
registeredDayNightEvent =
scriptManagerNode->getAttribute ("registeredDayNightEvent")->
getIntValue () != 0;
}
if (scriptManagerNode->hasAttribute ("lastDayNightTriggerStatus") ==
true)
{
lastDayNightTriggerStatus =
scriptManagerNode->getAttribute ("lastDayNightTriggerStatus")->
getIntValue ();
}
vector < XmlNode * >unitTriggerEventListNodeList =
scriptManagerNode->getChildList ("UnitTriggerEventList");
for (unsigned int i = 0; i < unitTriggerEventListNodeList.size (); ++i)
{
XmlNode *
node = unitTriggerEventListNodeList[i];
UnitTriggerEventType
eventType = utet_None;
int
unitId = node->getAttribute ("unitId")->getIntValue ();
if (node->hasAttribute ("eventType") == true)
{
eventType =
static_cast < UnitTriggerEventType >
(node->getAttribute ("eventType")->getIntValue ());
}
else if (node->hasAttribute ("evenType") == true)
{
eventType =
static_cast < UnitTriggerEventType >
(node->getAttribute ("evenType")->getIntValue ());
}
UnitTriggerEventList[unitId] = eventType;
}
if (scriptManagerNode->hasAttribute ("lastUnitTriggerEventUnitId") ==
true)
{
lastUnitTriggerEventUnitId =
scriptManagerNode->getAttribute ("lastUnitTriggerEventUnitId")->
getIntValue ();
}
if (scriptManagerNode->hasAttribute ("lastUnitTriggerEventType") ==
true)
{
lastUnitTriggerEventType =
static_cast < UnitTriggerEventType >
(scriptManagerNode->getAttribute ("lastUnitTriggerEventType")->
getIntValue ());
}
luaScript.loadGame (scriptManagerNode);
}
}
} //end namespace