凡人修真3D(4)神装

1.for循环的iter如果不是之后特殊要求用到,千万不要提出来,要养成习惯,

Message::Db::Tables::SeqTGodEquip::const_iterator it = seqTGodEquip.begin();
	for ( ; it != seqTGodEquip.end(); ++it )

2.自动购买其实并不需要真的购买,扣钱就行了。现在这样先要加上物品,然后再删除,操作麻烦,而且背包满了就不能用了。

	int bagAmount = normalItemAmount + limiteItemAmount;
		if( bagAmount < levelConfig->_consumeItemAmount )
		{
			if ( autoBuy )
			{
				int buyAmount = levelConfig->_consumeItemAmount - bagAmount;
				CShopManager::instance()->buyItem( gateEntity, 10003, levelConfig->_consumeItemCode,
					buyAmount, updateCode, Message::Public::EPlayerItemPosTypeBag );

				CGodEquipHelper::getConsumeItems( tItem, bagPtr, consumeItemPtrs, normalItemAmount, limiteItemAmount );
			}
			else
			{
				Common::CErrorCodeManager::throwException( "ErrorGate_BagItemNotEnough" );
			}
		}

3.SeqPairInt的扩展性差很多,既然都用到两个字段了,可以考虑用map了。这个效率的问题有空得研究一下。不过100几十个的插入应该不会很慢,可能有差别,都可以忽略。

不过说到这个。启动程序,load配置的时候,那个效率一般是不那么重要的。而且可以把一些经常用到的,对于配置的计算,放到GameConfigData里面。或者插入会慢点,但是load完之后,就不需要了,但是之后读取SeqPairInt肯定是比map慢很多的。

	typedef std::vector< std::pair< int, int > > SeqPairInt;

	//星配置
	struct SGodEquipStar
		: virtual public cdf::CRefShared
	{
		SGodEquipStar() 
			:_exp( 0 ),
			_consumeItemCode( 0 ),
			_consumeItemAmount( 0 )
		{}

		int _exp;					//本星经验值
		int _consumeItemCode;		//培养每次消耗物品编码
		int _consumeItemAmount;		//培养每次消耗物品数量
		DictIntInt _baseAttribute;	//本星基础属性
		SeqPairInt _expAttribute;	//每次培养加成属性
	};

另外,对于长些常用的类型,已经累计了很多公共的函数,可以直接使用,而且都是优化过的。例如CUtil里面的。


4.都是整形的数相除,结果是整形,想要除不尽进1,是不可能的。
	for ( SeqPairInt::const_iterator seqIt = seqPair.begin(); seqIt != seqPair.end(); ++seqIt )
	{
		DictIntInt::iterator mapIt = mapInt.find(seqIt->first);
		if ( mapIt == mapInt.end() )
		{
			mapInt[seqIt->first] = static_cast<int>( seqIt->second * ( scale / 100 ) );
		}
		else
		{
			mapIt->second += static_cast<int>( seqIt->second * ( scale / 100 ) );
		}
	}

5.随机函数,没什么特别操作就用CUtil::myRand().里面有一些检测的东西。

	for ( GameConfigData::SeqPairInt::const_iterator seqIt = levelConfig->_expFullConfig.begin();
			seqIt != levelConfig->_expFullConfig.end(); ++seqIt )
		{
			//暴击触发
			if ( expScale >= seqIt->first )
			{
				int fullProb = rand() % 10000 + 1;
				if ( fullProb < seqIt->second )
				{
					exp = levelConfig->_exp;
				}
				break;
			}
		}

6.对了,在抛错的地方,记得加上中文注释。

if ( GameConfigData::CGodEquipConfigManager::instance()->checkLevelMax( playerGodEquip.level ) )
{
	Common::CErrorCodeManager::throwException( "ErrorGate_GodEquipLevelMax" );//已达最大阶数
}
 

7.凌晨5点更新,可以用公共的函数。

static const int Hour5Second = 5 * 3600;//5小时的秒数
bool Common::CUtil::sameDay(const cdf::CDateTime& d1, const cdf::CDateTime& d2, int skewingSecond)
{
	cdf::CDateTime d1Temp = d1 - cdf::CInterval(skewingSecond, 0);
	cdf::CDateTime d2Temp = d2 - cdf::CInterval(skewingSecond, 0);

	return (d1Temp.getTotalDay() == d2Temp.getTotalDay());
}

bool Common::CUtil::sameWeekForSomeTime( const cdf::CDateTime& d1, const cdf::CDateTime& d2 , int skewingSecond /*= 0*/ )
{
	cdf::CDateTime d1Temp = d1 - cdf::CInterval(skewingSecond, 0);
	cdf::CDateTime d2Temp = d2 - cdf::CInterval(skewingSecond, 0);
//	std::string str1 = d1Temp.asString();
//	std::string str2 = d2Temp.asString();
	int day1 = d1Temp.getTotalDay();
	int dayOfWeek = d1Temp.getDayOfWeek();
	if (dayOfWeek == 0)
	{
		dayOfWeek = 7;
	}
	int begin = day1 -( dayOfWeek - 1 );
	int end = day1 + ( 7 - dayOfWeek );
	if (d2Temp.getTotalDay() >= begin && d2Temp.getTotalDay() <= end)
	{
		return true;
	}
	else
	{
		return false;
	}
}
把五小时的秒数传进来就行了。不用写那么多检测的。。。

例如这样写,不是同一天,就要更新了。

void CGodEquipHelper::checkGodEquipExpEx( const CPlayerPtr& player )
{
	if ( player->getTPlayerGodEquip().expEx > 0 )
	{
		if (!CUtil::sameDay(player->getTPlayerGodEquip().expExTime, cdf::CDateTime(), Second5Hours))
		{
			player->getTPlayerGodEquip().expEx = 0;
			player->getSaveInfo(ETPlayerGodEquip).changeFlag = true;
		}
	}
}


8.不要构建太多小结构,只有两个字段的话,一般用DictIntInt就完全够用了。这是才是最常用的结果,会有很多共用的函数。或者现在还不够完善,但是慢慢会有更多的。

 struct SGodEquipSpSkin
        {
            int skinCode;
            int refineLevel;
这个东西,完全没必要嘛。可能以后要加字段,到时再加也改不了多少东西。


9.有空还是弄个管理类吧,像神翼那样。







posted @ 2016-11-18 21:19  肥宝游戏  阅读(192)  评论(0编辑  收藏  举报