示例#1
0
void CMonster::SetPosXY(float x, float y)
{
	// 将之前位置的阻挡去除
	if(GetFather())
		SetBlock(GetTileX(), GetTileY(), CRegion::BLOCK_NO);
	CShape::SetPosXY(x,y);
	// 设置新的阻挡位置
	if(GetFather())
		SetBlock(GetTileX(), GetTileY(), GetBlockType());
}
示例#2
0
    void Map::DrawMap(int layer)
    {
		//Affichage de la map
		if(layer == 0 || layer == 1 || layer == 2)
		{
			for(int x = cullX1; x < cullX2; ++x)
			{
				for(int y = cullY1; y < cullY2; ++y)
				{
					u16 block = sMapArray[layer * (mMapWidthHeight) + (x * mMapHeight) + y]; //Un peu comme ax² + by + c...
					if(block != 0)
					{
						mChipsets[1]->MoveTo(posX + (x<<4), posY + (y<<4));
						mChipsets[1]->Clip(GetTileX(block)<<4, GetTileY(block)<<4, 16, 16);
						mChipsets[1]->Mirror(GetTileMirrorX(block), GetTileMirrorY(block) );
						mChipsets[1]->Draw();
					}
				}
			}
		}

		//Affichage du front parallax
		/*if(layer == 3)
		{
			mChipsets[0]->MoveTo(fxtoi(Mulfx(posX<<8, 384))%256, (mMapHeight<<4) -64 + posY);
			mChipsets[0]->Draw();
			mChipsets[0]->MoveTo(fxtoi(Mulfx(posX<<8, 384))%256+256, (mMapHeight<<4) -64 + posY);
			mChipsets[0]->Draw();
		}*/
    }
