⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 user2.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}

	if(m_iMaxWeight < m_iCurWeight + iWeight - iBasicItemWeight)
	{
		SendSystemMsg( IDS_USER_OVER_WEIGHT1, SYSTEM_ERROR, TO_ME);
		goto go_dressing_result;
	}

	// 格废阑 牢亥俊 -------------------- --------------------//
	for( i = 0; i < arSame.GetSize(); i++ )
	{
		CheckMaxValue((short &)m_UserItem[arSameSlot[i]].sCount, (short)arSame[i]->sCount); 
	}

	for(i = 0; i < arEmpty.GetSize(); i++)
	{
		m_UserItem[arEmptySlot[i]].sLevel = arEmpty[i]->sLevel;
		m_UserItem[arEmptySlot[i]].sSid = arEmpty[i]->sSid;
		m_UserItem[arEmptySlot[i]].sCount = arEmpty[i]->sCount;
		m_UserItem[arEmptySlot[i]].sBullNum = arEmpty[i]->sBullNum;
		m_UserItem[arEmptySlot[i]].sDuration = arEmpty[i]->sDuration;
		m_UserItem[arEmptySlot[i]].tIQ = arEmpty[i]->tIQ;
		for(j =0; j < MAGIC_NUM; j++) m_UserItem[arEmptySlot[i]].tMagic[j] = arEmpty[i]->tMagic[j];
	}

	// 盔籍阑 绝局绰 内靛 鞘夸窃 !!!!
	if( pOrgItem->sCount ==  itemcount ) ReSetItemSlot( &m_UserItem[itemslot] );//ReSetItemSlot(sSlot);
	else m_UserItem[itemslot].sCount = m_UserItem[itemslot].sCount - (short)itemcount;

	if(UpdateUserItemDN() == FALSE)
	{
		for(i = 0; i < TOTAL_ITEM_NUM; i++)		// 酒捞袍 沥焊 券盔
		{
			m_UserItem[i] = MyItem[i];
		}
		SendSystemMsg( IDS_USER_DRESSING_FAIL, SYSTEM_NORMAL, TO_ME);
		bFlag = TRUE;
		goto go_dressing_result;
	}

	m_iCurWeight += ( iWeight - iBasicItemWeight );
	GetRecoverySpeed();

	UpdateInvenSlot(&arEmptySlot, &arSameSlot);

	SendSystemMsg( strResult, SYSTEM_ERROR, TO_ME);

	TempBuf.Add(DRESSING);
	TempBuf.Add(SUCCESS);

	TempBuf.Add( (short)itemslot );
	TempBuf.Add(pOrgItem->sLevel);
	TempBuf.Add(pOrgItem->sSid);
	TempBuf.Add(pOrgItem->sDuration);
	TempBuf.Add(pOrgItem->sBullNum);
	TempBuf.Add(pOrgItem->sCount);
	for( i = 0; i < MAGIC_NUM; i++ ) TempBuf.Add(pOrgItem->tMagic[i]);
	TempBuf.Add(pOrgItem->tIQ);

	Send(TempBuf, TempBuf.GetLength());

go_dressing_result:
	int dddd = 0;

	if( bFlag )
	{
		TempBuf.Add(DRESSING);
		TempBuf.Add(FAIL);

		Send(TempBuf, TempBuf.GetLength());
	}

	// 皋葛府 秦力 -------------------- --------------------//
	for(i = 0; i < arSame.GetSize(); i++)
	{
		if(arSame[i] != NULL) delete arSame[i];
	}
	arSame.RemoveAll();
	arSameSlot.RemoveAll();
	for(i = 0; i < arEmpty.GetSize(); i++)
	{
		if(arEmpty[i] != NULL) delete arEmpty[i];
	}
	arEmpty.RemoveAll();
	arEmptySlot.RemoveAll();

	for(i = 0; i < arResult.GetSize(); i++ )
	{
		if( arResult[i] ) delete arResult[i];
	}
	arResult.RemoveAll();
}

void USER::ItemDataVersionCheck()
{
/*
	int i;

	switch( m_tItemVer )
	{
	case	0x00:
		{
			for(i = 0; i < TOTAL_ITEM_NUM; i++)
			{
				m_UserItem[i].iItemSerial = GenerateItemSerial( &(m_UserItem[i]) );
			}

			for(i = 0; i < TOTAL_BANK_ITEM_NUM; i++)
			{
				m_UserBankItem[i].iItemSerial = GenerateItemSerial( &(m_UserBankItem[i]) );
			}

			m_tItemVer = 0x01;

			UpdateMemUserAll( TRUE );
		}

	case	0x01:
	default:
		break;
	}

	switch( m_tAccountBankItemVer )
	{
	case	0X00:
		{
			for(i = 0; i < TOTAL_ACCOUNT_BANK_ITEM_NUM; i++)
			{
				m_AccountBankItem[i].iItemSerial = GenerateItemSerial( &(m_AccountBankItem[i]) );
			}

			m_tAccountBankItemVer = 0x01;

			UpdateMemUserAll( TRUE );
		}
	}
*/	
}

void USER::SelectOver100Skill(TCHAR *pBuf)
{
	if( m_sLevel < 100 ) return;		// 100乏 捞惑父 急琶 且 荐 乐促.

	int emptyskillslot = -1;

/*
#define BRAWL				0
#define STAFF				1
#define	EDGED				2
#define FIREARMS			3
*/
	switch( m_byClass )
	{
	case	BRAWL:
		emptyskillslot = 4;
		break;

	case	STAFF:
		emptyskillslot = 9;
		break;

	case	EDGED:
		emptyskillslot = 14;
		break;

	case	FIREARMS:
		emptyskillslot = 19;
		break;

	default:
		return;
	}

	if( emptyskillslot == -1 ) return;	// 弊 拌凯俊辑 荤侩窍瘤 臼绊 乐绰 付瘤阜 胶懦

	int skillsid = m_UserSkill[emptyskillslot].sSid;

	if(skillsid < 0 || skillsid >= g_arSkillTable.GetSize()) return;

	if( g_arSkillTable[skillsid]->m_sSid != -1 )		// 捞固 100乏 捞惑 胶懦阑 榜耳阑锭
	{
		if( emptyskillslot != skillsid ) return;
	}

	int index = 0;

	int selectedskill = GetByte( pBuf, index );

	if( selectedskill < 20 || selectedskill >= 24 ) return;	// 努扼捞攫飘俊辑 逞绢坷绰 胶懦 锅龋绰 0-3捞促

/*	20 - 竿傍
	21 - 例措规绢
	22 - 荤捞疟 历亲
	23 - 叼奇胶 诀 */

/*	if(selectedskill == 20)
	{
		if(m_byClass != 0)
		{
			SendUserStatusSkill();
			return;
		}
	} */

	int backupskill = m_UserSkill[emptyskillslot].sSid;
	int backupskilllevel = m_UserSkill[emptyskillslot].tLevel;

	m_UserSkill[emptyskillslot].sSid = selectedskill; 

         if( m_sLevel > 99 || m_sLevel < 130)
        {
	m_UserSkill[emptyskillslot].tLevel = (BYTE)((m_sLevel % 100) + 1);
         }

         if( m_sLevel >= 130) //此处控制120级后,固定技能点为20
        {
        m_UserSkill[emptyskillslot].tLevel = (BYTE)(30);
         }
	if( !UpdateUserData() )
	{
		m_UserSkill[emptyskillslot].sSid = backupskill;
		m_UserSkill[emptyskillslot].tLevel = backupskilllevel;
		return;
	}

	SendUserStatusSkill();
}

