Code Monkey home page Code Monkey logo

the-tale's Introduction

Zero Player Game Сказка

«Сказка» — браузерная многопользовательская текстовая ролевая песочница с действующими самостоятельно героями.

На текущий момент игра — это два тесно переплетённых и дополняющих друг друга проекта:

  • браузерная многопользовательская текстовая ролевая песочница с оригинальным геймплеем.
  • magic punk вселеленная, которая разрабатывается параллельно с игрой.

Оба проекта разрабатываются в тесном сотрудничестве с игроками и вы можете легко примкнуть к любому из них.

Можно выделить несколько ключевых особенностей:

  • непрямое управление героями — они действуют самостоятельно, в большинстве случаев игроки могут влиять на их поступки только косвенно;
  • состояние мира игры полностью зависит от действий игроков и их героев;
  • всё что происходит в игре описываются художественным текстом, вид которого зависит от множества параметров;

В «Сказку» можно играть как в тамагочи (выращивая своего героя) или как в «политическую песочницу» (кооперируясь с другими игроками для получения нужного эффекта на мир).

the-tale's People

Contributors

al-arz avatar alacrate avatar alexartoff avatar angru avatar antonymcgreen avatar cbbbrother avatar dependabot[bot] avatar devapromix avatar echurmanov avatar fobocaster avatar hvorovk avatar inerv avatar iz9chela avatar jazzis18 avatar kwentar avatar lxv0skld avatar n5y avatar ogroleg avatar pavetok avatar redneck-prm avatar serhii73 avatar tiendil avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

the-tale's Issues

Неверная установка позиции героя после смерти

Traceback (most recent call last):
  File "./manage.py", line 14, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/home/tie/repos/my/the-tale/the_tale/game/turns/management/commands/turns_next_turn.py", line 48, in handle
    next_turn(cur_turn)
  File "/home/tie/repos/my/django-next/django_next/utils/decorators.py", line 15, in _nested_commit_on_success
    return commit_on_success(*args,**kwds)
  File "/usr/lib/python2.7/site-packages/django/db/transaction.py", line 217, in inner
    res = func(*args, **kwargs)
  File "/home/tie/repos/my/the-tale/the_tale/game/turns/logic.py", line 20, in next_turn
    next_turn_update_actions(cur_turn, next_turn)
  File "/home/tie/repos/my/django-next/django_next/utils/decorators.py", line 13, in _nested_commit_on_success
    return func(*args,**kwds)
  File "/home/tie/repos/my/the-tale/the_tale/game/actions/logic.py", line 16, in next_turn_update_actions
    action.process()
  File "/home/tie/repos/my/the-tale/the_tale/game/actions/prototypes.py", line 156, in process
    quest = create_random_quest_for_hero(hero)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/logic.py", line 9, in create_random_quest_for_hero
    return quest_prototype.create(hero)
  File "/home/tie/repos/my/django-next/django_next/utils/decorators.py", line 13, in _nested_commit_on_success
    return func(*args,**kwds)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/prototypes.py", line 127, in create
    place_to = Place.objects.exclude(id=place_from.id).order_by('?')[0]
AttributeError: 'NoneType' object has no attribute 'id'

Перевести логику с пошаговости на посекундность

Ход должен проиходить примерно раз в 10 секунд. Причём одно действие должно обрабатываться раз в несколько ходов (а не каждый ход). Это позволит равномернее распределить нагрузку и сделать некоторые части игры более/менее диначичными (например, бой и путешествие)

Ограничить доступ к вьюшкам в зависимости от прав пользователя

Сейчас игрок может делать на сайте что угодно и управлять любым героем, что плохо

Надо реализовать декораторы, ограничивающие доступ к вьюшкам, и применить их где надо

разграничить доступ анонимусов, обычных игроков и администраторов

Разработать механизм работы с критическими эффектами

Необходимо централизовано хранить формулы расчёт, менять вероятность как самого крита (как в простейших действиях так и в actions) в зависимости от параметров и бонусов героя, так и вероятность положительного/отриццательного крита.

На данный момент криты исспользуются в actions.

Отрефакторить actions

Должно быть:

  • один герой - одно активное действие
  • чёткое разделение по назначением
  • корректное обновление при смерти героя.

Добавить динамическое изменение информации о действии

Сейчас всегда показывается подробная информация о текущем действии, необходимо оставить такой функционал по умолчанию, но менять отображаемую информацию при наведении мыши на строку с другим действием (при убирании мыши, возвращать инфу о последнем действии).

Рефакторинг системы квестов

Необходимо привести систему генерации и обработки квестов в приемлемый вид и, по возможности, подготовить к выделению в отдельный проект.

Реализовать страницу героя

содержимое страницы:

  • информация о герое и экипировка (левая колонка страницы игры)
  • информация о способностях героя
  • статистика

вынести функицонал связанный с игроровой логкой в воркеры и научить его работать параллельно

сабтаски:

сделано:
gh-23 - добавить celery в проект и вынести логику в воркеры
gh-25 - в инструкции по установке довбавить описание работы с воркерами
gh-27 Реализовать обратную свзять от воркеров game при обработки хода

будет реализовано позже, по мере надобности:
gh-26 Научить воркер game работать параллельно
gh-28 Перевести логику с пошаговости на посекундность

Заменить информацию об NPC-противники

Информация о монстре сейчас представлена в виде таблицы, аналогичной геройской.
Это неинтересно, некрасиво и слишком подробно.

Нужно переделать во что-то более неопределённое и игровое, оставив возможность смотреть параметры NPC в дебаге.

Ошибка, если адим заходит на страницу сайта

Environment:


