⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itemutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	__BEGIN_TRY	Assert( pPC != NULL );	TPOINT pt;	pt.x = -1;	pt.y = -1;	Inventory*		pInventory		= pPC->getInventory();	Item*			pCurItem		= pInventory->getItem( iX, iY );	if ( pCurItem == NULL )		return pt;	ItemType_t		itemType		= pCurItem->getItemType();	itemType = itemType - start;	CoordInven_t	startX = iX - itemType % 3; 	CoordInven_t	startY = iY - itemType / 3;	if ( pInventory->getWidth() - 3 < startX )		return pt;	if ( pInventory->getHeight() - 4 < startY )		return pt;	CoordInven_t curIX = 0, curIY = 0;	ItemType_t compType = start;	for ( curIY = startY; curIY < startY + 4; curIY++ )	{		for ( curIX = startX; curIX < startX + 3; curIX++ )		{			pCurItem = pInventory->getItem( curIX, curIY );			if ( pCurItem == NULL )				return pt;			if ( pCurItem->getItemClass() != Item::ITEM_CLASS_EVENT_TREE || 				 pCurItem->getItemType() != compType )				return pt;			compType++;		}	}	pt.x = startX;	pt.y = startY;	return pt;	__END_CATCH}// 牢亥配府狼 (X0, Y0) - (X1, y1) 裹困狼 酒捞袍阑 瘤款促.void deleteInventoryItem( Inventory* pInventory, CoordInven_t invenX0, CoordInven_t invenY0, CoordInven_t invenX1, CoordInven_t invenY1 ){	__BEGIN_TRY		CoordInven_t curIX = 0, curIY = 0;	Item* pCurItem = 0;	// 嘎苗柳 飘府 炼阿阑 瘤款促.	for ( curIY = invenY0; curIY <= invenY1; curIY++ )	{		for ( curIX = invenX0; curIX <= invenX1; curIX++ )		{			pCurItem = pInventory->getItem( curIX, curIY );			if ( pCurItem != NULL )			{				// 牢亥配府俊辑 瘤款促.				pInventory->deleteItem( pCurItem->getObjectID() );				// DB 俊辑 朝赴促.				pCurItem->destroy();				SAFE_DELETE( pCurItem );			}		}	}	__END_CATCH}typedef struct {	Item::ItemClass itemClass;	ItemType_t		itemType;	CoordInven_t	x;	CoordInven_t	y;	ItemNum_t		num;} NewbieItem;const int maxNewbieItemNum = 8;const NewbieItem NewbieItems[maxNewbieItemNum] ={	{ Item::ITEM_CLASS_SWORD,	0, 4, 3, 1 },	{ Item::ITEM_CLASS_BLADE,	0, 2, 3, 1 },	{ Item::ITEM_CLASS_CROSS,	0, 0, 3, 1 },	{ Item::ITEM_CLASS_MACE,	0, 0, 0, 1 },	{ Item::ITEM_CLASS_AR,		0, 2, 0, 1 },	{ Item::ITEM_CLASS_MAGAZINE,2, 4, 0, 20 },	{ Item::ITEM_CLASS_POTION,	0, 9, 4, 9 },	{ Item::ITEM_CLASS_POTION,	5, 9, 5, 9 },};// 牢亥配府俊 檬焊磊侩 酒捞袍阑 持绢霖促.bool addNewbieItemToInventory( Slayer* pSlayer, bool sendPacket )	throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!");		return false;	}	Zone* pZone = pSlayer->getZone();	Inventory* pInventory = pSlayer->getInventory();	ObjectRegistry& objectRegister = pZone->getObjectRegistry();	if( pInventory == NULL ) return false;	if( pZone == NULL ) return false;	if( pInventory->getItemNum() != 0 ) return false;	list<OptionType_t> olist;	GCCreateItem gcCreateItem;	Item::ItemClass bestWeapon = getBestNewbieWeaponClass( pSlayer );	for( int i=0; i<maxNewbieItemNum; i++ )	{		Item* pItem = g_pItemFactoryManager->createItem( NewbieItems[i].itemClass, NewbieItems[i].itemType, olist );		pItem->setCreateType( Item::CREATE_TYPE_GAME );		objectRegister.registerObject( pItem );		pItem->setNum( NewbieItems[i].num );		bool weared = false;		if( pItem->getItemClass() == bestWeapon )		{			if( !pSlayer->isWear( Slayer::WEAR_RIGHTHAND ) )			{				pSlayer->wearItem( Slayer::WEAR_RIGHTHAND , pItem );				pItem->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_RIGHTHAND, 0, pItem->getItemID() );				weared = true;			}					}		if( !weared )		if( pInventory->addItem( NewbieItems[i].x, NewbieItems[i].y, pItem ) )		{			pItem->create( pSlayer->getName(), STORAGE_INVENTORY, 0, NewbieItems[i].x, NewbieItems[i].y, pItem->getItemID() );			if( sendPacket )			{			/*gcCreateItem.setObjectID( pItem->getObjectID() );			gcCreateItem.setItemClass( pItem->getItemClass() );			gcCreateItem.setItemType( pItem->getItemType() );			gcCreateItem.setObjectType( pItem->getOptionTypeList() );			gcCreateItem.setDurability( pItem->getDurability() );			gcCreateItem.setSilver( pItem->getSilver() );			if (pItem->getItemClass() == Item::ITEM_CLASS_MAGAZINE)			{				Magazine* pMag = dynamic_cast<Magazine*>(pItem);				gcCreateItem.setItemNum(pMag->getNum());			}			else			{				gcCreateItem.setItemNum(pItem->getNum());			}			gcCreateItem.setInvenX( NewbieItems[i][2] );			gcCreateItem.setInvenY( NewbieItems[i][3] );			pPlayer->sendPacket( &gcCreateItem );*/			}		}	}	return true;		__END_CATCH}bool addNewbieGoldToInventory( Slayer* pSlayer, bool sendPacket )	throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieGoldToInventory() function!");		return false;	}	if( pSlayer == NULL ) return false;	if( pSlayer->getGold() != 0 ) return false;	pSlayer->setGoldEx(500);	return true;	__END_CATCH}bool addNewbieItemToGear( Slayer* pSlayer, bool sendPacket )	throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToGear() function!");		return false;	}	if( pSlayer == NULL ) return false;	Zone* pZone = pSlayer->getZone();	ObjectRegistry& objectRegister = pZone->getObjectRegistry();	if( pZone == NULL ) return false;		list<OptionType_t> olist;	if( !pSlayer->isWear( Slayer::WEAR_BODY ) && !pSlayer->isWear( Slayer::WEAR_LEG ) )	{		Item* pCoat = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_COAT, ((pSlayer->getSex()==MALE)?0:1), olist );		Item* pTrouser = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_TROUSER, ((pSlayer->getSex()==MALE)?0:1), olist );		pCoat->setCreateType( Item::CREATE_TYPE_GAME );		pTrouser->setCreateType( Item::CREATE_TYPE_GAME );		objectRegister.registerObject( pCoat );		objectRegister.registerObject( pTrouser );		pCoat->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_BODY, 0, pCoat->getItemID() );		pTrouser->create( pSlayer->getName(), STORAGE_GEAR, 0, Slayer::WEAR_LEG, 0, pTrouser->getItemID() );				pSlayer->wearItem( Slayer::WEAR_BODY, pCoat );		pSlayer->wearItem( Slayer::WEAR_LEG , pTrouser );	}	return true;		__END_CATCH}bool addNewbieGoldToInventory( Ousters* pOusters, bool sendPacket = false ) throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!");		return false;	}	if( pOusters == NULL ) return false;	if( pOusters->getGold() != 0 ) return false;	pOusters->setGoldEx(500);	return true;	__END_CATCH}bool addNewbieItemToInventory( Ousters* pOusters, bool sendPacket = false ) throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieGoldToInventory() function!");		return false;	}	if( pOusters == NULL ) return false;	Zone* pZone = pOusters->getZone();	if ( pZone == NULL ) return false;		Inventory* pInventory = pOusters->getInventory();	if ( pInventory == NULL ) return false;	if ( pInventory->getItemNum() != 0 ) return false;	Item* pPupa = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_PUPA, 0, list<OptionType_t>() );	Item* pLarva = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_LARVA, 0, list<OptionType_t>() );	Assert( pPupa != NULL );	Assert( pLarva != NULL );	pPupa->setNum(9);	pLarva->setNum(9);	pPupa->setCreateType( Item::CREATE_TYPE_GAME );	pLarva->setCreateType( Item::CREATE_TYPE_GAME );	pZone->registerObject( pPupa );	pZone->registerObject( pLarva );		_TPOINT tp;	pInventory->addItem( pPupa, tp );	pPupa->create( pOusters->getName(), STORAGE_INVENTORY, 0, tp.x, tp.y, pPupa->getItemID() );	pInventory->addItem( pLarva, tp );	pLarva->create( pOusters->getName(), STORAGE_INVENTORY, 0, tp.x, tp.y, pLarva->getItemID() );	return true;	__END_CATCH}bool addNewbieItemToGear( Ousters* pOusters, bool sendPacket = false ) throw(Error){	__BEGIN_TRY	if( sendPacket )	{		filelog("NewbieItemError.log", "Someone request packet to addNewbieItemToInventory() function!");		return false;	}	if( pOusters == NULL ) return false;	Zone* pZone = pOusters->getZone();	Assert( pZone != NULL );	if ( pOusters->getWearItem(Ousters::WEAR_RIGHTHAND) != NULL ) return false;	Item* pWeapon = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_OUSTERS_CHAKRAM, 0, list<OptionType_t>() );	Assert( pWeapon != NULL );	pWeapon->setCreateType( Item::CREATE_TYPE_GAME );	pZone->registerObject( pWeapon );	pOusters->wearItem(Ousters::WEAR_RIGHTHAND, pWeapon);	pWeapon->create( pOusters->getName(), STORAGE_GEAR, 0, Ousters::WEAR_RIGHTHAND, 0, pWeapon->getItemID() );	return true;	__END_CATCH}Item::ItemClass getBestNewbieWeaponClass(Slayer* pSlayer)	throw (Error){	__BEGIN_TRY	Assert(pSlayer!=NULL);	Attr_t STR = pSlayer->getSTR();	Attr_t DEX = pSlayer->getDEX();	Attr_t INT = pSlayer->getINT();	// STR	if (STR>=DEX && STR>=INT)	{		return (rand()%2? Item::ITEM_CLASS_SWORD : Item::ITEM_CLASS_BLADE);	}	// DEX	else if (DEX>=STR && DEX>=INT)	{		return Item::ITEM_CLASS_AR;	}	// INT	return (rand()%2? Item::ITEM_CLASS_CROSS : Item::ITEM_CLASS_MACE);	__END_CATCH}void makeOptionList(const string& options, list<OptionType_t>& optionList)	throw(Error){	uint a = 0, b = 0;	//////////////////////////////////////////////	// DEX+1,INT+2	// a     ba     b	//////////////////////////////////////////////	optionList.clear();	if (options.size()<=1) return;	do	{		b = options.find_first_of(',', a);		string  optionName = trim( options.substr(a, b-a) );		OptionType_t optionType;				try {			optionType = g_pOptionInfoManager->getOptionType(optionName);		} catch (NoSuchElementException&) {			throw Error("弊繁 可记捞 绝窜促.");		}		optionList.push_back( optionType );		a = b+1;	} while (b!=string::npos && b < options.size() -1);}voidsaveDissectionItem(Creature* pCreature, Item* pTreasure, int x, int y)	throw (Error){	__BEGIN_TRY	Assert(pCreature!=NULL);	Assert(pTreasure!=NULL);	// relic捞 酒囱 版快父.. DB俊 酒捞袍阑 积己茄促.	// 乔狼 己辑老 版快 捞固 DB俊 乐栏骨肺 DB甫 诀单捞飘秦霖促.	switch (pTreasure->getItemClass())	{			case Item::ITEM_CLASS_RELIC:		{			// Relic篮 DB俊 历厘且 鞘夸 绝促.		}		break;		case Item::ITEM_CLASS_BLOOD_BIBLE:		case Item::ITEM_CLASS_CASTLE_SYMBOL:		case Item::ITEM_CLASS_SWEEPER:		{			char query[128];			sprintf( query, "ObjectID = %lu, Storage=%u, StorageID=%u, X=%u, Y=%u",					pTreasure->getObjectID(), STORAGE_ZONE, pCreature->getZone()->getZoneID(), x, y);			pTreasure->tinysave( query );		}		break;		default:		{			ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( pTreasure->getItemClass(), pTreasure->getItemType() );			Assert(pItemInfo!=NULL);			// 蜡聪农 酒捞袍牢 版快绰			// 酒捞袍 磊眉俊 蜡聪农 汲沥阑 秦林绊			// DB俊 蜡聪农 酒捞袍狼 俺荐甫 函版矫难霖促.			//			// (*) 阁胶磐啊 磷菌阑 锭,			//     阁胶磐 救俊 乐绰 酒捞袍俊绰 蜡聪农 汲沥档 救窍绊			//     DB俊档 俺荐 函版阑 救茄促. 弊贰辑, 瘤况临锭档 公矫茄促.			//     泅犁 蜡聪农 酒捞袍篮 阁胶磐甫 烹秦辑父 唱鸥唱绊			//     CGDissectionCorpse甫 烹秦辑 积己(!)登绊			//     EffectDecayItem阑 烹秦辑父 力芭等促.			if (pItemInfo->isUnique())			{				pTreasure->setUnique();				UniqueItemManager::createItem(pTreasure->getItemClass(), pTreasure->getItemType());				filelog("uniqueItem.txt", "[CGDissectionCorpse] %s %s", pCreature->getName().c_str(), pTreasure->toString().c_str());			}			// 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促.			// ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促.			// by sigi. 2002.10.28			pTreasure->create("", STORAGE_ZONE, pCreature->getZone()->getZoneID(), x, y, pTreasure->getItemID() );		}	}	__END_CATCH}bool canDecreaseDurability( Item* pItem )	throw(Error){	__BEGIN_TRY	if ( pItem == NULL ) return false;	if ( pItem->isUnique() ) return false;	if ( pItem->isTimeLimitItem() ) return false;	if ( pItem->isQuestItem() ) return false;	if ( pItem->isFlagItem() ) return false;	switch ( pItem->getItemClass() )	{		case Item::ITEM_CLASS_VAMPIRE_AMULE

⌨️ 快捷键说明

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