UINT64 USER::GenerateItemSerial(ItemList* pItem)
{
	if( pItem->tIQ == MAGIC_ITEM ||		// 概流酒捞袍捞芭唱
		pItem->tIQ == RARE_ITEM ||		// 贰绢酒捞袍捞芭唱
		pItem->sLevel >= 20 ||			// 饭骇 20捞惑 酒捞袍捞芭唱
		pItem->tMagic[5] >= 1 ||		// 诀弊饭捞靛啊 1锅捞惑 等 酒捞袍捞扼搁
		pItem->sSid == 756 )			// 必距
	{
		CTime t;

		t = CTime::GetCurrentTime();

		MYINT upper;		// 矫埃栏肺 惑困 4官捞飘甫 父电促
		MYINT under;		// 矫府倔肺 窍困 3官捞飘甫 唱赣瘤 茄官捞飘绰 辑滚 老访锅龋

		memcpy( &(upper.i), &t, sizeof(CTime) );

//		under.i = (int)::InterlockedIncrement( &(g_dwItemSerial) );
		under.i = (int)(g_dwItemSerial);
		under.b[3] = g_ItemSerialIndex;

		g_dwItemSerial++;

		if( g_dwItemSerial >= 255*255*255 ) g_dwItemSerial = 0;

		MYINT64 total;

		total.b[7] = upper.b[3];
		total.b[6] = upper.b[2];
		total.b[5] = upper.b[1];
		total.b[4] = upper.b[0];

		total.b[3] = under.b[3];
		total.b[2] = under.b[2];
		total.b[1] = under.b[1];
		total.b[0] = under.b[0];

		TRACE("GenerateSerial - %I64d\n", total.i );

		return total.i;

	}

	return 0;
}

void USER::AccountBankItemMoveReq(TCHAR *pBuf)
{
#ifdef _ACTIVE_USER
//	if(m_iDisplayType == 6 && m_sLevel > 25) return; //yskang 0.5
	if(m_iDisplayType == 6) return; //yskang 0.5
#endif

	int index = 0;
	BYTE type = GetByte(pBuf, index);

	switch(type)
	{
	case BANK_ITEM_INPUT:
		AccountBankInPut(pBuf + index);
		break;
	case BANK_ITEM_OUTPUT:
		AccountBankOutPut(pBuf + index);
		break;
	case BANK_DN_INPUT:
		AccountBankInPutDN(pBuf + index);
		break;
	}
}

void USER::AccountBankInPut(TCHAR *pBuf)
{
	int i;
	int tDestSlot;
	int index = 0;
	int iOver = 0;
	short sSid = -1;
	short sHaveCount = 0;
	DWORD dwCost = 150;

	BYTE result = SUCCESS;

	CBufferEx TempBuf;

	ItemList MyItem[TOTAL_ITEM_NUM], BackItem;

	BYTE tSourceSlot = GetByte(pBuf, index);	// 荤侩磊 酒捞袍捞 乐带 浇吩 困摹
	short sCount = GetShort(pBuf, index);		// 倔付父怒 焊包
												// 坷肺瘤 牢亥父 啊瓷窍促.			
	if(tSourceSlot < EQUIP_ITEM_NUM || tSourceSlot >= EQUIP_ITEM_NUM + INVENTORY_NUM) { result = FAIL; goto go_result; }

	sSid = m_UserItem[tSourceSlot].sSid;
	sHaveCount = m_UserItem[tSourceSlot].sCount;
	if(sHaveCount <= 0) { result = FAIL; goto go_result; }	// 酒捞袍捞 绝促.
												
	if(sSid < 0 || sSid >= g_arItemTable.GetSize()) { result = FAIL; goto go_result; }	// 肋给等 sSid

	if(g_arItemTable[sSid]->m_sEvent >= EVENT_RR_ITEM_BAND)		// 肺凯烦喉 惑前篮 烹钦芒绊俊 持阑 荐 绝促.
	{
		SendSystemMsg( IDS_USER_CANT_SHARE_EVENT_ITEM, SYSTEM_ERROR, TO_ME);
		result = FAIL; goto go_result; 
	}

	if(sCount > ACCOUNT_BANK_MAX_ITEM) 
	{
		SendSystemMsg( IDS_USER_SAME_ITEM_COUNT_MAX, SYSTEM_ERROR, TO_ME);
		result = FAIL; goto go_result;
	}
												
	if(sCount <= 0 || sCount > sHaveCount) { result = FAIL; goto go_result; }	// 家瘤茄 酒捞袍 荐焊促 腹阑 版快
												//郴备档 眉农甫 wear沥焊肺 沁促.
	//if(g_arItemTable[sSid]->m_byWear <= 5 && sCount > 1) { result = FAIL; goto go_result; }
	if(g_arItemTable[sSid]->m_sDuration > 0 && sCount > 1) { result = FAIL; goto go_result; }	// 般磨荐 绝绰单 肮荐啊 1焊促 努荐 绝促.
	
	for(i = 0; i < TOTAL_ITEM_NUM; i++)	// 酒捞袍 沥焊 归诀
	{
		MyItem[i] = m_UserItem[i];
	}

	ReSetItemSlot(&BackItem);					// DB角菩俊 措厚茄 归诀侩 檬扁拳
												// 老窜 般磨荐 乐绰瘤, 般摹搁 鞍篮 酒捞袍捞 乐绰瘤 茫酒夯促.
	tDestSlot = GetSameItem(m_UserItem[tSourceSlot], ACCOUNT_BANK_SLOT);
	
	/***************************篮青 诀公 贸府********************************************/
	if(tDestSlot >= 0)							// 亲惑 货肺捞 眠啊 登绰巴阑 扁霖栏肺 贸府
	{											
		BackItem = m_AccountBankItem[tDestSlot];

		if(m_AccountBankItem[tDestSlot].sCount >= ACCOUNT_BANK_MAX_ITEM)
		{
			SendSystemMsg( IDS_USER_SAVE_MAX_COUNT, SYSTEM_ERROR, TO_ME);
			result = FAIL; goto go_result;
		}

		if((m_AccountBankItem[tDestSlot].sCount + sCount) > ACCOUNT_BANK_MAX_ITEM)
		{										// MAX蔼阑 逞栏搁 菜盲快绊 唱赣瘤 贸府			
			iOver = m_AccountBankItem[tDestSlot].sCount + sCount - ACCOUNT_BANK_MAX_ITEM;
			if(iOver <= 0) { result = FAIL; goto go_result; }

			m_AccountBankItem[tDestSlot].sCount = ACCOUNT_BANK_MAX_ITEM;
			sCount = sCount - iOver;
		}
		else m_AccountBankItem[tDestSlot].sCount += sCount;
	}
	else
	{											//	眠啊
		tDestSlot = GetEmptySlot(ACCOUNT_BANK_SLOT);

		if(tDestSlot == -1) 
		{
			result = FAIL; goto go_result; 
		}

		m_AccountBankItem[tDestSlot].sLevel = m_UserItem[tSourceSlot].sLevel;
		m_AccountBankItem[tDestSlot].sSid = m_UserItem[tSourceSlot].sSid;
		m_AccountBankItem[tDestSlot].sDuration = m_UserItem[tSourceSlot].sDuration;
		m_AccountBankItem[tDestSlot].sBullNum = m_UserItem[tSourceSlot].sBullNum;
		m_AccountBankItem[tDestSlot].sCount = sCount;
		for(i = 0; i < MAGIC_NUM; i++) m_AccountBankItem[tDestSlot].tMagic[i] = m_UserItem[tSourceSlot].tMagic[i];
		m_AccountBankItem[tDestSlot].tIQ = m_UserItem[tSourceSlot].tIQ;
		m_AccountBankItem[tDestSlot].iItemSerial = m_UserItem[tSourceSlot].iItemSerial;
	}

	index = 0;
	index = g_arItemTable[m_UserItem[tSourceSlot].sSid]->m_byWeight * sCount;
	/**************************蜡历 牢亥 贸府*********************************************/
	if(sCount >= sHaveCount && iOver == 0)
	{
		MakeItemLog( &m_AccountBankItem[tDestSlot], ITEMLOG_ACCOUNT_BANKIN );
		ReSetItemSlot(&m_UserItem[tSourceSlot]);	
	}
	else m_UserItem[tSourceSlot].sCount -= sCount;
	
	/**************************DB Update 贸府*********************************************/
	if(UpdateUserBank() == FALSE)
	{
		for(i = 0; i < TOTAL_ITEM_NUM; i++)// 酒捞袍 沥焊 汗盔
		{
			m_UserItem[i] = MyItem[i];
		}
		m_AccountBankItem[tDestSlot] = BackItem;

		result = FAIL;
		FlushItemLog( FALSE );
		goto go_result;
	}

	FlushItemLog( TRUE );

go_result:
	TempBuf.Add(ACCOUNT_BANK_ITEM_MOVE_RESULT);

	if(result == FAIL)
	{
		TempBuf.Add(result);
		Send(TempBuf, TempBuf.GetLength());
		return;
	}

	result = (BYTE)0x01;
	TempBuf.Add(result);

	TempBuf.Add((BYTE)tDestSlot);				// 篮青诀公	
	TempBuf.Add( dwCost );
	TempBuf.Add(m_AccountBankItem[tDestSlot].sLevel);
	TempBuf.Add(m_AccountBankItem[tDestSlot].sSid);
	TempBuf.Add(m_AccountBankItem[tDestSlot].sDuration);
	TempBuf.Add(m_AccountBankItem[tDestSlot].sBullNum);
	TempBuf.Add(m_AccountBankItem[tDestSlot].sCount);
	for(i = 0; i < MAGIC_NUM; i++) TempBuf.Add(m_AccountBankItem[tDestSlot].tMagic[i]);
	TempBuf.Add(m_AccountBankItem[tDestSlot].tIQ);

	TempBuf.Add((BYTE)tSourceSlot);				// 蜡历 牢亥
	TempBuf.Add(m_UserItem[tSourceSlot].sLevel);
	TempBuf.Add(m_UserItem[tSourceSlot].sSid);
	TempBuf.Add(m_UserItem[tSourceSlot].sDuration);
	TempBuf.Add(m_UserItem[tSourceSlot].sBullNum);
	TempBuf.Add(m_UserItem[tSourceSlot].sCount);
	for(i = 0; i < MAGIC_NUM; i++) TempBuf.Add(m_UserItem[tSourceSlot].tMagic[i]);
	TempBuf.Add(m_UserItem[tSourceSlot].tIQ);

	Send(TempBuf, TempBuf.GetLength());

	m_iCurWeight -= index;
	if(m_iCurWeight < 0) m_iCurWeight = 0;

	GetRecoverySpeed();							// 雀汗加档 眉农...
}

void USER::AccountBankOutPut(TCHAR *pBuf)
{
	int i, j, iWeight = 0;
	int tDestSlot;
	int index = 0;
	int iOver = 0;
	short sSid = -1;
	short sHaveCount = 0;

	short myslot;
	BYTE result = SUCCESS;

	CWordArray		arChangeMy, arChangeBank;
	ItemList		MyItem[TOTAL_ITEM_NUM], BankItem[TOTAL_ACCOUNT_BANK_ITEM_NUM];
	BYTE			arSlot[TOTAL_ACCOUNT_BANK_ITEM_NUM];
	short			arCount[TOTAL_ACCOUNT_BANK_ITEM_NUM];

	for( i = 0; i < TOTAL_ACCOUNT_BANK_ITEM_NUM; i++ ) arSlot[i] = -1;
	for( i = 0; i < TOTAL_ACCOUNT_BANK_ITEM_NUM; i++ ) arCount[i] = -1;

	CBufferEx TempBuf;

	CStore* pStore = NULL;
	short sStoreID = GetShort(pBuf, index);
	if(sStoreID < 0) return;
	pStore = GetStore(sStoreID);
	if(pStore == NULL) return;
	short sRate = pStore->m_sRate;

	DWORD OutCost = 0;
	DWORD dwTax = 0;

	DWORD OutputDN = GetDWORD(pBuf, index);

	if(OutputDN > m_dwAccountBankDN)			// 呈公 农搁
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -