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()); }
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); } } }
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; } } }
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; } }
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; }
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; }