Merge pull request #1539 from mc-server/DungeonLoot
Added loot to dungeons.
This commit is contained in:
commit
3d05b46c60
@ -6,6 +6,7 @@
|
|||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "DungeonRoomsFinisher.h"
|
#include "DungeonRoomsFinisher.h"
|
||||||
#include "../FastRandom.h"
|
#include "../FastRandom.h"
|
||||||
|
#include "../BlockEntities/ChestEntity.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -175,7 +176,33 @@ protected:
|
|||||||
}
|
}
|
||||||
a_ChunkDesc.SetBlockTypeMeta(RelX, m_FloorHeight + 1, RelZ, E_BLOCK_CHEST, (NIBBLETYPE)a_Chest.y);
|
a_ChunkDesc.SetBlockTypeMeta(RelX, m_FloorHeight + 1, RelZ, E_BLOCK_CHEST, (NIBBLETYPE)a_Chest.y);
|
||||||
|
|
||||||
// TODO: Fill the chest with random loot
|
// Fill the chest with random loot
|
||||||
|
static const cLootProbab LootProbab[] =
|
||||||
|
{
|
||||||
|
// Item, MinAmount, MaxAmount, Weight
|
||||||
|
{ cItem(E_ITEM_GOLDEN_APPLE), 1, 1, 1 },
|
||||||
|
{ cItem(E_ITEM_DIAMOND_HORSE_ARMOR), 1, 1, 1 },
|
||||||
|
{ cItem(E_ITEM_GOLD_HORSE_ARMOR), 1, 1, 2 },
|
||||||
|
{ cItem(E_ITEM_13_DISC), 1, 1, 4 },
|
||||||
|
{ cItem(E_ITEM_CAT_DISC), 1, 1, 4 },
|
||||||
|
{ cItem(E_ITEM_IRON_HORSE_ARMOR), 1, 1, 5 },
|
||||||
|
{ cItem(E_ITEM_IRON), 1, 4, 10 },
|
||||||
|
{ cItem(E_ITEM_WHEAT), 1, 4, 10 },
|
||||||
|
{ cItem(E_ITEM_GUNPOWDER), 1, 4, 10 },
|
||||||
|
{ cItem(E_ITEM_STRING), 1, 4, 10 },
|
||||||
|
{ cItem(E_ITEM_REDSTONE_DUST), 1, 4, 10 },
|
||||||
|
{ cItem(E_ITEM_SADDLE), 1, 1, 10 },
|
||||||
|
{ cItem(E_ITEM_BUCKET), 1, 1, 10 },
|
||||||
|
{ cItem(E_ITEM_BREAD), 1, 1, 10 },
|
||||||
|
{ cItem(E_ITEM_NAME_TAG), 1, 1, 10 },
|
||||||
|
} ;
|
||||||
|
|
||||||
|
cChestEntity * ChestEntity = (cChestEntity *)a_ChunkDesc.GetBlockEntity(RelX, m_FloorHeight + 1, RelZ);
|
||||||
|
ASSERT((ChestEntity != NULL) && (ChestEntity->GetBlockType() == E_BLOCK_CHEST));
|
||||||
|
cNoise Noise(a_ChunkDesc.GetChunkX() ^ a_ChunkDesc.GetChunkZ());
|
||||||
|
int NumSlots = 3 + ((Noise.IntNoise3DInt(a_Chest.x, a_Chest.y, a_Chest.z) / 11) % 4);
|
||||||
|
int Seed = Noise.IntNoise2DInt(RelX, RelZ);
|
||||||
|
ChestEntity->GetContents().GenerateRandomLootWithBooks(LootProbab, ARRAYCOUNT(LootProbab), NumSlots, Seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -193,6 +220,7 @@ protected:
|
|||||||
// The chunk is not intersecting the room at all, bail out
|
// The chunk is not intersecting the room at all, bail out
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int b = m_FloorHeight + 1; // Bottom
|
int b = m_FloorHeight + 1; // Bottom
|
||||||
int t = m_FloorHeight + 1 + ROOM_HEIGHT; // Top
|
int t = m_FloorHeight + 1 + ROOM_HEIGHT; // Top
|
||||||
ReplaceCuboidRandom(a_ChunkDesc, m_StartX, m_FloorHeight, m_StartZ, m_EndX + 1, b, m_EndZ + 1, E_BLOCK_MOSSY_COBBLESTONE, E_BLOCK_COBBLESTONE); // Floor
|
ReplaceCuboidRandom(a_ChunkDesc, m_StartX, m_FloorHeight, m_StartZ, m_EndX + 1, b, m_EndZ + 1, E_BLOCK_MOSSY_COBBLESTONE, E_BLOCK_COBBLESTONE); // Floor
|
||||||
|
@ -654,17 +654,17 @@ void cItemGrid::GenerateRandomLootWithBooks(const cLootProbab * a_LootProbabs, s
|
|||||||
|
|
||||||
for (size_t j = 0; j < a_CountLootProbabs; j++)
|
for (size_t j = 0; j < a_CountLootProbabs; j++)
|
||||||
{
|
{
|
||||||
LootRnd -= a_LootProbabs[i].m_Weight;
|
LootRnd -= a_LootProbabs[j].m_Weight;
|
||||||
if (LootRnd < 0)
|
if (LootRnd < 0)
|
||||||
{
|
{
|
||||||
CurrentLoot = a_LootProbabs[i].m_Item;
|
CurrentLoot = a_LootProbabs[j].m_Item;
|
||||||
if ((a_LootProbabs[i].m_MaxAmount - a_LootProbabs[i].m_MinAmount) > 0)
|
if ((a_LootProbabs[j].m_MaxAmount - a_LootProbabs[j].m_MinAmount) > 0)
|
||||||
{
|
{
|
||||||
CurrentLoot.m_ItemCount = a_LootProbabs[i].m_MinAmount + (Rnd % (a_LootProbabs[i].m_MaxAmount - a_LootProbabs[i].m_MinAmount));
|
CurrentLoot.m_ItemCount = a_LootProbabs[j].m_MinAmount + (Rnd % (a_LootProbabs[j].m_MaxAmount - a_LootProbabs[j].m_MinAmount));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CurrentLoot.m_ItemCount = a_LootProbabs[i].m_MinAmount;
|
CurrentLoot.m_ItemCount = a_LootProbabs[j].m_MinAmount;
|
||||||
}
|
}
|
||||||
Rnd >>= 8;
|
Rnd >>= 8;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user