📄 installmine.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : InstallMine.cpp// Written by : Elca// Description ://////////////////////////////////////////////////////////////////////////////#include "InstallMine.h"#include "Assert.h"#include "SkillInfo.h"#include "ItemUtil.h"#include "item/Mine.h"#include "Gpackets/GCSkillToInventoryOK1.h"//#include "Gpackets/GCSkillToTileOK1.h"//#include "Gpackets/GCSkillToTileOK5.h"#include "Gpackets/GCSkillFailed1.h"#include "Gpackets/GCSkillFailed2.h"#include "Gpackets/GCDeleteEffectFromTile.h"#include "Gpackets/GCDeleteObject.h"#include "ItemInfoManager.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void InstallMine::execute(Slayer* pSlayer, ObjectID_t, CoordInven_t X, CoordInven_t Y, CoordInven_t TargetX, CoordInven_t TargetY, SkillSlot* pSkillSlot) throw(Error){ __BEGIN_TRY Assert(pSlayer != NULL); Assert(pSkillSlot != NULL); try { Player* pPlayer = pSlayer->getPlayer(); Zone* pZone = pSlayer->getZone(); Assert(pPlayer != NULL); Assert(pZone != NULL); GCSkillToInventoryOK1 _GCSkillToInventoryOK1;// GCSkillToTileOK1 _GCSkillToTileOK1;// GCSkillToTileOK5 _GCSkillToTileOK5; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo * pSkillInfo = g_pSkillInfoManager->getSkillInfo( SkillType ); SkillLevel_t SkillLevel = pSkillSlot->getExpLevel(); // 疙吝伏. //ToHit_t ToHit = pSlayer->getToHit(); int RequiredMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pSlayer, RequiredMP); bool bTimeCheck = verifyRunTime(pSkillSlot); bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer); ZoneCoord_t slayerX = pSlayer->getX(), slayerY = pSlayer->getY(); bool bInstallAction = false; Mine* pMine = NULL; Inventory * pInventory = pSlayer->getInventory(); Assert( pInventory != NULL ); if( bManaCheck && bTimeCheck &&bRangeCheck ) { // mine阑 茫绰促. Item* pItem = pInventory->getItem( X, Y); if( pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_MINE) { bInstallAction = true; pMine = dynamic_cast<Mine*>(pItem); } } // 扁贱狼 己菩甫 蝶柳促. if ( bInstallAction ) { //Range_t Range = 1; GCSkillToInventoryOK1 _GCSkillToInventoryOK1;// GCSkillToInventoryOK5 _GCSkillToInventoryOK5; ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo(Item::ITEM_CLASS_MINE, pMine->getItemType()); Damage_t MinDamage = pItemInfo->getMinDamage(); Damage_t MaxDamage = pItemInfo->getMaxDamage(); Damage_t RealDamage = MinDamage + ( max ( 0, ( (int)MaxDamage * (int)SkillLevel / 100 ) - MinDamage ) ); Mine * pInstallMine = new Mine(); ObjectRegistry& OR = pZone->getObjectRegistry(); OR.registerObject(pInstallMine); Assert( pInstallMine != NULL ); pInstallMine->setItemType( pMine->getItemType() ); pInstallMine->setDir( TargetX ); pInstallMine->setDamage( RealDamage ); pInstallMine->setInstallerName( pSlayer->getName() ); pInstallMine->setInstallerPartyID( pSlayer->getPartyID() ); pInstallMine->setFlag( Effect::EFFECT_CLASS_INSTALL); // 酒捞袍 荤扼瘤绰霸 3盒牢芭 锭巩俊 瘤汾档 荤扼脸绰单.. // 10盒栏肺 绊沥. by sigi. 2002.11.3 TPOINT pt = pZone->addItem(pInstallMine, slayerX, slayerY, true, 6000); // EXP up Exp_t Point = pSkillInfo->getPoint(); shareAttrExp(pSlayer, 100, 1, 8, 1, _GCSkillToInventoryOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_GUN, Point, _GCSkillToInventoryOK1); increaseSkillExp(pSlayer, SKILL_DOMAIN_GUN, pSkillSlot, pSkillInfo, _GCSkillToInventoryOK1); decreaseMana(pSlayer, RequiredMP, _GCSkillToInventoryOK1); decreaseItemNum(pMine, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, X, Y); _GCSkillToInventoryOK1.setObjectID( pInstallMine->getObjectID() ); _GCSkillToInventoryOK1.setSkillType( SkillType ); _GCSkillToInventoryOK1.setCEffectID( 0 ); _GCSkillToInventoryOK1.setX( X ); _GCSkillToInventoryOK1.setY( Y ); _GCSkillToInventoryOK1.setDuration( 0 ); /* _GCSkillToInventoryOK5.setObjectID( pSlayer->getObjectID()); _GCSkillToInventoryOK5.setSkillType( SkillType); _GCSkillToInventoryOK5.setX( X); _GCSkillToInventoryOK5.setY( Y); _GCSkillToInventoryOK5.setRange( Range); _GCSkillToInventoryOK5.setDuration( 0); */ pPlayer->sendPacket( &_GCSkillToInventoryOK1 ); // mine阑 杭 荐 绝霸 等 磊甸俊霸绰 昏力 addInstalledMine( pZone, pInstallMine, pt.x, pt.y);// pZone->broadcastPacket( slayerX, slayerY, &_GCSkillToInventoryOK5, pSlayer); // cout << "Run Skill : " << (int)SkillType << endl; // Set NextTime pSkillSlot->setRunTime(); } else { GCSkillFailed1 _GCSkillFailed1; GCSkillFailed2 _GCSkillFailed2; executeSkillFailException(pSlayer, getSkillType()); } } catch(Throwable & t) { executeSkillFailException(pSlayer, getSkillType()); } __END_CATCH}/*void InstallMine::execute(Slayer* pSlayer, ZoneCoord_t X, ZoneCoord_t Y, SkillSlot* pSkillSlot, CEffectID_t CEffectID) throw(Error){ __BEGIN_TRY try { GCSkillToTileOK1 _GCSkillToTileOK1; GCSkillToTileOK5 _GCSkillToTileOK5; SkillType_t SkillType = pSkillSlot->getSkillType(); SkillInfo * pSkillInfo = g_pSkillInfoManager->getSkillInfo( SkillType ); SkillLevel_t SkillLevel = pSkillSlot->getExpLevel(); // 疙吝伏. ToHit_t ToHit = pSlayer->getToHit(); int RemainMP = (int)pSlayer->getMP( ATTR_CURRENT) - (int)pSkillInfo->getConsumeMP(); bool bModifyMP = false; if( RemainMP >= 0 && verifyRunTime(pSkillSlot) && pZone->getZoneLevel(pSlayer->getX(), pSlayer->getY()) != 0) { pSlayer->setMP( RemainMP , ATTR_CURRENT ); bModifyMP = true; } // Installed mine阑 茫绰促. Mine* pMine = NULL; bool bInstallAction = false; // install or disarm Item* pItem = pZone->getTile( X, Y).getItem(); if( pItem && pItem->getItemClass() == Item::ITEM_CLASS_MINE) { if( pItem->isFlag( Effect::EFFECT_CLASS_INSTALL)) { if( pSlayer->isFlag( Effect::EFFECT_CLASS_DETECT_MINE)) // 泅犁 杭 荐 乐绰惑怕牢瘤 犬牢. { bInstallAction = false;// disarm捞村 pMine = dynamic_cast<Mine*>(pItem); } } else { bInstallAction = true; pMine = dynamic_cast<Mine*>(pItem); } } ZoneCoord_t slayerX = pSlayer->getX(), slayerY = pSlayer->getY(); // 扁贱狼 己菩甫 蝶柳促. if ( pMine && bModifyMP && (ToHit + SkillLevel) > Random(0, 100) ) { Range_t Range = 1; GCSkillToTileOK1 _GCSkillToTileOK1; GCSkillToTileOK5 _GCSkillToTileOK5; if( bInstallAction) { pMine->setDir( calcDirection( slayerX, slayerY, X, Y)); pMine->setFlag( Effect::EFFECT_CLASS_INSTALL); // mine阑 杭 荐 绝霸 等 磊甸俊霸绰 昏力 addInstalledMine( pZone, pMine, X, Y); } else { // 昏力茄促. pZone->deleteItem( pMine, X, Y ); GCDeleteObject gcDeleteObject; gcDeleteObject.setObjectID( pMine->getObjectID() ); pZone->broadcastPacket( X, Y , &gcDeleteObject ); pMine->destroy(); delete pMine; } // EXP up Exp_t Point = pSkillInfo->getPoint(); shareAttrExp(pSlayer, 100, 1, 8, 1, _GCSkillToTileOK1); increaseDomainExp(pSlayer, SKILL_DOMAIN_GUN, Point, _GCSkillToTileOK1); increaseSkillExp(pSlayer, SKILL_DOMAIN_GUN, pSkillSlot, pSkillInfo, _GCSkillToTileOK1); _GCSkillToTileOK1.addLongData( MODIFY_CURRENT_MP , RemainMP ); _GCSkillToTileOK1.setSkillType( SkillType ); _GCSkillToTileOK1.setCEffectID( CEffectID ); _GCSkillToTileOK1.setX( X ); _GCSkillToTileOK1.setY( Y ); _GCSkillToTileOK1.setDuration( 0 ); _GCSkillToTileOK5.setObjectID( pSlayer->getObjectID()); _GCSkillToTileOK5.setSkillType( SkillType); _GCSkillToTileOK5.setX( X); _GCSkillToTileOK5.setY( Y); _GCSkillToTileOK5.setRange( Range); _GCSkillToTileOK5.setDuration( 0); pPlayer->sendPacket( &_GCSkillToTileOK1 ); pZone->broadcastPacket( slayerX, slayerY, &_GCSkillToTileOK5, pSlayer);// cout << "Run Skill : " << (int)SkillType << endl; // Set NextTime pSkillSlot->setRunTime(); } else { GCSkillFailed1 _GCSkillFailed1; GCSkillFailed2 _GCSkillFailed2; if( bModifyMP) _GCSkillFailed1.addLongData( MODIFY_CURRENT_MP, RemainMP); pPlayer->sendPacket( &_GCSkillFailed1 ); } } catch( Throwable & t ) { GCSkillFailed1 _GCSkillFailed1; pSlayer->getPlayer()->sendPacket( &_GCSkillFailed1); cout << t.toString() << endl; } __END_CATCH}*/InstallMine g_InstallMine;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -