cguseitemfrominventoryhandler.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 2,063 行 · 第 1/5 页
CPP
2,063 行
if (pSlayer->isFlag(Effect::EFFECT_CLASS_MP_RECOVERY)) { Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_MP_RECOVERY); EffectMPRecovery* pEffectMPRecoveryEffect = dynamic_cast<EffectMPRecovery*>(pEffect); // 扁粮狼 窜困剧苞 冉荐肺 盲快绰 MP剧阑 拌魂茄促. // 弊巴阑 泅犁 雀汗剧俊 歹茄促. int PrevMPAmount = pEffectMPRecoveryEffect->getMPQuantity()* pEffectMPRecoveryEffect->getPeriod(); MPAmount = min((int)(MPAmount + PrevMPAmount), MaxMP - CurrentMP); // 笛 吝俊 奴 窜困雀汗剧苞 累篮 掉饭捞甫 掘绢辰促. MPQuantity = max(MPQuantity, (int)(pEffectMPRecoveryEffect->getMPQuantity())); MPDelayProvider = min(MPDelayProvider, (int)(pEffectMPRecoveryEffect->getDelay())); // 泅犁 雀汗剧阑 啊瘤绊, 倔付究 割锅俊 雀汗且 巴牢啊甫 搬沥茄促. temp = (double)((double)MPAmount/(double)MPQuantity); Period = (uint)ceil(temp); Deadline = Period* MPDelayProvider; // MP Recovery effect甫 盎脚茄促. pEffectMPRecoveryEffect->setDeadline(Deadline); pEffectMPRecoveryEffect->setDelay(MPDelayProvider); pEffectMPRecoveryEffect->setMPQuantity(MPQuantity); pEffectMPRecoveryEffect->setPeriod(Period); // 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促. GCMPRecoveryStart gcMPRecoveryStart; gcMPRecoveryStart.setPeriod(pEffectMPRecoveryEffect->getPeriod()); gcMPRecoveryStart.setDelay(pEffectMPRecoveryEffect->getDelay()); gcMPRecoveryStart.setQuantity(pEffectMPRecoveryEffect->getMPQuantity()); pGamePlayer->sendPacket(&gcMPRecoveryStart); GCUseOK _GCUseOK; pGamePlayer->sendPacket(&_GCUseOK); } else { EffectMPRecovery* pEffectMPRecovery = new EffectMPRecovery(); pEffectMPRecovery->setTarget(pSlayer); pEffectMPRecovery->setDeadline(Deadline); pEffectMPRecovery->setDelay(MPDelayProvider); pEffectMPRecovery->setNextTime(0); pEffectMPRecovery->setMPQuantity(MPQuantity); pEffectMPRecovery->setPeriod(Period); pEffectManager->addEffect(pEffectMPRecovery); // 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促. GCMPRecoveryStart gcMPRecoveryStart; gcMPRecoveryStart.setPeriod(Period); gcMPRecoveryStart.setDelay(MPDelayProvider); gcMPRecoveryStart.setQuantity(MPQuantity); pGamePlayer->sendPacket(&gcMPRecoveryStart); GCUseOK _GCUseOK; pGamePlayer->sendPacket(&_GCUseOK); } decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } } else { notRecoverMP = true; } if (notRecoverHP && notRecoverMP) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; }#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeMagazine(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); //Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); ObjectID_t ItemObjectID = pItem->getObjectID(); Assert(pCreature->isSlayer()); Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); Item* pArmsItem = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND); bool bSuccess = false; if (pArmsItem != NULL) { if (isArmsWeapon(pArmsItem)) { SkillSlot* pVivid = pSlayer->getSkill( SKILL_VIVID_MAGAZINE ); bool hasVivid = (pVivid != NULL) && pVivid->canUse(); if (isSuitableMagazine(pArmsItem, pItem, hasVivid)) bSuccess = true; } } // reload delay啊 乐栏骨肺 effect俊 殿废 矫挪促. EffectManager* pEffectManager = pSlayer->getEffectManager(); if (pEffectManager == NULL) return; if (bSuccess && !pSlayer->isFlag(Effect::EFFECT_CLASS_RELOAD_TIMER)) { EffectReloadTimer* pEffect = new EffectReloadTimer(pSlayer); pEffect->setFromInventory(true); pEffect->setObjectID(ItemObjectID); pEffect->setInventoryXY(InvenX, InvenY); // by sigi. 2002.12.3. 1檬 --> 0.7檬 if (pSlayer->hasSkill(SKILL_FAST_RELOAD)) pEffect->setDeadline(7); // 狐弗 reload(0.7檬) else pEffect->setDeadline(2*10); // 焊烹 reload(2sec) pSlayer->setFlag(Effect::EFFECT_CLASS_RELOAD_TIMER); pEffectManager->addEffect(pEffect); } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotUse); }#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeETC(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); //Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); //ObjectID_t ItemObjectID = pItem->getObjectID(); // 酒捞袍捞 阶捞绰 辆幅狼 酒捞袍捞扼搁, // 荤侩阑 沁栏聪 弊父怒 昏力甫 秦 霖促. if (isStackable(pItem)) { decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { // 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE(pItem); }#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeSerum(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); //ObjectID_t ItemObjectID = pItem->getObjectID(); Assert(pCreature->isVampire()); Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); // 内付 惑怕扼搁 荤侩且 荐 绝促. if (pVampire->isFlag(Effect::EFFECT_CLASS_COMA) // 价祈牢 版快绰 蜡丰 荤侩磊啊 酒聪搁 荤侩且 荐 绝促. || pItem->getItemType()==5 && !pGamePlayer->isPayPlaying() && !pGamePlayer->isPremiumPlay()) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } HP_t MaxHP = pVampire->getHP(ATTR_MAX); HP_t CurrentHP = pVampire->getHP(ATTR_CURRENT); Serum* pSerum = dynamic_cast<Serum*>(pItem); int RegenHP = 0; RegenHP = pSerum->getHPAmount(); int RegenPeriod = pSerum->getPeriod()*10; // 窜困 矫埃狼 林扁 int RegenCount = pSerum->getCount(); // 割锅 窜困 矫埃阑 馆汗且 巴牢啊? int RegenHPUnit = (int)((float)MaxHP* (float)RegenHP* 0.01); // 茄锅俊 雀汗窍绰 HP狼 剧 int HPAmount = min(MaxHP - CurrentHP , RegenHPUnit* RegenCount); // HP 雀汗剧捞 粮犁茄促搁... if (HPAmount != 0) { // 倔付究 割锅 割檬付促. if (CurrentHP < MaxHP) { EffectManager* pEffectManager = pVampire->getEffectManager(); Turn_t Period = RegenCount; // 割锅 雀汗矫虐唱? Turn_t Deadline = RegenPeriod* Period; // 攫力 场唱唱? if (pVampire->isFlag(Effect::EFFECT_CLASS_HP_RECOVERY)) { Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_HP_RECOVERY); EffectHPRecovery* pEffectHPRecoveryEffect = dynamic_cast<EffectHPRecovery*>(pEffect); // 割锅 歹 秦具 茄促绰 巴阑 盎脚秦 霖促. Turn_t OldCount = pEffectHPRecoveryEffect->getPeriod(); Turn_t NewPeriod = OldCount + Period; pEffectHPRecoveryEffect->setPeriod(NewPeriod); pEffectHPRecoveryEffect->setDeadline(NewPeriod* RegenPeriod); // 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促. GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf; gcHPRecoveryStartToSelf.setPeriod(NewPeriod); // 割锅 雀汗窍唱? gcHPRecoveryStartToSelf.setDelay(RegenPeriod); // 割 檬 窜困肺 窍唱? gcHPRecoveryStartToSelf.setQuantity(RegenHPUnit); // 茄锅俊 倔付唱 雀汗窍唱? pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf); // 雀汗 矫累窍扼绰 菩哦阑 促弗捞甸俊霸 焊辰促. // 雀汗 盎脚 菩哦, 矫累苞 度 鞍篮 菩哦阑 焊辰促. GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers; gcHPRecoveryStartToOthers.setObjectID(pVampire->getObjectID()); gcHPRecoveryStartToOthers.setPeriod(NewPeriod); gcHPRecoveryStartToOthers.setDelay(RegenPeriod ); gcHPRecoveryStartToOthers.setQuantity(RegenHPUnit); pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcHPRecoveryStartToOthers, pVampire); GCUseOK _GCUseOK; pGamePlayer->sendPacket(&_GCUseOK); } else { EffectHPRecovery* pEffectHPRecovery = new EffectHPRecovery(); pEffectHPRecovery->setTarget(pVampire); pEffectHPRecovery->setDeadline(Deadline); pEffectHPRecovery->setDelay(RegenPeriod); pEffectHPRecovery->setNextTime(0); pEffectHPRecovery->setHPQuantity(RegenHPUnit); pEffectHPRecovery->setPeriod(Period); pEffectManager->addEffect(pEffectHPRecovery); // 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促. GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf; gcHPRecoveryStartToSelf.setPeriod(Period); gcHPRecoveryStartToSelf.setDelay(RegenPeriod); gcHPRecoveryStartToSelf.setQuantity(RegenHPUnit); pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf); // 雀汗 矫累窍扼绰 菩哦阑 焊绰捞甸俊霸 焊辰促. GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers; gcHPRecoveryStartToOthers.setObjectID(pVampire->getObjectID()); gcHPRecoveryStartToOthers.setPeriod(Period); gcHPRecoveryStartToOthers.setDelay(RegenPeriod); gcHPRecoveryStartToOthers.setQuantity(RegenHPUnit); pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcHPRecoveryStartToOthers, pVampire); GCUseOK _GCUseOK; pGamePlayer->sendPacket(&_GCUseOK); } } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } decreaseItemNum(pItem, pInventory, pVampire->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeVampireETC(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); /* // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); ObjectID_t ItemObjectID = pItem->getObjectID(); // 酒捞袍捞 阶捞绰 辆幅狼 酒捞袍捞扼搁, // 荤侩阑 沁栏聪 弊父怒 昏力甫 秦 霖促. if (isStackable(pItem)) { decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { // 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE(pItem); } */#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeSlayerPortalItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?