cglotteryselecthandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 686 行 · 第 1/2 页

CPP
686
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGLotterySelectHandler.cpp// Written By  :// Description ://////////////////////////////////////////////////////////////////////////////#include "CGLotterySelect.h"#ifdef __GAME_SERVER__#include "DB.h"#include "GamePlayer.h"#include "PlayerCreature.h"#include "NPC.h"#include "ItemUtil.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "ZoneGroupManager.h"#include "Item.h"#include "ItemFactoryManager.h"#include "MonsterInfo.h"#include "PacketUtil.h"#include "Properties.h"#include "GameWorldInfoManager.h"#include "mission/QuestManager.h"#include "mission/EventQuestAdvance.h"#include "Cpackets/CGSay.h"#include "Gpackets/GCNoticeEvent.h"#include "Gpackets/GCDeleteInventoryItem.h"#include "Gpackets/GCNotifyWin.h"#include "Gpackets/GCCreateItem.h"#include <cstdio>#endif	// __GAME_SERVER__void CGLotterySelectHandler::execute (CGLotterySelect* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY __BEGIN_DEBUG_EX		#ifdef __GAME_SERVER__	GamePlayer* pGP = dynamic_cast<GamePlayer*>( pPlayer );	Assert( pGP != NULL );	Creature* pCreature = pGP->getCreature();	Assert( pCreature != NULL );			PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	Assert( pPC != NULL );	filelog( "EventQuest.log", "CGLotterySelectHandler : got [%d:%d:%d] from %s", pPacket->getType(), pPacket->getGiftID(), pPacket->getQuestLevel(),			pPC->getName().c_str() );	switch ( pPacket->getType() )	{		case TYPE_SELECT_LOTTERY:			{				// 牢亥俊辑 涅胶飘 酒捞袍 昏力				QuestID_t qID;				EventQuestAdvance::Status status = pPC->getQuestManager()->getEventQuestAdvanceManager()->getStatus( pPacket->getQuestLevel() );				int ownerQuestLevel = pPC->getQuestManager()->getEventQuestAdvanceManager()->getQuestLevel();				if ( 					( ownerQuestLevel > pPacket->getQuestLevel() && status == EventQuestAdvance::EVENT_QUEST_ADVANCED ) ||						( pPacket->getQuestLevel() == 4 &&  ownerQuestLevel== -1 ) ||					pPC->getQuestManager()->successEventQuest( pPacket->getQuestLevel(), qID ) )				{					pPC->getQuestManager()->getEventQuestAdvanceManager()->rewarded( pPacket->getQuestLevel() );					pPC->getQuestManager()->getEventQuestAdvanceManager()->save();					pPC->getQuestManager()->questRewarded( qID );					pPC->sendCurrentQuestInfo();					list<Item*> iList;					pPC->getInventory()->clearQuestItem(iList);					list<Item*>::iterator itr = iList.begin();					list<Item*>::iterator endItr = iList.end();					for ( ; itr != endItr ; ++itr )					{						GCDeleteInventoryItem gcDII;						gcDII.setObjectID( (*itr)->getObjectID() );						pPC->getPlayer()->sendPacket( &gcDII );						(*itr)->destroy();						SAFE_DELETE( *itr );					}					iList.clear();				}				else				{					filelog( "EventBug.txt", "CGLotterySelectHandler : 汗鼻 急琶捞 朝扼吭绰单 肯丰茄 涅胶飘啊 绝促. -_-; %s[%d:%d]",							pPC->getName().c_str(), pPacket->getQuestLevel(), pPacket->getGiftID() );					return;				}				GCNoticeEvent gcNE;				gcNE.setCode( NOTICE_EVENT_RESULT_LOTTERY );				if ( bWinPrize( pPacket->getGiftID(), pPacket->getQuestLevel() ) ) 				{					// PlayerCreature 俊 沥焊甫 历厘茄促					pPC->setLotto(true);					pPC->setLottoRewardID( pPacket->getGiftID() );					pPC->setLottoQuestLevel( pPacket->getQuestLevel() );					gcNE.setParameter( (uint)1 );				}				else				{					// PlayerCreature 俊 沥焊甫 历厘茄促					pPC->setLotto(false);					pPC->setLottoRewardID( pPacket->getGiftID() );					pPC->setLottoQuestLevel( pPacket->getQuestLevel() );					gcNE.setParameter( (uint)0 );				}				pGP->sendPacket( &gcNE );				filelog( "EventQuest.log", "CGLotterySelectHandler : %d to %s", gcNE.getParameter(), pPC->getName().c_str() );			}			break;		case TYPE_FINISH_SCRATCH:			{				// 寸梅等 版快 叼厚俊 历厘				if ( pPC->isLotto() )				{					// 促矫 false 肺 父甸绢拎具窃.					// 酒丛 淬锅 涅胶飘俊辑 公炼扒 寸梅栏肺 贸府登聪 ;;					pPC->setLotto(false);					Statement* pStmt = NULL;					BEGIN_DB					{						pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();						pStmt->executeQuery( "INSERT INTO EventQuestRewardRecord (PlayerID, RewardID, Time, RealPlayerID) VALUES ( '%s', %d, now(), '%s' )",								pCreature->getName().c_str(),								pPC->getLottoRewardID(),								pPC->getPlayer()->getID().c_str() );						SAFE_DELETE(pStmt);					}					END_DB(pStmt)					// 捞率 辑滚俊 宏肺靛 某胶飘 窍绊 (allworld 绰 秦寸 辑滚绰 贸府 救窃)					GCNotifyWin gcNW;					gcNW.setGiftID( pPC->getLottoRewardID() );					gcNW.setName( pCreature->getName() );					g_pZoneGroupManager->broadcast( &gcNW );					// 傈 岿靛俊 宏肺靛某胶飘秦霖促 					char sCommand[200];					string worldName = g_pGameWorldInfoManager->getGameWorldInfo(g_pConfig->getPropertyInt( "WorldID" ))->getName();					sprintf( sCommand, "*allworld *command NotifyWin %s(%s) %lu", pCreature->getName().c_str(), worldName.c_str(), pPC->getLottoRewardID() );					CGSayHandler::opworld( NULL, sCommand, 0, false );				}				else				{					// 酒聪搁 弊成 涅胶飘 酒捞袍父 牢亥俊 持绢林搁 登绰淀					Item::ItemClass iClass;					ItemType_t iType;					list<OptionType_t> oList;					bool isTimeLimit = false;					bool isLairItem = false;					bool isUnique = false;					MonsterType_t masterType;					switch( pPC->getLottoQuestLevel() )//					switch( pPC->getQuestManager()->getEventQuestAdvanceManager()->getQuestLevel() )					{						case 0:							{								static const string options1[] =								{									"STR+2",									"DEX+2",									"INT+2",									"ASPD+2",									"HP+2"								};								static const string options2[] =								{									"STR+3",									"DEX+3",									"INT+3",									"ASPD+3",									"HP+3"								};								if ( pPC->isSlayer() )								{									Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);									QuestGrade_t qGrade = pSlayer->getTotalAttr( ATTR_BASIC );									iClass = Item::ITEM_CLASS_RING;									if ( qGrade < 131 )									{										iType = 1;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( qGrade < 211 )									{										iType = 2;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( qGrade < 271 )									{										iType = 3;										makeOptionList( options2[ rand()%5 ], oList );									}									else if ( qGrade < 300 )									{										iType = 4;										makeOptionList( options2[ rand()%5 ], oList );									}									else									{										iType = 5;										makeOptionList( options2[ rand()%5 ], oList );									}								}								else if ( pPC->isVampire() )								{									Vampire* pVampire = dynamic_cast<Vampire*>(pPC);									Level_t level = pVampire->getLevel();									iClass = Item::ITEM_CLASS_VAMPIRE_RING;									if ( level < 31 )									{										iType = 1;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( level < 51 )									{										iType = 2;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( level < 71 )									{										iType = 3;										makeOptionList( options2[ rand()%5 ], oList );									}									else if ( level < 91 )									{										iType = 4;										makeOptionList( options2[ rand()%5 ], oList );									}									else									{										iType = 5;										makeOptionList( options2[ rand()%5 ], oList );									}								}								else if ( pPC->isOusters() )								{									Ousters* pOusters = dynamic_cast<Ousters*>(pPC);									Level_t level = pOusters->getLevel();									iClass = Item::ITEM_CLASS_OUSTERS_RING;									if ( level < 31 )									{										iType = 1;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( level < 51 )									{										iType = 2;										makeOptionList( options1[ rand()%5 ], oList );									}									else if ( level < 71 )									{										iType = 3;										makeOptionList( options2[ rand()%5 ], oList );									}									else if ( level < 91 )									{										iType = 4;										makeOptionList( options2[ rand()%5 ], oList );									}									else									{										iType = 5;										makeOptionList( options2[ rand()%5 ], oList );									}								}							}							break;						case 1:							{								static const string oSlayer1[] =								{									"DAM+2",									"VIS+3",									"MP+2",									"LUCK+1",									"HP+2"								};								static const string oSlayer2[] =								{									"DAM+3",									"VIS+3",									"MP+3",									"LUCK+2",									"HP+3"								};								static const string oVampire1[] =								{									"DAM+2",									"VIS+3",									"ASPD+2",									"LUCK+1",									"HP+2"								};								static const string oVampire2[] =								{									"DAM+3",									"VIS+3",									"ASPD+3",									"LUCK+2",									"HP+3"								};								if ( pPC->isSlayer() )								{									Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);									QuestGrade_t qGrade = pSlayer->getTotalAttr( ATTR_BASIC );									iClass = Item::ITEM_CLASS_RING;									if ( qGrade < 131 )									{										iType = 2;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?