Dungeon Loot Modification - Proposed Fix/Tweak

Discussion in 'Suggestion Box Archives' started by azoundria, Jun 1, 2016.

?

What Would Be Your Preference?

Dungeon Chests Are Left Vanilla (Reverse Aikar's Changes) 4 vote(s) 18.2%
Dungeon Chests Are Completely Unbreakable (Present State) 6 vote(s) 27.3%
Dungeon Chests Can Still Be Broken (As Vanilla) And Will Reappear In The Same Place After 3-7 Days 12 vote(s) 54.5%
  1. I definitely see the issue with dungeons getting looted and there being nothing available for new players to explore. I think it's awesome that new players will be able to also get loot again from the same dungeons/chests, so I definitely applaud the direction of the new change and the work that was put in. That said, one of the principals of EMC that I've always admired is the play-your-way style of thinking and keeping things vanilla, and I don't want to lose this. It's really amazing that a player could randomly go out in the waste and play/mine with a vanilla experience.

    One main impact I can think of is for the vanilla feel of looting and raiding dungeons. It's common practice for many players exploring mineshafts and dungeons just to destroy the encountered chests. This is a lot faster for collecting the materials, and many would consider it a lot more fun. Again, I consider this to be a personal play style, and a fun vanilla experience, and I think it should be preserved. Opening the chest and manually pulling out items one by one is not nearly as much fun as breaking it and collecting the spoils, and being unable to break the chest greatly disturbs the vanilla feel.

    I know the waste is not primarily for building, however many players do build temporary creations intended to help harvest resources such as a mine, quarry, or mob grinder. Imagine that one of these structures happens to be built in the same location as an existing dungeon chest. In the case of a mob grinder this is unavoidable. In other cases, the player may simply not know about the dungeon when they start building. Imagine having to modify your mob grinder design to accommodate a couple random chests, a quarry with random floating chests in the middle, or having to rebuild a whole mine shaft because it happened to hit a dungeon on the way to bedrock. Not only is this an inconvenience to the building player, but griefing is now in many cases required to get the dungeon loot. In the quarry example, another player would have to build an ugly dirt/cobble bridge to get at the chests (which I believe is technically griefing). In the mob grinder example, the chests are pointless because they will be completely hidden, may appear to be another player's stuff, and any attempt to get them would be clearly griefing the mob grinder.

    Therefore, while the hood is open, I propose an addition/tweak to the new algorithm which retains all the current benefits while resolving the above issues to maintain a vanilla and play-your-way experience for all EMCers.

    1) Dungeon chests can be broken. When a dungeon chest is broken, the same 3-7 day timer is set up on that dungeon chest.

    2) After the 3-7 day timer is expired, and a new player enters the chunk you would call an algorithm as in my pseudocode below with the location of the chest passed in as a parameter. This would recreate the chest at the same or a nearby valid location. Among other criteria, my algorithm ensures that the chest is placed above a solid block and has a reasonable amount of air around it. The location of the chest would be updated, or it would be removed if there was no possible location in a 9x9 area (very unlikely to happen). This could be done at any point, such as when the chunk which used to contain the chest is loaded.

    3) When that chest is opened, the same 'new player' algorithm applies to populate it with items.
    The algorithm searches for a location which must be air and above a solid block. At least two of the 4 directly adjacent locations with the same y must be air. It will search in cubes starting with 1x1 which is where the chest is located, then 3x3, 5x5, 7x7, and finally 9x9. It will favour closer locations, especially on the same y. The chest is then placed, facing a random direction which is not a wall.
    Code:
    validLocation (x, y, z) {
      //Ensure the location is clear (this location is air).
      if (!is_air(x, y, z)) return false;
      //Ensure no floating chests (the block below is solid).
      if (!is_solid(x, y-1, z)) return false;
      //Ensure chest can be accessed reasonably (at least 2/4 adjacent locations are air).
      count = 0;
      if (is_air(x+1,y+1,z)) count ++;
      if (is_air(x+1,y-1,z)) count ++;
      if (is_air(x-1,y+1,z)) count ++;
      if (is_air(x-1,y-1,z)) count ++;
      if (count >= 2) return true;
      else return false;
    }
    
    facesSolid (x, y, z, facing) {
      switch (facing) {
        case west: return is_solid(x-1, y, z);
        case east: return is_solid(x+1, y, z);
        case north: return is_solid(x, y, z-1);
        case south: return is_solid(x, y, z+1);
      }
    }
    
    findLocationInSquare (x, y, z, distance, filled) {
      //If our distance is 0, just check this space.
      if (distance == 0) {
        if(validLocation(x, y, z)) return [x, y, z];
        else return null;
      }
      //If we selected to fill in the square, search the smaller square first.
      if (filled) {
        location = findLocationInSquare (x, y, z, distance-1, true);
        if (location != null) return location;
      }
      //Search in a square around the center.
      //Tends to favour closer locations without being too complicated.
      for (i = -distance + 1; i <= distance; i ++) {
        if (validLocation(x+i, y, z-distance)) return [x, y, z-distance];
        if (validLocation(x+distance, y, z+i)) return [x+distance, y, z];
        if (validLocation(x-i, y, z+distance)) return [x, y, z+distance];
        if (validLocation(x-distance, y, z-i)) return [x-distance, y, z];
      }
      return null;
    }
    
    findLocationInCube (x, y, z, distance) {
      //Search a cube around the center point.
      //Favour locations at a closer y, with a slight preference to being higher.
      for (i = 0; i <=distance; i ++) {
        location = findLocationInSquare (x, y+distance, z, distance, (i == distance));
        if (location != null) return location;
        if (i == 0) continue;
        location = findLocationInSquare (x, y-distance, z, distance, (i == distance));
        if (location != null) return location;
      }
      return null;
    }
    
    findLocation (x, y, z) {
      if (validLocation(x, y, z)) return [x, y, z];
      for (size = 1; size < 4; size ++) {
        location = findLocationInCube (x, y, z, size);
        if (location != null) return location;
      }
      return null;
    }
    
    recreateChest (x, y, z, facing) {
      if (!is_chest(x, y, z)) {
        if (findLocation(x, y, z) != null) {
          while (facesSolid(x, y, z, facing)) {
            facing = random(east, west, north, south);
          }
          placeChest(x, y, z, facing);
          //Update chest timer location.
        } else {
          //Remove chest timer.
        }
      }
    }
  2. theres one thing i don't understand about the new system, what happens when we really raid the dungeon? u can make stone bricks and the others (cracked and with plants) but its easier to mine the whole dungeon. then new players get a floating chest somewhere?

    i think this system is better used in the frontier and not the wastelands, b/c waste resets every time anyway. didnt got the loot the 1st time then u will the 2nd time or 3rd time.

    same with end: what if players mine the whole boat or tower 2 get the purpur? floating chest which is really hard 2 find then. so then u still better off waiting for next reset.
    WayneKramer, ESSELEM and 607 like this.
  3. Needs to be implemented.
  4. Very good point, very good argumentation, very good alternative supplied. Very good overall. ;)
    Thanks for your input!
    AyanamiKun and Wither_Addict like this.
  5. I personally destroy the chest for my style of play. I love having extra chest that I don't have to craft later. I believe the wastelands chest should be the ones you cannot destroy as building there is quite useless. I don't want dungeon chest to stay in my frontier dig outs because I may need to build a massive farm where it stands.
    iKloned, SkareCboi and AyanamiKun like this.
  6. Only valid locations are chosen. It will not respawn floating in the air.
    607 and ShelLuser like this.
  7. I voted against this because this would make it too easy to abuse the new system the developer team has implemented. I can think of two good reasons.
    1. Constant free chests being loaded into game. This system would, in my opinion, eventually flood the game with chests that took almost no effort from the player to get. You could argue that, "There would not be that many more chests that it would need to be a concern." However, I disagree because it leads into my second point.
    2. Players could create a system of finding dungeons, keeping track of their locations, then checking them every 3-7 days. Being able to just run through a dungeon and see if the chests reappeared would make it too easy, rather than players having to go and check every chest.
    Basically, players could just create a very easy system.
    • Run into dungeon.
    • If no chests, leave and go to next dungeon.
    • If chest, destroy with axe, collect loot, and go to next dungeon.
    In all, this would take a matter of seconds to complete. Whereas having to go in and check each chest individually (with 3-4 chests in a dungeon), this would deter players from doing this, not to mention there would be no possibility of getting "free" chests all the time.

    Edit: Grammar
    ShelLuser likes this.
  8. Isnt this what players do in vanilla?
    AyanamiKun likes this.
  9. Yes, but into new dungeons, that you have to find. Unless when you find a dungeon you replace the chests yourself to come back and 'find' later, you have to find the new dungeons. In this situation, players would already know where the dungeons are at.
  10. Aikar would implement the same player or a relative player to that player would not respawn items in chest
  11. The chest and loot only appear for new players only. If an existing player enters the area, the chest will not appear. If they try to open a chest which appeared because a new player entered the area, it will be empty.
    Gawadrolt likes this.
  12. Huh? Two things:
    One: what's the difference with the system that's currently in place? (you can't break chests, but items in chests get refilled every 3-7 days) It could happen there just as well.
    Two: Aikar has implemented a system to check whether the person loading the chest is related to the person who emptied the chest before.
  13. That is a good point, and answers my issues with this suggestion. (Goes to show what happens when you don't read everything :oops:)

    However, when I did go back and re-read this section of the update post, it seems that the system makes this check when a person opens the loot chest. If it's the same/similar person, then it won't refill, if it is a different person then it does refill (after the set time). In my mind, I can not think of another method that would work for this. If there is not chest there for a person to check, how would the system know to replace/replenish the chest? The only way is if a new person was within a certain distance of the spot the chest originally was (within a 15 block radius maybe?) This does not seem like a good solution in my mind, although it could work.

    Again, this is based on my understanding of the system, from the little bit of information that Aikar has given us. So if I have made any wrong assumptions, please correct me.

    Just to be clear, I do like the idea, cause when I used to go looting dungeons I would also grab the chest, because I always needed more chests. I just want to make sure that we are considering everything that could go wrong if this system is changed.
    607 likes this.
  14. The chest appears if a new player enters the chunk after a 3-7 day time.
  15. I don't really see a problem with the system as it is. Sure you like to break chests and now you will find you have to actually open them. That seems a small inconvenience for the problem that the new looting system solves. As far as mob grinders in the waste, just don't do it? the frontier is there and there are many public grinders in the frontier. A+ for the thought put into this but I personally would rather the chests stay there and not pop up later in a mob grinder. this way at least that player knows the chest is there and it doesn't just magically appear later. As far as breaking the chest to collect the loot, I don't do that myself unless it is in my outpost in which case more often than not im going to break the spawner too. Just seems mean to leave a chest there for someone to get excited about lol. in the waste the way it is set up they could actually find loot though.
    MrsWishes likes this.
  16. I like this idea. It would be even better if it can check (I know Aikar has an algorithm for this but I don't know it) to make sure the 'new' chest location is naturally spawned and not player made, so that a chest does not appear on what is meant to be a spawning space for a mob in the grinder scenario.
    azoundria and 607 like this.
  17. I always feel that things should be left as close to vanilla as possible in the waste and wild. The only exception is when the vanilla rules cause large issues such as not being able to lock chests or protect your builds, or new features like custom mobs that only add to the experience. In this case, I see that there is no reason to block breaking the chests as they can just be respawned later.

    I agree that mob grinders are better in the frontier, and EMC is play-your-way, so even if you don't agree with someone else's play style it's important that it still work. As long as someone's play style doesn't break any of the EMC rules it should be fully supported.

    You bring up a good point about the chest in the mob grinder, however this happens a week later and a chest appearing in a mob grinder wont affect it functionally other than potentially blocking one spawn point if you make the spawn area the minimum height. Most players who would want to build in the waste are building temporary creations. They have long since abandoned a creation after a week. If the player is still using it, and notices the chest, they just break it. Having a chest that you can't break in the middle of your creation, is to my mind a much bigger frustration. You have to involve staff and ask them to come out and break one little chest for you, which you can still do if this chest respawning bothers you, but you no longer have to do just to build your thing.
  18. I would like to make one more point actually, about this and the current method. I would like to suggest that hoppers be disabled on these loot chests. Players could easily setup hoppers under the chest, which would begin to empty the chest as soon as it repopulates. Some players could catch this, but the newer and more naive players probably wouldn't notice. This should be implemented in both the current and proposed system. Especially if the chests refill based on players entering the chunk, not when they open the chest.
    607 likes this.
  19. To help understand my idea, here's a comparison between the present system (in red) and my proposed system (in green). This isn't just dungeons we are talking about. Chests are presently naturally generated in dungeons, strongholds, jungle temples, desert temples, nether fortresses, villages, end cities, end ships and igloos.

    Looting And Exploring New Location
    Currently: Cannot break chests. Have to manually open them and take the items out.
    Proposed Solution: Players can break chests to loot them, a lot faster and more fun!

    Returning To Same Location 1 Day Later
    Currently: Come back to the same place and cannot remember which chests were broken or not. End up searching the same chests you've already opened to find nothing.
    Proposed Solution: No new chests have appeared. Don't waste any time revisiting chests you've already opened. End up finding an extra chest you missed the first time!

    Returning To Same Location 1 Week Later
    Currently: End up searching the same chest again just in case. Again, disappointment.
    Proposed Solution: Unless a new player has also visited the dungeon in the meantime and opted not to break any chests, the dungeon is the exact same. If they have, it's no worse.

    New Player Coming To Explored Location 1 Day Later
    Currently: Chests are intact and empty. The new player wastes their time checking a bunch of empty chests and gets nothing.
    Proposed Solution: Chests can be destroyed, so they don't sit there empty with nothing in them.

    New Player Coming To Explored Location 1 Week Later
    Currently: Chests are intact and they can get loot.
    Proposed Solution: Exactly the same, the chests will be in the same place with loot in them.

    New Player Coming To Explored Location 1 Week Later If The Location Was Changed/Griefed
    Currently: Random floating chests in the middle of the air.
    Proposed Solution: Chests will appear in locations near where they were that make sense based on the algorithm.

    Building a Mob Grinder In The Waste
    Currently: You can awkwardly build around the floating chests or involve a staff member to manually remove them.
    Proposed Solution: Build the mob grinder as you would normally.

    Returning To Mob Grinder 1 Week Later
    Currently: No issues, except the random chests in the middle if staff were not able to assist you or you didn't feel like wasting their time with a trivial chest breaking mission.
    Proposed Solution: If a new player explored the same chunk, there is a chest to break. This will not functionally affect the mob grinder and not likely even be noticed. If it is noticed, it's broken in a fraction of a second. You could also ask a staff member to remove the chest permanently.

    Building A Quarry In The Waste
    Currently: You might find a chest in the area you decide to quarry. You get half way to bedrock, and realize there's chests in the quarry which you can't break. You dig out the rest of the quarry, and leave the floating chests in the air.
    Proposed Solution: The chest can be broken without issue and you finish the quarry.

    Returning To Same Quarry 1 Week Later
    Currently: Floating chests remain. Another player probably build a cobble/dirt bridge to reach it.
    Proposed Solution: No new chest is placed because there is no valid location to place it.

    Building A Vertical Mine Shaft In The Waste
    Currently: If you run into a chest on the way down, you need to shift the entire mineshaft over.
    Proposed Solution: The chest can be broken without issue and you finish the mineshaft.

    Returning To Vertical Mine Shaft 1 Week Later
    Currently: Your mine shaft is unchanged.
    Proposed Solution: Your mine shaft is unchanged. It's not a valid location to place a chest.
  20. Allowing breaking the chests removes the entire feature. We can not "respawn the chest" as the chest itself is what contains the data.

    Once the chest is broken, there is no SANE way for us to respawn it. We can not go implementing some gigantic new system to store previous world state and restore it.

    This new system came to be because of how the chest data and loot tables worked, made it easy to pull off in a maintainable way.

    what your suggesting is not easy and would require lots of code and potential for break
    I'm sorry it inconveniences you, but we can not change it.