// заполнить содержимое региона для локации входа (вторая)
bool DynamicReg::CreateContentL1() {

	// обнулить количество экземпляров
	ZeroMemory(vectInstanceAmount, sizeof(UINT)* TerrainVectorModels.size());

	// перезаписать содержимое
	for (int i(0); i < Const::regionCellSize; i++) {
		for (int j(0); j < Const::regionCellSize; j++) {
			content[i][j] = CellFiller();
			content[i][j].biomType = B_DREAMFOREST;
			float xAdress = regionAdress.x * (float)Const::regionCellSize + i;
			float yAdress = regionAdress.y * (float)Const::regionCellSize + j;
			float treeFunction = Mediator::superFunct->TreeFunction(xAdress, yAdress);
			float random = Mediator::superFunct->FullRandom0(xAdress, yAdress); // полная случайность

			// генерация содержимого
			if (treeFunction > 0.0f) {
				if (random > 0.3f) { BR(GenerateItem(regionAdress, NumXY<UINT>(i, j), CI_TT1)); }
				else if (random > -0.3f) { BR(GenerateItem(regionAdress, NumXY<UINT>(i, j), CI_TT2)); }
				else { BR(GenerateItem(regionAdress, NumXY<UINT>(i, j), CI_TT3)); }
			}

		} // для каждой ячейки
	}

	// обновить описатели
	for (UINT i(0); i < TerrainVectorModels.size(); i++) {
		if (vectInstanceAmount[i]) BR(TerrainVectorModels[i]->AddDescription(regionAdress, vectInstanceAmount[i]));
	}

	return true;

}
Exemplo n.º 2
0
KItem* KItemManager::GenerateItemFromTransferData(int nType, void* pBuffer,
        size_t uBufferSize)
{
    KItem*	pItem = NULL;
    DWORD	dwItemId = ERROR_ID;

    switch(nType)
    {
    case isst_Common:
    {
        KGLOG_PROCESS_ERROR(uBufferSize == sizeof(COMMON_ITEM_SYNC));
        COMMON_ITEM_SYNC* pCis = (COMMON_ITEM_SYNC *)pBuffer;
        pItem = GenerateItem(pCis->byVersion, pCis->byTabFile, pCis->wTabIndex, pCis->dwItemId);
    }
    break;
    case isst_CustomEquip:
    {
        KGLOG_PROCESS_ERROR(uBufferSize == sizeof(CUSTOM_EQUIP_SYNC));
        CUSTOM_EQUIP_SYNC* pCes = (CUSTOM_EQUIP_SYNC *)pBuffer;
        pItem = GenerateItem(pCes->byVersion, pCes->byTabFile, pCes->wTabIndex, pCes->dwItemId,
                             pCes->dwRandSeed);
    }
    break;
    case isst_Equip:
    {
        KGLOG_PROCESS_ERROR(uBufferSize == sizeof(RAND_EQUIP_SYNC));

        RAND_EQUIP_SYNC* pEs = (RAND_EQUIP_SYNC *)pBuffer;

        int nMagicNum = 0;
        int arnMagic[MAX_ITEM_MAGIC_COUNT];

        ZeroMemory(arnMagic, sizeof(arnMagic));

        for (int i = 0; i < MAX_ITEM_MAGIC_COUNT; i++)
        {
            if (pEs->wMagic[i] == ERROR_ID)
            {
                break;
            }
            nMagicNum++;
            arnMagic[i] = pEs->wMagic[i];
        }

        pItem = GenerateItem(pEs->byVersion, pEs->byTabFile, pEs->wTabIndex, pEs->dwItemId,
                             pEs->dwRandSeed, nMagicNum, pEs->byQuality, arnMagic);
    }
    break;
    default:
        break;
    }

Exit0:
    return pItem;
}
Exemplo n.º 3
0
void CItemSpawn::OnTick(bool fExec)
{
	ADDTOCALLSTACK("CitemSpawn:OnTick");

	INT64 iMinutes;

	if ( m_itSpawnChar.m_TimeHiMin <= 0 )
		iMinutes = Calc_GetRandLLVal(30) + 1;
	else
		iMinutes = minimum(m_itSpawnChar.m_TimeHiMin, m_itSpawnChar.m_TimeLoMin) + Calc_GetRandLLVal(abs(m_itSpawnChar.m_TimeHiMin - m_itSpawnChar.m_TimeLoMin));

	if ( iMinutes <= 0 )
		iMinutes = 1;

	if ( !fExec || IsTimerExpired() )
		SetTimeout(iMinutes * 60 * TICK_PER_SEC);	// set time to check again.

	if ( !fExec || m_currentSpawned >= GetAmount() )
		return;

	CResourceDef *pDef = FixDef();
	if ( !pDef )
	{
		RESOURCE_ID_BASE rid = IsType(IT_SPAWN_ITEM) ? m_itSpawnItem.m_ItemID : m_itSpawnChar.m_CharID;
		DEBUG_ERR(("Bad Spawn point uid=0%lx, id=%s\n", (DWORD)GetUID(), g_Cfg.ResourceGetName(rid)));
		return;
	}

	if ( IsType(IT_SPAWN_ITEM) )
		GenerateItem(pDef);
	else
		GenerateChar(pDef);
}
// заполнить содержимое региона для тестовой локации
bool DynamicReg::CreateTestedLocationContent() {

	// обнулить количество экземпляров
	ZeroMemory(vectInstanceAmount, sizeof(UINT)* TerrainVectorModels.size());

	// перезаписать содержимое
	for (int i(0); i < Const::regionCellSize; i++) {
		for (int j(0); j < Const::regionCellSize; j++) {
			content[i][j] = CellFiller();
			content[i][j].biomType = B_TESTED;
			float xAdress = regionAdress.x * (float)Const::regionCellSize + i;
			float yAdress = regionAdress.y * (float)Const::regionCellSize + j;

			// режим отладки одиночного объекта
			BR(GenerateItem(regionAdress, NumXY<UINT>(i, j), 0)); // тестируемый объект


		} // для каждой ячейки
	}

	// обновить описатели
	for (UINT i(0); i < TerrainVectorModels.size(); i++) {
		if (vectInstanceAmount[i]) BR(TerrainVectorModels[i]->AddDescription(regionAdress, vectInstanceAmount[i]));
	}

	return true;

}