📄 simplequest.cpp
字号:
//--------------------------------------------------------------------------------// SimpleQuest.cpp//--------------------------------------------------------------------------------#include "SimpleQuest.h"#include "Creature.h"#include "QuestPriceReward.h"#include "QuestPricePenalty.h"#include "Assert.h"#include "DB.h"//--------------------------------------------------------------------------------//--------------------------------------------------------------------------------SimpleQuest::SimpleQuest() throw (Error): m_pOwner(NULL), m_AvailableSecond(0), m_pReward(NULL), m_pPenalty(NULL){ //m_Deadline.tv_sec = m_Deadline.tv_usec = 0; setDeadline(99999999);}SimpleQuest::~SimpleQuest() throw (Error){ __BEGIN_TRY if (m_pReward!=NULL) SAFE_DELETE(m_pReward); if (m_pPenalty!=NULL) SAFE_DELETE(m_pPenalty); __END_CATCH}//--------------------------------------------------------------------------------// setDeadline//--------------------------------------------------------------------------------void SimpleQuest::setDeadline (Turn_t delay) throw (){ __BEGIN_TRY // 泅犁 矫埃阑 螟沥茄促. getCurrentTime(m_Deadline); // 单靛扼牢阑 搬沥茄促. // 捞锭, delay 绰 0.1 檬啊 1 捞促. m_Deadline.tv_sec += delay / 10; m_Deadline.tv_usec += (delay % 10)* 100000; __END_CATCH}// 巢篮 duration(1/10檬 窜困)Duration_t SimpleQuest::getRemainDuration() const throw(){ __BEGIN_TRY Timeval currentTime; getCurrentTime(currentTime); return (m_Deadline.tv_sec - currentTime.tv_sec)* 10 + (m_Deadline.tv_usec - currentTime.tv_usec) / 100000; __END_CATCH}//--------------------------------------------------------------------------------// destroy//--------------------------------------------------------------------------------voidSimpleQuest::destroy() throw(Error){ __BEGIN_TRY Assert(m_pOwner!=NULL); Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); cout << "DELETE FROM SimpleQuest WHERE OwnerID = '" << m_pOwner->getName().c_str() << "'" << endl; pStmt->executeQuery( "DELETE FROM SimpleQuest WHERE OwnerID = '%s'", m_pOwner->getName().c_str()); /* if (pStmt->getAffectedRowCount()==0) { SAFE_DELETE(pStmt); return false; } */ SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}//--------------------------------------------------------------------------------// checkFail//--------------------------------------------------------------------------------bool SimpleQuest::checkFail() throw (Error){ __BEGIN_TRY Timeval currentTime; getCurrentTime(currentTime); return currentTime >= m_Deadline; __END_CATCH}//--------------------------------------------------------------------------------// heartbeat//--------------------------------------------------------------------------------void SimpleQuest::heartbeat() throw (Error){ __BEGIN_TRY if (m_State==STATE_ACTIVE) { processActive(); } __END_CATCH}//--------------------------------------------------------------------------------// process Active//--------------------------------------------------------------------------------void SimpleQuest::processActive() throw (Error){ __BEGIN_TRY if (checkFail()) { processFail(); } __END_CATCH}//--------------------------------------------------------------------------------// process Fail//--------------------------------------------------------------------------------voidSimpleQuest::processFail() throw (Error){ __BEGIN_TRY givePenalty(); destroy(); setState( STATE_END ); __END_CATCH}//--------------------------------------------------------------------------------// take//--------------------------------------------------------------------------------void SimpleQuest::take(Creature* pCreature, bool bNewQuest) throw (Error){ __BEGIN_TRY setOwner( pCreature ); // 贸澜 罐篮 涅胶飘牢 版快父.. 矫埃 汲沥苞 DB积己阑 茄促 if (bNewQuest) { getCurrentTime(m_Deadline); m_Deadline.tv_sec += m_AvailableSecond; create(); } setState( STATE_ACTIVE ); __END_CATCH}//--------------------------------------------------------------------------------// give Reward//--------------------------------------------------------------------------------void SimpleQuest::giveReward() throw (Error){ __BEGIN_TRY if (m_pReward!=NULL && m_pOwner!=NULL) { m_pReward->affect( m_pOwner ); } __END_CATCH}//--------------------------------------------------------------------------------// give Penalty//--------------------------------------------------------------------------------void SimpleQuest::givePenalty() throw (Error){ __BEGIN_TRY if (m_pPenalty!=NULL && m_pOwner!=NULL) { m_pPenalty->affect( m_pOwner ); } __END_CATCH}//--------------------------------------------------------------------------------// add Reward//--------------------------------------------------------------------------------void SimpleQuest::addReward(QuestPrice* pQuestPrice) throw (Error){ __BEGIN_TRY Assert(pQuestPrice!=NULL); m_pReward = pQuestPrice; __END_CATCH}//--------------------------------------------------------------------------------// add Penalty//--------------------------------------------------------------------------------void SimpleQuest::addPenalty(QuestPrice* pQuestPrice) throw (Error){ __BEGIN_TRY Assert(pQuestPrice!=NULL); m_pPenalty = pQuestPrice; __END_CATCH}//void SimpleQuest::addReward(const string& text) throw (Error){ __BEGIN_TRY QuestPrice* pQuestPrice = new QuestPriceReward; pQuestPrice->setPrice( text ); addReward( pQuestPrice ); __END_CATCH}void SimpleQuest::addPenalty(const string& text) throw (Error){ __BEGIN_TRY QuestPrice* pQuestPrice = new QuestPricePenalty; pQuestPrice->setPrice( text ); addPenalty( pQuestPrice ); __END_CATCH}stringSimpleQuest::getRewardToString() const throw (Error){ __BEGIN_TRY if (m_pReward==NULL) return ""; return m_pReward->toString(); __END_CATCH}string SimpleQuest::getPenaltyToString() const throw (Error){ __BEGIN_TRY if (m_pReward==NULL) return ""; return m_pPenalty->toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -