change the level up time to a logarithmic curve
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
This commit is contained in:
parent
14a1c5ceb6
commit
e9b985bd79
@ -47,10 +47,9 @@ class Game(models.Model):
|
||||
"""
|
||||
if not base_time:
|
||||
base_time = timezone.now()
|
||||
if current_level >= 60:
|
||||
# "The exponent method code had simply gotten to that point that levels were taking too long to complete"
|
||||
return base_time + timedelta(seconds=math.ceil((600*(1.16**59)) + ((60*60*24)*(current_level-59))))
|
||||
return base_time + timedelta(seconds=math.ceil(600*(1.16**current_level)))
|
||||
|
||||
# this is an logarithmic curve that starts peaking at 10ish days per level
|
||||
return base_time + timedelta(seconds=int(24*60*60*1.4*(5+math.log(0.01*(current_level+1)))))
|
||||
|
||||
|
||||
class CharacterManager(models.Manager):
|
||||
|
@ -135,24 +135,22 @@ class CharacterTest(TestCase):
|
||||
char = Character.objects.get(pk=1)
|
||||
|
||||
# level 0 -> 1
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=600)
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=47758)
|
||||
# level 1 -> 2
|
||||
char.level = 1
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=696)
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=131601)
|
||||
# level 24 -> 25
|
||||
char.level = 24
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=21142)
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=437113)
|
||||
# level 59 -> 60
|
||||
char.level = 59
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=3812174)
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=543010)
|
||||
# level 60 -> 61
|
||||
char.level = 60
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + (timedelta(seconds=3812174) +
|
||||
timedelta(seconds=86400))
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=545009)
|
||||
# level 61 -> 62
|
||||
char.level = 61
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + (timedelta(seconds=3812174) +
|
||||
timedelta(seconds=86400*2))
|
||||
assert char.calculate_datetime_to_next_level() == char.next_level + timedelta(seconds=546976)
|
||||
|
||||
def test_calculate_datetime_to_next_level_not_time_yet(self):
|
||||
"""Test that we just bail with the current next_level if it hasn't been reached yet."""
|
||||
@ -169,7 +167,7 @@ class CharacterTest(TestCase):
|
||||
new_char = Character.objects.register('new', game, 'pass', 'bss!bss@test_register', 'unit tester')
|
||||
|
||||
assert new_char.status == Character.CHARACTER_STATUS_LOGGED_IN
|
||||
assert new_char.next_level == register_time + timedelta(seconds=600)
|
||||
assert new_char.next_level == register_time + timedelta(seconds=47758)
|
||||
assert new_char.last_login == register_time
|
||||
assert new_char.password[0:13] == 'pbkdf2_sha256'
|
||||
|
||||
@ -203,7 +201,7 @@ class CharacterTest(TestCase):
|
||||
char.level_up()
|
||||
|
||||
assert char.level == old_level + 1
|
||||
assert char.next_level == old_next_level + timedelta(seconds=600)
|
||||
assert char.next_level == old_next_level + timedelta(seconds=47758)
|
||||
|
||||
def test_level_up_fail_not_time(self):
|
||||
"""Test the failure condition for trying to level up before the timestamp."""
|
||||
|
@ -367,7 +367,6 @@ class IrcPluginTest(TestCase):
|
||||
assert char_2.level == 0
|
||||
assert char_1.next_level != char_2.next_level
|
||||
self.mock_bot.reply.assert_has_calls([
|
||||
mock.call(None, "test_level_1, the tester, has attained level 1! Next level at 2024-05-16 00:10:00 UTC.",
|
||||
mock.call(None, "test_level_1, the tester, has attained level 1! Next level at 2024-05-16 13:15:58 UTC.",
|
||||
explicit_target=game.channel.name),
|
||||
])
|
||||
assert self.mock_bot.reply.call_count == 2
|
||||
|
Loading…
Reference in New Issue
Block a user