📄 effectyellowpoison.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectYellowPoison.cpp// Written by : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectYellowPoison.h"#include "EffectProtectionFromPoison.h"#include "EffectYellowPoisonToCreature.h"#include "EffectLight.h"#include "Slayer.h"#include "Player.h"#include "DB.h"#include "SkillUtil.h"#include "HitRoll.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCChangeDarkLight.h"#include "Gpackets/GCAddEffect.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectYellowPoison::EffectYellowPoison(Zone* pZone, ZoneCoord_t ZoneX, ZoneCoord_t ZoneY) throw(Error){ __BEGIN_TRY m_pZone = pZone; m_X = ZoneX; m_Y = ZoneY; m_bVampire = false; m_bForce = false; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectYellowPoison::affect(Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Object* pObject) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bool EffectYellowPoison::affectCreature(Creature* pTargetCreature, bool bAffectByMove) throw(Error){ __BEGIN_TRY Assert(pTargetCreature != NULL); // 浇饭捞绢档 酒聪绊 酒快胶磐令档 酒聪搁 救 吧赴促. if (!pTargetCreature->isSlayer() && !pTargetCreature->isOusters() && !isForce()) return false; if (pTargetCreature->getCompetence() != 3) return false; // 救傈瘤措牢瘤 眉农茄促. // 2003.1.10 by bezz.Sequoia if ( !checkZoneLevelToHitTarget( pTargetCreature ) ) { return false; } Player* pPlayer = pTargetCreature->getPlayer(); Assert(pPlayer != NULL); // 惑措规狼 poison 历亲仿俊 蝶扼 吧副 荐档 救 吧副 荐档 乐促... Resist_t resist = pTargetCreature->getResist(MAGIC_DOMAIN_POISON); // poison 历亲仿俊 狼秦辑 吧府瘤 臼疽促. if ( m_bVampire ) { if (!HitRoll::isSuccessVampireCurse(m_Level, resist)) return false; } else { if (!HitRoll::isSuccessCurse(m_Level, resist)) return false; } // 吝汗矫虐瘤 臼绰促. ABCD 2001/03/21 // 吝汗矫懦锭 OldSight阑 掘绰 苞沥俊辑 巩力啊 积败辑 Sight啊 3栏肺 绊馒登绰 滚弊啊 乐菌带 // 巴 鞍促. if (!pTargetCreature->isFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE)) { Zone* pZone = pTargetCreature->getZone(); // 敲贰弊啊 难廉乐瘤 臼栏骨肺, 捞棋飘档 绝摆瘤父, 趣矫唱 秦辑 // 捞固 吧妨 乐绰 鞍篮 捞棋飘啊 乐促搁 捞固 吧妨 乐带 巴阑 瘤况霖促. if (pTargetCreature->isFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE)) { pTargetCreature->deleteEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); } Sight_t CurrentSight = pTargetCreature->getSight(); Sight_t oldSight = CurrentSight; // 捞棋飘甫 积己窍绊, 颇扼固磐甫 瘤沥秦 霖促. EffectYellowPoisonToCreature* pEffect = new EffectYellowPoisonToCreature(pTargetCreature); pEffect->setDeadline(m_Duration); pEffect->setOldSight(CurrentSight); pEffect->setLevel(m_Level); // Creature俊 Effect Flag甫 On 矫挪促. pTargetCreature->setFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); pTargetCreature->addEffect(pEffect); // DB俊 Effect甫 积己茄促. //pEffect->create(pTargetCreature->getName()); // 盔贰 捞 何盒俊 粮 饭骇阑 眉农秦辑, 救傈瘤措老 版快, // GCChangeDarkLight俊促 促农饭骇阑 0栏肺 秦辑 焊郴林菌栏唱, // 鞘夸啊 绝绰 内靛牢 巴 鞍酒辑 哗滚啡促. -- 辫己刮 GCChangeDarkLight gcChangeDarkLight; gcChangeDarkLight.setDarkLevel(15); gcChangeDarkLight.setLightLevel(1); pPlayer->sendPacket(&gcChangeDarkLight); pTargetCreature->setSight(pTargetCreature->getEffectedSight()); GCModifyInformation gcMI; // 矫具啊 函沁栏骨肺.. 矫具 update.. if ( oldSight != pTargetCreature->getSight() ) { pZone->updateScan(pTargetCreature, oldSight, pTargetCreature->getSight()); gcMI.addShortData(MODIFY_VISION, pTargetCreature->getSight()); } // send GCModifyInformation for sight change gcMI.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); gcMI.addLongData(MODIFY_DURATION, m_Duration); pPlayer->sendPacket(&gcMI); GCAddEffect gcAddEffect; gcAddEffect.setObjectID(pTargetCreature->getObjectID()); gcAddEffect.setEffectID(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE); gcAddEffect.setDuration(m_Duration); pZone->broadcastPacket(pTargetCreature->getX(), pTargetCreature->getY(), &gcAddEffect, pTargetCreature); return true; } return false; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectYellowPoison::affect(Creature* pTargetCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectYellowPoison::unaffect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectYellowPoison::unaffect() throw(Error){ __BEGIN_TRY Tile& tile = m_pZone->getTile(m_X, m_Y); tile.deleteEffect(m_ObjectID); __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectYellowPoison::unaffect(Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Object* pObject) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectYellowPoison::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "EffectYellowPoison(" << "ObjectID:" << getObjectID() << ")"; return msg.toString(); __END_CATCH}void EffectYellowPoisonLoader::load(Zone* pZone) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; Result* pResult = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery( "SELECT LeftX, TopY, RightX, BottomY, Value1, Value2, Value3 FROM ZoneEffectInfo WHERE ZoneID = %d AND EffectID = %d", pZone->getZoneID(), (int)Effect::EFFECT_CLASS_YELLOW_POISON); while (pResult->next()) { int count = 0; ZoneCoord_t left = pResult->getInt( ++count ); ZoneCoord_t top = pResult->getInt( ++count ); ZoneCoord_t right = pResult->getInt( ++count ); ZoneCoord_t bottom = pResult->getInt( ++count ); int value1 = pResult->getInt( ++count ); int value2 = pResult->getInt( ++count ); int value3 = pResult->getInt( ++count ); VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); for ( int X = left ; X <= right ; X++ ) for ( int Y = top ; Y <= bottom ; Y++ ) { if ( rect.ptInRect(X, Y) ) { Tile& tile = pZone->getTile(X,Y); if ( tile.canAddEffect() ) { EffectYellowPoison* pEffect = new EffectYellowPoison(pZone, X, Y); pEffect->setForce(true); pEffect->setDuration( value1 ); pEffect->setLevel( 100 ); // 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促. pZone->registerObject(pEffect); pZone->addEffect(pEffect); tile.addEffect(pEffect); } } } } } END_DB(pStmt) __END_CATCH}EffectYellowPoisonLoader* g_pEffectYellowPoisonLoader = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -