Git Product home page Git Product logo

Comments (6)

Poslovitch avatar Poslovitch commented on June 20, 2024 1

I've discussed of this idea as well with a French server owner.

Demonstrating the idea using a classical probability density function

We came up with the idea of making the value of a block follow a very specific exponential function, which instead of increasing exponentially, decreases increasingly slower:
value(x) = ke^(-kx), k>0.

Some maths lessons

This density function comes from the probability field of maths.

It has a few interesting properties:

  • the area below the curve is always equal to 1 (integrals).
  • the ordinate of the point whose abscissa's 0 always equals k.
  • all the values of this function are > 0.

Demonstrating the behaviour of such function

k ≈ 1

image

Greater value of k

The greater k is, the steeper the function decreases, which in my opinion is the behaviour we want: the more valuable is a block, the faster its value should go down.
image

Small value of k

On the opposite, with a very small value, it decreases way slower:
image

How to apply this to the block value calculation?

It obviously needs some tweaking. We don't want server owners to mess around with the formula itself, firstly because they may not understand it at all, secondly because it's not adapted to fit our use case.

k = actual value of the block

Definition

k mathematically being the very first value our function returns, it must therefore obviously be the actual value of the block. As such, k should follow the formula below:

image

v and p are values that are already part of the configuration, so it's clearly going to be backward-compatible 😛.

Examples

Along the whole explanation, I will use two examples : cobblestone and emerald block.

p = 100 (kind of default configuration)

  • Cobblestone: v = 1, therefore k = 0.01.
    image

  • Emerald block: v = 100, therefore k = 1.
    Keeping the same scale on the x-axis therefore shows this result:
    image

n = number of blocks already placed

Definition

n is mathematically the abscissa of all of the points of our density function.
In practice, this is the numbers of blocks that have already been placed, and value(n) is the value of the n-th block.

A hard limit of blocks can be implemented, yet, ideally, we want the value of the block to reach 0 once we reach this limit.

This leads us to this formula, with l (= limit) being the limit of the block:
image

Examples

  • Cobblestone: l = Integer.MAX_VALUE (because there are just no limit to it).
    image

  • Emerald block: l = 1500.
    image

You can see on the image above that the value of the block when we reach the limit is not equal to 0, but 0.37.

Fixing the limit?

Actually, it's mathematically impossible to ever reach a value of 0 because of one of the properties of the exponential function.

If we want the value to reach 0 at some point (the limit), we need to do the following:
image

This fixes the limit... But value(0) will no longer be equal to k.
image

Calculating the actual island level

Up to now, we only calculated the value of a block corresponding to how many blocks are already placed. If we want to calculate the actual points it provides, we will need to use some integrals.

image

And just because this is funny to write things down in LaTeX:
image

from level.

Poslovitch avatar Poslovitch commented on June 20, 2024

I discussed of this idea again with an experience Skyblock player. He raised a few concerns:

  • it should be clarified in the value command that points are decreasing the more blocks you place down;
  • the original value of the block and the value of the n-th block should also be precised;
  • this might piss off the big players as the more levels they have, the slower they will achieve further progression.

from level.

BONNe avatar BONNe commented on June 20, 2024

I like this idea... but dynamic it will be hard to explain to players how much each block would cost.

one solution would be to create a ladder system when you could specify in config each step size (or dynamic) but all blocks in this step should be the same value.

That could fix or simplify the first two problems.

The last issue... it is not an issue. If they had so large island, there is no problem to create it bigger :)

from level.

tastybento avatar tastybento commented on June 20, 2024

Simple is good. The current system is simple. As someone who has to handle support requests from admins who don't understand the current system (usually once I point them to the console report, they start to understand), I'd prefer not to increase the support load. Anyway, if there's a PR to do it, I'd look at it.

from level.

plagoutte avatar plagoutte commented on June 20, 2024

Simple is good. The current system is simple. As someone who has to handle support requests from admins who don't understand the current system (usually once I point them to the console report, they start to understand), I'd prefer not to increase the support load. Anyway, if there's a PR to do it, I'd look at it.

Current system is simple, this is the point. By rewarding players who just farm a lot, buy diamond blocks and place it, we encourage players to stay AFK on their island and wait for the resources to come, to climb to the top of the ranking.

On the other hand, the system imagined by @Poslovitch would force players to diversify blocks on their island, by building and island, not just amass a huge quantity of ugly diamond blocks. So, players are more interactive (with other players, by trading rare blocks for example).

Also, I suggest k decreases when the total number of blocks on the island increases (to prevent experimented players to be blocked at a certain stage of the game).

from level.

tastybento avatar tastybento commented on June 20, 2024

I believe this was implemented as a result of the equation-style level calculation. So, blocks can be worth less as levels rise. Closing.

from level.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.