📄 effecttilestorm.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectTileStorm.cpp// Written by :// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectTileStorm.h"#include "Slayer.h"#include "Vampire.h"#include "Monster.h"#include "GamePlayer.h"#include "SkillUtil.h"#include "SkillInfo.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCSkillToObjectOK2.h"#include "Gpackets/GCSkillToObjectOK4.h"int StormDamageModify[5][5] ={ { 50, 50, 50, 50, 50 }, { 50, 75, 75, 75, 50 }, { 50, 75, 100, 75, 50 }, { 50, 75, 75, 75, 50 }, { 50, 50, 50, 50, 50 }};////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectTileStorm::EffectTileStorm(Zone* pZone, ZoneCoord_t zoneX, ZoneCoord_t zoneY) throw(Error){ __BEGIN_TRY m_pZone = pZone; m_X = zoneX; m_Y = zoneY; m_Damage = 0; m_UserObjectID = 0; m_StormTime = 0; m_Tick = 0; m_SkillType = SKILL_MAX; m_bLarge = true; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectTileStorm::affect() throw(Error){ __BEGIN_TRY Assert( m_pZone != NULL ); // 荤侩磊甫 啊廉柯促. // !! 捞固 粮阑 唱艾阑 荐 乐栏骨肺 NULL捞 瞪 荐 乐促. // by bezz. 2003.1.4 Creature* pCastCreature = m_pZone->getCreature( m_UserObjectID ); // 某胶磐啊 绝栏搁 公矫茄促. if ( pCastCreature == NULL ) return; Slayer* pSlayer = dynamic_cast<Slayer*>(pCastCreature); SkillSlot* pSkillSlot = pSlayer->hasSkill( m_SkillType ); SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( m_SkillType ); SkillDomainType_t DomainType = pSkillInfo->getDomainType(); SkillLevel_t SkillLevel = pSkillSlot->getExpLevel(); VSRect rect(0, 0, m_pZone->getWidth()-1, m_pZone->getHeight()-1); if( !rect.ptInRect( m_X, m_Y ) ) return; GCSkillToObjectOK2 _GCSkillToObjectOK2; GCSkillToObjectOK4 _GCSkillToObjectOK4; bool bHit = false; Damage_t maxDamage=0; int diff = 1; if ( m_bLarge ) diff = 2; // 泅犁 捞棋飘啊 嘿绢乐绰 鸥老阑 罐酒柯促. // 吝缴鸥老 + 胶敲贰浆 鸥老 for(int oX = -diff; oX <= diff; oX++) for(int oY = -diff; oY <= diff; oY++) { int tileX = m_X+oX; int tileY = m_Y+oY; if (!rect.ptInRect(tileX, tileY)) continue; Tile& tile = m_pZone->getTile(tileX, tileY); const slist<Object*>& oList = tile.getObjectList(); slist<Object*>::const_iterator itr = oList.begin(); for ( ; itr != oList.end(); itr++ ) { Object* pObject = *itr; Assert( pObject != NULL ); if ( pObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE ) { Creature* pTargetCreature = dynamic_cast<Creature*>(pObject); Assert( pTargetCreature != NULL ); if ( pTargetCreature->getObjectID() == m_UserObjectID || pTargetCreature->isFlag( Effect::EFFECT_CLASS_NO_DAMAGE ) || pTargetCreature->isFlag(Effect::EFFECT_CLASS_COMA) ) { continue; } bool bPK = verifyPK( pSlayer, pTargetCreature ); bool bZoneLevelCheck = checkZoneLevelToHitTarget( pTargetCreature ); bool bHitRoll = HitRoll::isSuccess( pSlayer, pTargetCreature, SkillLevel ); if ( bPK && bZoneLevelCheck && bHitRoll ) { // 盔贰 单固瘤客 胶懦 单固瘤 焊呈胶甫 歹茄 弥辆 单固瘤甫 备茄促. bool bCriticalHit = false; Damage_t FinalDamage = 0; FinalDamage += computeDamage( pSlayer, pTargetCreature, SkillLevel/2, bCriticalHit ); FinalDamage += m_Damage; // 褥...传 农霸 哆绊 焊祭...鞘混 惧火 内爹 int DamageModifier = StormDamageModify[oX+2][oY+2]; Damage_t TileDamage = getPercentValue( FinalDamage, DamageModifier ); if(pTargetCreature != NULL && !pTargetCreature->isSlayer()) { if(pTargetCreature->isPC()) { GCModifyInformation gcMI; ::setDamage( pTargetCreature, TileDamage, pSlayer, m_SkillType , &gcMI ); pTargetCreature->getPlayer()->sendPacket( &gcMI ); } else if(pTargetCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature); ::setDamage( pMonster, TileDamage, pSlayer, m_SkillType ); pMonster->addEnemy( pSlayer ); } if ( TileDamage > maxDamage ) maxDamage = TileDamage; if ( pTargetCreature->isPC() ) { // 傍拜阑 寸茄 轨颇捞绢俊霸 _GCSkillToObjectOK2.setObjectID(1); _GCSkillToObjectOK2.setSkillType(SKILL_ATTACK_MELEE); _GCSkillToObjectOK2.setDuration(0); pTargetCreature->getPlayer()->sendPacket(&_GCSkillToObjectOK2); } _GCSkillToObjectOK4.setTargetObjectID( pTargetCreature->getObjectID() ); _GCSkillToObjectOK4.setSkillType( SKILL_ATTACK_MELEE ); _GCSkillToObjectOK4.setDuration(0); m_pZone->broadcastPacket( tileX, tileY, &_GCSkillToObjectOK4, pTargetCreature); bHit = true; } } } } } if ( bHit ) { GCModifyInformation gcMI; shareAttrExp( pSlayer, maxDamage, 8, 1, 1, gcMI ); increaseDomainExp( pSlayer, DomainType, pSkillInfo->getPoint(), gcMI ); increaseSkillExp( pSlayer, DomainType, pSkillSlot, pSkillInfo, gcMI ); pSlayer->getPlayer()->sendPacket( &gcMI ); } // 绝绢廉 滚非!! m_StormTime--; if ( m_StormTime <= 0 ) setDeadline( 0 ); else setNextTime( m_Tick ); __END_CATCH }////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectTileStorm::affect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectTileStorm::unaffect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectTileStorm::unaffect() throw(Error){ __BEGIN_TRY Tile& EffectedTile = m_pZone->getTile(m_X, m_Y); EffectedTile.deleteEffect(m_ObjectID); __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectTileStorm::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "EffectTileStorm(" << "ObjectID:" << (int)getObjectID() << ",Zone:" << (int)m_pZone << ",X:" << (int)m_X << ",Y:" << (int)m_Y << ",Damage:" << (int)m_Damage << ",UserOBjectID:" << (int)m_UserObjectID << ",StormTime:" << (int)m_StormTime << ",Tick:" << (int)m_Tick << ",SkillType:" << (int)m_SkillType << ")"; return msg.toString(); __END_CATCH}EffectTileStormLoader* g_pEffectTileStormLoader = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -