triggermanager.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 234 行

CPP
234
字号
////////////////////////////////////////////////////////////////////////////////// Filename    : TriggerManager.cpp// Written By  : // Description : ////////////////////////////////////////////////////////////////////////////////#include "TriggerManager.h"#include "Assert.h"#include "DB.h"#include <stdio.h>class isSameTriggerID {public :	isSameTriggerID(TriggerID_t triggerID) throw () : m_TriggerID(triggerID) {}	bool operator () (Trigger * pTrigger)	{		return pTrigger->getTriggerID() == m_TriggerID;	}private :	TriggerID_t m_TriggerID;};////////////////////////////////////////////////////////////////////////////////// constructor////////////////////////////////////////////////////////////////////////////////TriggerManager::TriggerManager () 	throw (Error){	__BEGIN_TRY	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// destructor////////////////////////////////////////////////////////////////////////////////TriggerManager::~TriggerManager () 	throw (Error){	__BEGIN_TRY	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// NPC 捞抚阑 颇扼固磐肺 林搁, NPC客 包访等 飘府芭甸阑 DB俊辑 肺爹茄促.////////////////////////////////////////////////////////////////////////////////void TriggerManager::load (const string & name)	throw (Error){	__BEGIN_TRY	Statement* pStmt   = NULL;	Result*    pResult = NULL;	BEGIN_DB	{		StringStream sql;		pStmt   = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery(		"SELECT TriggerID, TriggerType, Conditions, Actions FROM Triggers WHERE NPC = '%s'", name.c_str());		while (pResult->next())		{			Trigger* pTrigger = new Trigger();			pTrigger->setTriggerID(pResult->getInt(1));			//cout << "Trigger[" << pTrigger->getTriggerID() << "] loading > ";			//cout << "CONDITIONS:\n" << trim(pResult->getString(3)) << endl;			//cout << "ACTIONS:\n" << trim(pResult->getString(4)) << endl;			pTrigger->setTriggerType(trim(pResult->getString(2)));			pTrigger->setConditions(trim(pResult->getString(3)));			pTrigger->setActions(trim(pResult->getString(4)));			addTrigger(pTrigger);			//cout << "Trigger[" << pTrigger->getTriggerID() << "] loaded" <<  endl;		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// 粮 谅钎甫 颇扼固磐肺 林搁, 弊 谅钎客 包访等 飘府芭甸阑 DB俊辑 肺爹茄促.////////////////////////////////////////////////////////////////////////////////void TriggerManager::load (ZoneID_t zoneid, int left, int top, int right, int bottom)	throw (Error){	__BEGIN_TRY	Statement* pStmt   = NULL;	Result*    pResult = NULL;	BEGIN_DB	{		pStmt   = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery(			"SELECT TriggerID, TriggerType, Conditions, Actions, CounterActions FROM ZoneTriggers WHERE ZoneID=%d AND X1=%d AND Y1=%d AND X2=%d AND Y2=%d", 			(int)zoneid, left, top, right, bottom);		while (pResult->next())		{			uint     i        = 0;			Trigger* pTrigger = new Trigger();			pTrigger->setTriggerID(pResult->getInt(++i));			//printf("ZoneTrigger[%d] loading > \n", (int)pTrigger->getTriggerID());			pTrigger->setTriggerType(trim(pResult->getString(++i)));			pTrigger->setConditions(trim(pResult->getString(++i)));			pTrigger->setActions(trim(pResult->getString(++i)));			pTrigger->setCounterActions(trim(pResult->getString(++i)));			//printf("ZoneTrigger[%d] loaded > \n", (int)pTrigger->getTriggerID());			addTrigger(pTrigger);		}		delete pStmt;	}	END_DB(pStmt)	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// refresh condition set////////////////////////////////////////////////////////////////////////////////void TriggerManager::refresh ()	throw (Error){	__BEGIN_TRY	// 家加等 葛电 飘府芭甸狼 ConditionSet 阑 m_ConditionSet 俊 OR 楷魂茄促.	for (list<Trigger*>::const_iterator itr = m_Triggers.begin() ; itr != m_Triggers.end() ; itr ++)	{		m_ConditionSet |= (*itr)->getConditionSet();	}	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// add trigger////////////////////////////////////////////////////////////////////////////////void TriggerManager::addTrigger (Trigger * pTrigger) 	throw (DuplicatedException , Error){	__BEGIN_TRY	Assert(pTrigger != NULL);	list<Trigger*>::iterator itr = find(m_Triggers.begin() , m_Triggers.end(), pTrigger);	if (itr != m_Triggers.end())		throw DuplicatedException("duplicated trigger");	m_Triggers.push_back(pTrigger);	m_ConditionSet |= pTrigger->getConditionSet();	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// delete trigger////////////////////////////////////////////////////////////////////////////////void TriggerManager::deleteTrigger (TriggerID_t triggerID) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	list<Trigger*>::iterator itr = find_if(m_Triggers.begin() , m_Triggers.end() , isSameTriggerID(triggerID));	if (itr != m_Triggers.end())		throw NoSuchElementException();	// delete trigger object	delete *itr;	// delete node	m_Triggers.erase(itr);	// condition set 阑 货肺 备己茄促.	refresh();	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// get trigger////////////////////////////////////////////////////////////////////////////////Trigger * TriggerManager::getTrigger (TriggerID_t triggerID) 	throw (NoSuchElementException , Error){	__BEGIN_TRY	list<Trigger*>::iterator itr = find_if(m_Triggers.begin() , m_Triggers.end() , isSameTriggerID(triggerID));	if (itr != m_Triggers.end())		throw NoSuchElementException();	return *itr;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string TriggerManager::toString () const	throw (){	__BEGIN_TRY	StringStream msg;	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?