📄 effectbloodysnake.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectBloodySnake.cpp// Written by :// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectBloodySnake.h"#include "Slayer.h"#include "Vampire.h"#include "Monster.h"#include "GamePlayer.h"#include "SkillUtil.h"#include "ZoneUtil.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCStatusCurrentHP.h"#include "Gpackets/GCAddEffectToTile.h"POINT EffectBloodySnake::getNextPosition(){ Dir_t dir = m_Dir; if (rand()%5<2) { dir = (dir+(rand()%2==0? 1 : DIR_MAX-1))%DIR_MAX; } const POINT& pt = dirMoveMask[dir]; return POINT(m_X+pt.x, m_Y+pt.y);}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////EffectBloodySnake::EffectBloodySnake(Zone* pZone, ZoneCoord_t zoneX, ZoneCoord_t zoneY) throw(Error){ __BEGIN_TRY m_pZone = pZone; m_X = zoneX; m_Y = zoneY; m_Dir = DOWN; m_CasterName =""; m_CasterID = 0; m_CreatureClass = Creature::CREATURE_CLASS_VAMPIRE; m_ClanID = 0; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::affect() throw(Error){ __BEGIN_TRY //cout << "EffectBloodySnake" << "affect BEGIN" << endl; Assert(m_pZone != NULL); // 胶懦 荤侩磊甫 啊廉柯促. // !! 捞固 粮阑 栋车阑 荐档 乐栏骨肺 NULL 捞 瞪 荐 乐促. // by bezz. 2003.1.4 Creature* pCastCreature = m_pZone->getCreature( m_CasterID ); // 泅犁 捞棋飘啊 嘿绢乐绰 鸥老阑 罐酒柯促. Tile& tile = m_pZone->getTile(m_X, m_Y); // 鸥老 救俊 粮犁窍绰 坷宏璃飘甸阑 八祸茄促. const slist<Object*>& oList = tile.getObjectList(); slist<Object*>::const_iterator itr = oList.begin(); for (; itr != oList.end(); itr++) { Assert(*itr != NULL); Object* pObject = *itr; Assert(pObject != NULL); if (pObject->getObjectClass() == Object::OBJECT_CLASS_CREATURE) { Creature* pCreature = dynamic_cast<Creature*>(pObject); Assert(pCreature != NULL); // 公利惑怕 眉农. by sigi. 2002.9.5 // 魂 搁开. by sigi. 2002.9.13 // 磊扁 磊脚捞搁 救 嘎绰促. if (pCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE) || pCreature->getObjectID()==m_CasterID) { continue; } // 鞍篮 炼流(--;)捞搁 救 嘎绰促. if (m_CreatureClass==pCreature->getCreatureClass()) { if (m_CreatureClass==Creature::CREATURE_CLASS_MONSTER) { Creature* pAttacker = m_pZone->getCreature( m_CasterID ); if (pAttacker!=NULL) { Monster* pAttackMonster = dynamic_cast<Monster*>(pAttacker); Monster* pDefendMonster = dynamic_cast<Monster*>(pCreature); if (pAttackMonster->getClanType()==pDefendMonster->getClanType()) { continue; } } } } int Damage = m_Damage; if (pCreature->getMoveMode() != Creature::MOVE_MODE_FLYING) { if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); GCModifyInformation gcMI; ::setDamage( pSlayer, Damage, pCastCreature, SKILL_BLOODY_SNAKE, &gcMI ); Player* pPlayer = pSlayer->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI); // knockback眉农 bool bKnockback = rand()%100 < 20; // 20%狼 犬伏肺 knockback if (bKnockback) { int x = pCreature->getX() + rand()%3 - 1; int y = pCreature->getY() + rand()%3 - 1; knockbackCreature(m_pZone, pCreature, x, y); // Tile狼 oList甫 官差霸 窍骨肺 歹 眉农窍瘤 臼绰促. // 茄 鸥老俊辑 窍唱啊 knockback登搁 第俊 眉农且 局甸篮 救 嘎酒档 包拌绝瘤~ break; } } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); GCModifyInformation gcMI; ::setDamage( pVampire, Damage, pCastCreature, SKILL_BLOODY_SNAKE, &gcMI ); Player* pPlayer = pVampire->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI); // knockback眉农 bool bKnockback = rand()%100 < 20; // 20%狼 犬伏肺 knockback if (bKnockback) { int x = pCreature->getX() + rand()%3 - 1; int y = pCreature->getY() + rand()%3 - 1; knockbackCreature(m_pZone, pCreature, x, y); // Tile狼 oList甫 官差霸 窍骨肺 歹 眉农窍瘤 臼绰促. // 茄 鸥老俊辑 窍唱啊 knockback登搁 第俊 眉农且 局甸篮 救 嘎酒档 包拌绝瘤~ break; } } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); GCModifyInformation gcMI; ::setDamage( pOusters, Damage, pCastCreature, SKILL_BLOODY_SNAKE, &gcMI ); Player* pPlayer = pOusters->getPlayer(); Assert(pPlayer != NULL); pPlayer->sendPacket(&gcMI); // knockback眉农 bool bKnockback = rand()%100 < 20; // 20%狼 犬伏肺 knockback if (bKnockback) { int x = pCreature->getX() + rand()%3 - 1; int y = pCreature->getY() + rand()%3 - 1; knockbackCreature(m_pZone, pCreature, x, y); // Tile狼 oList甫 官差霸 窍骨肺 歹 眉农窍瘤 臼绰促. // 茄 鸥老俊辑 窍唱啊 knockback登搁 第俊 眉农且 局甸篮 救 嘎酒档 包拌绝瘤~ break; } } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); ::setDamage( pMonster, Damage, pCastCreature, SKILL_BLOODY_SNAKE ); // knockback眉农 bool bKnockback = rand()%100 < 20; // 20%狼 犬伏肺 knockback if (bKnockback) { int x = pCreature->getX() + rand()%3 - 1; int y = pCreature->getY() + rand()%3 - 1; knockbackCreature(m_pZone, pCreature, x, y); // Tile狼 oList甫 官差霸 窍骨肺 歹 眉农窍瘤 臼绰促. // 茄 鸥老俊辑 窍唱啊 knockback登搁 第俊 眉农且 局甸篮 救 嘎酒档 包拌绝瘤~ break; } } // m_CasterName捞 pCreature甫 磷牢 版快狼 KillCount 贸府 // by sigi. 2002.8.31/* if (pCreature->isDead()) { Creature* pAttacker = m_pZone->getCreature( m_CasterID ); if (pAttacker!=NULL) { affectKillCount(pAttacker, pCreature); } }*/ } } } // 促澜 捞悼 谅钎 拌魂 POINT pt = getNextPosition(); /* cout << "EffectSnake(" << m_ObjectID << ")" << "[" << Dir2String[m_Dir].c_str() << "] (" << m_X << ", " << m_Y << ") --> (" << pt.x << ", " << pt.y << ")" << endl; */ // 促澜 捞悼且 鸥老俊 眠啊茄促. VSRect rect(0, 0, m_pZone->getWidth()-1, m_pZone->getHeight()-1); if (rect.ptInRect(pt.x, pt.y)) { Tile& newTile = m_pZone->getTile( pt.x, pt.y ); if ((!newTile.isGroundBlocked() || newTile.hasCreature(Creature::MOVE_MODE_WALKING)) && newTile.canAddEffect()) { // 鞍篮 effect啊 乐栏搁 瘤款促. Effect* pOldEffect = newTile.getEffect(Effect::EFFECT_CLASS_BLOODY_SNAKE); if (pOldEffect != NULL && pOldEffect!=this) { ObjectID_t effectID = pOldEffect->getObjectID(); m_pZone->deleteEffect(effectID);// fix me } // 扁粮 鸥老俊辑 瘤快绊 tile.deleteEffect(m_ObjectID); // 货 鸥老俊 眠啊茄促. newTile.addEffect(this); m_X = pt.x; m_Y = pt.y; GCAddEffectToTile gcAddEffectToTile; gcAddEffectToTile.setEffectID( Effect::EFFECT_CLASS_BLOODY_SNAKE ); gcAddEffectToTile.setDuration( m_Tick+(m_Tick>>1) ); gcAddEffectToTile.setObjectID( m_ObjectID ); gcAddEffectToTile.setXY( m_X, m_Y ); m_pZone->broadcastPacket(m_X, m_Y, &gcAddEffectToTile); setNextTime(m_Tick); } else { setDeadline( 0 ); } } else { setDeadline( 0 ); } //cout << "EffectBloodySnake" << "affect END" << endl; __END_CATCH }////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::affect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::affect(Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Object* pObject) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::unaffect(Creature* pCreature) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::unaffect() throw(Error){ __BEGIN_TRY //cout << "EffectBloodySnake" << "unaffect BEGIN" << endl; Tile& tile = m_pZone->getTile(m_X, m_Y); tile.deleteEffect(m_ObjectID); //cout << "EffectBloodySnake" << "unaffect END" << endl; __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void EffectBloodySnake::unaffect(Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Object* pObject) throw(Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////string EffectBloodySnake::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "EffectBloodySnake(" << "ObjectID:" << getObjectID() << ")"; return msg.toString(); __END_CATCH}EffectBloodySnakeLoader* g_pEffectBloodySnakeLoader = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -