Beispiel #1
0
void MMatchObjectCacheBuilder::AddObject(MMatchObject* pObj)
{
	MMatchObjCache* pCache = new MMatchObjCache;
	int nItemID=0;
	MMatchItemDesc* pItemDesc = NULL;

	MMatchCharInfo* pCharInfo = pObj->GetCharInfo();
//	_ASSERT(pCharInfo);
	if (pCharInfo == NULL)
	{
		delete pCache;
		return;
	}

	MMatchObjectDuelTournamentCharInfo* pDTCharInfo = pObj->GetDuelTournamentCharInfo();
	int nDTLastWeekGrade = pDTCharInfo ? pDTCharInfo->GetLastWeekGrade() : 0;

	pCache->SetInfo(pObj->GetUID(), pObj->GetName(), pCharInfo->m_ClanInfo.m_szClanName, 
					pCharInfo->m_nLevel, pObj->GetAccountInfo()->m_nUGrade, pObj->GetAccountInfo()->m_nPGrade
					, pCharInfo->m_nRank, pCharInfo->m_nTotalKillCount, pCharInfo->m_nTotalDeathCount, nDTLastWeekGrade );
	pCache->SetCLID(pObj->GetCharInfo()->m_ClanInfo.m_nClanID);

	MMatchClan* pClan = MMatchServer::GetInstance()->GetClanMap()->GetClan(pObj->GetCharInfo()->m_ClanInfo.m_nClanID);
	if (pClan)
		pCache->SetEmblemChecksum(pClan->GetEmblemChecksum());
	else
		pCache->SetEmblemChecksum(0);

	pCache->GetCostume()->nSex = pObj->GetCharInfo()->m_nSex;
	pCache->GetCostume()->nHair = pObj->GetCharInfo()->m_nHair;
	pCache->GetCostume()->nFace = pObj->GetCharInfo()->m_nFace;

	for (int i=0; i < MMCIP_END; i++)
	{
		if (!pObj->GetCharInfo()->m_EquipedItem.IsEmpty(MMatchCharItemParts(i)))
		{
			pCache->GetCostume()->nEquipedItemID[i] =
				pObj->GetCharInfo()->m_EquipedItem.GetItem(MMatchCharItemParts(i))->GetDescID();
		}
		else
		{
			pCache->GetCostume()->nEquipedItemID[i] = 0;
		}
	}

	pCache->SetFlags(pObj->GetPlayerFlags());

	m_ObjectCacheList.push_back(pCache);
}
Beispiel #2
0
static bool WriteGunGameInfo(ZFile& File, ZCharacterManager& CharacterManager)
{
	// MTD_GunGameWeaponInfo does not itself contain any information about whom it belongs to,
	// instead this information is inferred from the order, since the data is written for each
	// player in the same order as the character info written by WriteCharacters.
	// Also, since ZCharacterManager is a std::map<MUID, ZCharacter*>, they'll be written in
	// ascending order with respect to the MUID's.

	int CharacterCount = CharacterManager.size();
	WRITE(CharacterCount);
	for (auto& Item : CharacterManager)
	{
		auto* Char = Item.second;
		MTD_GunGameWeaponInfo Info{};
		for (int i = 0; i < 5; ++i)
		{
			auto Parts = MMatchCharItemParts(int(MMCIP_MELEE) + i);
			auto* Item = Char->GetItems()->GetItem(Parts);
			if (!Item)
			{
				assert(false);
				continue;
			}

			Info.WeaponIDs[i] = Item->GetDescID();
		}

		WRITE(Info);
	}

	return true;
}
Beispiel #3
0
bool ZCharacterItem::Save(ZFile *file)
{
	size_t n;
	for(int i=0;i<MMCIP_END;i++)
	{
		ZItem *pItem=GetItem(MMatchCharItemParts(i));
		int nBullet=pItem->GetBulletSpare();
		n=zfwrite(&nBullet,sizeof(nBullet),1,file);
		if(n!=1) return false;

		int nBulletCurrMagazine=pItem->GetBulletCurrMagazine();
		n=zfwrite(&nBulletCurrMagazine,sizeof(nBulletCurrMagazine),1,file);
		if(n!=1) return false;
	}
	return true;
}
Beispiel #4
0
void ZCharacterView::SetSelectMyCharacter()
{
	ZMyInfo* pmi = ZGetMyInfo();
	ZMyItemList* pil = ZGetMyInfo()->GetItemList();

	u32 nWeaponID = GetVisualWeaponID(pil->GetEquipedItemID(MMCIP_MELEE),
		pil->GetEquipedItemID(MMCIP_PRIMARY), pil->GetEquipedItemID(MMCIP_SECONDARY),
		pil->GetEquipedItemID(MMCIP_CUSTOM1), pil->GetEquipedItemID(MMCIP_CUSTOM2));

	u32 nItemids[MMCIP_END];

	if(pmi) 
	{
		for (int i = 0; i < MMCIP_END; i++)
		{
			nItemids[i] = pil->GetEquipedItemID(MMatchCharItemParts(i));
		}

		InitCharParts(pmi->GetSex(), pmi->GetHair(), pmi->GetFace(), nItemids);
	}
}
Beispiel #5
0
bool ZCharacterItem::Load(ZFile *file, int nReplayVersion)
{
	enum MMatchCharItemParts_v0
	{
		MMCIP_HEAD_V0		= 0,
		MMCIP_CHEST_V0		= 1,
		MMCIP_HANDS_V0		= 2,
		MMCIP_LEGS_V0		= 3,
		MMCIP_FEET_V0		= 4,
		MMCIP_FINGERL_V0	= 5,
		MMCIP_FINGERR_V0	= 6,
		MMCIP_MELEE_V0		= 7,
		MMCIP_PRIMARY_V0	= 8,
		MMCIP_SECONDARY_V0	= 9,
		MMCIP_CUSTOM1_V0	= 10,
		MMCIP_CUSTOM2_V0	= 11,
		MMCIP_END_V0
	};

	struct Converter
	{
		static int v0_to_v6(int v0)
		{
			switch (v0)
			{
			case MMCIP_HEAD_V0:			return MMCIP_HEAD;
			case MMCIP_CHEST_V0:		return MMCIP_CHEST;
			case MMCIP_HANDS_V0:		return MMCIP_HANDS;
			case MMCIP_LEGS_V0:			return MMCIP_LEGS;
			case MMCIP_FEET_V0:			return MMCIP_FEET;
			case MMCIP_FINGERL_V0:		return MMCIP_FINGERL;
			case MMCIP_FINGERR_V0:		return MMCIP_FINGERR;
			case MMCIP_MELEE_V0:		return MMCIP_MELEE;
			case MMCIP_PRIMARY_V0:		return MMCIP_PRIMARY;
			case MMCIP_SECONDARY_V0:	return MMCIP_SECONDARY;
			case MMCIP_CUSTOM1_V0:		return MMCIP_CUSTOM1;
			case MMCIP_CUSTOM2_V0:		return MMCIP_CUSTOM2;
			}
			return MMCIP_END;
		}

		static int convert(int old, int nReplayVersion)
		{
			int curr = old;
			switch (nReplayVersion)
			{
			case 0:case 1:case 2:case 3:case 4:case 5:
				curr = v0_to_v6(curr);
			}
			return curr;
		}
	};

	int numCharItemParts = 0;
	if (0 <= nReplayVersion && nReplayVersion <= 5)
		numCharItemParts = MMCIP_END_V0;
	else
		numCharItemParts = MMCIP_END;

	size_t n;
	for(int i=0;i<numCharItemParts;i++)
	{
		int idxParts = Converter::convert(i, nReplayVersion);
		ZItem *pItem=GetItem(MMatchCharItemParts(idxParts));
		int nBullet;
		n=zfread(&nBullet,sizeof(nBullet),1,file);
		pItem->SetBulletSpare(nBullet);
		if(n!=1) return false;

		int nBulletCurrMagazine;
		n=zfread(&nBulletCurrMagazine,sizeof(nBulletCurrMagazine),1,file);
		pItem->SetBulletCurrMagazine(nBulletCurrMagazine);
		if(n!=1) return false;
	}

	return true;
}