Request Method: GET
Request URL: http://the-tale.org/

Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.staticfiles',
 'django_next.less',
 'accounts',
 'portal',
 'game',
 'game.angels',
 'game.abilities',
 'game.heroes',
 'game.actions',
 'game.quests',
 'game.map',
 'game.map.roads',
 'game.map.places',
 'game.artifacts',
 'game.persons',
 'stress_testing',
 'south']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django_next.utils.exceptions.ExceptionMiddleware')


Traceback:
File "/home/the_tale/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/the_tale/env/lib/python2.7/site-packages/django_next/views/dispatcher.py" in handler_view
  41.             return method(**arguments)
File "/home/the_tale/source/the_tale/portal/views.py" in game_page
  10.         return self.template('portal/index.html')
File "/home/the_tale/env/lib/python2.7/site-packages/django_next/views/resources.py" in template
  139.         return render.template(template_name, full_context, self.request)
File "/home/the_tale/env/lib/python2.7/site-packages/django_next/jinja2/renderer.py" in template
  78.         response = HttpResponse(self(template_name, jinja_context), mimetype=mimetype)
File "/home/the_tale/env/lib/python2.7/site-packages/django_next/jinja2/renderer.py" in __call__
  60.         text = template.render(content)
File "/home/the_tale/env/lib/python2.7/site-packages/jinja2/environment.py" in render
  894.         return self.environment.handle_exception(exc_info, True)
File "/home/the_tale/source/the_tale/portal/templates/index.html" in top-level template code
  1. {% extends "base.html" %}
File "/home/the_tale/source/the_tale/templates/base.html" in top-level template code
  76.     {% block body %}
File "/home/the_tale/source/the_tale/templates/base.html" in block "body"
  97.       {% block content %}
File "/home/the_tale/source/the_tale/portal/templates/index.html" in block "content"
  26.   {% if not resource.account %}
File "/home/the_tale/env/lib/python2.7/site-packages/jinja2/environment.py" in getattr
  372.             return getattr(obj, attribute)
File "/home/the_tale/source/the_tale/common/utils/resources.py" in account
  17.             self._account = None if self.user.is_anonymous() else self.user.get_profile()
File "/home/the_tale/env/lib/python2.7/site-packages/django/contrib/auth/models.py" in get_profile
  383.                 self._profile_cache = model._default_manager.using(self._state.db).get(user__id__exact=self.id)
File "/home/the_tale/env/lib/python2.7/site-packages/django/db/models/query.py" in get
  349.                     % self.model._meta.object_name)

Exception Type: DoesNotExist at /
Exception Value: Account matching query does not exist.

Добавить новые абилки ангелу

ускорить - телепортирует на небольшое расстояние при движении
молния - поражает врага (решить как расчитывается урон)
взять квест - заставить героя взять квест, если он бездельничает

Реализовать корректный откат генерации квеста, если невозможно подобрать все параметры

Например, если невозможно выбрать персонажа

EXCEPTION: can not found suitable person for place: place_15 with excludes: set(['person_150842'])
Traceback (most recent call last):
  File "/home/tie/repos/my/the-tale/the_tale/game/workers/game.py", line 59, in process_cmd
    CMD_TYPE.REGISTER_HERO: self.process_register_hero }[cmd_type](**cmd_data)
  File "/home/tie/repos/my/the-tale/the_tale/game/workers/game.py", line 109, in process_next_turn
    next_turn_number = bundle.process_turn(self.turn_number)
  File "/home/tie/repos/my/the-tale/the_tale/game/bundles.py", line 104, in process_turn
    next = action.process_turn(turn_number)
  File "/home/tie/repos/my/the-tale/the_tale/game/actions/prototypes.py", line 186, in process_turn
    self.process_action()
  File "/home/tie/repos/my/the-tale/the_tale/game/actions/prototypes.py", line 173, in process_action
    self.process()
  File "/home/tie/repos/my/the-tale/the_tale/game/actions/prototypes.py", line 244, in process
    quest = create_random_quest_for_hero(self.hero)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/logic.py", line 47, in create_random_quest_for_hero
    env.new_quest(place_start=hero_position_uuid)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/quests_generator/environment.py", line 70, in new_quest
    person_start=person_start)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/quests_generator/lines/help.py", line 15, in initialize
    super(HelpLine, self).initialize(identifier, env, **kwargs)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/quests_generator/quest_line.py", line 133, in initialize
    person_end = env.new_person(from_place=place_end)
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/quests_generator/environment.py", line 40, in new_person
    person_uuid = self.knowlege_base.get_random_person(place=from_place, exclude=self.persons.keys())
  File "/home/tie/repos/my/the-tale/the_tale/game/quests/quests_generator/knowlege_base.py", line 41, in get_random_person
    raise RollBackException('can not found suitable person for place: %s with excludes: %r' % (place, exclude))
RollBackException: can not found suitable person for place: place_15 with excludes: set(['person_150842'])

Подготовить проект к автоматическому деплою и автономной работе

Необходимо произвести следующие работы:

Postrgresql

  • корректная конфигурация
  • запуск при старте сервера

Apach

  • корректная конфигурация
  • запуск при старте сервера

RabbitMQ

  • корректная конфигурация
  • запуск при старте сервера

Воркеры

  • запуск при старте сервера, корректная остановка/перезапуск, логи
  • выбрать пользователя для воркеров

Портал

  • вынести директории с динамическим контентом из репозитория
  • выбрать пользователя для портала the_tale
  • автоматическое развёртывание/обновление, включая установку дополнительных пакетов
  • реализовать команду подготовки данных для релиза (генерация нужных js-ок и т.п.)
  • решить, что делать с картой

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.