/****************************************************************************** 功能: 生成随机装备 入口: 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; }
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; }