cgshoprequestbuyhandler.cpp

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

CPP
927
字号
	{		//cout << "add ok" << endl;		// pReturnItem苞 pItem捞 鞍促绰 富篮 酒捞袍捞 阶捞绰 酒捞袍捞 		// 酒聪菌促绰 富捞促.		// 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促. 		// ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促.		// by sigi. 2002.10.28		pItem->create(pPC->getName(), STORAGE_INVENTORY, 0, x, y, pItem->getItemID());		// 窜鉴洒 create父 何福搁 DB俊绰 器记狼 肮荐 鞍篮 巴阑 1俺肺 父电促.		// 弊矾骨肺 促矫 技捞宏甫 阂矾辑 角力利牢 肮荐甫 技泼秦拎具 茄促.		//pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, x, y);		// 俺荐甫 官肺 历厘窍档废 create甫 荐沥沁促.		// item历厘 弥利拳. by sigi. 2002.5.13		// OK 菩哦阑 焊辰促.		GCShopBuyOK OKPacket;		OKPacket.setObjectID(NPCID);		OKPacket.setShopVersion(pNPC->getShopVersion(shopType));		OKPacket.setItemObjectID(pItem->getObjectID());		OKPacket.setItemClass(pItem->getItemClass());		OKPacket.setItemType(pItem->getItemType());		OKPacket.setOptionType(pItem->getOptionTypeList());		OKPacket.setDurability(pItem->getDurability());		OKPacket.setItemNum(pItem->getNum());		OKPacket.setSilver(pItem->getSilver());		OKPacket.setGrade(pItem->getGrade());		OKPacket.setEnchantLevel(pItem->getEnchantLevel());		OKPacket.setPrice(playerMoney-itemMoney);		pPlayer->sendPacket(&OKPacket);		log(LOG_BUY_ITEM, pPC->getName(), "", pItem->toString());	}	else	{		//cout << "pile ok" << endl;		log(LOG_BUY_ITEM, pPC->getName(), "", pItem->toString());		// pReturnItem苞 pItem捞 促福促绰 富篮 酒捞袍捞 		// 阶捞绰 酒捞袍捞菌促绰 富捞促. 弊矾骨肺 歹窍扼绊 焊辰 pItem篮 		// 昏力秦 拎具 茄促.		SAFE_DELETE(pItem);		//pReturnItem->save(pPC->getName(), STORAGE_INVENTORY, 0, x, y);		// item历厘 弥利拳. by sigi. 2002.5.13		char pField[80];		sprintf(pField, "Num=%d", pReturnItem->getNum());		pReturnItem->tinysave(pField);		// OK 菩哦阑 焊辰促.		GCShopBuyOK OKPacket;		OKPacket.setObjectID(NPCID);		OKPacket.setShopVersion(pNPC->getShopVersion(shopType));		OKPacket.setItemObjectID(pReturnItem->getObjectID());		OKPacket.setItemClass(pReturnItem->getItemClass());		OKPacket.setItemType(pReturnItem->getItemType());		OKPacket.setOptionType(pReturnItem->getOptionTypeList());		OKPacket.setDurability(pReturnItem->getDurability());		OKPacket.setItemNum(pReturnItem->getNum());		OKPacket.setSilver(pReturnItem->getSilver());		OKPacket.setGrade(pReturnItem->getGrade());		OKPacket.setEnchantLevel(pReturnItem->getEnchantLevel());		OKPacket.setPrice(playerMoney-itemMoney);		pPlayer->sendPacket(&OKPacket);	}	// ItemTrace 肺弊甫 巢变促	if ( pItem != NULL && pItem->isTraceItem() )	{		remainTraceLog( pItem, pNPC->getName(), pCreature->getName(), ITEM_LOG_CREATE, DETAIL_SHOPBUY);	}	//cout << "send OK" << endl;	// mysterious item捞 酒囱 版快..	if (!bMysteriousRack)	{		pNPC->removeShopItem(shopType, shopIndex);	}	if (shopType == SHOP_RACK_NORMAL)	{		// 迫赴 酒捞袍捞 畴钢 酒捞袍捞扼搁 鞍篮 鸥涝, 努贰胶狼 酒捞袍阑 积己茄促.		Item* pNewItem = g_pItemFactoryManager->createItem(IClass, IType, OType);		Assert(pNewItem != NULL);		(pZone->getObjectRegistry()).registerObject(pNewItem);		pNPC->insertShopItem(shopType, shopIndex, pNewItem);	}	else if (bMysteriousRack)	{		// mysterious item牢 版快绰 惑痢篮 弊措肺 滴搁 等促.		//cout << "mysterious item" << endl;	}	else	{		// 迫赴 酒捞袍捞 畴钢 酒捞袍捞 酒聪扼搁,		// 辟贸狼 敲饭捞绢甸俊霸 惑痢狼 拱扒捞 迫啡促绰 荤角阑 舅妨拎具 茄促.		int CenterX = pNPC->getX();		int CenterY = pNPC->getY();		GCShopSold soldpkt;		soldpkt.setObjectID(NPCID);		soldpkt.setShopVersion(pNPC->getShopVersion(shopType));		soldpkt.setShopType(shopType);		soldpkt.setShopIndex(shopIndex);		try		{			for (int zx=CenterX-5; zx<=CenterX+5; zx++)			{				for (int zy=CenterY-5; zy<=CenterY+5; zy++)				{					// 官款靛甫 逞绢啊瘤 臼绰啊 眉农					if (!isValidZoneCoord(pZone, zx, zy)) continue;					Tile & tile = pZone->getTile(zx, zy);					// 吧绢促聪绰 农府媚甫 八祸					if (tile.hasCreature(Creature::MOVE_MODE_WALKING))					{						Creature* pNearCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);						if (pNearCreature != NULL)						{							// 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆							if (pNearCreature->getObjectID() == pPC->getObjectID()) continue;							// 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促.							if (pNearCreature->isPC())							{								Player* pNearPlayer = pNearCreature->getPlayer();								if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt);							}						}					}					// 朝酒促聪绰 农府媚甫 八祸					if (tile.hasCreature(Creature::MOVE_MODE_FLYING))					{						Creature* pNearCreature = tile.getCreature(Creature::MOVE_MODE_FLYING);						if (pNearCreature != NULL)						{							// 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆							if (pNearCreature->getObjectID() == pPC->getObjectID()) continue;							// 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促.							if (pNearCreature->isPC())							{								Player* pNearPlayer = pNearCreature->getPlayer();								if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt);							}						}					}				} // for (ZoneCoord_t zy...) 场			} // for (ZoneCoord_t zx...) 场		}		catch (Throwable& t)		{			filelog("shopbug_packet.log", "%s", t.toString().c_str());		}	} #endif	__END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 葛磐 荤捞努狼 备涝阑 贸府茄促.//////////////////////////////////////////////////////////////////////////////void CGShopRequestBuyHandler::executeMotorcycle (CGShopRequestBuy* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	// 菩哦 沥焊甫 惶酒辰促.	ObjectID_t      NPCID       = pPacket->getObjectID();	ShopRackType_t  shopType    = pPacket->getShopType();	BYTE            shopIndex   = pPacket->getShopIndex();	ZoneCoord_t     x           = pPacket->getX();	ZoneCoord_t     y           = pPacket->getY();	GamePlayer*     pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*       pCreature   = pGamePlayer->getCreature();	PlayerCreature* pPC         = dynamic_cast<PlayerCreature*>(pCreature);	Zone*           pZone       = pPC->getZone();	NPC*            pNPC        = dynamic_cast<NPC*>(pZone->getCreature(NPCID));	// NoSuch力芭. by sigi. 2002.5.2	if (pNPC==NULL) return;	Item*           pItem       = pNPC->getShopItem(shopType, shopIndex);	Price_t         itemMoney   = g_pPriceManager->getPrice(pItem, pNPC->getMarketCondSell(), shopType, pPC);	Item::ItemClass IClass;	ItemType_t      IType;	Inventory* pInventory  = pPC->getInventory();	Gold_t     playerMoney = pPC->getGold();	list<OptionType_t> optionNULL;	Item* pTestKey = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_KEY, 0, optionNULL);	Assert(pTestKey != NULL);	if (playerMoney < itemMoney)	{		GCShopBuyFail gcShopBuyFail;		gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_MONEY);		gcShopBuyFail.setAmount(0);		pPlayer->sendPacket(&gcShopBuyFail);		SAFE_DELETE(pTestKey);		return;	}	if (!pInventory->canAddingEx(x, y, pTestKey))	{		GCShopBuyFail gcShopBuyFail;		gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_SPACE);		gcShopBuyFail.setAmount(0);		pPlayer->sendPacket(&gcShopBuyFail);		SAFE_DELETE(pTestKey);		return;	}		// 敲饭捞绢啊 魂 酒捞袍捞 胶其既 酒捞袍捞扼搁 惑痢 滚傈阑 棵赴促.	if (shopType == SHOP_RACK_SPECIAL) pNPC->increaseShopVersion(shopType);	// 敲饭捞绢狼 捣阑 临牢促.	//pPC->setGoldEx(playerMoney - itemMoney);	// by sigi. 2002.9.4	pPC->decreaseGoldEx(itemMoney);		// 刚历 葛磐 荤捞努阑 NPC狼 柳凯厘俊辑 波郴绢 粮俊促 嘿牢促.	// 臂绊 DB俊促啊 葛磐 荤捞努捞 迫啡促绰 巴阑 敬促.	TPOINT pt = pZone->addItem(pItem, pPC->getX(), pPC->getY(), false);	if (pt.x == -1)	{		// 辑滚 螟狼 NPC俊霸辑 规陛 迫赴 葛磐 荤捞努阑 瘤款促.		//pNPC->removeShopItem(shopType, shopIndex);		//SAFE_DELETE(pItem);		// 坷配官捞甫 粮俊促 歹且 荐啊 绝菌促. 浆飘... 傲 府畔窍磊.		cerr << "######################################################" << endl;		cerr << "# CRITICAL ERROR!!! Cannot add MOTORCYCLE to ZONE!!! #" << endl;		cerr << "######################################################" << endl;		return;	}	pItem->create(pPC->getName(), STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y);	ItemID_t MotorcycleID = pItem->getItemID();	// 葛磐荤捞努阑 欢欧 季磐俊 殿废秦 霖促.	MotorcycleBox* pBox = new MotorcycleBox(dynamic_cast<Motorcycle*>(pItem), pZone, pt.x, pt.y);	Assert(pBox != NULL);	g_pParkingCenter->addMotorcycleBox(pBox);	// 促澜栏肺 规陛 积己茄 葛磐 荤捞努俊 嘎绰 虐甫 积己茄促.	// 臂绊 DB俊促啊 葛磐 荤捞努 虐啊 敲饭捞绢俊霸 逞绢艾促绰 巴阑 敬促.	Item* pKey = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_KEY, 2, optionNULL);	Assert(pKey != NULL);	(pZone->getObjectRegistry()).registerObject(pKey);	dynamic_cast<Key*>(pKey)->setTarget(MotorcycleID);	pKey->create(pPC->getName(), STORAGE_INVENTORY, 0, x, y);	// 葛磐 荤捞努 虐甫 敲饭捞绢狼 牢亥配府俊 歹茄促.	pInventory->addItemEx(x, y, pKey);	// 辑滚 螟狼 NPC俊霸辑 规陛 迫赴 葛磐 荤捞努阑 瘤款促.	pNPC->removeShopItem(shopType, shopIndex);	// OK 菩哦阑 焊辰促.	GCShopBuyOK OKPacket;	OKPacket.setObjectID(NPCID);	OKPacket.setShopVersion(pNPC->getShopVersion(shopType));	OKPacket.setItemObjectID(pKey->getObjectID());	OKPacket.setItemClass(pKey->getItemClass());	OKPacket.setItemType(pKey->getItemType());	OKPacket.setOptionType(pKey->getOptionTypeList());	OKPacket.setDurability(pKey->getDurability());	OKPacket.setItemNum(1);	OKPacket.setSilver(pKey->getSilver());	OKPacket.setGrade(pKey->getGrade());	OKPacket.setEnchantLevel(pKey->getEnchantLevel());	OKPacket.setPrice(playerMoney-itemMoney);	pPlayer->sendPacket(&OKPacket);	// 迫赴 葛磐 荤捞努捞 畴钢 葛磐 荤捞努捞扼搁...	// 鞍篮 鸥涝, 努贰胶狼 葛磐 荤捞努阑 积己茄促.	if (shopType == SHOP_RACK_NORMAL)	{		IClass = Item::ITEM_CLASS_MOTORCYCLE;		IType  = pItem->getItemType();		const list<OptionType_t>& OType  = pItem->getOptionTypeList();		Item* pNewItem = g_pItemFactoryManager->createItem(IClass, IType, OType);		Assert(pNewItem != NULL);		(pZone->getObjectRegistry()).registerObject(pNewItem);		pNPC->insertShopItem(shopType, shopIndex, pNewItem);	}	else if (shopType == SHOP_RACK_MYSTERIOUS)	{	}	else	{		// 迫赴 葛磐 荤捞努捞 畴钢 葛磐 荤捞努捞 酒聪扼搁 辟贸狼 敲饭捞绢甸俊霸		// 惑痢狼 葛磐 荤捞努捞 迫啡促绰 荤角阑 舅妨拎具 茄促.				int         CenterX       = pNPC->getX();		int         CenterY       = pNPC->getY();		Creature*   pNearCreature = NULL;		Player*     pNearPlayer   = NULL;		GCShopSold  soldpkt;		soldpkt.setObjectID(NPCID);		soldpkt.setShopVersion(pNPC->getShopVersion(shopType));

⌨️ 快捷键说明

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