waitforapart.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 304 行
CPP
304 行
#include "Assert.h"#include "Player.h"#include "Slayer.h"#include "Vampire.h"#include "PacketUtil.h"#include "PlayerCreature.h"#include "ItemNameInfo.h"#include "FlagSet.h"#include "StringPool.h"#include "WaitForApart.h"#include "CoupleManager.h"#include "item/CoupleRing.h"#include "item/VampireCoupleRing.h"#include "item/CoupleRingBase.h"#include "ItemFactoryManager.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCDeleteInventoryItem.h"#include "Gpackets/GCRemoveFromGear.h"#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCSystemMessage.h"#include <stdio.h>uint WaitForApart::waitPartner( PlayerCreature* pTargetPC ) throw(Error){ __BEGIN_TRY if ( pTargetPC == NULL ) return COUPLE_MESSAGE_LOGOFF; PlayerCreature* pWaitingPC = getWaitingPC(); if ( pWaitingPC == NULL ) return COUPLE_MESSAGE_LOGOFF; if ( !g_pCoupleManager->isCouple( pTargetPC, pWaitingPC ) ) { return COUPLE_MESSAGE_NOT_COUPLE; } GCSystemMessage gcSystemMessage;// StringStream msg;// msg << pWaitingPC->getName() << "丛栏肺何磐 捞喊 脚没捞 吭嚼聪促."; char msg[100]; sprintf( msg, g_pStringPool->c_str( STRID_REQUEST_APART ), pWaitingPC->getName().c_str() ); gcSystemMessage.setMessage( msg ); pTargetPC->getPlayer()->sendPacket( &gcSystemMessage ); return 0; __END_CATCH}uint WaitForApart::acceptPartner( PlayerCreature* pRequestedPC ) throw(Error){ __BEGIN_TRY Assert( pRequestedPC != NULL); PlayerCreature* pWaitingPC = getWaitingPC(); if ( pWaitingPC == NULL ) return COUPLE_MESSAGE_LOGOFF; if (!g_pCoupleManager->isCouple( pRequestedPC, pWaitingPC )) return COUPLE_MESSAGE_NOT_COUPLE; if ( !hasCoupleItem( pRequestedPC ) ) { filelog( "CoupleRing.txt", "don't have coupleRing : %s", pRequestedPC->getName().c_str() ); return COUPLE_MESSAGE_NOT_COUPLE; } if ( !hasCoupleItem( pWaitingPC ) ) { filelog( "CoupleRing.txt", "don't have coupleRing : %s", pWaitingPC->getName().c_str() ); return COUPLE_MESSAGE_NOT_COUPLE; } Assert( hasCoupleItem( pRequestedPC ) ); Assert( hasCoupleItem( pWaitingPC ) ); // 目敲傅阑 绝局拎具 窃~_~; Assert( removeCoupleItem( pRequestedPC ) ); Assert( removeCoupleItem( pWaitingPC ) ); // 目敲概聪历俊辑 庆绢脸促绊 殿废窃 g_pCoupleManager->removeCouple( pRequestedPC, pWaitingPC ); // 目敲捞 柄脸栏聪 Flag 甫 促矫 倒妨霖促. pRequestedPC->getFlagSet()->turnOff( FLAGSET_IS_COUPLE ); pWaitingPC->getFlagSet()->turnOff( FLAGSET_IS_COUPLE ); pRequestedPC->getFlagSet()->save( pRequestedPC->getName() ); pWaitingPC->getFlagSet()->save( pWaitingPC->getName() ); return 0;/* Inventory* pRequestedPCInven = pRequestedPC->getInventory(); Inventory* pWaitingPCInven = pWaitingPC->getInventory(); Item::ItemClass IClass = Item::ITEM_CLASS_COUPLE_ITEM; Item* pRequestedPCCoupleItem = pRequestedPCInven->findItem(IClass , 0); Item* pWaitingPCCoupleItem = pWaitingPCInven->findItem(IClass , 0); if (pRequestedPCCoupleItem != NULL && pWaitingPCCoupleItem != NULL) { pRequestedPCInven->deleteItem(pRequestedPCCoupleItem->getObjectID()); pWaitingPCInven->deleteItem(pWaitingPCCoupleItem->getObjectID()); GCDeleteInventoryItem gcDeleteRequestedPCInventoryCoupleItem; GCDeleteInventoryItem gcDeleteWaitingPCInventoryCoupleItem; gcDeleteRequestedPCInventoryCoupleItem.setObjectID( pRequestedPCCoupleItem->getObjectID() ); gcDeleteWaitingPCInventoryCoupleItem.setObjectID( pWaitingPCCoupleItem->getObjectID() ); pRequestedPC->getPlayer()->sendPacket( &gcDeleteRequestedPCInventoryCoupleItem ); pWaitingPC->getPlayer()->sendPacket( &gcDeleteWaitingPCInventoryCoupleItem ); // 目敲捞 柄脸栏聪 PlayerCreature 俊 ItemNameInfo 档 绝局拎具窍绰淡 ;; // 弊成 NULL 肺 悸泼窍磊 ~_~ pRequestedPC->deleteItemNameInfoList( pRequestedPCCoupleItem->getObjectID() ); pWaitingPC->deleteItemNameInfoList( pWaitingPCCoupleItem->getObjectID() ); // 酒捞袍阑 绝局霖促. pRequestedPCCoupleItem->destroy(); SAFE_DELETE( pRequestedPCCoupleItem ); pWaitingPCCoupleItem->destroy(); SAFE_DELETE( pWaitingPCCoupleItem ); // 谍 巢磊 or 咯磊 茫酒 栋唱具 窍骨肺. return true; } return false; */ __END_CATCH}void WaitForApart::timeExpired() throw(Error){ __BEGIN_TRY // 庆绢咙捞 芭例寸沁促绊 焊郴霖促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode( NPC_RESPONSE_APART_WAIT_TIME_EXPIRED ); PlayerCreature* pWaitingPC = getWaitingPC(); if ( pWaitingPC != NULL ) pWaitingPC->getPlayer()->sendPacket( &gcNPCResponse ); __END_CATCH}bool WaitForApart::removeCoupleItem( PlayerCreature* pPC ) throw(Error){ __BEGIN_TRY // 匙颊啊遏-_-何磐 第柳促. if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>( pPC ); Assert( pSlayer != NULL ); for ( Slayer::WearPart i = Slayer::WEAR_FINGER1 ; i <= Slayer::WEAR_FINGER4 ; ++(int)i ) { Item* pRing = pSlayer->getWearItem( i ); if ( pRing != NULL ) { if ( isMatchCoupleRing( pPC, pRing ) ) {// pSlayer->deleteWearItem( i ); pSlayer->takeOffItem( i, false, true ); pRing->destroy(); SAFE_DELETE( pRing ); GCRemoveFromGear gcRemoveFromGear; gcRemoveFromGear.setSlotID( i ); pPC->getPlayer()->sendPacket( &gcRemoveFromGear ); return true; } } } } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>( pPC ); Assert( pVampire != NULL ); for ( Vampire::WearPart i = Vampire::WEAR_FINGER1 ; i <= Vampire::WEAR_FINGER4 ; ++(int)i ) { Item* pRing = pVampire->getWearItem( i ); if ( pRing != NULL ) { if ( isMatchCoupleRing( pPC, pRing ) ) {// pVampire->deleteWearItem( i ); pVampire->takeOffItem( i, false, true ); pRing->destroy(); SAFE_DELETE( pRing ); GCRemoveFromGear gcRemoveFromGear; gcRemoveFromGear.setSlotID( i ); pPC->getPlayer()->sendPacket( &gcRemoveFromGear ); return true; } } } } else Assert( false ); // 付快胶俊 酒捞袍捞 乐促. Item* pCoupleItem = pPC->getExtraInventorySlotItem(); if ( pCoupleItem == NULL || !isMatchCoupleRing( pPC, pCoupleItem ) ) { // 付快胶俊 酒捞袍捞 绝芭唱 付快胶俊 乐绰 酒捞袍捞 目敲傅捞 酒聪搁 牢亥配府甫 第柳促. pCoupleItem = pPC->getInventory()->findItem( getItemClass( pPC ), getItemType( pPC ) ); if ( pCoupleItem != NULL ) pPC->getInventory()->deleteItem( pCoupleItem->getObjectID() ); } else { pPC->deleteItemFromExtraInventorySlot(); } if ( pCoupleItem == NULL ) return false; GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pCoupleItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); pCoupleItem->destroy(); SAFE_DELETE( pCoupleItem ); return true;/* Item* pPCCoupleItem = getCoupleItem( pPC ); if ( pPCCoupleItem == NULL ) return false; pPC->getInventory()->deleteItem( pPCCoupleItem->getObjectID() ); GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pPCCoupleItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );// pPC->deleteItemNameInfoList( pPCCoupleItem->getObjectID() ); pPCCoupleItem->destroy(); SAFE_DELETE( pPCCoupleItem ); return true;*/ __END_CATCH}Item* WaitForApart::getCoupleItem( PlayerCreature* pPC ) throw(Error){ if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>( pPC ); Assert( pSlayer != NULL ); for ( Slayer::WearPart i = Slayer::WEAR_FINGER1 ; i <= Slayer::WEAR_FINGER4 ; ++(int)i ) { Item* pRing = pSlayer->getWearItem( i ); if ( pRing != NULL ) { if ( isMatchCoupleRing( pPC, pRing ) ) { return pRing; } } } } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>( pPC ); Assert( pVampire != NULL ); for ( Vampire::WearPart i = Vampire::WEAR_FINGER1 ; i <= Vampire::WEAR_FINGER4 ; ++(int)i ) { Item* pRing = pVampire->getWearItem( i ); if ( pRing != NULL ) { if ( isMatchCoupleRing( pPC, pRing ) ) { return pRing; } } } } else Assert( false ); return pPC->getInventory()->findItem( getItemClass( pPC ), getItemType( pPC ) );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?