Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
//直接从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;
}