📄 zoneutil.cpp
字号:
if ( pt.x != cx || pt.y != cy ) { rangeDiff = max( abs( (int)(pt.x) - (int)(cx) ) , abs( (int)(pt.y) - (int)(cy) ) ); } ZoneCoord_t oldX = pCreature->getX(); ZoneCoord_t oldY = pCreature->getY(); GCDeleteObject gcDO; gcDO.setObjectID(pCreature->getObjectID()); pZone->broadcastPacket(oldX, oldY, &gcDO, pCreature); // 捞棋飘甫 昏力秦 霖促. EffectManager* pEffectManager = pCreature->getEffectManager(); Assert(pEffectManager != NULL); if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF)) { pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF); // DeleteObject packet阑 焊辰饶 set. // 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁 // 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促. if (bForce) { // by sigi. 2002.7.2. RemoveEffect 朝妨霖促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pCreature->getObjectID()); gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF); if (pCreature->isPC()) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcRemoveEffect); } pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF); } if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); VAMPIRE_RECORD prev; pVampire->getVampireRecord(prev); pVampire->initAllStat(); pVampire->sendModifyInfo(prev); } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); pMonster->initAllStat(); } } if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF)) { pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF); // DeleteObject packet阑 焊辰饶 set. // 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁 // 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促. if (bForce) { // by sigi. 2002.7.2. RemoveEffect 朝妨霖促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pCreature->getObjectID()); gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF); if (pCreature->isPC()) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcRemoveEffect); } pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF); } if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); VAMPIRE_RECORD prev; pVampire->getVampireRecord(prev); pVampire->initAllStat(); pVampire->sendModifyInfo(prev); } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); pMonster->initAllStat(); } } else if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT)) { pCreature->removeFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT); // DeleteObject packet阑 焊辰饶 set. // 捞棋飘狼 duraration捞 父扁啊 登瘤 臼疽绰单, 捞棋飘甫 昏力窍妨搁 // 碍力肺 deleteEffect 窃荐甫 阂矾拎具 茄促. if (bForce) { // by sigi. 2002.7.2. RemoveEffect 朝妨霖促. GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID(pCreature->getObjectID()); gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_TRANSFORM_TO_BAT); if (pCreature->isPC()) { Player* pPlayer = pCreature->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcRemoveEffect); } pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_TRANSFORM_TO_BAT); } if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); VAMPIRE_RECORD prev; pVampire->getVampireRecord(prev); pVampire->initAllStat(); pVampire->sendModifyInfo(prev); } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); pMonster->initAllStat(); } } // 扁粮 鸥老俊辑 农府媚甫 力芭窍绊, 公宏 葛靛甫 官层霖 促澜俊 // 货 鸥老俊 眠啊茄促. Tile& oldTile = pZone->getTile(oldX, oldY); Tile& newTile = pZone->getTile(pt.x, pt.y); try { oldTile.deleteCreature(pCreature->getObjectID()); } catch (Error& e) { filelog("assertTile.txt", "addUntransformCreature : %s", e.toString().c_str()); throw; } pCreature->setMoveMode(Creature::MOVE_MODE_WALKING); newTile.addCreature(pCreature); Assert(pCreature == newTile.getCreature(pCreature->getMoveMode())); // 农府媚狼 谅钎甫 瘤沥秦 霖促. pCreature->setXYDir(pt.x, pt.y, pCreature->getDir()); // 农府媚 努贰胶俊 蝶扼, 粮俊促 宏肺靛某胶泼茄促. Creature::CreatureClass CClass = pCreature->getCreatureClass(); if (CClass == Creature::CREATURE_CLASS_VAMPIRE) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); GCAddVampireFromTransformation gcAVFT(pVampire->getVampireInfo3()); gcAVFT.setEffectInfo(pVampire->getEffectInfo()); pZone->broadcastPacket( pt.x, pt.y, &gcAVFT, pVampire, true, rangeDiff ); // send to myself GCUntransformOK gcUntransformOK(pt.x, pt.y, pCreature->getDir()); pCreature->getPlayer()->sendPacket(&gcUntransformOK); } else if (CClass == Creature::CREATURE_CLASS_MONSTER) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); GCAddMonsterFromTransformation gcAMFT; gcAMFT.setObjectID(pMonster->getObjectID()); gcAMFT.setMonsterType(pMonster->getMonsterType()); gcAMFT.setMonsterName(pMonster->getMonsterName()); gcAMFT.setX(pt.x); gcAMFT.setY(pt.y); gcAMFT.setDir(pMonster->getDir()); gcAMFT.setEffectInfo(pMonster->getEffectInfo()); gcAMFT.setCurrentHP(pMonster->getHP()); gcAMFT.setMaxHP(pMonster->getHP(ATTR_MAX)); pZone->broadcastPacket(pt.x, pt.y, &gcAMFT, NULL, true, rangeDiff); } else { throw Error("invalid creature type"); } } else { if (pCreature->isPC()) { GCUntransformFail gcUntransformFail; pCreature->getPlayer()->sendPacket(&gcUntransformFail); } else { //throw Error("Cannot unburrow monster."); } } // 函脚阑 乾 仇捞 轨颇捞绢, 溜 敲饭捞绢扼搁 傍拜 加档甫 焊郴霖促. // 捞绰 努扼捞攫飘俊辑 冠零肺 函脚阑 沁阑 锭 捞傈狼 傍拜 加档甫 // 历厘且 荐 绝绰 滚弊 锭巩捞促. -- 辫己刮 if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); GCModifyInformation gcMI; gcMI.addShortData(MODIFY_ATTACK_SPEED, pVampire->getAttackSpeed()); pVampire->getPlayer()->sendPacket(&gcMI); } __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 救 焊捞绰 农府媚甫 眠啊茄促.//// Zone* pZone : 粮俊 措茄 器牢磐// Creature* pCreature : 救 焊捞绰 农府媚// ZoneCoord_t cx : 农府媚狼 盔贰 谅钎 x// ZoneCoord_t cy : 农府媚狼 盔贰 谅钎 y//////////////////////////////////////////////////////////////////////////////void addInvisibleCreature(Zone* pZone, Creature* pCreature, ZoneCoord_t cx, ZoneCoord_t cy) throw(){ __BEGIN_TRY Assert(pZone != NULL); Assert(pCreature != NULL); // 轨颇捞绢唱 阁胶磐父捞 捧疙拳啊 啊瓷窍促. Assert(pCreature->isVampire() || pCreature->isMonster()); ObjectID_t creatureID = pCreature->getObjectID(); GCDeleteObject gcDO; gcDO.setObjectID(creatureID); pCreature->setFlag(Effect::EFFECT_CLASS_INVISIBILITY); //Tile& rTile = pZone->getTile(cx, cy); GCAddEffect gcAddEffect; gcAddEffect.setObjectID(creatureID); gcAddEffect.setEffectID(Effect::EFFECT_CLASS_INVISIBILITY); gcAddEffect.setDuration(0); //-------------------------------------------------------------------------------- // // 矫具 康开狼 惑窍谅快 葛滴 + 1 究 刘啊矫挪促. // 捞蜡绰 规氢俊 蝶弗 ON_SIGHT 康开捞 刘啊登扁 锭巩捞促. // //-------------------------------------------------------------------------------- for (ZoneCoord_t ix = max(0, cx - maxViewportWidth - 1), endx = min(pZone->getWidth() - 1, cx + maxViewportWidth + 1) ; ix <= endx ; ix ++) { for (ZoneCoord_t iy = max(0, cy - maxViewportUpperHeight - 1), endy = min(pZone->getHeight() - 1, cy + maxViewportLowerHeight + 1) ; iy <= endy ; iy ++) { Tile& curTile = pZone->getTile(ix, iy); const slist<Object*> & objectList = curTile.getObjectList(); slist<Object*>::const_iterator itr = objectList.begin(); for (; itr != objectList.end() && (*itr)->getObjectPriority() <= OBJECT_PRIORITY_BURROWING_CREATURE; itr ++) { Assert(*itr != NULL); Creature* pViewer= dynamic_cast<Creature*>(*itr); if (pViewer != pCreature && pViewer->isPC() && (pViewer->getVisionState(cx, cy) >= IN_SIGHT)) { // Viewer 狼 ObservingEye 捞棋飘甫 啊廉柯促. EffectObservingEye* pEffectObservingEye = NULL; if ( pViewer->isFlag( Effect::EFFECT_CLASS_OBSERVING_EYE ) ) { pEffectObservingEye = dynamic_cast<EffectObservingEye*>(pViewer->findEffect( Effect::EFFECT_CLASS_OBSERVING_EYE ) ); //Assert( pEffectObservingEye != NULL ); } // Viewer 狼 Gnome's Whisper 捞棋飘甫 啊廉柯促. EffectGnomesWhisper* pEffectGnomesWhisper = NULL; if ( pViewer->isFlag( Effect::EFFECT_CLASS_GNOMES_WHISPER ) ) { pEffectGnomesWhisper = dynamic_cast<EffectGnomesWhisper*>(pViewer->findEffect( Effect::EFFECT_CLASS_GNOMES_WHISPER ) ); //Assert( pEffectGnomesWhisper != NULL ); } //cout << "checking" << endl; if ( !pCreature->isFlag(Effect::EFFECT_CLASS_HIDE) || pViewer->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN) || ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeHide() ) ) // || ( pEffectRevealer != NULL && pEffectRevealer->canSeeHide( pCreature ) ) )) { if ( pViewer->isVampire() || pViewer->isFlag( Effect::EFFECT_CLASS_DETECT_INVISIBILITY ) || ( pEffectObservingEye != NULL && pEffectObservingEye->canSeeInvisibility( pCreature ) ) || ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeInvisibility() ) ) { pViewer->getPlayer()->sendPacket(&gcAddEffect); //cout << "send add invisible effect" << endl; } else { pViewer->getPlayer()->sendPacket(&gcDO); //cout << "send delete object" << endl; } // invisbility客 包访秦辑父, 杭 荐 绝绰磊../* if (!pViewer->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) && pViewer->isSlayer()) { pViewer->getPlayer()->sendPacket(&gcDO); } else { pViewer->getPlayer()->sendPacket(&gcAddEffect); }*/ } else { // 盔贰 杭 荐 绝菌栏骨肺, 鞠巴档 且 老捞 绝促. } }//if }//for }//for }//for __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 救 焊捞带 农府媚啊 焊老 版快, 捞 农府媚甫 眠啊茄促.//// Zone* pZone : 粮俊 措茄 器牢磐// Creature* pCreature : 救 焊捞带 农府媚// bool bForce : 碍力肺 visible 惑怕啊 登菌唱?//////////////////////////////////////////////////////////////////////////////void addVisibleCreature(Zone* pZone, Creature* pCreature, bool bForced) throw() { __BEGIN_TRY Assert(pZone != NULL); Assert(pCreature != NULL); // 轨颇捞绢唱 阁胶磐父捞 捧疙拳啊 啊瓷窍促. Assert(pCreature->isVampire() || pCreature->isMonster()); // 敲贰弊啊 难廉乐绢具 茄促. Assert(pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)); ZoneCoord_t cx = pCreature->getX(); ZoneCoord_t cy = pCreature->getY(); //Tile& rTile = pZone->getTile(cx, cy); Packet* pGCAddXXX = NULL; GCAddMonster gcAddMonster; GCAddVampire gcAddVampire; GCAddBurrowingCreature gcABC; Creature::CreatureClass CClass = pCreature->getCreatureClass(); if (CClass == Creature::CREATURE_CLASS_MONSTER) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)) // 荤角 阂啊瓷 { gcABC.setObjectID(pMonster->getObjectID()); gcABC.setName(pMonster->getName()); gcABC.setX(cx); gcABC.setY(cy); pGCAddXXX = &gcABC; } else { // 各狼 EffectManager俊 甸绢啊乐绰霸 酒聪扁 锭巩俊... // 烙矫肺 积己秦辑 焊郴霖促. // 各篮 公茄矫埃 Invisible - -; by sigi EffectInfo* pEffectInfo = new EffectInfo; pEffectInfo->addListElement( Effect::EFFECT_CLASS_INVISIBILITY, 0xFFFF); // make packet gcAddMonster.setObjectID(pMonster->getObjectID()); gcAddMonster.setMonsterType(pMonster->getMonsterType()); gcAddMonster.setMonsterName(pMonster->getName()); // by sigi - -; gcAddMonster.setX(cx); gcAddMonster.setY(cy); gcAddMonster.setDir(pMonster->getDir()); gcAddMonster.setEffectInfo( pEffectInfo ); gcAddMonster.setCurrentHP(pMonster->getHP()); gcAddMonster.setMaxHP(pMonster->getHP(ATTR_MAX)); pGCAddXXX = &gcAddMonster; } } else if (CClass == Creature::CREATURE_CLASS_VAMPIRE) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)) // 荤角 阂啊瓷 { gcABC.setObjectID(pVampire->getObjectID()); gcABC.setName(pVampire->getName()); gcABC.setX(cx); gcABC.setY(cy); pGCAddXXX = &gcABC; } else {// gcAddVampire.setVampireInfo(pVampire->getVampireInfo3());// gcAddVampire.setEffectInfo(pVampire->getEffectInfo()); makeGCAddVampire( &gcAddVampire, pVampire ); pGCAddXXX = &gcAddVampire; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -