cguseitemfrominventoryhandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 2,063 行 · 第 1/5 页

CPP
2,063
字号
	// 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊,	// 俊矾 眉农甫 措气 绵家茄促.	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);	SlayerPortalItem* pPortalItem = dynamic_cast<SlayerPortalItem*>(pItem);	Assert(pSlayer != NULL);	Assert(pPortalItem != NULL);	// 父距 Relic阑 家蜡窍绊 乐促搁,秋扁甫 何甫 荐 绝促.	bool bHasRelic        = false;	if (pSlayer->hasRelicItem() || pSlayer->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) || pSlayer->isFlag( Effect::EFFECT_CLASS_HAS_SWEEPER) )	{		bHasRelic         = true;	}	// 籍拳登绢 乐促搁 秋扁甫 何甫 荐 绝促.	bool bParalyze = pSlayer->isFlag( Effect::EFFECT_CLASS_PARALYZE ) ? true : false;	bool bZoneTypeCheck   = (pZone->getZoneType() == ZONE_NORMAL_FIELD) ? true : false;	bool bCanUseCheck     = pSlayer->isRealWearing(pPortalItem);	bool bChargeCheck     = (pPortalItem->getCharge() > 0) ? true : false;	//bool bMotorcycleCheck = pSlayer->hasRideMotorcycle();	bool bZoneCheck		= pZone->isNoPortalZone();	//if (bZoneTypeCheck && bCanUseCheck && bChargeCheck && !bMotorcycleCheck)	if (bZoneTypeCheck && bCanUseCheck && bChargeCheck && !bHasRelic && !bParalyze && !bZoneCheck)	{		// 酒捞袍俊 瞒瘤甫 临捞绊, 浇饭捞绢俊霸 捞棋飘甫 吧绢霖促.		pPortalItem->setCharge(pPortalItem->getCharge()-1);		//pPortalItem->save(pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // 酒捞袍 沥焊甫 历厘茄促.        // 酒捞袍 历厘 弥利拳. by sigi. 2002.5.13        char pField[80];	    sprintf(pField, "Charge=%d", pPortalItem->getCharge());		pPortalItem->tinysave(pField);		pSlayer->setFlag(Effect::EFFECT_CLASS_SLAYER_PORTAL);		// 林函俊促啊 秋扁 歹窍扼绰 菩哦阑 谎赴促.		GCAddHelicopter gcAddHelicopter;		gcAddHelicopter.setObjectID(pSlayer->getObjectID());		gcAddHelicopter.setCode(0);		pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddHelicopter);		// 牢刘 菩哦阑 焊郴霖促.		GCUseOK gcUseOK;		pPlayer->sendPacket(&gcUseOK);	}	else	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);	}#endif    __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeOustersSummonItem(CGUseItemFromInventory* pPacket, Player* pPlayer)	throw(ProtocolException, Error){	__BEGIN_DEBUG_EX __BEGIN_TRY#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->isOusters());	Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);	OustersSummonItem* pSummonItem = dynamic_cast<OustersSummonItem*>(pItem);	Assert(pOusters != NULL);	Assert(pSummonItem != NULL);	// 父距 Relic阑 家蜡窍绊 乐促搁,秋扁甫 何甫 荐 绝促.	bool bHasRelic        = false;	if (pOusters->hasRelicItem()||pOusters->isFlag(Effect::EFFECT_CLASS_REFINIUM_TICKET)		||pOusters->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH ))	{		bHasRelic         = true;	}	// 籍拳登绢 乐促搁 秋扁甫 何甫 荐 绝促.	bool bParalyze = pOusters->isFlag( Effect::EFFECT_CLASS_PARALYZE ) ? true : false;	bool bCanUseCheck     = pOusters->isRealWearing(pSummonItem);	bool bChargeCheck     = (pSummonItem->getCharge() > 0) ? true : false;	//bool bMotorcycleCheck = pOusters->hasRideMotorcycle();	SkillType_t       SkillType  = SKILL_SUMMON_SYLPH;	SkillInfo*        pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);	OustersSummonItemInfo*	pItemInfo	 = dynamic_cast<OustersSummonItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ));	Assert( pItemInfo != NULL );	int RequireMP	= (int)pSkillInfo->getConsumeMP();	bool bManaCheck	= hasEnoughMana(pOusters, RequireMP);	bool bTileCheck = checkZoneLevelToUseSkill(pOusters);	bool bEffect	= pOusters->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH );	bool bSatisfyRequire = pOusters->satisfySkillRequire( pSkillInfo );	bool bRangeCheck = checkZoneLevelToUseSkill(pOusters);	if (bCanUseCheck && bChargeCheck && !bHasRelic && !bParalyze && bTileCheck		&& bManaCheck && !bEffect && bSatisfyRequire && bRangeCheck)	{		GCModifyInformation gcMI;		decreaseMana(pOusters, RequireMP, gcMI);		// 酒捞袍俊 瞒瘤甫 临捞绊, 浇饭捞绢俊霸 捞棋飘甫 吧绢霖促.		pSummonItem->setCharge(pSummonItem->getCharge()-1);		//pSummonItem->save(pOusters->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // 酒捞袍 沥焊甫 历厘茄促.        // 酒捞袍 历厘 弥利拳. by sigi. 2002.5.13        char pField[80];	    sprintf(pField, "Charge=%d", pSummonItem->getCharge());		pSummonItem->tinysave(pField);		// 捞蒲飘 努贰胶甫 父甸绢 嘿牢促.		EffectSummonSylph* pEffect = new EffectSummonSylph(pOusters);		pEffect->setEClass( (Effect::EffectClass)pItemInfo->getEffectID() );		pOusters->addEffect(pEffect);		pOusters->setFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH );		OUSTERS_RECORD prev;		pOusters->getOustersRecord(prev);		pOusters->initAllStat();		pOusters->addModifyInfo(prev, gcMI);		// 牢刘 菩哦阑 焊郴霖促.		GCUseOK gcUseOK;		pPlayer->sendPacket(&gcUseOK);		pPlayer->sendPacket(&gcMI);		GCAddEffect gcAddEffect;		gcAddEffect.setObjectID( pOusters->getObjectID() );		gcAddEffect.setEffectID( pEffect->getSendEffectClass() );		gcAddEffect.setDuration( pEffect->getRemainDuration() );		pZone->broadcastPacket( pOusters->getX(), pOusters->getY(), &gcAddEffect, pOusters );		pPlayer->sendPacket( &gcAddEffect );		if ( pOusters->getPetInfo() != NULL )		{			pOusters->setPetInfo( NULL );			sendPetInfo( pGamePlayer, true );		}	}	else	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);	}	#endif	__END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeKeyItem(CGUseItemFromInventory* pPacket, Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	////cout << pPacket->toString().c_str() << endl;	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();	// SLAYER啊 酒聪扼搁 坷配官捞甫 龋免且 荐 绝促.	Assert(pCreature->isSlayer());	Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		// 家券 啊瓷 惑怕 汲沥捞 登绢乐绢具 茄促.	// 内付 惑怕扼搁 荤侩且 荐 绝促.	// 酒捞袍捞 凯艰 酒捞袍捞 酒聪扼搁, 坷配官捞甫 龋免且 荐 绝促.	// 付胶磐 饭绢唱 器呕 荤侩 阂啊 瘤开浚 坷配官捞 家券 阂啊	// premium 荤侩磊父 龋免啊瓷窍促.	if (!g_pVariableManager->isSummonMotorcycle()		|| pSlayer->hasRideMotorcycle()		|| pItem->getItemClass() != Item::ITEM_CLASS_KEY		|| pSlayer->isFlag(Effect::EFFECT_CLASS_COMA)		|| (pZone->getZoneLevel(pCreature->getX(), pCreature->getY()) & SAFE_ZONE)		|| pZone->isMasterLair() || pZone->isNoPortalZone()		|| (!pGamePlayer->isPremiumPlay() && !pGamePlayer->isPayPlaying())		|| g_pFlagManager->isInPoleField( ZONE_COORD( pZone->getZoneID(), pCreature->getX(), pCreature->getY() ) )	)	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);		return;	}	// 扁粮俊 酒捞袍捞 积己登绢 乐绰瘤甫 犬牢茄促.	ItemID_t targetID = dynamic_cast<Key*>(pItem)->getTarget();	Statement* pStmt   = NULL;	Result*    pResult = NULL;	// targetID啊 0牢 版快绰.. targetID(motorcycleObject狼 ItemID)啊 汲沥捞 救等 版快促.	// 捞 锭绰 烙矫肺 targetID甫 key狼 ItemID客 鞍霸 窍搁 等促...绊 夯促.	// targetID啊 motorcycle狼 itemID肺 甸绢啊扁 锭巩俊..	// broadcasting 殿俊辑.. Assert()俊 狼秦辑 促款登菌促...绊 焊咯柳促.  - -;	// by sigi. 2002.12.25 x-mas T_T;	if (targetID==0)	{		Key* pKey = dynamic_cast<Key*>(pItem);		Assert( pKey != NULL );		targetID = pKey->setNewMotorcycle(pSlayer);/*		// (!) MotorcycleObject甫 积己窍绊 MotorcycleItemID==Target甫 罐酒具 茄促.		// 捞 内靛 力惯 窃荐肺 哗扁甫.. -_-; by sigi		Key* pKey = dynamic_cast<Key*>(pItem);		KeyInfo* pKeyInfo = dynamic_cast<KeyInfo*>(g_pItemInfoManager->getItemInfo( pKey->getItemClass(), pKey->getItemType() ));		Assert( pKeyInfo != NULL );		list<OptionType_t> option;		ItemType_t motorcycleType = pKeyInfo->getTargetType();		if ( pKeyInfo->getOptionType() != 0 ) option.push_back( pKeyInfo->getOptionType() );		Item* pMotorcycle = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MOTORCYCLE, motorcycleType, option);		Assert(pMotorcycle != NULL);		(pZone->getObjectRegistry()).registerObject(pMotorcycle);		pMotorcycle->create(pSlayer->getName(), STORAGE_ZONE, pZone->getZoneID(), pSlayer->getX(), pSlayer->getY());		pKey->setTarget(pMotorcycle->getItemID());		targetID = pMotorcycle->getItemID();		// targetID甫 DB俊档 update矫难具 茄促.		BEGIN_DB		{			pStmt   = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();			pResult = pStmt->executeQuery(						"UPDATE KeyObject SET Target=%lu WHERE ItemID=%lu", 									targetID, pKey->getItemID());			SAFE_DELETE(pStmt);		}		END_DB(pStmt)		// log		filelog("motorcycle.txt", "[SetTargetID] Owner = %s, KeyID = %lu, Key's targetID = %lu, MotorcycleID = %lu", pSlayer->getName().c_str(), pKey->getItemID(), pKey->getTarget(), pMotorcycle->getItemID() );		// 关俊辑 pMotorcycle阑 荤侩秦档 登摆瘤父, 扁粮 内靛 救 扒靛副妨绊 咯扁辑 瘤款促. 		SAFE_DELETE(pMotorcycle);*/	}	else	{		// 茄锅 葛磐荤捞努捞尔 虐尔 楷搬灯绰单 葛磐荤捞努阑 穿啊 磊操 瘤快唱焊促.		// 虐俊 楷搬等 葛磐荤捞努捞 角力肺 叼厚俊 乐绰瘤 眉农窍绊 绝栏搁 货肺 父甸绢辑 持绢霖促.		BEGIN_DB		{			pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();			pResult = pStmt->executeQuery("SELECT ItemID FROM MotorcycleObject WHERE ItemID=%lu", targetID);						if ( !pResult->next() )			{				Key* pKey = dynamic_cast<Key*>(pItem);				Assert( pKey != NULL );				targetID = pKey->setNewMotorcycle(pSlayer);			}			SAFE_DELETE(pStmt);		}		END_DB(pStmt);	}		// 鞘混 规绢 内靛 -_-;	if (targetID==0)	{		filelog("errorLog.txt", "[ActionRedeemMotorcycle] itemID=%lu, motorItemID=%lu", (int)pItem->getItemID(), (int)targetID);		return;	}	if (g_pParkingCenter->hasMotorcycleBox(targetID)) 	{		////cout << "扁粮俊 阂妨柳 坷配官捞啊 乐嚼聪促" << endl;		MotorcycleBox* pMotorcycleBox = g_pParkingCenter->getMotorcycleBox(targetID);		if (pMotorcycleBox!=NULL			&& !pMotorcycleBox->isTransport())		{			Zone* pMotorZone = pMotorcycleBox->getZone();			ZoneCoord_t motorX = pMotorcycleBox->getX();			ZoneCoord_t motorY = pMotorcycleBox->getY();			Motorcycle* pMotorcycle = pMotorcycleBox->getMotorcycle();			// 鞍篮 粮俊 乐绰 版快			// 芭府啊 呈公 啊鳖快搁 何福瘤 富磊~			if (pMotorZone!=pZone				|| pSlayer->getDistance(motorX, motorY) > 15)			{				// 促弗 zone栏肺 捞悼吝捞扼绊 钎矫茄促.				pMotorcycleBox->setTransport();				// motorcycle阑 slayer狼 zone栏肺 颗变促.				pMotorZone->transportItem( motorX, motorY, pMotorcycle, 											pZone, pSlayer->getX(), pSlayer->getY() );				// Use OK 措侩捞促.				// Use窍搁 酒捞袍捞 荤扼瘤带啊 弊犯瘤 酵促. - -;				/*				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				*/				// 茄悼救 delay甫 拎具窍绰单..			}		}		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);		return;	}	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery("SELECT ItemID, ItemType, OptionType, Durability FROM MotorcycleObject WHERE ItemID=%lu", targetID);		ItemID_t     itemID;		ItemType_t   itemType;		list<OptionType_t> optionTypes;		Durability_t durability;		bool bFound = false;		if (pResult->next())		{			bFound = true;			itemID     = pResult->getInt(1);			itemType   = pResult->getInt(2);			string optionField = pResult->getString(3);			setOptionTypeFromField(optionTypes, optionField);			durability = pResult->getInt(4);		}		else		{			itemID     = targetID;			itemType   = 0;			durability = 300;		}		// 货肺款 坷配官捞 按眉甫 积己茄促.		Motorcycle* pMotorcycle = new Motorcycle(itemType, optionTypes);		Assert(pMotorcycle != NULL);		pMotorcycle->setItemID(itemID);		pMotorcycle->setDurability(durability);		// Object ID 且寸罐扁		(pZone->getObjectRegistry()).registerObject(pMotorcycle);

⌨️ 快捷键说明

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