Example #1
0
void CMail::CodeToDataBlockForClient(DBWriteSet& setWriteDB,CPlayer *pPlayer)
{
	time_t t_CurrentTime = time(NULL);
	DWORD dwRemainTime = 0;
	if (GetRemainTime() - t_CurrentTime>0)
	{
		dwRemainTime = (DWORD)(GetRemainTime() - t_CurrentTime);
	} 	
	setWriteDB.AddToByteArray(GetExID());									//邮件的ID

	setWriteDB.AddToByteArray(dwRemainTime);//邮件的有效时间

	setWriteDB.AddToByteArray((DWORD)GetGold());//操作的金钱数

	setWriteDB.AddToByteArray(GetSubject().c_str());//邮件名称
	setWriteDB.AddToByteArray(GetText().c_str());//邮件内容
	setWriteDB.AddToByteArray(GetExText().c_str());//邮件附加内容
	setWriteDB.AddToByteArray(GetWriter().c_str());//邮件发送者名称
	setWriteDB.AddToByteArray((BYTE)GetRead());		   //是否阅读过
	setWriteDB.AddToByteArray((BYTE)GetType());        //类型
	setWriteDB.AddToByteArray((BYTE)GetReject());      //退信标志符


//	setWriteDB.AddToByteArray((long)GetSGood().size());

// 	if (GetSGood().size()>0 && GetType()==REQUEST_MAIL)
// 	{
// 		for (list<tagSGoods*>::iterator it=GetSGood().begin(); it!=GetSGood().end(); ++it)
// 		{
// 			setWriteDB.AddToByteArray((long)(*it)->lIndex);
// 			setWriteDB.AddToByteArray((long)(*it)->lNum);		
// 		}
// 	}
// 	else
// 	{
		setWriteDB.AddToByteArray((long)GetMGoodsContainer().size());
		for (vector<CGoods*>::iterator it=GetMGoodsContainer().begin(); it!=GetMGoodsContainer().end(); ++it)
		{
			(*it)->SerializeForOldClient(setWriteDB);		
		} 	
//	}
	
}
Example #2
0
//为客户端编码
void	CMail::AddToByteArrayForClient(vector<BYTE>& vRet,CPlayer *pPlayer)				
{

	time_t t_CurrentTime = time(NULL);
	DWORD dwRemainTime = 0;
	if (GetRemainTime() - t_CurrentTime>0)
	{
		dwRemainTime = (DWORD)(GetRemainTime() - t_CurrentTime);
	} 	

	_AddToByteArray(&vRet,GetExID());		//邮件的ID
	_AddToByteArray(&vRet,dwRemainTime);	//邮件的有效时间
	_AddToByteArray(&vRet,(DWORD)GetGold());//操作的金钱数
	_AddToByteArray(&vRet,GetSubject().c_str());//邮件名称
	_AddToByteArray(&vRet,GetText().c_str());	//邮件内容
	_AddToByteArray(&vRet,GetExText().c_str());	//邮件附加内容
	_AddToByteArray(&vRet,GetWriter().c_str());	//邮件发送者名称
	_AddToByteArray(&vRet,(BYTE)GetRead());	    //是否阅读过
	_AddToByteArray(&vRet,(BYTE)GetType());     //类型
	_AddToByteArray(&vRet,(BYTE)GetReject());   //退信标志符

//	_AddToByteArray(&vRet,(long)GetSGood().size());

// 	if (GetSGood().size()>0 && GetType()==REQUEST_MAIL)
// 	{
// 		for (list<tagSGoods*>::iterator it=GetSGood().begin(); it!=GetSGood().end(); ++it)
// 		{
// 			_AddToByteArray(&vRet,(long)(*it)->lIndex);
// 			_AddToByteArray(&vRet,(long)(*it)->lNum);		
// 		}
// 	}
// 	else
// 	{
		_AddToByteArray(&vRet,(long)GetMGoodsContainer().size());
		for (vector<CGoods*>::iterator it=GetMGoodsContainer().begin(); it!=GetMGoodsContainer().end(); ++it)
		{
			(*it)->SerializeForOldClient(&vRet);		
		} 	
//	}


}
Example #3
0
void	CMail::AddToByteArrayForWS(vector<BYTE>& vRet,CPlayer* pPlayer)
{	
	_AddToByteArray(&vRet,GetExID());					//邮件Guid
	_AddToByteArray(&vRet,(char*)GetWriter().c_str());	//邮件写信人
	_AddToByteArray(&vRet,(char*)GetSubject().c_str());	//主题
	_AddToByteArray(&vRet,(char*)GetText().c_str());	//邮件内容
	_AddToByteArray(&vRet,(char*)GetExText().c_str());	//邮件附加内容
	_AddToByteArray(&vRet,(BYTE)GetRead());				//读取标志符
	_AddToByteArray(&vRet,(BYTE)GetType());				//邮件类型
	_AddToByteArray(&vRet,(long)GetGold());				//金钱
	_AddToByteArray(&vRet,(DWORD) GetRemainTime());		//保存时间
	_AddToByteArray(&vRet,(BYTE)GetReject());			//退信标志符

	//收信人
	_AddToByteArray(&vRet,(char*)pPlayer->GetName());

	//增值物品列表
// 	long lSGoodNum =  (long)GetSGood().size();
// 	_AddToByteArray(&vRet,lSGoodNum);							
// 	for (list<tagSGoods*>::iterator it=GetSGood().begin(); it!=GetSGood().end(); ++it)
// 	{
// 		_AddToByteArray(&vRet,(*it)->lIndex);
// 		_AddToByteArray(&vRet,(*it)->lNum);
// 	}
	//普通物品列表
	long lCGoodNum = (long)GetMGoodsContainer().size();
	_AddToByteArray(&vRet,lCGoodNum);
	int nPos = 0;
	vector<BYTE> pBA;
	for (vector<CGoods*>::iterator it=GetMGoodsContainer().begin(); it!=GetMGoodsContainer().end(); ++it)
	{				
		(*it)->Serialize(&pBA);
		_AddToByteArray(&vRet,(LONG)pBA.size());
		if (pBA.size())		
			_AddToByteArray(&vRet,&pBA[0], (long)pBA.size());			
	}
}
Example #4
0
void BattleUI::InitHeroUI()
{
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Texiao.ExportJson");
    
    auto layout_Bottom = m_RootWidget->getChildByName<Layout*>("Layout_Bottom");
    
    auto text_HeroText = layout_Bottom->getChildByName<Text*>("Text_HeroText");
    
    auto langId = (int)LanguageIdEnum::SelfLangId;
    auto langText = MultiLanguage::getInstance()->GetText(langId);
    text_HeroText->setString(langText);
    
    auto lbar_HeroHp = layout_Bottom->getChildByName<LoadingBar*>("LBar_HeroHp");
    lbar_HeroHp->setPercent(100);
    
    
    //自动或手动控制战斗
    auto btn_Auto = layout_Bottom->getChildByName<Button*>("Btn_Auto");
    auto btn_UnAuto = layout_Bottom->getChildByName<Button*>("Btn_UnAuto");
    if (BattleData::getInstance()->m_HeroAutoAttack)
    {
        btn_Auto->setVisible(true); btn_UnAuto->setVisible(false);
        
    }else
    {
        btn_Auto->setVisible(false); btn_UnAuto->setVisible(true);
    }
    
    langId = (int)LanguageIdEnum::AutoAttackLangId;
    langText = MultiLanguage::getInstance()->GetText(langId);
    btn_Auto->setTitleText(langText); btn_UnAuto->setTitleText(langText);
    btn_Auto->addClickEventListener([=](Ref* sender)
     {
         btn_Auto->setVisible(false);
         btn_UnAuto->setVisible(true);
         BattleData::getInstance()->m_HeroAutoAttack = false;
         UserData::getInstance()->Update_Value(UserDataEnum::AutoAttack, Value(0));
     });
    
    btn_UnAuto->addClickEventListener([=](Ref* sender)
    {
        btn_Auto->setVisible(true);
        btn_UnAuto->setVisible(false);
        for (auto pb : *m_VecProgressBar) pb->Resume();
        BattleData::getInstance()->m_HeroAutoAttack = true;
        UserData::getInstance()->Update_Value(UserDataEnum::AutoAttack, Value(1) );
    });
    
    auto btn_Bread = layout_Bottom->getChildByName<Button*>("Btn_Bread");
    auto text_BreadName = btn_Bread->getChildByName<Text*>("Text_BreadNAME");
    langId = (int)LanguageIdEnum::BreadLangId;
    langText = MultiLanguage::getInstance()->GetText(langId);
    text_BreadName->setString(langText);
    
    auto text_Bread = btn_Bread->getChildByName<Text*>("Text_Bread");
    
    
    auto bread_Num = 0;
    auto breadData = UserData::getInstance()->Get_MVI_Value(UserDataEnum::BackPack, (int)CfgIdEnum::BreadId);
    if(breadData != Value::Null) bread_Num = breadData.asInt();
    
    text_Bread->setString(StringUtils::format("%d", bread_Num));
    
    auto lbar_Bread = btn_Bread->getChildByName<LoadingBar*>("LBar_Bread");
    
    string pbName = "BreadHpSchedule";
    auto progressBar = new ProgressBar();
    progressBar->SetTotalTime(3); //3秒吃一个面包
    progressBar->SetScheduleName(pbName);
    progressBar->SetLoadingBar(lbar_Bread);
    
    m_VecProgressBar->push_back(progressBar);
    
    progressBar->SetCallBack([this, progressBar]()
     {
         progressBar->Restart();
         progressBar->GetLoadingBar()->setPercent(0);
         m_RootWidget->unschedule(progressBar->GetScheduleName());
     });
    
    
    btn_Bread->addClickEventListener([=](Ref* sender)
     {

         auto bread_Num = 0;
         auto breadData = UserData::getInstance()->Get_MVI_Value(UserDataEnum::BackPack, (int)CfgIdEnum::BreadId);
         if(breadData != Value::Null) bread_Num = breadData.asInt();

         if (bread_Num == 0)
         {
             auto langId = (int)LanguageIdEnum::BreadNotEnoughId;
             auto langText = MultiLanguage::getInstance()->GetText(langId);
             MoveText::getInstance()->AddDefaultTextData(m_RootWidget, langText);
         }else
         {
             if(progressBar->GetRemainTime() == progressBar->GetTotalTime())
             {
                 auto bread_Num = UserData::getInstance()->Update_VMI_Fun(
                                  UserDataEnum::BackPack, (int)CfgIdEnum::BreadId, -1);
                 if (bread_Num >= 0)
                 {
                     text_Bread->setString(StringUtils::format("%d", bread_Num));
                     //回血
                     BattleData::getInstance()->BreadRevertHp();
                     
                     m_RootWidget->schedule([this, progressBar](float f)
                        {
                            progressBar->Update(f);
                        }, progressBar->GetScheduleName());
                 }
             }
             AchievementSystem::getInstance()->CheckAchievement(UserEventType::BattleEatBread, 1);
         }
     });
    
    vector<pair<int, int> >heroVec;
    BattlePubUI::getInstance()->GetBackPackHero(&heroVec);
    auto idx = 0; //创建英雄技能
    for (auto heroData : heroVec)
    {
        auto heroId = heroData.first;
        auto heroNum = heroData.second;
        for (auto i = 0; i < heroNum ; i++)
        {
            CreateHeroEvent(heroId, idx);  idx++;
        }
    }

    auto talentTeamTotalHp = BattleData::getInstance()->m_TalentTeamTotalHp;
    auto text_HeroHp = layout_Bottom->getChildByName<Text*>("Text_HeroHp");
    text_HeroHp->setString(StringUtils::format("%d/%d", talentTeamTotalHp, talentTeamTotalHp));
    
    BattleData::getInstance()->m_HeroHpLBar = lbar_HeroHp;
    BattleData::getInstance()->m_TextHeroHp = text_HeroHp;

}
Example #5
0
//英雄显示位置
void BattleUI::CreateHeroEvent(int cfgId, int idx)
{

    auto layout_Bottom = m_RootWidget->getChildByName<Layout*>("Layout_Bottom");
    
    string btn_Name = StringUtils::format("Btn_Skill%d", idx);
    auto Btn_Hero = layout_Bottom->getChildByName<Button*>(btn_Name);
    Btn_Hero->setVisible(true);
    
    auto lbar_Name = StringUtils::format("LBar_State%d", idx);
    auto lbar_State = Btn_Hero->getChildByName<LoadingBar*>(lbar_Name);
    lbar_State->setPercent(100);
    
    CfgDataRow dataRow(cfgId);
    auto textName = StringUtils::format("Text_Name%d", idx);
    
    auto text_Name = Btn_Hero->getChildByName<Text*>(textName);
    
    auto skillId = dataRow.GetValue(CfgField::SkillID_V)->asValueVector().begin()->asInt();
    CfgDataRow skillDataRow(skillId);
    auto langId = skillDataRow.GetValue(CfgField::Name)->asInt();
    auto langText = MultiLanguage::getInstance()->GetText(langId);
    text_Name->setString(langText);
    
    auto attack_Speed = dataRow.GetValue(CfgField::Spd_F)->asFloat();
    attack_Speed = 10 / attack_Speed;
    
    Armature* armature = CreateHeroArmature(cfgId);
    
    string pbName = StringUtils::format("HeroSkillSchedule%d", idx);
    auto playName = skillDataRow.GetValue(CfgField::SkillAtksfxID_S)->asString();
    
    auto isGetKong = UserData::getInstance()->Check_VI_Fun(UserDataEnum::TalentList, Value((int)CfgIdEnum::TalentEliminateCD));
    auto progressBar = new ProgressBar();
    progressBar->SetScheduleName(pbName);
    progressBar->SetTotalTime(attack_Speed, isGetKong);
    progressBar->SetLoadingBar(lbar_State);
    
    m_VecProgressBar->push_back(progressBar);
    
    progressBar->SetCallBack([=]()
       {
           progressBar->Restart();
           if (armature->getAnimation()->getAnimationData()->getMovement(playName) == nullptr)
           {
               CCLOGERROR("Armature:%s, not %s", armature->getName().c_str(), playName.c_str());
           }else if(m_IsPlayAnim)
           {
               armature->setVisible(true);
               armature->getAnimation()->play(playName);
           }
           
           if (m_MonsterArmature != nullptr && m_IsPlayAnim)
           {
               m_MonsterArmature->getAnimation()->play(m_Beating);
           }
           
           auto attackResult = BattleData::getInstance()->HeroAttack(cfgId);
           if (attackResult == -1)
           {
               BattleFinish(true);

           }else if(attackResult > 0)
           {
               BufferEffect(attackResult);
           }

           if (!BattleData::getInstance()->m_HeroAutoAttack)
           {
               m_RootWidget->unschedule(pbName);
           }
       });
    
    Btn_Hero->addClickEventListener([this, progressBar, pbName](Ref* sender)
        {
            if(progressBar->GetRemainTime() == progressBar->GetTotalTime())
            {
                m_RootWidget->schedule([this, progressBar](float f)
                   {
                       progressBar->Update(f);
                       
                   }, pbName);
            }
        });
    
    m_RootWidget->schedule([this, progressBar](float f)
       {
           progressBar->Update(f);
           
       }, pbName);
    
    if (BattleData::getInstance()->m_HeroAutoAttack)
    {
        progressBar->Resume();
    }
    
    UIUtils::getInstance()->showProperImg(Btn_Hero, cfgId);
    
}
Example #6
0
/**
* @brief  获取或填充基础信息
*/
void CSoMJFrameLogic::GetViewInfoMsg( UINT shPlayerID, bool bWatchUser, TCMD_NOTIFY_VIEW_INFO* pCmd)
{
    if (NULL == m_pSoUserMgr || NULL == m_pSoGameProcessor || NULL == m_pStateEvent || NULL == pCmd)
    {
        return ;
    }

    ISoPlayer* pSoPlayer = m_pSoUserMgr->GetPlayerByID(shPlayerID);

    if (NULL == pSoPlayer)
    {
        return ;
    }

    int i, j, k;
    UINT ucChairID = pSoPlayer->GetChairID();

    pCmd->ucDealer = m_nDealer;
    pCmd->ucWindRound = m_nWindRound;
    pCmd->ucWindRoundNbr = m_nWindRoundNbr;
    pCmd->ucCurTurn = m_nNowTurn;
    pCmd->ucWallLength = m_TilesDealer.CurrentLength();
    pCmd->ucNowTime = GetRemainTime();
    pCmd->ucGameState = m_pStateEvent->GetMJState();
    pCmd->ucBLookOn = pSoPlayer->GetBCanBeLookedOn();
    pCmd->ucLastTile = m_ucLastTile;
    pCmd->ucLastGiveChair = m_byLastChair;
    pCmd->ucDice[0] = m_nDice[0];
    pCmd->ucDice[1] = m_nDice[1];
	pCmd->ucDarwTileLength = m_TilesDraw.CurrentLength();
	pCmd->ucGangTileLength = m_TilesGang.CurrentLength();

    for (i = 0; i < 4; i++)
    {
        ISoPlayer* pUser = m_pSoUserMgr->GetPlayerByChair(i);
        if (pUser == NULL)
        {
            continue ;
        }
       
        // 准备状态
        pCmd->ucReady[i] = pUser->IsReady() ? 1 : 0;

		// 托管状态
		pCmd->ucTrusteeFlag[i] = pUser->GetTrusteeStatusVal() ? 1 : 0;
    }

    // 添加手牌、出牌、拦牌牌数据长度
    for (i = 0; i < 4; i++)
    {
        pCmd->ucHandTilesLength[i] = m_TilesHand[i].CurrentLength();
        pCmd->ucGiveTilesLength[i] = m_TilesGive[i].CurrentLength();
        pCmd->ucSetTilesLength[i] = m_TilesSet[i].CurrentLength();
    }

    // 添加花牌数据
    for (i = 0; i < MJ_FLOWER_NBR; i++)
    {
        pCmd->ucFlower[i] = m_nFlower[i];
    }

    // 添加手牌数据
    for (i = 0; i < pCmd->ucHandTilesLength[ucChairID]; i++)
    {
        if (pSoPlayer->GetChairID() == ucChairID)
        {
            // 游戏玩家 或 可以旁观状态
			if (bWatchUser && !pCmd->ucBLookOn)
			{
				pCmd->ucHandTiles[i] = TILE_BEGIN;
			}
			else
			{
				pCmd->ucHandTiles[i] = m_TilesHand[ucChairID].GetTile(i);
			}
        }
        else
        {
            // 其他玩家 或 旁观玩家不能看牌
            pCmd->ucHandTiles[i] = TILE_BEGIN;
        }
    }

    TILE_SET tileSet;

    // 添加拦牌与出牌数据
    for (i = 0; i < 4; i++)
    {
        k = 0;

        // 添加拦牌
        for (j = 0; j < pCmd->ucSetTilesLength[i]; j++)
        {
            m_TilesSet[i].GetSet(j, tileSet);

            // 复制拦牌数据
            for (k = 0; k < 4; k++)
            {
                if (ACTION_QUADRUPLET_CONCEALED == tileSet.m_ucFlag)
                {
                    // 如果是暗杠, 则需要判断旁观玩家进入时是否可以观看
					if (GetMJSetting().nAnGangShow == 1)
					{
						pCmd->ucBlockTiles[i][j * 4 + k] = tileSet.m_ucTile[k];
					}
                    else if (i == ucChairID)
                    {
						if (bWatchUser && !pCmd->ucBLookOn)
						{
							// 旁观不能看杠牌
							pCmd->ucBlockTiles[i][j * 4 + k] = TILE_BEGIN;
						}
						else
						{
							pCmd->ucBlockTiles[i][j * 4 + k] = tileSet.m_ucTile[k];
						}
                    }
                    else
                    {
                        // 不可以看到暗杠牌
                        pCmd->ucBlockTiles[i][j * 4 + k] = TILE_BEGIN;
                    }
                }
                else
                {
                    pCmd->ucBlockTiles[i][j * 4 + k] = tileSet.m_ucTile[k];
                }
            }

            // 拦牌类型
            pCmd->ucBlockTilesFlag[i][j] = tileSet.m_ucFlag;

            // 拦的谁的牌, 或是拦的哪一张(针对吃牌有效)
            pCmd->ucBlockTilesWhich[i][j] = tileSet.m_ucChair;
        }

        // 添加出牌
        for (j = 0; j < pCmd->ucGiveTilesLength[i]; j++)
        {
            pCmd->ucGiveTiles[i][j] = m_TilesGive[i].GetTile(j);

            m_TilesGive[i].GetBlock(j, tileSet);
            if (tileSet.m_ucFlag == ACTION_TING)
            {
                pCmd->bGiveTingTiles[i][j] = TRUE;
                pCmd->bGiveBlockTiles[i][j] = FALSE;
            }
            else if (tileSet.m_ucFlag != ACTION_EMPTY)
            {
                pCmd->bGiveTingTiles[i][j] = FALSE;
                pCmd->bGiveBlockTiles[i][j] = TRUE;
            }
            else
            {
                pCmd->bGiveTingTiles[i][j] = FALSE;
                pCmd->bGiveBlockTiles[i][j] = FALSE;
            }
        }
    }

    // 添加万能牌数量
    pCmd->ucGodTilesLength = m_TilesGod.CurrentLength();

    for (i = 0; i < pCmd->ucGodTilesLength; i++)
    {
        pCmd->ucGodTiles[i] = m_TilesGod.GetTile(i);
    }

    for (i = 0; i < 4; i++)
    {
        // 玩家花牌数量
        pCmd->ucFlowerNbr[i] = GetFlowerNbr(i);

        // 玩家听牌类型
        pCmd->ucTingType[i] = m_nTingType[i];
    }

    // 当前玩家状态是听牌状态, 则需要计算听牌后可以胡的牌数据
    if (m_nTingType[ucChairID] != MJ_TING_NONE)
    {
        CMJHand tmpHand;
        CMJHand mjTestHand = m_TilesHand[ucChairID];

        if (mjTestHand.CurrentLength() % 2 == 0)
        {
            // 需要删除当前摸的牌
            mjTestHand.DelTile(GetLastTile());  
        }

        GetTingTiles( mjTestHand, m_TilesSet[ucChairID], tmpHand );

        // 打出的牌后可以胡哪些牌
        for (i = 0; i < tmpHand.CurrentLength() && i < 20; i++)
        {
            pCmd->ucTingTiles[i] = tmpHand.GetTile(i);
        }
    }
}