BOOL ItemCreateRuler::CreateMedicAttrib(_ITEM_TYPE itemType,_ITEM& it) { __ENTER_FUNCTION COMMITEM_INFO_TB* pGET = g_ItemTable.GetCommItemInfoTB( itemType.ToSerial()); if(pGET) { it.m_ItemIndex = pGET->m_nTableIndex; it.GetMedicData()->m_nLevel = pGET->m_nLevel; it.GetMedicData()->m_nBasePrice = pGET->m_nBasePrice; it.m_RulerID = (CHAR)pGET->m_nRulerID; it.GetMedicData()->m_nLayedNum = pGET->m_nLayedNum; it.GetMedicData()->m_nScriptID = pGET->m_nScriptID; it.GetMedicData()->m_nSkillID = pGET->m_nSkillID; it.GetMedicData()->m_nCount = 1; //叠放物品,产生一个 it.GetMedicData()->m_bCosSelf = pGET->m_bCosSelf; it.GetMedicData()->m_nReqSkill = pGET->m_nReqSkill; it.GetMedicData()->m_nReqSkillLevel = pGET->m_nReqSkillLevel; it.GetMedicData()->m_TargetType = pGET->m_TargetType; return TRUE; } else Assert(FALSE); return FALSE; __LEAVE_FUNCTION return FALSE; }
BOOL ItemCreateRuler::CreateStoreMapAttrib(_ITEM_TYPE itemType,_ITEM& it) { __ENTER_FUNCTION STORE_MAP_INFO_TB* pGET = g_ItemTable.GetStoreMapTB(itemType.ToSerial()); if(pGET) { it.m_ItemIndex = pGET->m_nTableIndex; //it.m_ItemType = pGET->m_ItemType; it.GetStoreMapData()->m_nLevel = pGET->m_nLevel; it.m_RulerID = (CHAR)pGET->m_nRulerID; it.GetStoreMapData()->m_xPos = pGET->m_xPos; it.GetStoreMapData()->m_zPos = pGET->m_zPos; it.GetStoreMapData()->m_SceneID = pGET->m_SceneID; it.GetStoreMapData()->m_GrowType = pGET->m_GrowPointType; return TRUE; } else Assert(FALSE); return FALSE; __LEAVE_FUNCTION return FALSE; }
BOOL ItemCreateRuler::CreateGemAttrib(_ITEM_TYPE itemType,_ITEM& it) { __ENTER_FUNCTION GEMINFO_TB* pGET = g_ItemTable.GetGemInfoTB( itemType.ToSerial()); if(pGET) { it.m_ItemIndex = pGET->m_nTableIndex; it.GetGemData()->m_nPrice = pGET->m_nPrice; it.m_RulerID = (CHAR)pGET->m_nRulerID; it.GetGemData()->m_Attr.m_AttrType = pGET->m_GenAttr.m_AttrType; it.GetGemData()->m_Attr.m_Value.m_Value = pGET->m_GenAttr.m_Value.m_Value; return TRUE; } else Assert(FALSE); return FALSE; __LEAVE_FUNCTION return FALSE; }
BOOL ItemManager::CreateItem(ITEM_LOG_PARAM* pLogParam,_ITEM_TYPE it,_ITEM& item,INT iQuality/* =1 */) { __ENTER_FUNCTION Assert(pLogParam); Assert(it.isNull() == FALSE); switch(it.m_Class) { case ICLASS_EQUIP: return _CreateEquipFromTable(pLogParam,it, iQuality,item); break; case ICLASS_MATERIAL: return _CreateMedicFromTable(it,item); break; case ICLASS_COMITEM: return _CreateMedicFromTable(it,item); break; case ICLASS_TASKITEM: return _CreateMedicFromTable(it,item); break; case ICLASS_GEM: return _CreateGemFromTable(it,item); break; case ICLASS_STOREMAP: return _CreateStoreMapFromTable(it,item); break; case ICLASS_TALISMAN: Assert(FALSE); break; case ICLASS_GUILDITEM: Assert(FALSE); break; default: Assert(FALSE); return FALSE; } Assert(item.IsNullType() == FALSE); __LEAVE_FUNCTION return FALSE; }
BOOL ItemCreateRuler::CreateBlueEquipAttrib(ITEM_LOG_PARAM* pLogParam,_ITEM_TYPE itemType,INT iPlayerLvl,_ITEM& it,INT& quality) { __ENTER_FUNCTION Assert(pLogParam); BLUE_EQUIP_TB* pGET = g_ItemTable.GetBlueItemTB(itemType.ToSerial()); if(pGET) { it.m_ItemIndex = pGET->m_IndexID; it.m_RulerID = (CHAR)pGET->m_RulerID; it.GetEquipData()->m_EquipPoint = pGET->m_EquipPoint; it.GetEquipData()->m_CurDurPoint = pGET->m_MaxDur; it.GetEquipData()->m_CurDamagePoint = 0; it.GetEquipData()->m_MaxDurPoint = pGET->m_MaxDur; /* * 宝石生成几率,程序写死 */ switch(pGET->m_MaxGem) { case 0: { it.GetEquipData()->m_GemMax = 0; } break; case 1: { if(ItemRander::DoubleRand()>0.8) { it.GetEquipData()->m_GemMax = 1; } else { it.GetEquipData()->m_GemMax = 0; } } break; case 2: { double dRand = ItemRander::DoubleRand(); if(dRand>0.9) { it.GetEquipData()->m_GemMax = 2; } else if(dRand>0.6) { it.GetEquipData()->m_GemMax = 1; } else { it.GetEquipData()->m_GemMax = 0; } } break; case 3: { double dRand = ItemRander::DoubleRand(); if(dRand>0.96) { it.GetEquipData()->m_GemMax = 3; } else if(dRand>0.8) { it.GetEquipData()->m_GemMax = 2; } else if(dRand>0.4) { it.GetEquipData()->m_GemMax = 1; } else { it.GetEquipData()->m_GemMax = 0; } } break; default: Assert(FALSE); } it.GetEquipData()->m_FaileTimes = 0; it.GetEquipData()->m_NeedLevel = pGET->m_ReqLevel; it.GetEquipData()->m_StoneCount = 0; it.GetEquipData()->m_BasePrice = pGET->m_BasePrice; it.GetEquipData()->m_SetNum = pGET->m_EquipSetNum; it.GetEquipData()->m_MaxNum = pGET->m_EquipSetMaxNum; pLogParam->GemMax = it.GetEquipData()->m_GemMax; INT iAttrCount = 0; _ITEM_ATTR itemAttrib; //蓝装基本属性 if(pGET->m_AttackSpeed>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_TIME; itemAttrib.m_Value.m_Value = pGET->m_AttackSpeed; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_MagicAttack>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_M; itemAttrib.m_Value.m_Value = pGET->m_MagicAttack; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_MagicDefense>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_DEFENCE_M; itemAttrib.m_Value.m_Value = pGET->m_MagicDefense; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_PhysicAttack>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_P; itemAttrib.m_Value.m_Value = pGET->m_PhysicAttack; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_PhysicDefense>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_DEFENCE_P; itemAttrib.m_Value.m_Value = pGET->m_PhysicDefense; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_Miss >0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_MISS; itemAttrib.m_Value.m_Value = pGET->m_Miss; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } BOOL bHaveBlueAttr = FALSE; //基础属性完毕,根据物品quality 调用 ItemQuality 表 if(quality>49) quality = 49; if(quality<0) quality = 0; ITEM_QUALITY_TB* pQualityTB = g_ItemTable.GetItemQualityTB(quality); if(pQualityTB) { INT BlueAttrCount = 0; for(INT iAttrIndex = 0;iAttrIndex<MAX_BLUE_ITEM_EXT_ATTR;iAttrIndex++) { INT iRandValue = ItemRander::IntRand(); INT iCurrentValue = 0; for(INT iAttr =0;iAttr<IATTRIBUTE_NUMBER;iAttr++) { if(pGET->m_AttrRate[iAttr]!= -1) { if(pGET->m_AttrRate[iAttr]+iCurrentValue>=iRandValue) { bHaveBlueAttr = TRUE; //检查重复属性 BOOL existSameAttr = FALSE; for(INT existAttr = 0 ;existAttr<iAttrCount;existAttr++) { if(iAttr == it.GetEquipData()->m_pAttr[existAttr].m_AttrType) { existSameAttr = TRUE; existAttr=iAttrCount; } } if(existSameAttr) continue; double fRandValue = ItemRander::DoubleRand(); INT iQualityLevel = CaculateQualityIndex(fRandValue,pQualityTB); it.GetEquipData()->m_pAttr[iAttrCount].m_AttrType = iAttr; //根据品质段处理数据 MINMAX_VALUE TValue = g_ItemTable.GetItemValue((ITEM_ATTRIBUTE)iAttr,iQualityLevel); Assert(TValue.m_maxValue>=TValue.m_minValue); Assert(TValue.m_minValue!=-1); if(TValue.m_minValue<TValue.m_maxValue) { it.GetEquipData()->m_pAttr[iAttrCount].m_Value.m_Value = TValue.m_minValue+rand()%(TValue.m_maxValue-TValue.m_minValue+1); } else if(TValue.m_minValue == TValue.m_maxValue) { it.GetEquipData()->m_pAttr[iAttrCount].m_Value.m_Value = TValue.m_minValue; } pLogParam->ItemAttr[BlueAttrCount] = it.GetEquipData()->m_pAttr[iAttrCount]; BlueAttrCount++; iAttrCount++; break; } else { iCurrentValue+= pGET->m_AttrRate[iAttr]; } } } } Assert(iAttrCount<MAX_ITEM_ATTR); it.GetEquipData()->m_AttrCount = iAttrCount; if(bHaveBlueAttr) { it.SetItemIdent(FALSE); } else it.SetItemIdent(TRUE); } else { Assert(FALSE); //蓝装都应该有quality 描叙 } return TRUE; } else { Assert(FALSE);//非法itemType } return FALSE; __LEAVE_FUNCTION return FALSE; }
BOOL ItemCreateRuler::CreateGreenEquipAttrib(_ITEM_TYPE itemType,INT iPlayerLvl,_ITEM& it) { __ENTER_FUNCTION GREEN_EQUIP_TB* pGET = g_ItemTable.GetGreenItemTB(itemType.ToSerial()); if(pGET) { it.m_ItemIndex = pGET->m_IndexID; it.m_RulerID = (CHAR)pGET->m_RulerID; it.GetEquipData()->m_EquipPoint = pGET->m_EquipPoint; it.GetEquipData()->m_CurDurPoint = pGET->m_MaxDur; it.GetEquipData()->m_CurDamagePoint = 0; it.GetEquipData()->m_MaxDurPoint = pGET->m_MaxDur; it.GetEquipData()->m_GemMax = pGET->m_MaxGem; it.GetEquipData()->m_FaileTimes = 0; it.GetEquipData()->m_NeedLevel = pGET->m_ReqLevel; it.GetEquipData()->m_StoneCount = 0; it.GetEquipData()->m_BasePrice = pGET->m_BasePrice; it.GetEquipData()->m_SetNum = pGET->m_EquipSetNum; it.GetEquipData()->m_MaxNum = pGET->m_EquipSetMaxNum; INT iAttrCount = 0; _ITEM_ATTR itemAttrib; //绿装基本属性 if(pGET->m_AttackSpeed>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_TIME; itemAttrib.m_Value.m_Value = pGET->m_AttackSpeed; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_MagicAttack>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_M; itemAttrib.m_Value.m_Value = pGET->m_MagicAttack; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_MagicDefense>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_DEFENCE_M; itemAttrib.m_Value.m_Value = pGET->m_MagicDefense; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_PhysicAttack>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_ATTACK_P; itemAttrib.m_Value.m_Value = pGET->m_PhysicAttack; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_PhysicDefense>0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_DEFENCE_P; itemAttrib.m_Value.m_Value = pGET->m_PhysicDefense; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } if(pGET->m_Miss >0) { itemAttrib.m_AttrType = IATTRIBUTE_BASE_MISS; itemAttrib.m_Value.m_Value = pGET->m_Miss; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } //创建附加属性 for(INT i =0;i<MAX_GREEN_ITEM_EXT_ATTR;i++) { if(pGET->m_Attr[i].m_Value.m_Value>0) { itemAttrib.m_AttrType = pGET->m_Attr[i].m_AttrType; itemAttrib.m_Value.m_Value = pGET->m_Attr[i].m_Value.m_Value; it.GetEquipData()->m_pAttr[iAttrCount] = itemAttrib; iAttrCount++; } } it.GetEquipData()->m_AttrCount = iAttrCount; return TRUE; } else { Assert(FALSE); } __LEAVE_FUNCTION return FALSE; }
//直接从ItemBoxManager::ConvertItemType2Index抄过来 INT ShopMgr::ConvertItemType2Money(_ITEM_TYPE it) { __ENTER_FUNCTION Assert(it.isNull() == FALSE); switch(it.m_Class) { case ICLASS_EQUIP: { switch(it.m_Quality) { case EQUALITY_NORMAL: { COMMON_EQUIP_TB* pGET = g_ItemTable.GetWhiteItemTB(it.ToSerial()); Assert(pGET); return pGET->m_BasePrice; } break; case EQUALITY_BLUE: { BLUE_EQUIP_TB* pGET = g_ItemTable.GetBlueItemTB(it.ToSerial()); Assert(pGET); return pGET->m_BasePrice; } break; case EQUALITY_YELLOW: { } break; case EQUALITY_GREEN: { GREEN_EQUIP_TB* pGET = g_ItemTable.GetGreenItemTB(it.ToSerial()); Assert(pGET); return pGET->m_BasePrice; } break; default: { Assert(FALSE); return FALSE; } } Assert(FALSE); } break; case ICLASS_MATERIAL: case ICLASS_COMITEM: { COMMITEM_INFO_TB* pGET = g_ItemTable.GetCommItemInfoTB(it.ToSerial()); Assert(pGET); return pGET->m_nBasePrice; } break; case ICLASS_TASKITEM: { return 1; } break; case ICLASS_GEM: { GEMINFO_TB* pGET = g_ItemTable.GetGemInfoTB(it.ToSerial()); Assert(pGET); return pGET->m_nPrice; } break; case ICLASS_STOREMAP: { STORE_MAP_INFO_TB* pGET = g_ItemTable.GetStoreMapTB(it.ToSerial()); Assert(pGET); return pGET->m_nBasePrice; break; } case ICLASS_TALISMAN: Assert(FALSE); break; case ICLASS_GUILDITEM: Assert(FALSE); break; default: Assert(FALSE); break; } Assert(FALSE); __LEAVE_FUNCTION return -1; }