cglotteryselecthandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· 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 + -
显示快捷键?