/******************************************************************************
	功能:	生成随机装备
	入口:	nSeriesReq: 五行属性
			nLevel: 等级
			nLucky: 运气值
			nVersion: 版本号
	出口:	成功时返回非零, 相关数据在 pItem 所指对象中给出
			失败时返回零
******************************************************************************/
BOOL KItemGenerator::Gen_Item(IN int nItemGenre,
							  IN int nSeriesReq,
							  IN int nLevel,
							  IN int nLucky,
							  IN OUT KItem* pItem)
{
	_ASSERT(this != NULL);
	_ASSERT(pItem != NULL);

	switch (nItemGenre)
	{
	case item_equip:
		{
			int nDetailType, nParticularType, i;
			nDetailType = g_Random(equip_detailnum);
			nParticularType = g_Random(m_EquipNumOfEntries[nDetailType] + 1);
			int naryMALevel[6];
			ZeroMemory(naryMALevel, 6 * sizeof(int));
			for (i = 0; i < 6; i++)
			{
				naryMALevel[i] = g_Random(nLevel / 10 + 1);
				if (!naryMALevel[i])
					break;
			}
			Gen_Equipment(nDetailType, nParticularType, nSeriesReq, nLevel, naryMALevel, nLucky, g_SubWorldSet.GetGameVersion(), pItem);
		}
		break;
	case item_medicine:
		{
			int nDetailType;
			nDetailType = g_Random(medicine_detailnum);
			Gen_Medicine(nDetailType, nLevel, g_SubWorldSet.GetGameVersion(), pItem);
		}
		break;
	case item_task:
		{
			Gen_Quest(nSeriesReq, pItem);			
		}
		break;
	case item_townportal:
		{
			Gen_TownPortal(pItem);
		}
		break;
	default:
		break;
	}
	
	return TRUE;
}
Exemple #2
0
BOOL KItemGenerator::Gen_Item(KItem*					pItem,
							  INT						nItemGenre,
							  INT						nDetailType,
							  INT						nParticular,
							  INT						nLevel,
							  INT						nEnhTimes,
							  CONST KItem::KSTONE_INFO* pStoneInfo,
							  CONST KMagicAttrib*		pAppendAttr,
							  CONST KItem::KREFINE_LOCK* pRefineLock,
							  UINT						uRandSeed,
							  UINT						uRandSeedEx,
							  BOOL						bNew,
							  BOOL						bTemporary,		// = FALSE
							  CONST GUID*				pGuid			// = NULL
							  )
{
	BYTE pBuf[emITEM_COUNT_RANDOM] = {0};
	if (!pItem)
		return	FALSE;
	if (nItemGenre <= ITEM_INVALID_TYPE)
		return	FALSE;
	if (nDetailType <= ITEM_INVALID_TYPE)
		return	FALSE;
	if (nParticular <= ITEM_INVALID_TYPE)
		return	FALSE;

	BOOL bRet = FALSE;

#ifdef GAME_SERVER
	if (!uRandSeed)
	{	// 打散随机种子
		g_Random(-1);
		uRandSeed = g_GetRandomSeed();
	}
	if (!uRandSeedEx)
	{	// 打散随机种子
		g_Random(-1);
		uRandSeedEx = g_GetRandomSeed();
	}
	// 设置物品唯一ID
	if (pGuid)
	{
		pItem->SetGuid(pGuid);
	}
	else
	{
		GUID sGuid;
		QGenerateGUID(&sGuid);
		pItem->SetGuid(&sGuid);
	}

#endif

	if(bNew)
	{
		memset(pItem->m_aryStoneInfo, emSTONE_LOCKED_ID, sizeof(pItem->m_aryStoneInfo));
	}

	m_cRandom.SetSeed(uRandSeed);	// 使用随机种子
	m_cRandomEx.SetSeed(uRandSeedEx);

	pItem->SetRandSeed(uRandSeed);	// 设置随机种子
	pItem->SetRandSeedEx(uRandSeedEx);

	g_cScriptManager.SetIt((QLunaBase*)pItem->m_pLuna);

	switch (nItemGenre)
	{
	case item_equip_general:		// 普通装备类
		if(nDetailType <= equip_foot)
		{
			bRet = Gen_GeneralEquip(pItem, nDetailType, nParticular, nLevel, nEnhTimes, pStoneInfo, pAppendAttr, pRefineLock, bNew);
		}
		else
		{
			// 套装
			bRet = Gen_GeneralSuit(pItem, nDetailType, nParticular, nLevel, bNew);
		}
		
		break;
	case item_medicine:				// 药品类
		bRet = Gen_Medicine(pItem, nDetailType, nParticular);
		break;
	case item_script:				// 脚本道具类
		switch(nDetailType)
		{
		case item_script_stone:
			bRet = Gen_Stone(pItem, nDetailType, nParticular, nLevel);
			break;
		case item_script_ride:
			bRet = Gen_Ride(pItem, nDetailType, nParticular, nLevel);
			break;
		default:
			bRet = Gen_ScriptItem(pItem, nDetailType, nParticular);
			break;
		}
		break;
	case item_pet:					// 宠物道具类
		bRet = Gen_PetItem(pItem, nDetailType, nParticular);
		break;
	case item_skill:				// 技能道具类
		bRet = Gen_SkillItem(pItem, nDetailType, nParticular);
		break;
	case item_quest:				// 任务道具类
		bRet = Gen_TaskQuest(pItem, nDetailType, nParticular);
		break;
	case item_extbag:				// 扩展背包类
		bRet = Gen_ExtendBag(pItem, nDetailType, nParticular);
		break;
	case item_stuff:
		bRet = Gen_StuffItem(pItem, nDetailType, nParticular);
		break;
	case item_plan:
		bRet = Gen_PlanItem(pItem, nDetailType, nParticular);
		break;
	default:
		bRet = FALSE;
	}

	if (bRet)
	{
#ifdef GAME_SERVER
		if (bNew)
			pItem->SetGenTime(KSysService::Time(NULL));
#endif
		/*
		if (nStrengthen > 0)
		{
			pItem->SetStrengthen(nStrengthen); // 设置改造属性
		}
		*/

		pItem->SetTemporary(bTemporary);
		//VERIFY(pItem->EndGenerate());
	}

	return	bRet;
}