📄 tile.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// FileName : Tile.cpp// Written By : reiot@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "Tile.h"#include "Assert.h"#include "Player.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Sector.h"#include "Creature.h"#include "GamePlayer.h"#include "StringStream.h"#include <algorithm>#include "EffectYellowPoison.h"#include "EffectGreenPoison.h"#include "EffectDarkness.h"#include "EffectTryingPosition.h"//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////Tile::Tile (WORD wFlags , WORD wOption) throw (){ __BEGIN_TRY m_wFlags = wFlags; m_wOption = wOption; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////Tile::~Tile () throw (){ __BEGIN_TRY // 家加等 葛电 按眉甸阑 昏力茄促. while (!m_Objects.empty()) { Object* pObj = m_Objects.front(); SAFE_DELETE(pObj); m_Objects.pop_front(); } __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 农府贸甫 府胶飘俊 眠啊茄促. //// return蔼篮 弊成 捞悼牢啊(true), Portal阑 activate 矫挪扒啊(false)俊 措茄 蔼//////////////////////////////////////////////////////////////////////////////bool Tile::addCreature (Creature* pCreature, bool bCheckEffect, bool bCheckPortal) throw (GameException , DuplicatedException , Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature != NULL); // 农府贸狼 MoveMode { WALKING | FLYING | BURROWING }阑 啊瘤绊 柯促. Creature::MoveMode mode = pCreature->getMoveMode(); // 眠啊窍妨绰 农府贸客 鞍篮 MoveMode俊 秦寸窍绰 镑捞 blocking登瘤 臼酒具 茄促. Assert(! isBlocked(mode)); // 眠啊窍妨绰 农府贸客 鞍篮 MoveMode甫 啊柳 农府贸啊 鸥老郴俊 绝绢具 茄促. //Assert(! hasCreature(mode)); if (hasCreature(mode)) { StringStream msg; Creature* pWalkingCreature = getCreature( Creature::MOVE_MODE_WALKING ); Creature* pFlyingCreature = getCreature( Creature::MOVE_MODE_FLYING ); Creature* pBurrowingCreature = getCreature( Creature::MOVE_MODE_BURROWING ); Item* pItem = getItem(); msg << "TileInfo: "; if (pWalkingCreature!=NULL) { msg << "Walking(" << pWalkingCreature->toString().c_str() << ") "; } if (pFlyingCreature!=NULL) { msg << "Flying(" << pFlyingCreature->toString().c_str() << ") "; } if (pBurrowingCreature!=NULL) { msg << "Burrowing(" << pBurrowingCreature->toString().c_str() << ") "; } if (pItem!=NULL) { msg << "Item(" << pItem->toString().c_str() << ") "; } filelog("tileError.txt", "%s", msg.toString().c_str()); Assert(false); } // 农府贸甫 府胶飘俊 笼绢持绰促. addObject(pCreature); // 秦寸窍绰 农府贸 敲贰弊甫 囊促. FLAG_SET(m_wFlags , TILE_WALKING_CREATURE + mode); // 秦寸窍绰 blocking 敲贰弊甫 囊促. FLAG_SET(m_wFlags , TILE_GROUND_BLOCKED + mode); Assert(isBlocked(mode)); Assert(hasCreature(mode)); if (bCheckPortal) { // 父距 器呕捞 乐栏搁辑, 农府贸啊 PC牢 版快.. (阁胶磐客 NPC绰 器呕 捞悼阑 窍瘤 臼绰促.) if (hasPortal() && pCreature->isPC()) { Portal* pPortal = getPortal(); if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) { if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_SLAYER || pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE) { // 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父, // portal exception阑 带柳促. if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED) { if (pPortal->activate(pSlayer)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } else if (!(pSlayer->hasRideMotorcycle() && pPortal->getObjectType() == PORTAL_SLAYER)) { if (pPortal->activate(pSlayer)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } } } } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) { if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_VAMPIRE || pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE) { // 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父, // portal exception阑 带柳促. if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED) { if (pPortal->activate(pVampire)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } else { if (pPortal->activate(pVampire)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } } } } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); if (pPortal->getPortalClass() != PORTAL_CLASS_MULTI) { if (pPortal->getObjectType() == PORTAL_NORMAL || pPortal->getObjectType() == PORTAL_OUSTERS || pPortal->getObjectType() == PORTAL_GUILD || pPortal->getObjectType() == PORTAL_BATTLE) { // 飘府芭靛 器呕老 版快俊绰 飘府芭 炼扒阑 父练矫淖阑 锭父, // portal exception阑 带柳促. if (pPortal->getPortalClass() == PORTAL_CLASS_TRIGGERED) { if (pPortal->activate(pOusters)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } else { if (pPortal->activate(pOusters)) { //throw PortalException(); // PortalException力芭. by sigi. 2002.5.6 return false; } } } } } } } // effect 八荤. if (hasEffect()) { if (bCheckEffect) { EffectGreenPoison* pEGP = (EffectGreenPoison*)getEffect(Effect::EFFECT_CLASS_GREEN_POISON); //if (pCreature->isSlayer() && (pEGP = (EffectGreenPoison*)getEffect(Effect::EFFECT_CLASS_GREEN_POISON))) if (pEGP != NULL) { pEGP->affectCreature(pCreature, true); } EffectYellowPoison* pEYP = NULL; if ( (pCreature->isSlayer() || pCreature->isOusters() ) && (pEYP = (EffectYellowPoison*)getEffect(Effect::EFFECT_CLASS_YELLOW_POISON))) { pEYP->affectCreature(pCreature, true); } // 公炼扒 利侩登具 登绰 芭搁 利侩矫挪促 else if ( (pEYP = (EffectYellowPoison*)getEffect(Effect::EFFECT_CLASS_YELLOW_POISON)) && pEYP->isForce() ) { pEYP->affectCreature(pCreature, true); } EffectDarkness* pDarkness = NULL; if (pCreature->isSlayer() && (pDarkness = (EffectDarkness*)getEffect(Effect::EFFECT_CLASS_DARKNESS))) { pDarkness->affectObject(pCreature, true); } EffectTryingPosition* pTP; if ( pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) ) { pTP->affect( pCreature ); } } } else { if ( ( pCreature->isOusters() || pCreature->isSlayer() ) && pCreature->isFlag(Effect::EFFECT_CLASS_DARKNESS)) { pCreature->removeFlag(Effect::EFFECT_CLASS_DARKNESS); } } // PortalException力芭. by sigi. 2002.5.6 return true; __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 农府贸甫 府胶飘俊辑 昏力茄促.// 弥利拳且 鞘夸啊 乐促. (八祸 + 昏力)//////////////////////////////////////////////////////////////void Tile::deleteCreature (ObjectID_t creatureID) throw (NoSuchElementException , Error){ __BEGIN_TRY __BEGIN_DEBUG try { // 泅犁 农府贸肺 牢秦 绢凋啊啊 茄焙单 blocking 登绢具 茄促. Assert(isGroundBlocked() || isAirBlocked() || isUndergroundBlocked()); // 泅犁 农府贸啊 绢凋啊俊 粮犁秦具 茄促. //Assert(hasWalkingCreature() || hasFlyingCreature() || hasBurrowingCreature()); Assert(hasCreature()); // by sigi. 2002.5.8 Creature* pCreature = dynamic_cast<Creature*>(getObject(creatureID)); // 捞棋飘啊 粮犁且 版快, 农府贸俊霸辑 绝浚促. /* if (hasEffect()) { Effect* pEffect = getEffect(); pEffect->unaffect(pCreature); } */ // NoSuch力芭. by sigi. 2002.5.2 if (pCreature==NULL) { return; } if ( hasEffect() ) { EffectTryingPosition* pTP; if ( pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) ) { pTP->unaffect( pCreature ); } } // 畴靛甫 昏力茄促. deleteObject(creatureID); // 秦寸窍绰 农府贸 敲贰弊甫 馋促. FLAG_CLEAR(m_wFlags , TILE_WALKING_CREATURE + pCreature->getMoveMode()); // 秦寸窍绰 blocking 敲贰弊甫 馋促. FLAG_CLEAR(m_wFlags , TILE_GROUND_BLOCKED + pCreature->getMoveMode()); } catch (Throwable & t) { //cerr << "Delete Creature 瘤氛.." << endl; //cerr << t.toString() << endl; filelog("tileError.txt", "Tile::deleteCreature - %s", t.toString().c_str()); } __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 困摹(青困)狼 农府贸甫 府胶飘俊辑 昏力茄促.//////////////////////////////////////////////////////////////void Tile::deleteCreature (Creature::MoveMode mode) throw (NoSuchElementException , Error){ __BEGIN_TRY // 泅犁 农府贸肺 牢秦 blocking 登绢具 茄促. Assert(isBlocked(mode)); // 泅犁 农府贸啊 粮犁秦具 茄促. Assert(hasCreature(mode)); if ( hasEffect() ) { EffectTryingPosition* pTP; Creature* pCreature = getCreature( mode ); if ( pCreature != NULL && pCreature->isPC() && (pTP = dynamic_cast<EffectTryingPosition*>(getEffect(Effect::EFFECT_CLASS_TRYING_POSITION))) ) { pTP->unaffect( pCreature ); } } // 按眉甫 昏力茄促. deleteObject(OBJECT_PRIORITY_WALKING_CREATURE + mode); // 秦寸窍绰 农府贸 敲贰弊甫 馋促. FLAG_CLEAR(m_wFlags , TILE_WALKING_CREATURE + mode); // 秦寸窍绰 blocking 敲贰弊甫 馋促. FLAG_CLEAR(m_wFlags , TILE_GROUND_BLOCKED + mode); __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 农府贸甫 府畔茄促.//////////////////////////////////////////////////////////////Creature* Tile::getCreature (ObjectID_t creatureID) throw (NoSuchElementException , Error){ __BEGIN_TRY Assert(hasWalkingCreature() || hasFlyingCreature() || hasBurrowingCreature()); return (Creature*)(getObject(creatureID)); __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 困摹(青困)狼 农府贸甫 府畔茄促.//////////////////////////////////////////////////////////////Creature* Tile::getCreature (Creature::MoveMode mode) throw (NoSuchElementException , Error){ __BEGIN_TRY Assert(hasCreature(mode)); return (Creature*)getObject(ObjectPriority(OBJECT_PRIORITY_WALKING_CREATURE + mode)); __END_CATCH}//////////////////////////////////////////////////////////////// 酒捞袍阑 鸥老俊 眠啊茄促. 捞固 酒捞袍捞 鸥老俊 乐促搁 Dup 抗寇甫 带柳促.// (酒捞袍篮 鸥老寸 窍唱促.)//////////////////////////////////////////////////////////////void Tile::addItem (Item* pItem) throw (DuplicatedException , Error){ __BEGIN_TRY Assert(pItem != NULL); Assert(! hasItem()); Assert(! hasBuilding()); Assert(! hasObstacle()); Assert(! hasPortal());/* EffectDarkness* pDarkness; if ((pDarkness = getEffect(Effect::EFFECT_CLASS_DARKNESS))) { pDarkness->affectObject(pItem, false); }*/ addObject(pItem); FLAG_SET(m_wFlags , TILE_ITEM); __END_CATCH}//////////////////////////////////////////////////////////////// 酒捞袍阑 鸥老俊辑 昏力茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////void Tile::deleteItem () throw (NoSuchElementException , Error){ __BEGIN_TRY __BEGIN_DEBUG //Assert(hasItem()); if (!hasItem()) { //cerr << "Tile::hasItem() : 酒捞袍捞 绝嚼聪促." << endl; return; } deleteObject(OBJECT_PRIORITY_ITEM); FLAG_CLEAR(m_wFlags , TILE_ITEM); __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////// 鸥老狼 酒捞袍阑 府畔茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////Item* Tile::getItem () throw (NoSuchElementException , Error){ __BEGIN_TRY //Assert(hasItem()); if (!hasItem()) return NULL; return (Item*)getObject(OBJECT_PRIORITY_ITEM); __END_CATCH}//////////////////////////////////////////////////////////////// 厘局拱阑 鸥老俊 眠啊茄促.//////////////////////////////////////////////////////////////void Tile::addObstacle (Obstacle* pObstacle) throw (DuplicatedException , Error){ __BEGIN_TRY Assert(pObstacle != NULL); // must be empty tile... Assert(! hasWalkingCreature()); Assert(! hasFlyingCreature()); Assert(! hasBurrowingCreature()); Assert(! hasEffect()); Assert(! hasObstacle()); Assert(! hasItem()); Assert(! hasBuilding()); Assert(! hasPortal()); Assert(! isTerrain()); FLAG_SET(m_wFlags , TILE_OBSTACLE); addObject(pObstacle); __END_CATCH}//////////////////////////////////////////////////////////////// 厘局拱阑 鸥老俊辑 昏力茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////void Tile::deleteObstacle () throw (NoSuchElementException , Error){ __BEGIN_TRY Assert(hasObstacle()); deleteObject(OBJECT_PRIORITY_OBSTACLE); FLAG_CLEAR(m_wFlags , TILE_OBSTACLE); __END_CATCH}//////////////////////////////////////////////////////////////// 鸥老狼 厘局拱阑 府畔茄促. 绢瞒乔 窍唱观俊 绝栏骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////Obstacle* Tile::getObstacle () throw (NoSuchElementException , Error){ __BEGIN_TRY Assert(hasObstacle()); return (Obstacle*)getObject(OBJECT_PRIORITY_OBSTACLE); __END_CATCH}bool Tile::canAddEffect() throw(Error){ return !(hasObstacle() || hasBuilding() || hasPortal());}//////////////////////////////////////////////////////////////// 付过 瓤苞甫 鸥老俊 眠啊茄促.// 泅犁 鸥老俊 农府贸唱 酒捞袍捞 粮犁茄促搁, 付过狼 瓤苞甫 弊// 农府贸唱 酒捞袍俊 何咯茄促.// 吝汗登绰 付过俊 措茄 沥氓捞 鞘夸窍促.... (鞍篮 付过阑 茄磊府俊..)//////////////////////////////////////////////////////////////void Tile::addEffect (Effect* pEffect) throw (DuplicatedException , Error){ __BEGIN_TRY Assert(pEffect != NULL); Assert(! hasObstacle()); Assert(! hasBuilding()); Assert(! hasPortal());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -