TU19: merge Minecraft.World/Stats

This commit is contained in:
Tropical 2026-03-21 17:30:42 -05:00
parent 3b52fd1369
commit a1e4726296
8 changed files with 101 additions and 98 deletions

View file

@ -43,7 +43,7 @@ void Achievement::_init() {
* @param prerequisite Achievement object that is required to unlock this one
*/
Achievement::Achievement(int id, const std::wstring& name, int x, int y,
Item* icon, Achievement* prerequisite)
Item* icon, Achievement* requires)
: Stat(Achievements::ACHIEVEMENT_OFFSET + id,
I18n::get(std::wstring(L"achievement.").append(name))),
desc(I18n::get(
@ -51,10 +51,10 @@ Achievement::Achievement(int id, const std::wstring& name, int x, int y,
icon(new ItemInstance(icon)),
x(x),
y(y),
prerequisite(prerequisite) {}
requires(requires) {}
Achievement::Achievement(int id, const std::wstring& name, int x, int y,
Tile* icon, Achievement* prerequisite)
Tile* icon, Achievement* requires)
: Stat(Achievements::ACHIEVEMENT_OFFSET + id,
I18n::get(std::wstring(L"achievement.").append(name))),
desc(I18n::get(
@ -62,11 +62,11 @@ Achievement::Achievement(int id, const std::wstring& name, int x, int y,
icon(new ItemInstance(icon)),
x(x),
y(y),
prerequisite(prerequisite) {}
requires(requires) {}
Achievement::Achievement(int id, const std::wstring& name, int x, int y,
std::shared_ptr<ItemInstance> icon,
Achievement* prerequisite)
Achievement* requires)
: Stat(Achievements::ACHIEVEMENT_OFFSET + id,
I18n::get(std::wstring(L"achievement.").append(name))),
desc(I18n::get(
@ -74,19 +74,7 @@ Achievement::Achievement(int id, const std::wstring& name, int x, int y,
icon(icon),
x(x),
y(y),
prerequisite(prerequisite) {}
/**
* @brief Sets the decription formatter (DescFormatter)
* @param descFormatter Pointer to the DescFormatter formatting the
* description text.
* @return self
**/
Achievement
* Achievement::setDescFormatter(DescFormatter * descFormatter) {
this->descFormatter = descFormatter;
return this;
}
requires(requires) {}
/**
* @brief Returns whether the Achivement is golden
@ -149,3 +137,14 @@ std::wstring Achievement::getDescription() {
}
return desc;
}
Achievement* Achievement::setDescFormatter(DescFormatter* descFormatter) {
this->descFormatter = descFormatter;
return this;
}
bool Achievement::isGolden() { return isGoldenVar; }
int Achievement::getAchievementID() {
return id - Achievements::ACHIEVEMENT_OFFSET;
}

View file

@ -7,7 +7,8 @@ class DescFormatter;
class Achievement : public Stat {
public:
const int x, y;
Achievement* prerequisite;
Achievement*
requires;
private:
const std::wstring desc;
@ -22,12 +23,11 @@ private:
public:
Achievement(int id, const std::wstring& name, int x, int y, Item* icon,
Achievement* prerequisite);
Achievement* requires);
Achievement(int id, const std::wstring& name, int x, int y, Tile* icon,
Achievement* prerequisite);
Achievement* requires);
Achievement(int id, const std::wstring& name, int x, int y,
std::shared_ptr<ItemInstance> icon,
Achievement* prerequisite);
std::shared_ptr<ItemInstance> icon, Achievement* requires);
Achievement* setAwardLocallyOnly();
Achievement* setGolden();

View file

@ -165,21 +165,21 @@ void Achievements::staticCtor() {
// "requires" are ignored on xbox.
Achievements::leaderOfThePack =
(new Achievement(eAward_LeaderOfThePack, L"leaderOfThePack", 0, 0,
Item::bone, (Achievement*)buildSword))
Tile::treeTrunk, (Achievement*)buildSword))
->setAwardLocallyOnly()
->postConstruct();
Achievements::MOARTools =
(new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Item::shovel_diamond,
(new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Tile::treeTrunk,
(Achievement*)buildSword))
->setAwardLocallyOnly()
->postConstruct();
Achievements::dispenseWithThis =
(new Achievement(eAward_DispenseWithThis, L"dispenseWithThis", 0, 0,
Tile::dispenser, (Achievement*)buildSword))
Tile::treeTrunk, (Achievement*)buildSword))
->postConstruct();
Achievements::InToTheNether =
(new Achievement(eAward_InToTheNether, L"InToTheNether", 0, 0,
Tile::portalTile, (Achievement*)buildSword))
Tile::treeTrunk, (Achievement*)buildSword))
->postConstruct();
// 4J : WESTY : Added other awards.
@ -196,7 +196,7 @@ void Achievements::staticCtor() {
#ifdef _EXTENDED_ACHIEVEMENTS
Achievements::eatPorkChop =
(new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0,
Item::porkChop_raw, (Achievement*)buildSword))
Tile::treeTrunk, (Achievement*)buildSword))
->setAwardLocallyOnly()
->postConstruct();
#else
@ -298,13 +298,13 @@ void Achievements::staticCtor() {
->postConstruct();
Achievements::repopulation =
(new Achievement(eAward_repopulation, L"repopulation", 0, 0,
Item::wheat, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
// Achievements::porkChoop // // //
// // // //
Achievements::diamondsToYou =
(new Achievement(eAward_diamondsToYou, L"diamondsToYou", 0, 0,
Item::diamond, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
// Achievements::passingTheTime = (new
// Achievement(eAward_play100Days, L"passingTheTime",
@ -315,63 +315,63 @@ void Achievements::staticCtor() {
// )->postConstruct();
Achievements::theHaggler =
(new Achievement(eAward_theHaggler, L"theHaggler", 0, 0,
Item::emerald, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->setAwardLocallyOnly()
->postConstruct();
Achievements::potPlanter =
(new Achievement(eAward_potPlanter, L"potPlanter", 0, 0,
Item::flowerPot, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->setAwardLocallyOnly()
->postConstruct();
Achievements::itsASign =
(new Achievement(eAward_itsASign, L"itsASign", 0, 0, Item::sign,
(new Achievement(eAward_itsASign, L"itsASign", 0, 0, Tile::bookshelf,
(Achievement*)NULL))
->setAwardLocallyOnly()
->postConstruct();
Achievements::ironBelly =
(new Achievement(eAward_ironBelly, L"ironBelly", 0, 0, Item::rotten_flesh,
(new Achievement(eAward_ironBelly, L"ironBelly", 0, 0, Tile::bookshelf,
(Achievement*)NULL))
->postConstruct();
Achievements::haveAShearfulDay =
(new Achievement(eAward_haveAShearfulDay, L"haveAShearfulDay", 0, 0,
Item::shears, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
Achievements::rainbowCollection =
(new Achievement(eAward_rainbowCollection, L"rainbowCollection", 0, 0,
Tile::cloth, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->setAwardLocallyOnly()
->postConstruct();
Achievements::stayinFrosty =
(new Achievement(eAward_stayinFrosty, L"stayingFrosty", 0, 0,
Tile::ice, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
Achievements::chestfulOfCobblestone =
(new Achievement(eAward_chestfulOfCobblestone, L"chestfulOfCobblestone",
0, 0, Tile::rock, (Achievement*)NULL))
0, 0, Tile::bookshelf, (Achievement*)NULL))
->setAwardLocallyOnly()
->postConstruct();
Achievements::renewableEnergy =
(new Achievement(eAward_renewableEnergy, L"renewableEnergy", 0, 0,
Item::coal, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
Achievements::musicToMyEars =
(new Achievement(eAward_musicToMyEars, L"musicToMyEars", 0, 0,
Tile::musicBlock, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
Achievements::bodyGuard =
(new Achievement(eAward_bodyGuard, L"bodyGuard", 0, 0, Tile::pumpkin,
(new Achievement(eAward_bodyGuard, L"bodyGuard", 0, 0, Tile::bookshelf,
(Achievement*)NULL))
->postConstruct();
Achievements::ironMan =
(new Achievement(eAward_ironMan, L"ironMan", 0, 0, Item::chestplate_iron,
(new Achievement(eAward_ironMan, L"ironMan", 0, 0, Tile::bookshelf,
(Achievement*)NULL))
->postConstruct();
Achievements::zombieDoctor =
(new Achievement(eAward_zombieDoctor, L"zombieDoctor", 0, 0,
Item::apple_gold, (Achievement*)NULL))
Tile::bookshelf, (Achievement*)NULL))
->postConstruct();
Achievements::lionTamer =
(new Achievement(eAward_lionTamer, L"lionTamer", 0, 0, Item::fish_raw,
(new Achievement(eAward_lionTamer, L"lionTamer", 0, 0, Tile::bookshelf,
(Achievement*)NULL))
->postConstruct();
#endif

View file

@ -56,7 +56,7 @@ Stat* CommonStats::get_breedEntity(eINSTANCEOF mobType) {
}
Stat* CommonStats::get_tamedEntity(eINSTANCEOF mobType) {
if (mobType == eTYPE_OZELOT)
if (mobType == eTYPE_OCELOT)
return GenericStats::lionTamer();
else if (mobType == eTYPE_WOLF)
return Stats::befriendsWolf;
@ -99,7 +99,7 @@ Stat* CommonStats::get_itemsCollected(int itemId, int itemAux) {
// stor itemsBought(emerald) so I don't have to make yet another massive
// StatArray for Items Bought.
#if (defined _EXTENDED_ACHIEVEMENTS) && (!defined _XBOX_ONE)
if (itemId == Tile::cloth_Id) return Stats::rainbowCollection[itemAux];
if (itemId == Tile::wool_Id) return Stats::rainbowCollection[itemAux];
#endif
if (itemId != Item::emerald_Id)

View file

@ -29,16 +29,16 @@
// Ds Item Event //
///////////////////
string DsItemEvent::nameMethods[] = {"NONE",
"itemPickedUp",
"itemCrafted",
"itemTakenFromChest",
"itemTakenFromEnderchest",
"itemBought",
"itemSmithed",
"blockMined",
"blockPlaced",
"MAX"};
std::string DsItemEvent::nameMethods[] = {"NONE",
"itemPickedUp",
"itemCrafted",
"itemTakenFromChest",
"itemTakenFromEnderchest",
"itemBought",
"itemSmithed",
"blockMined",
"blockPlaced",
"MAX"};
DsItemEvent::DsItemEvent(int id, const std::wstring& name) : Stat(id, name) {}
@ -48,8 +48,8 @@ bool DsItemEvent::onLeaderboard(ELeaderboardId leaderboard,
case eAcquisitionMethod_Pickedup:
switch (param->itemId) {
case Item::egg_Id:
case Tile::mushroom1_Id:
case Tile::mushroom2_Id:
case Tile::mushroom_brown_Id:
case Tile::mushroom_red_Id:
return leaderboard == eLeaderboardId_FARMING;
}
break;
@ -59,13 +59,13 @@ bool DsItemEvent::onLeaderboard(ELeaderboardId leaderboard,
case Tile::dirt_Id:
case Tile::stoneBrick_Id:
case Tile::sand_Id:
case Tile::rock_Id:
case Tile::stone_Id:
case Tile::gravel_Id:
case Tile::clay_Id:
case Tile::obsidian_Id:
return leaderboard == eLeaderboardId_MINING;
case Tile::crops_Id:
case Tile::wheat_Id:
case Tile::pumpkin_Id:
case Tile::reeds_Id:
return leaderboard == eLeaderboardId_FARMING;
@ -82,9 +82,9 @@ int DsItemEvent::mergeIds(int itemId) {
default:
return itemId;
case Tile::mushroom1_Id:
case Tile::mushroom2_Id:
return Tile::mushroom1_Id;
case Tile::mushroom_brown_Id:
case Tile::mushroom_red_Id:
return Tile::mushroom_brown_Id;
case Tile::dirt_Id:
case Tile::grass_Id:
@ -146,7 +146,7 @@ void DsItemEvent::handleParamBlob(std::shared_ptr<LocalPlayer> player,
}
// Debug printout.
string method = nameMethods[(int)param->methodId];
std::string method = nameMethods[(int)param->methodId];
app.DebugPrintf("<%ls>\t%s(%i:%i:%i)\n",
DurangoStats::getUserId(player), method.c_str(),
param->itemId, param->itemAux, param->itemCount);
@ -247,11 +247,13 @@ byteArray DsMobKilled::createParamBlob(std::shared_ptr<Player> player,
int mob_networking_id;
eINSTANCEOF mobEType = mob->GetType();
if ((mobEType == eTYPE_SPIDER) && (mob->rider.lock() != NULL) &&
(mob->rider.lock()->GetType() == eTYPE_SKELETON)) {
(mob->rider.lock()->GetType() == eTYPE_SKELETON) &&
mob->rider.lock()->isAlive()) {
mob_networking_id =
SPIDER_JOCKEY_ID; // Spider jockey only a concept for leaderboards.
} else if ((mobEType == eTYPE_SKELETON) && (mob->riding != NULL) &&
(mob->riding->GetType() == eTYPE_SPIDER)) {
(mob->riding->GetType() == eTYPE_SPIDER) &&
mob->riding->isAlive()) {
mob_networking_id =
SPIDER_JOCKEY_ID; // Spider jockey only a concept for leaderboards.
} else {
@ -290,12 +292,12 @@ byteArray DsMobKilled::createParamBlob(std::shared_ptr<Player> player,
// Ds Mob Interact //
/////////////////////
string DsMobInteract::nameInteract[] = {"unknownMobInteraction",
"mobBred",
"mobTamed",
"mobCured",
"mobCrafted",
"mobSheared"};
std::string DsMobInteract::nameInteract[] = {"unknownMobInteraction",
"mobBred",
"mobTamed",
"mobCured",
"mobCrafted",
"mobSheared"};
DsMobInteract::DsMobInteract(int id, const std::wstring& name)
: Stat(id, name) {}
@ -330,8 +332,8 @@ byteArray DsMobInteract::createParamBlob(eInteract interactionId,
// Ds Travel //
///////////////
string DsTravel::nameMethods[eMethod_MAX] = {"Walk", "Swim", "Fall", "Climb",
"Cart", "Boat", "Pig", "Time"};
std::string DsTravel::nameMethods[eMethod_MAX] = {
"Walk", "Swim", "Fall", "Climb", "Cart", "Boat", "Pig", "Time"};
unsigned int DsTravel::CACHE_SIZES[eMethod_MAX] = {
40, // WALK - Meters?
@ -682,7 +684,9 @@ Stat* DurangoStats::get_boatOneM() { return travel; }
Stat* DurangoStats::get_pigOneM() { return travel; }
Stat* DurangoStats::get_cowsMilked() { return get_itemsCrafted(Item::milk_Id); }
Stat* DurangoStats::get_cowsMilked() {
return get_itemsCrafted(Item::bucket_milk_Id);
}
Stat* DurangoStats::get_killMob() { return mobKilled; }
@ -725,7 +729,7 @@ Stat* DurangoStats::get_itemsCrafted(int itemId) {
// 4J-JEV: These items can be crafted trivially to and from their
// block equivalents,
// 'Acquire Hardware' also relies on 'Count_Crafted(IronIngot) ==
//Count_Forged(IronIngot)" on the Stats server.
// Count_Forged(IronIngot)" on the Stats server.
case Item::ironIngot_Id:
case Item::goldIngot_Id:
case Item::diamond_Id:
@ -806,7 +810,7 @@ byteArray DurangoStats::getParam_pigOneM(int distance) {
byteArray DurangoStats::getParam_cowsMilked() {
return DsItemEvent::createParamBlob(DsItemEvent::eAcquisitionMethod_Crafted,
Item::milk_Id, 0, 1);
Item::bucket_milk_Id, 0, 1);
}
byteArray DurangoStats::getParam_blocksPlaced(int blockId, int data,

View file

@ -13,7 +13,7 @@ enum ELeaderboardId {
class DsItemEvent : public Stat {
public:
static string nameMethods[];
static std::string nameMethods[];
enum eAcquisitionMethod {
eAcquisitionMethod_None = 0,
@ -69,7 +69,7 @@ public:
class DsMobInteract : public Stat {
protected:
static string nameInteract[];
static std::string nameInteract[];
public:
enum eInteract {
@ -93,7 +93,7 @@ public:
class DsTravel : public Stat {
public:
static string nameMethods[];
static std::string nameMethods[];
enum eMethod {
eMethod_walk,

View file

@ -41,7 +41,7 @@ Stat* Stat::postConstruct() {
std::pair<int, Stat*> id1(id, this);
#ifdef __PS3__
Stats::statsById->emplace(id1); // assert(0); // MGH - TODO - FIX - find
//out where this move function comes from
// out where this move function comes from
#else
Stats::statsById->emplace(std::move(id1));
#endif // __PS3__

View file

@ -172,9 +172,9 @@ void Stats::buildBlockStats() {
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 1, L"mineBlock.stone",
Tile::stoneBrick->id);
Tile::cobblestone->id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::stoneBrick->id] = newStat;
blocksMined[Tile::cobblestone->id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 2, L"mineBlock.sand",
@ -184,9 +184,9 @@ void Stats::buildBlockStats() {
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 3, L"mineBlock.cobblestone",
Tile::rock->id);
Tile::stone->id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::rock->id] = newStat;
blocksMined[Tile::stone->id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 4, L"mineBlock.gravel",
@ -245,21 +245,21 @@ void Stats::buildBlockStats() {
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 13, L"mineBlock.netherrack",
Tile::hellRock->id);
Tile::netherRack->id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::hellRock->id] = newStat;
blocksMined[Tile::netherRack->id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 14, L"mineBlock.soulSand",
Tile::hellSand->id);
Tile::soulsand->id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::hellSand->id] = newStat;
blocksMined[Tile::soulsand->id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 15, L"mineBlock.glowstone",
Tile::lightGem->id);
Tile::glowstone->id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::lightGem->id] = newStat;
blocksMined[Tile::glowstone->id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 16, L"mineBlock.wood",
@ -311,15 +311,15 @@ void Stats::buildCraftableStats() {
// leaderboards by dropping and picking up these items They are now changed
// to mining the block which involves a tiny bit more effort
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 18, L"mineBlock.wheat",
Tile::crops_Id);
Tile::wheat_Id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::crops_Id] = newStat;
blocksMined[Tile::wheat_Id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 19, L"mineBlock.mushroom1",
Tile::mushroom1_Id);
Tile::mushroom_brown_Id);
blocksMinedStats->push_back(newStat);
blocksMined[Tile::mushroom1_Id] = newStat;
blocksMined[Tile::mushroom_brown_Id] = newStat;
newStat->postConstruct();
newStat = new ItemStat(BLOCKS_MINED_OFFSET + 17, L"mineBlock.sugar",
@ -498,9 +498,9 @@ void Stats::buildCraftableStats() {
newStat->postConstruct();
newStat = new ItemStat(ITEMS_CRAFTED_OFFSET + 23, L"craftItem.glowstone",
Tile::lightGem_Id);
Tile::glowstone_Id);
itemsCraftedStats->push_back(newStat);
itemsCrafted[Tile::lightGem_Id] = newStat;
itemsCrafted[Tile::glowstone_Id] = newStat;
newStat->postConstruct();
newStat =
@ -608,7 +608,7 @@ void Stats::buildAdditionalStats() {
// 4J-JEV: WHY ON EARTH DO THESE ARRAYS HAVE TO BE SO PAINFULLY
// LARGE WHEN THEY ARE GOING TO BE MOSTLY EMPTY!!!
// Either way, I'm making this one smaller because
//we don't need those record items (and we only need 2).
// we don't need those record items (and we only need 2).
blocksPlaced = StatArray(1000);
itemStat = new ItemStat(offset++, L"blockPlaced.flowerPot",