void CFighterPet::AI()
{
	if( m_pMaster && m_pRegion )
	{
		CMoveShape* pAimShape = m_pMaster;
		long lX = GetTileX();
		long lY = GetTileY();
		long lAimX = pAimShape->GetTileX();
		long lAimY = pAimShape->GetTileY();

		//	¸úËæÖ÷ÈËÒƶ¯
		if( abs(lX-lAimX) > 3 || abs(lY-lAimY) > 3 )
		{
			if( IsActive())
				AutoMoveAI(lAimX,lAimY);
		}
	}
}
示例#4
0
void CSummonPet::AI()
{
	if( m_pMaster && m_pRegion )
	{
		CMoveShape* pAimShape = m_pMaster;
		long lFightMode = PetFightAI();
		long lX = GetTileX();
		long lY = GetTileY();
		long lAimX = pAimShape->GetTileX();
		long lAimY = pAimShape->GetTileY();
		int nRet = -1;
		switch(lFightMode)
		{
		case FMR_Trace_Far:
			if( IsActive() )
			{
				long x = m_pCurAtkShape->GetPosX();
				long y = m_pCurAtkShape->GetPosY();
				nRet = AutoMoveAI(x,y);
			}
			break;
		case FMR_Trace_Near:
		case FMR_Attack:
			{
				UsePetSkill(m_lCurUseSkillPos);
			}
			break;
		case FMR_No_TARGET:
			{
				//	¸úËæÖ÷ÈËÒƶ¯
				if( abs(lX-lAimX) > 3 || abs(lY-lAimY) > 3 )
				{
					if( IsActive())
						AutoMoveAI(lAimX,lAimY);
				}
			}
			break;
		default: break;
		}
	}
}
示例#5
0
void CBuild::OnActionChange()
{
	static char str[32];

	AnimInfo::tagActionInfo *pActionInfo = m_pAnimInfo->GetActionInfo();
	//---------------------------------------------
	pActionInfo->dwCurActionStartTime = GetCurTickCount();
	pActionInfo->dwCurActionLoopCount = 0;

	if (m_wAction == CShape::ACT_STAND || m_wAction == CShape::ACT_INTONATE
		|| m_wAction == CShape::ACT_WALK || m_wAction == CShape::ACT_RUN 
		|| m_wAction == CShape::ACT_MEGRIM || m_wAction == CShape::ACT_ALREADYDIED )
	{
		pActionInfo->bCurActionLooped = TRUE;
	}
	else
	{
		pActionInfo->bCurActionLooped = FALSE;
	}

	//如果是打开动作且当前选择的对象是城门,则清除选择
	if(m_wAction == ACT_OPEN||m_wAction == ACT_ALREADYOPEN)
	{
		//if(GetGame()->GetGameControl()->GetSelectedShape()==this)
		//{
		//	GetGame()->GetGameControl()->SetSelectedShape(NULL);
		//	GetGame()->GetCGuiEx()->GetCObjectPageEx()->Close();
		//}
	}

	// 如果死亡,不阻挡
	if(  m_wAction == CShape::ACT_DIED ||
		m_wAction == CShape::ACT_ALREADYDIED ||m_wAction == CShape::ACT_ALREADYOPEN ||
		m_wAction == CShape::ACT_OPEN )

	{
		SetBlock(GetTileX(), GetTileY(), CRegion::BLOCK_NO);
	}
	else
	{
		SetBlock(GetTileX(), GetTileY(), CRegion::BLOCK_SHAPE);
	}

	// 进入非站立动作
	if (m_wAction!=ACT_STAND)
	{
		m_lIdleCount = 0;
	}

	static DWORD dwSTND = MAKEFOURCC('C','L','O','1'); 
	static DWORD dwDIED = MAKEFOURCC('D','I','E','D');
	static DWORD dwOPEN = MAKEFOURCC('O','P','E','N');
	static DWORD dwHURT = MAKEFOURCC('H','U','R','T');
	static DWORD dwALREADYDIED = MAKEFOURCC('D','I','E','1');
	static DWORD dwALREADYOPEN = MAKEFOURCC('O','P','E','1');
	static DWORD dwCLOSE = MAKEFOURCC('C','L','O','S'); 
	switch (m_wAction)
	{
	case CShape::ACT_STAND:
		pActionInfo->dwCurAction = dwSTND;
		SetState(STATE_FIGHT);
		break;

	case CShape::ACT_DIED:
		pActionInfo->dwCurAction= dwDIED;
		SetState(STATE_DIED);
		break;

	case CShape::ACT_BEATTACK:
		pActionInfo->dwCurAction= dwHURT;
        SetState(STATE_FIGHT);
		break;

	case CShape::ACT_OPEN:
		pActionInfo->dwCurAction = dwOPEN;
        SetState(STATE_PEACE);
		break;

	case CShape::ACT_ALREADYDIED:
		pActionInfo->dwCurAction= dwALREADYDIED;
		SetState(STATE_DIED);
		break;

	case CShape::ACT_ALREADYOPEN:
		pActionInfo->dwCurAction= dwALREADYOPEN;
		SetState(STATE_PEACE);
		break;

	case CShape::ACT_IDLE:
		pActionInfo->dwCurAction= dwCLOSE;
		SetState(STATE_PEACE);
		break;	
	}
}
示例#6
0
bool CGoods::SerializeForOldClient(DBWriteSet& setWriteDB, bool b)
{
	bool bResult = false;
	CGoodsBaseProperties* pProperties = GoodsSetup::QueryGoodsBaseProperties(
		GetBasePropertiesIndex() );
	if( pProperties )
	{
		setWriteDB.AddToByteArray( GetBasePropertiesIndex() );
		setWriteDB.AddToByteArray( GetExID() );
		setWriteDB.AddToByteArray( GetAmount() );
		setWriteDB.AddToByteArray( const_cast<char*>( GetMakerName() ) );		
		setWriteDB.AddToByteArray( GetPrice() );	
		setWriteDB.AddToByteArray( GetSilverPrice());
		setWriteDB.AddToByteArray( m_dwBuyPrice);
		setWriteDB.AddToByteArray( (ulong)GetGoodsBaseType());		

		long lAddonNum=0;
		ulong dwPropertyId=0;

		vector<uchar> vecAddonData;
		for( size_t i = 0; i < m_vAddonProperties.size(); i ++ )
		{		
			if(pProperties->IsHasAddonPropertie(m_vAddonProperties[i].gapType))	
			{
				dwPropertyId=m_vAddonProperties[i].gapType;				
				lAddonNum++;
				_AddToByteArray( &vecAddonData, static_cast<WORD>(m_vAddonProperties[i].gapType) );
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[0]);
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[1]);
			}
			else
			{
				lAddonNum++;
				_AddToByteArray( &vecAddonData, static_cast<WORD>(m_vAddonProperties[i].gapType) );
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[0]);
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[1]);
			}
		}
		setWriteDB.AddToByteArray(lAddonNum);
		if(lAddonNum>0)
		{
			setWriteDB.AddToByteArray( &vecAddonData[0],(long)vecAddonData.size());
		}
		/////////////////
		
		setWriteDB.AddToByteArray( GetTileX() );
		setWriteDB.AddToByteArray( GetTileY() );

		EnchaseArrange();
		//enchase data	
		ulong dwMaxHoleNum=GetMaxEnchaseHoleNum();
		if(dwMaxHoleNum>0)
		{
			//最大孔数
			setWriteDB.AddToByteArray( dwMaxHoleNum);
			//激活孔数量
			//王晓轩:默认所有孔都开启,所以删除此项数据
			//setWriteDB.AddToByteArray( GetActivedHoleNum());
			for(int i=0;i<(int)dwMaxHoleNum;i++)
			{		
				//CARD ID
				CGoods* pCard=m_pEnchaseHoleArray[i]->GetCard();
				if(pCard)
				{
					setWriteDB.AddToByteArray( pCard->GetBasePropertiesIndex());
					pCard->SerializeForOldClient(setWriteDB);
				}
				else
				{
					setWriteDB.AddToByteArray(ulong(0));
				}
			}
		}

		bResult = true;
	}
	return bResult;
}
示例#7
0
bool CGoods::SerializeForOldClient(vector<uchar>* pStream, bool b)
{
	bool bResult = false;
	CGoodsBaseProperties* pProperties = GoodsSetup::QueryGoodsBaseProperties(
		GetBasePropertiesIndex() );
	if( pProperties )
	{
		_AddToByteArray( pStream, GetBasePropertiesIndex() );
		_AddToByteArray( pStream, GetExID() );
		_AddToByteArray( pStream, GetAmount() );
		_AddToByteArray( pStream, const_cast<char*>( GetMakerName() ) );		
		_AddToByteArray( pStream, GetPrice() );	
		_AddToByteArray(pStream,GetSilverPrice());
		_AddToByteArray(pStream,m_dwBuyPrice);
		_AddToByteArray(pStream,(ulong)GetGoodsBaseType());
		

		CGoodsBaseProperties* pBaseProperty=GoodsSetup::QueryGoodsBaseProperties(m_dwBasePropertiesIndex);
		if(!pBaseProperty)
			return false;
		long lAddonNum=0;
		ulong dwPropertyId=0;

		vector<uchar> vecAddonData;
		for( size_t i = 0; i < m_vAddonProperties.size(); i ++ )
		{		
			if(pBaseProperty->IsHasAddonPropertie(m_vAddonProperties[i].gapType))	
			{
				dwPropertyId=m_vAddonProperties[i].gapType;
				//if(GoodsSetup::s_GoodsAttrDBSetup[dwPropertyId][1]==1)
				//{
					lAddonNum++;
					_AddToByteArray( &vecAddonData, static_cast<WORD>(m_vAddonProperties[i].gapType) );
					_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[0] );
					_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[1] );
				//}
			}
			else
			{
				lAddonNum++;
				_AddToByteArray( &vecAddonData, static_cast<WORD>(m_vAddonProperties[i].gapType) );
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[0] );
				_AddToByteArray( &vecAddonData, m_vAddonProperties[i].lValues[1] );
			}
		}
		_AddToByteArray( pStream,lAddonNum);
		if(lAddonNum>0)
		{
			_AddToByteArray(pStream,&vecAddonData[0],(long)vecAddonData.size());
		}
		/////////////////
		
		_AddToByteArray( pStream, GetTileX() );
		_AddToByteArray( pStream, GetTileY() );

		EnchaseArrange();

		//enchase data	
		ulong dwMaxHoleNum=GetMaxEnchaseHoleNum();
		if(dwMaxHoleNum>0)
		{
			//最大孔数
			_AddToByteArray(pStream,dwMaxHoleNum);
			//激活孔数量
			//王晓轩:默认所有孔都开启,所以删除此项数据
			//_AddToByteArray( pStream, GetActivedHoleNum());
			for(int i=0;i<(int)dwMaxHoleNum;i++)
			{		
				//CARD ID
				CGoods* pCard=m_pEnchaseHoleArray[i]->GetCard();
				if(pCard)
				{
					_AddToByteArray(pStream,pCard->GetBasePropertiesIndex());
					pCard->SerializeForOldClient(pStream);
				}
				else
				{
					_AddToByteArray(pStream,ulong(0));
				}
			}
		}

		bResult = true;
	}
	return bResult;
}