📄 effectpkzoneregen.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectPKZoneRegen.cpp// Written by : elca// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectPKZoneRegen.h"#include "Zone.h"#include "Creature.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Monster.h"#include "Player.h"#include "StringStream.h"#include "ZoneUtil.h"#include "skill/EffectBloodDrain.h"#include "Gpackets/GCStatusCurrentHP.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCRemoveEffect.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectPKZoneRegen::EffectPKZoneRegen(Zone* pZone, ZoneCoord_t left, ZoneCoord_t top, ZoneCoord_t right, ZoneCoord_t bottom) throw(Error) : m_Rect( left, top, right, bottom ){ __BEGIN_TRY m_pZone = pZone; Assert( left < right ); Assert( top < bottom ); m_bSlayer = m_bVampire = m_bOusters = false; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectPKZoneRegen::affect() throw(Error){ __BEGIN_TRY Assert( m_pZone != NULL ); Assert( isValidZoneCoord( m_pZone, m_Rect.left, m_Rect.top ) ); Assert( isValidZoneCoord( m_pZone, m_Rect.right, m_Rect.bottom ) ); for ( ZoneCoord_t X = m_Rect.left ; X <= m_Rect.right ; X++ ) { for ( ZoneCoord_t Y = m_Rect.top ; Y <= m_Rect.bottom ; Y++ ) { Tile& tile = m_pZone->getTile( X, Y ); const slist<Object*>& oList = tile.getObjectList(); for ( slist<Object*>::const_iterator itr = oList.begin() ; itr != oList.end() ; itr++ ) { Object* pTargetObject = (*itr); if ( pTargetObject != NULL && pTargetObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE ) { Creature* pCreature = dynamic_cast<Creature*>( pTargetObject ); Assert( pCreature != NULL ); affect( pCreature ); } } } } setNextTime( m_Turn ); __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectPKZoneRegen::affect(Creature* pCreature) throw(Error){ __BEGIN_TRY if ( !pCreature->isPC() ) return; if ( pCreature->isDead() ) return; if ( pCreature->isFlag( Effect::EFFECT_CLASS_COMA ) ) return; if ( m_bSlayer && pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>( pCreature ); Assert( pSlayer != NULL ); if ( pSlayer->getHP( ATTR_CURRENT ) < pSlayer->getHP( ATTR_MAX ) || pSlayer->getMP( ATTR_CURRENT ) < pSlayer->getMP( ATTR_MAX ) ) { pSlayer->setMP( min( (int)pSlayer->getMP( ATTR_MAX ), (int)pSlayer->getMP( ATTR_CURRENT ) + m_HP / 2 ) ); pSlayer->setHP( min( (int)pSlayer->getHP( ATTR_MAX ), (int)pSlayer->getHP( ATTR_CURRENT ) + m_HP / 2 ) ); GCModifyInformation gcMI; gcMI.addShortData( MODIFY_CURRENT_MP, pSlayer->getMP( ATTR_CURRENT ) ); gcMI.addShortData( MODIFY_CURRENT_HP, pSlayer->getHP( ATTR_CURRENT ) ); pSlayer->getPlayer()->sendPacket(&gcMI); GCStatusCurrentHP gcHP; gcHP.setObjectID( pSlayer->getObjectID() ); gcHP.setCurrentHP( pSlayer->getHP( ATTR_CURRENT ) ); m_pZone->broadcastPacket( pSlayer->getX(), pSlayer->getY(), &gcHP, pSlayer ); } // HP绰 促 摹丰等 惑怕绊 软趋俊 吧妨乐栏搁 if ( pSlayer->getHP( ATTR_CURRENT ) >= pSlayer->getHP( ATTR_MAX ) && pSlayer->isFlag( Effect::EFFECT_CLASS_BLOOD_DRAIN ) ) { EffectBloodDrain* pEffect = dynamic_cast<EffectBloodDrain*>(pSlayer->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN)); if ( pEffect != NULL ) { pEffect->destroy( pSlayer->getName() ); pSlayer->deleteEffect( Effect::EFFECT_CLASS_BLOOD_DRAIN );// GCModifyInformation gcMI; SLAYER_RECORD prev; pSlayer->getSlayerRecord( prev ); pSlayer->initAllStat(); pSlayer->sendRealWearingInfo(); pSlayer->sendModifyInfo( prev ); GCRemoveEffect gcRemoveEffect; gcRemoveEffect.addEffectList( (EffectID_t)Effect::EFFECT_CLASS_BLOOD_DRAIN ); gcRemoveEffect.setObjectID( pSlayer->getObjectID() ); pSlayer->getZone()->broadcastPacket( pSlayer->getX(), pSlayer->getY(), &gcRemoveEffect ); } } } else if ( m_bVampire && pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>( pCreature ); Assert( pVampire != NULL ); if ( pVampire->getHP( ATTR_MAX ) > pVampire->getHP( ATTR_CURRENT ) ) { GCStatusCurrentHP gcHP; gcHP.setObjectID( pVampire->getObjectID() ); pVampire->setHP( min( (int)pVampire->getHP( ATTR_MAX ), (int)pVampire->getHP( ATTR_CURRENT ) + m_HP ) ); // 逞茄抛 谎副波 gcHP.setCurrentHP( pVampire->getHP( ATTR_CURRENT ) ); // 磊扁茄抛 焊咯临波 GCModifyInformation gcMI; gcMI.addShortData( MODIFY_CURRENT_HP, pVampire->getHP( ATTR_CURRENT ) ); // HP啊 角滚 单固瘤甫 逞绢辑霸 登搁 角滚单固瘤甫 朝妨 霖促. if ( pVampire->getHP( ATTR_CURRENT ) > pVampire->getHP( ATTR_MAX ) - pVampire->getSilverDamage() ) { pVampire->setSilverDamage( pVampire->getHP( ATTR_MAX ) - pVampire->getHP( ATTR_CURRENT ) ); gcMI.addShortData( MODIFY_SILVER_DAMAGE, pVampire->getSilverDamage() ); } pVampire->getPlayer()->sendPacket( &gcMI ); m_pZone->broadcastPacket( pVampire->getX(), pVampire->getY(), &gcHP, pVampire ); } } else if ( m_bOusters && pCreature->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>( pCreature ); Assert( pOusters != NULL ); if ( pOusters->getHP( ATTR_CURRENT ) < pOusters->getHP( ATTR_MAX ) || pOusters->getMP( ATTR_CURRENT ) < pOusters->getMP( ATTR_MAX ) || pOusters->getSilverDamage() != 0 ) { pOusters->setMP( min( (int)pOusters->getMP( ATTR_MAX ), (int)pOusters->getMP( ATTR_CURRENT ) + m_HP / 2 ) ); pOusters->setHP( min( (int)pOusters->getHP( ATTR_MAX ), (int)pOusters->getHP( ATTR_CURRENT ) + m_HP / 2 ) ); GCModifyInformation gcMI; // HP啊 角滚 单固瘤甫 逞绢辑霸 登搁 角滚单固瘤甫 朝妨 霖促. if ( pOusters->getHP( ATTR_CURRENT ) > pOusters->getHP( ATTR_MAX ) - pOusters->getSilverDamage() ) { pOusters->setSilverDamage( pOusters->getHP( ATTR_MAX ) - pOusters->getHP( ATTR_CURRENT ) ); gcMI.addShortData( MODIFY_SILVER_DAMAGE, pOusters->getSilverDamage() ); } gcMI.addShortData( MODIFY_CURRENT_MP, pOusters->getMP( ATTR_CURRENT ) ); gcMI.addShortData( MODIFY_CURRENT_HP, pOusters->getHP( ATTR_CURRENT ) ); pOusters->getPlayer()->sendPacket(&gcMI); GCStatusCurrentHP gcHP; gcHP.setObjectID( pOusters->getObjectID() ); gcHP.setCurrentHP( pOusters->getHP( ATTR_CURRENT ) ); m_pZone->broadcastPacket( pOusters->getX(), pOusters->getY(), &gcHP, pOusters ); } } __END_CATCH}void EffectPKZoneRegen::unaffect() throw(Error){ __BEGIN_TRY StringStream msg; msg << "EffectPKZoneRegen[" << m_pZone->getZoneID() << "|(" << m_Rect.left << "," << m_Rect.top << "," << m_Rect.right << "," << m_Rect.bottom << ")]" << " 捞棋飘啊 荤扼脸促.."; filelog( "PKZone.txt", "EffectPKZoneRegen[%d|(%d,%d,%d,%d)] 捞棋飘啊 荤扼脸促.", m_pZone->getZoneID(), m_Rect.left, m_Rect.top, m_Rect.right, m_Rect.bottom ); __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectPKZoneRegen::unaffect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectPKZoneRegen::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "EffectPKZoneRegen(" << "ObjectID:" << getObjectID() << ")"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -