📄 greenpoison.cpp
字号:
//////////////////////////////////////////////////////////////////////////////void GreenPoison::execute(Monster* pMonster, ZoneCoord_t X, ZoneCoord_t Y) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin(monster) " << endl; Assert(pMonster != NULL); try { Zone* pZone = pMonster->getZone(); Assert(pZone != NULL); if (pMonster->isFlag(Effect::EFFECT_CLASS_HIDE)) { //cout << "Monster cannot use skill while hiding." << endl; //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(monster)" << endl; return; } if (pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { addVisibleCreature(pZone, pMonster, true); } GCSkillToTileOK2 _GCSkillToTileOK2; GCSkillToTileOK3 _GCSkillToTileOK3; GCSkillToTileOK4 _GCSkillToTileOK4; GCSkillToTileOK5 _GCSkillToTileOK5; GCSkillToTileOK6 _GCSkillToTileOK6; SkillType_t SkillType = SKILL_GREEN_POISON; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); bool bRangeCheck = verifyDistance(pMonster, X, Y, pSkillInfo->getRange()); bool bHitRoll = HitRoll::isSuccessMagic(pMonster, pSkillInfo); bool bTileCheck = false; VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); if (rect.ptInRect(X, Y)) { Tile& tile = pZone->getTile(X, Y); if (tile.canAddEffect()) bTileCheck = true; } if (bRangeCheck && bHitRoll && bTileCheck) { Tile& tile = pZone->getTile(X, Y); Range_t Range = 1; // 亲惑 1捞促. // 鞍篮 捞棋飘啊 捞固 粮犁茄促搁 昏力茄促. Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_GREEN_POISON); if (pOldEffect != NULL) { ObjectID_t effectID = pOldEffect->getObjectID(); pZone->deleteEffect(effectID); } // 单固瘤客 瘤加 矫埃阑 拌魂茄促. SkillInput input(pMonster); SkillOutput output; computeOutput(input, output); // 捞棋飘 坷宏璃飘甫 积己茄促. EffectGreenPoison* pEffect = new EffectGreenPoison(pZone, X, Y); pEffect->setDeadline(output.Duration); pEffect->setDuration(output.Duration); pEffect->setDamage(output.Damage); pEffect->setLevel(pSkillInfo->getLevel()/2); // 鸥老俊 嘿篮 捞棋飘绰 OID甫 罐酒具 茄促. ObjectRegistry & objectregister = pZone->getObjectRegistry(); objectregister.registerObject(pEffect); // 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促. pZone->addEffect(pEffect); tile.addEffect(pEffect); // 鸥老 困俊 农府媚啊 乐促搁 官肺 康氢阑 林档废 茄促. bool bEffected = false; Creature* pTargetCreature = NULL; if (tile.hasCreature(Creature::MOVE_MODE_WALKING)) pTargetCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); ZoneCoord_t myX = pMonster->getX(); ZoneCoord_t myY = pMonster->getY(); // 葛电 农府媚啊 刀俊 吝刀瞪 荐 乐霸 窍扼绰 扁裙救俊 蝶扼, // 轨颇捞绢 棺 阁胶磐档 刀俊 吝刀瞪 荐 乐档废 函版茄促. // 窍瘤父 捞犯霸 登搁 阁胶磐啊 静绰 弊赴 器捞琉俊 狼秦辑 促弗 阁胶磐啊 吝刀登绰 // 泅惑捞 惯积窍霸 登绰单... //if (pTargetCreature != NULL && pTargetCreature->isSlayer()) if (pTargetCreature != NULL) { if (pEffect->affectCreature(pTargetCreature, false) == true) { bEffected = true; if (pTargetCreature->isPC()) { Player* pTargetPlayer = pTargetCreature->getPlayer(); bool bCanSee = canSee(pTargetCreature, pMonster); if (bCanSee) { _GCSkillToTileOK2.setObjectID(pMonster->getObjectID()); _GCSkillToTileOK2.setSkillType(SkillType); _GCSkillToTileOK2.setX(X); _GCSkillToTileOK2.setY(Y); _GCSkillToTileOK2.setDuration(output.Duration); _GCSkillToTileOK2.setRange(Range); pTargetPlayer->sendPacket(&_GCSkillToTileOK2); } else { _GCSkillToTileOK6.setOrgXY(myX, myY); _GCSkillToTileOK6.setSkillType(SkillType); _GCSkillToTileOK6.setX(X); _GCSkillToTileOK6.setY(Y); _GCSkillToTileOK6.setDuration(output.Duration); _GCSkillToTileOK6.setRange(Range); pTargetPlayer->sendPacket(&_GCSkillToTileOK6); } } } } _GCSkillToTileOK3.setObjectID(pMonster->getObjectID()); _GCSkillToTileOK3.setSkillType(SkillType); _GCSkillToTileOK3.setX(X); _GCSkillToTileOK3.setY(Y); _GCSkillToTileOK4.setSkillType(SkillType); _GCSkillToTileOK4.setX(X); _GCSkillToTileOK4.setY(Y); _GCSkillToTileOK4.setDuration(output.Duration); _GCSkillToTileOK4.setRange(Range); _GCSkillToTileOK5.setObjectID(pMonster->getObjectID()); _GCSkillToTileOK5.setSkillType(SkillType); _GCSkillToTileOK5.setX(X); _GCSkillToTileOK5.setY(Y); _GCSkillToTileOK5.setDuration(output.Duration); _GCSkillToTileOK5.setRange(Range); if (bEffected) { _GCSkillToTileOK4.addCListElement(pTargetCreature->getObjectID()); _GCSkillToTileOK5.addCListElement(pTargetCreature->getObjectID()); } list<Creature*> cList; cList.push_back(pMonster); if (bEffected) cList.push_back(pTargetCreature); cList = pZone->broadcastSkillPacket(myX, myY, X, Y, &_GCSkillToTileOK5, cList); pZone->broadcastPacket(myX, myY, &_GCSkillToTileOK3 , cList); pZone->broadcastPacket(X, Y, &_GCSkillToTileOK4 , cList); } else { executeSkillFailNormal(pMonster, getSkillType(), NULL); } } catch (Throwable & t) { executeSkillFailException(pMonster, getSkillType()); } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end(monster) " << endl; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 阁胶磐 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void GreenPoison::execute(Monster* pMonster) throw(Error){ __BEGIN_TRY //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "begin(monster) " << endl; Assert(pMonster != NULL); try { Zone* pZone = pMonster->getZone(); Assert(pZone != NULL); GCSkillToTileOK2 _GCSkillToTileOK2; GCSkillToTileOK3 _GCSkillToTileOK3; GCSkillToTileOK4 _GCSkillToTileOK4; GCSkillToTileOK5 _GCSkillToTileOK5; GCSkillToTileOK6 _GCSkillToTileOK6; SkillType_t SkillType = SKILL_GREEN_POISON; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); ZoneCoord_t X = pMonster->getX(); ZoneCoord_t Y = pMonster->getY(); // 阁胶磐狼 矫眉啊 乐绰 鸥老客 弊 林函 鸥老 吝 罚待栏肺 窍唱俊 谎赴促. int dir = rand()%8; list<POINT> ptList; ptList.push_back(POINT(X, Y)); ptList.push_back(POINT((X + dirMoveMask[dir].x), (Y + dirMoveMask[dir].y))); VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); list<POINT>::iterator itr = ptList.begin(); for (; itr != ptList.end(); itr++) { int tileX = (*itr).x; int tileY = (*itr).y; bool bTileCheck = false; if (rect.ptInRect(tileX, tileY)) { Tile& tile = pZone->getTile(tileX, tileY); if (tile.canAddEffect()) bTileCheck = true; } if (bTileCheck) { Tile& tile = pZone->getTile(tileX, tileY); // 鞍篮 捞棋飘啊 捞固 粮犁茄促搁 昏力茄促. Effect* pOldEffect = tile.getEffect(Effect::EFFECT_CLASS_GREEN_POISON); if (pOldEffect != NULL) { ObjectID_t effectID = pOldEffect->getObjectID(); pZone->deleteEffect(effectID); } // 单固瘤客 瘤加 矫埃阑 拌魂茄促. SkillInput input(pMonster); SkillOutput output; computeOutput(input, output); // 捞棋飘 坷宏璃飘甫 积己茄促. EffectGreenPoison* pEffect = new EffectGreenPoison(pZone, tileX, tileY); pEffect->setDeadline(output.Duration); pEffect->setDuration(output.Duration); pEffect->setDamage(output.Damage); pEffect->setLevel(pSkillInfo->getLevel()/2); // 鸥老俊 嘿篮 捞棋飘绰 OID甫 罐酒具 茄促. ObjectRegistry & OR = pZone->getObjectRegistry(); OR.registerObject(pEffect); // 粮 棺 鸥老俊促啊 捞棋飘甫 眠啊茄促. pZone->addEffect(pEffect); tile.addEffect(pEffect); GCAddEffectToTile gcAddEffectToTile; gcAddEffectToTile.setEffectID(pEffect->getEffectClass()); gcAddEffectToTile.setObjectID(pEffect->getObjectID()); gcAddEffectToTile.setXY(tileX, tileY); gcAddEffectToTile.setDuration(output.Duration); // list俊 POINT啊 滴俺 甸绢啊 乐栏骨肺, 滴锅 宏肺靛某胶泼阑 窍霸 等促. // 捞 何盒篮 菩哦狼 府胶飘甫 窃荐狼 牢磊肺 罐绰 宏肺靛某胶泼 // 窃荐甫 父甸绢辑 茄锅俊 场郴绰 巴捞 辑滚狼 扁瓷 氢惑俊 档框捞 // 瞪 巴捞促. // 2002-01-23 辫己刮 pZone->broadcastPacket(tileX, tileY, &gcAddEffectToTile); } } } catch (Throwable & t) { //cout << t.toString() << endl; } //cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " end(monster) " << endl; __END_CATCH}GreenPoison g_GreenPoison;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -