uint CGBankAddItemHandler::Execute( CGBankAddItem* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; UINT indexFrom = pPacket->GetIndexFrom(); UINT indexTo = pPacket->GetIndexTo(); GCBankAddItem Msg; switch(pPacket->GetFromType()) { case CGBankAddItem::EQUIP_POS: { pHuman->GetDB()->OverWriteEquip2Bank((HUMAN_EQUIP)indexFrom, indexTo); Msg.SetFromType(GCBankAddItem::EQUIP_POS); Msg.SetIndexFrom(indexFrom); Msg.SetIndexTo(indexTo); } break; case CGBankAddItem::BAG_POS: //Bag->Bank { ItemContainer *pBankContainer = pHuman->GetBankContain(); ItemContainer *pBagContainer = HumanItemLogic::GetContainer(pHuman,indexFrom); Item *pBagItem = pBagContainer->GetItem( pBagContainer->BagIndex2ConIndex(indexFrom) ); //防止连续点击 if(pBagItem->IsEmpty()) { g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAddItemHandler too many click") ; return PACKET_EXE_CONTINUE; } //Item *pBankItem = pBankContainer->GetItem( indexTo ); //合并标志 INT bSplice = 0; INT nSpliceTo = -1; UINT TempIndexTo = indexTo; //自动搜索空格租赁箱1 switch(TempIndexTo) { case CGBankAddItem::AUTO_POS_BOX1: { //先查询是不是有可以合并的物品,(只在本租赁箱中) if( pBagItem->IsCanLay() ) { for( INT i=RENTBOX1_START_INDEX; i<RENTBOX2_START_INDEX; i++ ) { Item *pBankItem = pBankContainer->GetItem(i); // 验证是否可以叠加成功 if( pBankItem->GetItemTableIndex() == pBagItem->GetItemTableIndex() && pBankItem->GetLayedNum() + pBagItem->GetLayedNum() <= pBankItem->GetMaxLayedNum() ) { bSplice = 1; nSpliceTo = i; indexTo = i; break; } } } //没有可以叠加的物品,就寻找一个空格 BYTE indextemp = RENTBOX1_START_INDEX; if(0 == bSplice) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX2_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX2_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankAddItem::AUTO_POS_BOX2: { //先查询是不是有可以合并的物品,(只在本租赁箱中) if( pBagItem->IsCanLay() ) { for( INT i=RENTBOX2_START_INDEX; i<RENTBOX3_START_INDEX; i++ ) { Item *pBankItem = pBankContainer->GetItem(i); // 验证是否可以叠加成功 if( pBankItem->GetItemTableIndex() == pBagItem->GetItemTableIndex() && pBankItem->GetLayedNum() + pBagItem->GetLayedNum() <= pBankItem->GetMaxLayedNum() ) { bSplice = 1; nSpliceTo = i; indexTo = i; break; } } } //没有可以叠加的物品,就寻找一个空格 BYTE indextemp = RENTBOX2_START_INDEX; if(0 == bSplice) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX3_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX3_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankAddItem::AUTO_POS_BOX3: { //先查询是不是有可以合并的物品,(只在本租赁箱中) if( pBagItem->IsCanLay() ) { for( INT i=RENTBOX3_START_INDEX; i<RENTBOX4_START_INDEX; i++ ) { Item *pBankItem = pBankContainer->GetItem(i); // 验证是否可以叠加成功 if( pBankItem->GetItemTableIndex() == pBagItem->GetItemTableIndex() && pBankItem->GetLayedNum() + pBagItem->GetLayedNum() <= pBankItem->GetMaxLayedNum() ) { bSplice = 1; nSpliceTo = i; indexTo = i; break; } } } //没有可以叠加的物品,就寻找一个空格 BYTE indextemp = RENTBOX3_START_INDEX; if(0 == bSplice) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX4_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX4_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankAddItem::AUTO_POS_BOX4: { //先查询是不是有可以合并的物品,(只在本租赁箱中) if( pBagItem->IsCanLay() ) { for( INT i=RENTBOX4_START_INDEX; i<RENTBOX5_START_INDEX; i++ ) { Item *pBankItem = pBankContainer->GetItem(i); // 验证是否可以叠加成功 if( pBankItem->GetItemTableIndex() == pBagItem->GetItemTableIndex() && pBankItem->GetLayedNum() + pBagItem->GetLayedNum() <= pBankItem->GetMaxLayedNum() ) { bSplice = 1; nSpliceTo = i; indexTo = i; break; } } } //没有可以叠加的物品,就寻找一个空格 BYTE indextemp = RENTBOX4_START_INDEX; if(0 == bSplice) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX5_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX5_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankAddItem::AUTO_POS_BOX5: { //先查询是不是有可以合并的物品,(只在本租赁箱中) if( pBagItem->IsCanLay() ) { for( INT i=RENTBOX5_START_INDEX; i<MAX_BANK_SIZE; i++ ) { Item *pBankItem = pBankContainer->GetItem(i); // 验证是否可以叠加成功 if( pBankItem->GetItemTableIndex() == pBagItem->GetItemTableIndex() && pBankItem->GetLayedNum() + pBagItem->GetLayedNum() <= pBankItem->GetMaxLayedNum() ) { bSplice = 1; nSpliceTo = i; indexTo = i; break; } } } //没有可以叠加的物品,就寻找一个空格 BYTE indextemp = RENTBOX5_START_INDEX; if(0 == bSplice) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < MAX_BANK_SIZE ) { indextemp++; } if(indextemp == MAX_BANK_SIZE) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; //检查直接选定的目标是不是可以合并 default: { if( pBagItem->IsCanLay() ) { Item *pItemFrom = pBagContainer->GetItem(pBagContainer->BagIndex2ConIndex(indexFrom)); Item *pItemTo = pBankContainer->GetItem(indexTo); if( pItemFrom->GetItemTableIndex() == pItemTo->GetItemTableIndex() ) { bSplice = 2; nSpliceTo = indexTo; } } } break; } //验证位置的合法性 if( indexFrom>=0 && indexFrom<MAX_BAG_SIZE && indexTo>=0 && (indexTo<(UINT)(pHuman->__GetBankEndIndex()) || (indexTo>=251 && indexTo<=255) ) ) { if(1 == bSplice) //执行合并 { //验证位置里是否有东西 if(ITEMREFPTRISVALID(HumanItemLogic::GetItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, nSpliceTo))) { g_ItemOperator.SpliceItem(pBagContainer, (UINT)pBagContainer->BagIndex2ConIndex(indexFrom), pBankContainer, (UINT)nSpliceTo); Item *pItemBag = pBagContainer->GetItem(pBagContainer->BagIndex2ConIndex(indexFrom)); Item *pItemBank= pBankContainer->GetItem(nSpliceTo); //发一个通知更新银行的消息 GCBankItemInfo MsgBankItemInfo; MsgBankItemInfo.setBankIndex((WORD)nSpliceTo); MsgBankItemInfo.setIsNull(pItemBank->IsEmpty()); pItemBank->SaveValueTo(MsgBankItemInfo.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo ); //发送一个通知背包更新的消息 GCItemInfo MsgBagItemInfo; MsgBagItemInfo.setID((WORD)indexFrom); MsgBagItemInfo.setIsNull(pItemBag->IsEmpty()); pItemBag->SaveValueTo(MsgBagItemInfo.getItem()); pGamePlayer->SendPacket( &MsgBagItemInfo ); } } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAddItemHandler Empty Item indexFrom = %d", indexFrom) ; return PACKET_EXE_CONTINUE; } else if(2 == bSplice) { //验证位置里是否有东西 if(ITEMREFPTRISVALID(HumanItemLogic::GetItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, nSpliceTo))) { g_ItemOperator.MoveSpliceItem(pBagContainer, (UINT)pBagContainer->BagIndex2ConIndex(indexFrom), pBankContainer, (UINT)nSpliceTo); Item *pItemBag = pBagContainer->GetItem(pBagContainer->BagIndex2ConIndex(indexFrom)); Item *pItemBank= pBankContainer->GetItem(nSpliceTo); //发一个通知更新银行的消息 GCBankItemInfo MsgBankItemInfo; MsgBankItemInfo.setBankIndex((WORD)nSpliceTo); MsgBankItemInfo.setIsNull(pItemBank->IsEmpty()); pItemBank->SaveValueTo(MsgBankItemInfo.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo ); //发送一个通知背包更新的消息 GCItemInfo MsgBagItemInfo; MsgBagItemInfo.setID((WORD)indexFrom); MsgBagItemInfo.setIsNull(pItemBag->IsEmpty()); pItemBag->SaveValueTo(MsgBagItemInfo.getItem()); pGamePlayer->SendPacket( &MsgBagItemInfo ); } } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAddItemHandler Empty Item indexFrom = %d", indexFrom) ; return PACKET_EXE_CONTINUE; } else //不执行合并 { //验证位置里是否有东西 if(ITEMREFPTRISVALID(HumanItemLogic::GetItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexTo))) //执行了交换 { //判断银行内的这个物品是不是能够放入背包中 ItemContainer* pBankContainer = pHuman->GetBankContain(); Item *pItem = pBankContainer->GetItem(indexTo); ItemContainer *pHumanCon = HumanItemLogic::GetItemContain(pHuman, pItem->GetItemTableIndex()); if( !pHumanCon ) { //返回错误信息 Msg.SetFromType(GCBankAddItem::ERROR_POS); break; } if( !pHumanCon->IsInContainer(indexFrom) ) { //返回错误信息 Msg.SetFromType(GCBankAddItem::ERROR_POS); break; } g_ItemOperator.ExchangeItem(pBagContainer, pBagContainer->BagIndex2ConIndex(indexFrom), pBankContainer, (UINT)indexTo); //执行了交换 Msg.SetOperateType(GCBankAddItem::OPERATE_SWAP); } else //执行了移动 { g_ItemOperator.MoveItem(pBagContainer, pBagContainer->BagIndex2ConIndex(indexFrom), pBankContainer, (UINT)indexTo); //执行了移动 Msg.SetOperateType(GCBankAddItem::OPERATE_MOVE); } Msg.SetFromType(GCBankAddItem::BAG_POS); Msg.SetIndexFrom(indexFrom); Msg.SetIndexTo(indexTo); } else { Msg.SetFromType(GCBankAddItem::ERROR_POS); } } } else //数据不合法 { Msg.SetFromType(GCBankAddItem::ERROR_POS); } } break; default: break; } pGamePlayer->SendPacket( &Msg ) ; g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAddItemHandler: indexFrom=%d, indexTo=%d", indexFrom, indexTo ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGBankSwapItemHandler::Execute( CGBankSwapItem* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; UINT indexFrom = pPacket->GetIndexFrom(); UINT indexTo = pPacket->GetIndexTo(); GCBankSwapItem Msg; switch(pPacket->GetFromType()) { case CGBankSwapItem::EQUIP_POS: { switch(pPacket->GetToType()) { case CGBankSwapItem::BAG_POS: { } break; case CGBankSwapItem::EQUIP_POS: { } break; case CGBankSwapItem::BANK_POS: { } break; default: break; } } break; case CGBankSwapItem::BAG_POS: { switch(pPacket->GetToType()) { case CGBankSwapItem::BAG_POS: { } break; case CGBankSwapItem::EQUIP_POS: { } break; case CGBankSwapItem::BANK_POS: // Bag->Bank { //验证位置的合法性 if( indexFrom>=0 && indexFrom<MAX_BAG_SIZE && indexTo>=0 && indexTo<(UINT)(pHuman->__GetBankEndIndex()) ) { //验证位置里是否有东西 if( ITEMREFPTRISVALID(HumanItemLogic::GetItem(pHuman, indexFrom)) &&ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexTo)) ) { ItemContainer* pBagContainer = HumanItemLogic::GetContainer(pHuman,indexFrom); ItemContainer* pBankContainer = pHuman->GetBankContain(); Item *pItem1 = pBagContainer->GetItem(pBagContainer->BagIndex2ConIndex(indexFrom)); Item *pItem2 = pBankContainer->GetItem(indexTo); //检测是否能够合并,如果可以,就执行合并而不是交换 if(pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->IsCanLay()) { if(g_ItemOperator.MoveSpliceItem( pBagContainer, (UCHAR)indexFrom, pBankContainer, indexTo) == ITEMOE_SUCCESS) { GCItemInfo msg1; msg1.setID(indexFrom); msg1.setIsNull(pItem1->IsEmpty()); pItem1->SaveValueTo(msg1.getItem()); pGamePlayer->SendPacket(&msg1); GCBankItemInfo msg2; msg2.setBankIndex(indexTo); msg2.setIsNull(pItem2->IsEmpty()); pItem2->SaveValueTo(msg2.getItem()); pGamePlayer->SendPacket(&msg2); } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankSwapItemHandler: MoveSpliceItem" ) ; return PACKET_EXE_CONTINUE ; } else { //判断银行内的这个物品是不是能够放入背包中 ItemContainer* pBankContainer = pHuman->GetBankContain(); Item *pItem = pBankContainer->GetItem(indexTo); ItemContainer *pHumanCon = HumanItemLogic::GetItemContain(pHuman, pItem->GetItemTableIndex()); if( !pHumanCon ) { //返回错误信息 Msg.SetToType(GCBankSwapItem::ERROR_POS); break; } if( !pHumanCon->IsInContainer(indexFrom) ) { //返回错误信息 Msg.SetToType(GCBankSwapItem::ERROR_POS); break; } g_ItemOperator.ExchangeItem(pBagContainer, pBagContainer->BagIndex2ConIndex(indexFrom), pBankContainer, (UINT)indexTo); Msg.SetFromType(GCBankSwapItem::BAG_POS); Msg.SetToType(GCBankSwapItem::BANK_POS); Msg.SetIndexFrom(indexFrom); Msg.SetIndexTo(indexTo); } } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } break; default: break; } } break; case CGBankSwapItem::BANK_POS: { switch(pPacket->GetToType()) { case CGBankSwapItem::BAG_POS: // Bank->Bag { //验证位置的合法性 if( indexTo>=0 && indexTo<MAX_BAG_SIZE && indexFrom>=0 && indexFrom<(UINT)(pHuman->__GetBankEndIndex()) ) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexFrom)) && ITEMREFPTRISVALID(HumanItemLogic::GetItem(pHuman, indexTo)) ) { ItemContainer* pBagContainer = HumanItemLogic::GetContainer(pHuman,indexFrom); ItemContainer* pBankContainer = pHuman->GetBankContain(); //判断银行内的这个物品是不是能够放入背包中 Item *pItem = pBankContainer->GetItem(indexFrom); ItemContainer *pHumanCon = HumanItemLogic::GetItemContain(pHuman, pItem->GetItemTableIndex()); if( !pHumanCon ) { //返回错误信息 Msg.SetToType(GCBankSwapItem::ERROR_POS); break; } if( !pHumanCon->IsInContainer(indexTo) ) { //返回错误信息 Msg.SetToType(GCBankSwapItem::ERROR_POS); break; } g_ItemOperator.ExchangeItem(pBagContainer, pBagContainer->BagIndex2ConIndex(indexTo), pBankContainer, (UINT)indexFrom); //pHuman->GetDB()->SwapBankWithBag(indexTo, indexFrom); Msg.SetFromType(GCBankSwapItem::BANK_POS); Msg.SetToType(GCBankSwapItem::BAG_POS); Msg.SetIndexFrom(indexFrom); Msg.SetIndexTo(indexTo); } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } break; case CGBankSwapItem::EQUIP_POS: { } break; case CGBankSwapItem::BANK_POS: //Bank->Bank { ItemContainer *pBankContainer = pHuman->GetBankContain(); Item *pItem1 = pBankContainer->GetItem( indexFrom ); INT nSpliceType = 0; INT nSpliceTo = -1; //银行容器 ItemContainer* pBankContain = pHuman->GetBankContain(); Item *pItem = pBankContain->GetItem(indexFrom); UINT TempIndexTo = indexTo; if(pItem->IsEmpty()||pItem1->IsEmpty()) { g_pLog->FastSaveLog( LOG_FILE_1, "CGBankSwapItemHandler: Too much click" ) ; return PACKET_EXE_CONTINUE; } switch(TempIndexTo) { case CGBankSwapItem::AUTO_POS_BOX1: { if(pItem1->IsCanLay()) { for(INT i=RENTBOX1_START_INDEX; i<RENTBOX2_START_INDEX; i++) { Item *pItem2 = pBankContain->GetItem(i); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->GetLayedNum() + pItem2->GetLayedNum() <= pItem2->GetMaxLayedNum() ) { nSpliceType = 1; nSpliceTo = i; indexTo = i; break; } } } BYTE indextemp = RENTBOX1_START_INDEX; if(0 == nSpliceType) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX2_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX2_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankSwapItem::AUTO_POS_BOX2: { if(pItem1->IsCanLay()) { for(INT i=RENTBOX2_START_INDEX; i<RENTBOX3_START_INDEX; i++) { Item *pItem2 = pBankContain->GetItem(i); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->GetLayedNum() + pItem2->GetLayedNum() <= pItem2->GetMaxLayedNum() ) { nSpliceType = 1; nSpliceTo = i; indexTo = i; break; } } } BYTE indextemp = RENTBOX2_START_INDEX; if(0 == nSpliceType) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX3_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX3_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankSwapItem::AUTO_POS_BOX3: { if(pItem1->IsCanLay()) { for(INT i=RENTBOX3_START_INDEX; i<RENTBOX4_START_INDEX; i++) { Item *pItem2 = pBankContain->GetItem(i); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->GetLayedNum() + pItem2->GetLayedNum() <= pItem2->GetMaxLayedNum() ) { nSpliceType = 1; nSpliceTo = i; indexTo = i; break; } } } BYTE indextemp = RENTBOX3_START_INDEX; if(0 == nSpliceType) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX4_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX4_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankSwapItem::AUTO_POS_BOX4: { if(pItem1->IsCanLay()) { for(INT i=RENTBOX4_START_INDEX; i<RENTBOX5_START_INDEX; i++) { Item *pItem2 = pBankContain->GetItem(i); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->GetLayedNum() + pItem2->GetLayedNum() <= pItem2->GetMaxLayedNum() ) { nSpliceType = 1; nSpliceTo = i; indexTo = i; break; } } } BYTE indextemp = RENTBOX4_START_INDEX; if(0 == nSpliceType) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < RENTBOX5_START_INDEX ) { indextemp++; } if(indextemp == RENTBOX5_START_INDEX) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; case CGBankSwapItem::AUTO_POS_BOX5: { if(pItem1->IsCanLay()) { for(INT i=RENTBOX5_START_INDEX; i<MAX_BANK_SIZE; i++) { Item *pItem2 = pBankContain->GetItem(i); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() && pItem1->GetLayedNum() + pItem2->GetLayedNum() <= pItem2->GetMaxLayedNum() ) { nSpliceType = 1; nSpliceTo = i; indexTo = i; break; } } } BYTE indextemp = RENTBOX5_START_INDEX; if(0 == nSpliceType) { while( ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indextemp)) && indextemp < MAX_BANK_SIZE ) { indextemp++; } if(indextemp == MAX_BANK_SIZE) { indexTo = indextemp-1; } else { indexTo = indextemp; } } } break; default: { if(pItem->IsCanLay()) { Item *pItem2 = pBankContainer->GetItem(indexTo); if( pItem1->GetItemTableIndex() == pItem2->GetItemTableIndex() ) { nSpliceType = 2; nSpliceTo = indexTo; } } } break; } //验证位置的合法性 if( indexTo>=0 && indexTo<(UINT)(pHuman->__GetBankEndIndex()) && indexFrom>=0 && indexFrom<(UINT)(pHuman->__GetBankEndIndex()) ) { if(1 == nSpliceType) //执行合并 { //验证位置里是否有东西 if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, nSpliceTo))) { g_ItemOperator.SpliceItem(pBankContainer, (UINT)indexFrom, pBankContainer, (UINT)nSpliceTo); Item *pItem1 = pBankContainer->GetItem(indexFrom); Item *pItem2 = pBankContainer->GetItem(nSpliceTo); //发一个通知更新银行的消息 GCBankItemInfo MsgBankItemInfo1; MsgBankItemInfo1.setBankIndex((WORD)indexFrom); MsgBankItemInfo1.setIsNull(pItem1->IsEmpty()); pItem1->SaveValueTo(MsgBankItemInfo1.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo1 ); //发送一个通知背包更新的消息 GCBankItemInfo MsgBankItemInfo2; MsgBankItemInfo2.setBankIndex((WORD)nSpliceTo); MsgBankItemInfo2.setIsNull(pItem2->IsEmpty()); pItem2->SaveValueTo(MsgBankItemInfo2.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo2 ); } } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankSwapItemHandler: empty item" ) ; return PACKET_EXE_CONTINUE; } if(2 == nSpliceType) //执行合并 { //验证位置里是否有东西 if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, nSpliceTo))) { g_ItemOperator.MoveSpliceItem(pBankContainer, (UINT)indexFrom, pBankContainer, (UINT)nSpliceTo); Item *pItem1 = pBankContainer->GetItem(indexFrom); Item *pItem2 = pBankContainer->GetItem(nSpliceTo); //发一个通知更新银行的消息 GCBankItemInfo MsgBankItemInfo1; MsgBankItemInfo1.setBankIndex((WORD)indexFrom); MsgBankItemInfo1.setIsNull(pItem1->IsEmpty()); pItem1->SaveValueTo(MsgBankItemInfo1.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo1 ); //发送一个通知背包更新的消息 GCBankItemInfo MsgBankItemInfo2; MsgBankItemInfo2.setBankIndex((WORD)nSpliceTo); MsgBankItemInfo2.setIsNull(pItem2->IsEmpty()); pItem2->SaveValueTo(MsgBankItemInfo2.getItem()); pGamePlayer->SendPacket( &MsgBankItemInfo2 ); } } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankSwapItemHandler: empty item indexFrom = %d", indexFrom ) ; return PACKET_EXE_CONTINUE; } if(indexTo == indexFrom) { /*Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS);*/ } else if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexFrom))) { if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, indexTo))) { ItemContainer* pBankContainer = pHuman->GetBankContain(); g_ItemOperator.ExchangeItem(pBankContainer, (UINT)indexFrom, pBankContainer, (UINT)indexTo); } else { ItemContainer* pBankContainer = pHuman->GetBankContain(); g_ItemOperator.MoveItem(pBankContainer, (UINT)indexFrom, pBankContainer, (UINT)indexTo); } //pHuman->GetDB()->SwapBankWithBank(indexTo, indexFrom); Msg.SetFromType(GCBankSwapItem::BANK_POS); Msg.SetToType(GCBankSwapItem::BANK_POS); Msg.SetIndexFrom(indexFrom); Msg.SetIndexTo(indexTo); } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } else { Msg.SetFromType(GCBankSwapItem::ERROR_POS); Msg.SetToType(GCBankSwapItem::ERROR_POS); } } break; default: break; } } break; default: break; } pGamePlayer->SendPacket(&Msg); g_pLog->FastSaveLog( LOG_FILE_1, "CGBankSwapItemHandler: indexFrom=%d, indexTo=%d", indexFrom, indexTo ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGBankAcquireListHandler::Execute( CGBankAcquireList* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; GCBankAcquireList Msg; GCBankAcquireList::_BANK_ITEM ItemList[MAX_BANK_SIZE]; if (pHuman->__IsPasswordProtect(MINORPASSWD_INFO::PROTECT_BANK)) { if (pPacket->GetPwdSize()>MAX_PWD) { g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAcquireListHandler PwdSize > MAX_PWD, PwdSize=%d", pPacket->GetPwdSize()) ; return PACKET_EXE_ERROR; } if( pHuman->ComparePasswd(pPacket->GetPassWord()) ) { INT num = 0; for(int i = 0; i< MAX_BANK_SIZE; i++) { _ITEM ItemTemp; if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, i))) { HumanItemLogic::GetBankItem(pHuman, i)->SaveValueTo(&ItemTemp); ItemList[num].bankindex = i; ItemList[num].byNumber = ItemTemp.GetItemCount(); ItemList[num].isBlueEquip = 1; ItemList[num].item_data = ItemTemp; num++; } } Msg.SetBankMoney(pHuman->__GetBankMoney()); Msg.SetBankSize(pHuman->__GetBankEndIndex()); Msg.SetItemNum(num); Msg.SetBankItemList(ItemList); pGamePlayer->SendPacket(&Msg); } else { GCMinorPasswd Msg; Msg.GetMinorPassword()->CleanUp(); Msg.GetMinorPassword()->m_Type = MRETT_ERR_PASSWD; pGamePlayer->SendPacket(&Msg); g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAcquireListHandler error pwd") ; return PACKET_EXE_CONTINUE ; } } else { INT num = 0; for(int i = 0; i< MAX_BANK_SIZE; i++) { _ITEM ItemTemp; if(ITEMREFPTRISVALID(HumanItemLogic::GetBankItem(pHuman, i))) { HumanItemLogic::GetBankItem(pHuman, i)->SaveValueTo(&ItemTemp); ItemList[num].bankindex = i; ItemList[num].byNumber = ItemTemp.GetItemCount(); ItemList[num].isBlueEquip = 1; ItemList[num].item_data = ItemTemp; num++; } } Msg.SetBankMoney(pHuman->__GetBankMoney()); Msg.SetBankSize(pHuman->__GetBankEndIndex()); Msg.SetItemNum(num); Msg.SetBankItemList(ItemList); pGamePlayer->SendPacket(&Msg); } g_pLog->FastSaveLog( LOG_FILE_1, "CGBankAcquireListHandler ok") ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }