Core functionality for Legend of the Green Dragon, a text-based RPG game.

Related tags

Miscellaneous core
Overview

Legend of the Green Dragon (Core)

Tests

Legend of the Green Dragon is a text-based RPG originally developed by Eric Stevens and JT Traub as a remake of and homage to the classic BBS Door game, Legend of the Red Dragon, by Seth Able Robinson. You can play it at numerous sites, including http://www.lotgd.net/.

After checking out the developer forums at http://dragonprime.net, it seemed that development had stalled, and specifically, any movement toward more modern technologies and decoupling the game from its web UI was non-existent.

Thus, we sought to create our own rewrite, codenamed Daenerys :)

Goals

  • Headless LotGD: instead of coupling the game with a specific UI, this core game functionality is meant to be wrapped in the interface of your choice.
  • Modular for easy extension.
  • Modern web technologies: PHP 7 since it's familiar to existing LotGD developers, with an appropriate ORM, etc.
  • MVVMC architecture.
    • Model. Of course, we access data through models.
    • View. I lied, there is no view for this core LotGD library! See Headless LotGD goal above.
    • View Model. Instead of a view, we'll have a view model with all the required information to build a view, in a structured format (i.e., in a class).
    • Controller. Game actions and state transitions occur through controllers.
  • Well-documented with as many type hints as PHP 7's limping type system will allow.
  • Well-tested. The only hope of keeping such a large codebase to a low bug count is unit tests. See tests/.

Non-Goals

  • Backward compatibility. It may be controversial since it would mean existing admins can't upgrade to this version, but keeping the old database schema would be seriously limiting to the quality of the codebase. If we actually finish this, then writing an importer wouldn't be too hard.

Learn More

Read more about the game at our wiki.

Here are some good articles to get you started:

  • Gameplay Summary: if you're unfamiliar with the original Legend of the Red Dragon or Legend of the Green Dragon, learn more about what kind of game this is :).
  • Architecture Overview: Get a high-level overview of the pieces of a LotGD game, based on a simple example realm.

Contributing

Looking to help us? Awesome! Check out the Help Wanted Issues to find out what needs to be done, or reach out on Slack.

Lots of communication is happening on our Slack channel. Reach out to austenmc by opening an issue or contacting @austenmc on Dragon Prime.

Some notes:

  • Pull requests cannot be accepted that break the continuous integration checks we have in place (like tests, for example).
  • Please include tests for new functionality. Not sure how to test? Say so in your PR and we'll help you.
  • Our git workflow requires squashing your commits into something that resembles a reasonable story, rebasing them onto master, and pushing instead of merging. We want our commit history to be as clean as possible.

Workflow should be something like:

# Start this flow from master:
git checkout master

# Create a new feature branch, tracking origin/master.
git checkout -b feature/my-feature-branch -t origin/master

# Make some awesome commits and put up a pull request! Don't forget to push your branch to remote before creating the PR. Try something like hub (https://hub.github.com/) if you want to create PRs from the command line.
...

# If necessary, squash your commits to ensure a clean commit history.
git rebase -i

# Edit the last commit message, saying you want to close the PR by adding "closes #[PR number]" to the message.
git commit --amend

# Rebase to ensure you have the latest changes.
git pull --rebase

# Push to remote.
git push origin feature/my-feature-branch:master

# Delete your feature branch.
git branch -D feature/my-feature-branch

Contributors

Leads

Other Contributors

Comments
  • Refactor BootConfiguration into LibraryConfiguration

    Refactor BootConfiguration into LibraryConfiguration

    Read all configuration for modules from LibraryConfiguration.

    Removed rootDir support b/c no one seems to be using it. Not sure what this was for and it was making the code quite complex.

    Also removed the tests for the verification feature of ModuleManager b/c the code needs more refactoring before its easy to write tests. Im planning to break this verification into a separate set of classes anyway.

    opened by austenmc 10
  • Added Automatic PHPDoc generation

    Added Automatic PHPDoc generation

    the PR should when a push to Master occurs, run phpdocumentor on the src/ directory, putting the output in doc/ it will use phpdoc.dist.xml for settings.

    opened by KatrinaAS 6
  • Dragonprime

    Dragonprime

    Hello, please can you get 'timmyboyox' approved on DragonPrime. Waiting for admin approval and been contacting for days but no one is answering or accepting!

    opened by timmyboyox 6
  • Introduces Permissions to the core.

    Introduces Permissions to the core.

    Adds a permission model, a manager, as well as traits and interfaces required for models who want to implement permissions.

    Every actor has many permission associations, every permission association references a permission as well as a state. This results in ternary permission system:

    • Allowed (actor has a permission association for this permission id, with state = Allowed)
    • Denied (actor has a permission association for this permission id, with state = Denied)
    • Undefined/Not set (actor has not a permission association for this permission id).

    This is later important if a crate wants to implement a multi-layered permission system with groups and inheritance.

    opened by Vassyli 5
  • Add Module, ModuleManager and Event related classes.

    Add Module, ModuleManager and Event related classes.

    Add the basic concept of a Module, which is really just a pointer to the composer-readable library name. We'll read the meta data from the Composer API in a separate PR.

    ModuleManager handles registering/unregistering modules, including subscribing to events. Event subscriptions are managed via the extra field in the module's composer.json and map regular expression patterns representing event names to classes where handleEvent() will be called.

    Current format for the handleEvent() method will inevitably change.

    opened by austenmc 4
  • Migrate to PHPUnit 7

    Migrate to PHPUnit 7

    Since PHPUnit 7 is out for a while, we'd like to use it instead of PHPUnit 5.7 due to it being up to date with PHP7. However, direct migration is impossible since test recognition relies on extending from the correct base class (which, in this case, still is PHPUnit 5.7). Additionally, some dependencies seem to rely on PHPUnit 5.7 still and don't work together with PHPUnit 7.

    help wanted 
    opened by Vassyli 3
  • Refactor ModelTestCase so I can use it outside of the Core.

    Refactor ModelTestCase so I can use it outside of the Core.

    Find the configuration file for the tests from an environment variable. This way I can reuse ModelTestCase inside the module repos, but not have to have the same directory structure, namely that I think having a config/ directory would be very misleading for a module repo, so Ill put the config file within the tests/ directory.

    opened by austenmc 3
  • Add support for %cwd% variable in pdo dsn.

    Add support for %cwd% variable in pdo dsn.

    The string %cwd% gets replaced in a pdo dsn with the cwd used to create the game. This is important since daenerys would access a different sqlite database file than web/app.php

    opened by Vassyli 3
  • Create a skeleton crate for www

    Create a skeleton crate for www

    Take the empty crate-www repo (https://github.com/lotgd/crate-www) and set up a basic crate to serve as a wrapper for the core game.

    To make much progress, we need the core to support scenes, but you could at least start with some kind of basic authentication system.

    @Vassyli: have a preference for web framework here?

    help wanted 
    opened by austenmc 3
  • Adds a basic battle system

    Adds a basic battle system

    This commit adds a basic battle system.

    Participants in the battle class implement a FighterInstance that is used to calculate raw damage. getAttack and getDefense of the FighterInstances are used can could in principle get modified via the event system (Still needs implementation though).

    Tests are in place to test the flow of battle, not the balancing.

    ToDo:

    • BattleLog class for managing battle messages
    • BuffList and Buff classes for managing buffs.
    opened by Vassyli 3
  • Adds the foundation for viewpoint to be able to modify there descript…

    Adds the foundation for viewpoint to be able to modify there descript…

    …ion more easily

    As the title says. This patch enables to extend the viewpoint description more easily. Pure API sugar.

    Before:

    $viewpoint->setDescription($viewpoint->getDescription() . "\n\nYou feel energized! You get back all your forest fights.");
    

    After:

    $viewpoint->addDescriptionParagraph("You feel energized! You get back all your forest fights.");
    
    opened by Vassyli 2
  • Bump twig/twig from 3.3.2 to 3.4.3

    Bump twig/twig from 3.3.2 to 3.4.3

    Bumps twig/twig from 3.3.2 to 3.4.3.

    Changelog

    Sourced from twig/twig's changelog.

    3.4.3 (2022-09-28)

    • Fix a security issue on filesystem loader (possibility to load a template outside a configured directory)

    3.4.2 (2022-08-12)

    • Allow inherited magic method to still run with calling class
    • Fix CallExpression::reflectCallable() throwing TypeError
    • Fix typo in naming (currency_code)

    3.4.1 (2022-05-17)

    • Fix optimizing non-public named closures

    3.4.0 (2022-05-22)

    • Add support for named closures

    3.3.10 (2022-04-06)

    • Enable bytecode invalidation when auto_reload is enabled

    3.3.9 (2022-03-25)

    • Fix custom escapers when using multiple Twig environments
    • Add support for "constant('class', object)"
    • Do not reuse internally generated variable names during parsing

    3.3.8 (2022-02-04)

    • Fix a security issue when in a sandbox: the sort filter must require a Closure for the arrow parameter
    • Fix deprecation notice on round
    • Fix call to deprecated convertToHtml method

    3.3.7 (2022-01-03)

    • Allow more null support when Twig expects a string (for better 8.1 support)
    • Only use Commonmark extensions if markdown enabled

    3.3.6 (2022-01-03)

    • Only use Commonmark extensions if markdown enabled

    3.3.5 (2022-01-03)

    • Allow CommonMark extensions to easily be added
    • Allow null when Twig expects a string (for better 8.1 support)
    • Make some performance optimizations
    • Allow Symfony translation contract v3+

    ... (truncated)

    Commits
    • c38fd6b Prepare the 3.4.3 release
    • 5a858ac Merge branch '2.x' into 3.x
    • ab40267 Prepare the 2.15.3 release
    • fc18c2e Update CHANGELOG
    • 2e8acd9 Merge branch '2.x' into 3.x
    • d6ea14a Merge branch '1.x' into 2.x
    • 35f3035 security #cve- Fix a security issue on filesystem loader (possibility to load...
    • be33323 Merge branch '2.x' into 3.x
    • 9170edf Fix doc CS
    • fab3e0f minor #3744 Adding installation instructions for Symfony (ThomasLandauer)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump composer/composer from 2.1.6 to 2.2.12

    Bump composer/composer from 2.1.6 to 2.2.12

    Bumps composer/composer from 2.1.6 to 2.2.12.

    Release notes

    Sourced from composer/composer's releases.

    2.2.12

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)
    • Fixed curl downloader not retrying when a DNS resolution failure occurs (#10716)
    • Fixed composer.lock file still being used/read when the lock config option is disabled (#10726)
    • Fixed validate command checking the lock file even if the lock option is disabled (#10723)

    2.2.11

    • Added missing config.bitbucket-oauth in composer-schema.json
    • Added --2.2 flag to self-update to pin the Composer version to the 2.2 LTS range (#10682)
    • Updated semver, jsonlint deps for minor fixes
    • Fixed generation of autoload crashing if a package has a broken path (#10688)
    • Removed dev-master=>dev-main alias from #10372 as it does not work when reloading from lock file and extracting dev deps (#10651)

    2.2.10

    • Fixed Bitbucket authorization detection due to API changes (#10657)
    • Fixed validate command warning about dist/source keys if defined (#10655)
    • Fixed deletion/handling of corrupted 0-bytes zip archives (#10666)

    2.2.9

    • Fixed regression with plugins that modify install path of packages, see docs if you are authoring such a plugin (#10621)

    2.2.8

    • Fixed files autoloading sort order to be fully deterministic (#10617)
    • Fixed pool optimization pass edge cases (#10579)
    • Fixed require command failing when self.version is used as constraint (#10593)
    • Fixed --no-ansi / undecorated output still showing color in repo warnings (#10601)
    • Performance improvement in pool optimization step (composer/semver#131)

    2.2.7

    • Allow installation together with composer/xdebug-handler ^3 (#10528)
    • Fixed support for packages with no licenses in licenses command output (#10537)
    • Fixed handling of allow-plugins: false which kept warning (#10530)
    • Fixed enum parsing in classmap generation when the enum keyword is not lowercased (#10521)
    • Fixed author parsing in init command requiring an email whereas the schema allows a name only (#10538)
    • Fixed issues in require command when requiring packages which do not exist (but are provided by something else you require) (#10541)
    • Performance improvement in pool optimization step (#10546)

    2.2.6

    • BC Break: due to an oversight, the COMPOSER_BIN_DIR env var for binaries added in Composer 2.2.2 had to be renamed to COMPOSER_RUNTIME_BIN_DIR (#10512)
    • Fixed enum parsing in classmap generation with syntax like enum foo:string without space after : (#10498)
    • Fixed package search not urlencoding the input (#10500)
    • Fixed reinstall command not firing pre-install-cmd/post-install-cmd events (#10514)
    • Fixed edge case in path repositories where a symlink: true option would be ignored on old Windows and old PHP combos (#10482)
    • Fixed test suite compatibility with latest symfony/console releases (#10499)
    • Fixed some error reporting edge cases (#10484, #10451, #10493)

    2.2.5

    • Disabled composer/package-versions-deprecated by default as it can function using Composer\InstalledVersions at runtime (#10458)
    • Fixed artifact repositories crashing if a phar file was present in the directory (#10406)
    • Fixed binary proxy issue on PHP <8 when fseek is used on the proxied binary path (#10468)

    ... (truncated)

    Changelog

    Sourced from composer/composer's changelog.

    [2.2.12] 2022-04-13

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)
    • Fixed curl downloader not retrying when a DNS resolution failure occurs (#10716)
    • Fixed composer.lock file still being used/read when the lock config option is disabled (#10726)
    • Fixed validate command checking the lock file even if the lock option is disabled (#10723)

    [2.2.11] 2022-04-01

    • Added missing config.bitbucket-oauth in composer-schema.json
    • Added --2.2 flag to self-update to pin the Composer version to the 2.2 LTS range (#10682)
    • Updated semver, jsonlint deps for minor fixes
    • Fixed generation of autoload crashing if a package has a broken path (#10688)
    • Removed dev-master=>dev-main alias from #10372 as it does not work when reloading from lock file and extracting dev deps (#10651)

    [2.2.10] 2022-03-29

    • Fixed Bitbucket authorization detection due to API changes (#10657)
    • Fixed validate command warning about dist/source keys if defined (#10655)
    • Fixed deletion/handling of corrupted 0-bytes zip archives (#10666)

    [2.2.9] 2022-03-15

    • Fixed regression with plugins that modify install path of packages, see docs if you are authoring such a plugin (#10621)

    [2.2.8] 2022-03-15

    • Fixed files autoloading sort order to be fully deterministic (#10617)
    • Fixed pool optimization pass edge cases (#10579)
    • Fixed require command failing when self.version is used as constraint (#10593)
    • Fixed --no-ansi / undecorated output still showing color in repo warnings (#10601)
    • Performance improvement in pool optimization step (composer/semver#131)

    [2.2.7] 2022-02-25

    • Allow installation together with composer/xdebug-handler ^3 (#10528)
    • Fixed support for packages with no licenses in licenses command output (#10537)
    • Fixed handling of allow-plugins: false which kept warning (#10530)
    • Fixed enum parsing in classmap generation when the enum keyword is not lowercased (#10521)
    • Fixed author parsing in init command requiring an email whereas the schema allows a name only (#10538)
    • Fixed issues in require command when requiring packages which do not exist (but are provided by something else you require) (#10541)
    • Performance improvement in pool optimization step (#10546)

    [2.2.6] 2022-02-04

    • BC Break: due to an oversight, the COMPOSER_BIN_DIR env var for binaries added in Composer 2.2.2 had to be renamed to COMPOSER_RUNTIME_BIN_DIR (#10512)
    • Fixed enum parsing in classmap generation with syntax like enum foo:string without space after : (#10498)
    • Fixed package search not urlencoding the input (#10500)
    • Fixed reinstall command not firing pre-install-cmd/post-install-cmd events (#10514)
    • Fixed edge case in path repositories where a symlink: true option would be ignored on old Windows and old PHP combos (#10482)

    ... (truncated)

    Commits
    • ba61e76 Release 2.2.12
    • a1f9baa Fix 5.3/5.4 builds
    • 2ba8758 Update changelog
    • 2c40c53 Merge pull request from GHSA-x7cr-6qr6-2hh6
    • 915b97f Fix docs
    • d64e32c Merge remote-tracking branch 'ktomk/patch-validate-no-check-lock' into 2.2
    • 0a8dfe6 Clarify that autoloader-suffix should be a non-empty-string, fixes #10720 (#1...
    • bb0edce Fixed lock file being used when lock:false is in config, refs #10715 (#10726)
    • 939c998 validate lock-file if configured (#10715, --check-lock)
    • 9bfd059 Fix curl downloader to retry in case of DNS resolution failure, fixes #10716
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Additional module features

    Additional module features

    It's time to improve the module system.

    • [ ] Track module versions, and offer an upgrade path
    • [ ] Offer a module:config command that modules can utilize.
    • [ ] Add the possibility to deregister an existing module, making it self for removal.
      • [ ] Maybe prevent composer from removing if not deregistered. Doable?
    feature request 
    opened by Vassyli 0
  • Incomplete collection of daenerys commands to change database entries

    Incomplete collection of daenerys commands to change database entries

    Currently, administration of Daenerys is difficult as the core does only offer a limited range of console commands.

    I suggest the addition of the following features:

    • [x] Possibility to create new scenes from the cli, and connect existing ones
    • [ ] Game configuration
    • [ ] Message threads and messages
    • [x] Edit Module properties
    • [ ] Message of the day
    feature request 
    opened by Vassyli 0
  • Repo collaboration

    Repo collaboration

    Is it possible to check https://github.com/stephenKise/Legend-of-the-Green-Dragon and see if there are things can people can collaborate with (for example code standardization)?

    opened by DonaldTsang 6
Releases(v0.6.0-alpha.6)
  • v0.6.0-alpha.6(Apr 8, 2021)

  • v0.6.0-alpha.5(Mar 1, 2021)

  • v0.6.0-alpha.4(Feb 17, 2021)

  • v0.6.0-alpha.3(Feb 4, 2021)

  • v0.6.0-alpha.2(Feb 3, 2021)

  • v0.6.0-alpha(Jan 30, 2021)

    This is the first pre-release of lotgd/core 0.6.0. Since the hiatus, I've added a lot of new features the help with module development. A quick summary:

    • Updated dependencies:
      • lotgd/core new requires at least PHP 8.0
      • Uses now symfony 5.0 features for command line
    • Updated test runner to use github actions instead.
    • Updated lotgd/packages to be now directly the new temporary package repository.
    • Added a lot of new commands, to manage both characters and scenes, see #148
    • Scenes can now have properties. This allows scene-template dependent configuration, for example, or enabled to easily persist states of a scene.
    • Scene templates can now be registered in the database #145
    • Scene attachments can now be registered in the database, and introduces a proper interface for it #149
    • Scene descriptions can now use a (limited, but expandable) subset of twig to offer more flexible descriptions, see #146. This could be used for modules putting their complete scenery text in the description, with parts showing in dependence of the current state of the viewpoint.
    • Introduces a new LotGDTestCase class internally, adding some important custom assertions for modules to use. #139
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Apr 5, 2019)

    Since the release of the alpha of 0.5.0, several exciting pull requests have been merged, allowing us finally to release version 0.5.0. This version still does not support attachments (it's coming...).

    New features are:

    • Included support of character stats (#124). This PR also fixes a long lurking bug that caused Doctrine to use the wrong column names (tip: AnsiQuoteStrategy is not a good choice).
    • Switch to symfony4 for some required dependencies (#122)
    • Added two new admin commands - one to list characters, one to reset the viewpoint on a character in case of errors (#123).

    All these changes allow us to wrap together a new installer with our brand new installer - with some modules that give together a basic game Woohooo!

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0-alpha(Oct 10, 2018)

    This new version introduces a huge bc break by removing character and scene auto-increment id's. Instead, we switched to uuid as identifiers.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Apr 26, 2018)

  • v0.4.0(Jan 26, 2018)

  • v0.4.0-alpha(Jan 14, 2018)

    This version introduces several API changes to make module development easier:

    • Viewpoints can now be more easily modified by using $viewpoint->addDescriptionParagraph() to add a single paragraph to the description. Internally, the viewpoint keeps an array of paragraphs and joins it together if $viewpoint->getDescription() is called.
    • Viewpoints can now more easily manage actions.
      • $viewpoint->addActionGroup can be used to add a single action group instead of replacing all.
      • $viewpoint->findActionGroupById can be used to return a selected action group. If not found, the method returns null.
    • The dice bag supports now a integer based dice with uniform distribution additionally to the float based uniform distribution.
    • Adds a few more pre-defined EventContextData containers.
    • Certain models can now be extended (for now, this is just the characer class) by using the model extension api. For this, a module must include a list of all extending classes in their configuration (lotgd.yml), for example:
    modelExtensions:
      - "LotGD\\Module\\Res\\Fight\\Models\\CharacterResFightExtension
    

    The corresponding class must be annoted with @Extension which tells the API which class gets extended. It also must contain annotated, static methods that are annotated with @ExtensionMethod. The parameter "as" tells the API under which method name it can be called from the character model.

    
    use LotGD\Core\Doctrine\Annotations\Extension;
    use LotGD\Core\Doctrine\Annotations\ExtensionMethod;
    
    /**
     * @Extension(of="LotGD\Core\Models\Character")
     */
    class CharacterResFightExtension
    {
        /**
         * Levels up a given character.
         * @param Character $character
         * @ExtensionMethod(as="levelUp")
         */
        public static function levelUpCharacter(Character $character): void
        {
            $character->setLevel($character->getLevel() + 1);
        }
    }
    

    This method would, after loading, be available on the character model using $character->levelUp().

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1-alpha(Jun 23, 2017)

    Version 0.3.1 introduces custom action name parameters and changes the game constructor to the builder pattern with dependency injection to allow better testing methods.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0-alpha(Apr 25, 2017)

    Preview 0.3.0-alpha introduces a change in the event API to allow stricter control of context parameters:

        public static function handleEvent(Game $g, EventContext $context): EventContext;
    

    EventContext gives access to the called event name via Event() and to the matched pattern via getMatchingPattern. Depending on the type of the EventContextData, different fields are available and modifyable via getDataField($field) and setDataField($field, $value).

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0-alpha(Mar 14, 2017)

    An update to highlight the chances that happend since v0.1.0. Main changes are:

    #78 (Introduces permissions) and #83 (Improved the way scenes are connected to each other). Modules that need to introduce scenes during their installation need to change their code to be compatible with this version.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0-alpha(Dec 31, 2016)

Owner
Legend of the Green Dragon
Legend of the Green Dragon
A simple but scalable FFA Practice Core featuring one Game Mode & Vasar PvP aspects.

A simple but scalable FFA Practice Core featuring one Game Mode & Vasar PvP aspects. An example of this Plugin can be found in-game at ganja.bet:19132!

null 6 Dec 7, 2022
Core functionality of the website.

Deutsch English Svenska Core 0.8.93 Core functionality of the website. How to edit a website on your computer You can change everything in the file ma

Anna 1 Dec 15, 2022
Laminas\Text is a component to work on text strings

laminas-text This package is considered feature-complete, and is now in security-only maintenance mode, following a decision by the Technical Steering

Laminas Project 38 Dec 31, 2022
Zend\Text is a component to work on text strings from Zend Framework

zend-text Repository abandoned 2019-12-31 This repository has moved to laminas/laminas-text. Zend\Text is a component to work on text strings. It cont

Zend Framework 31 Jan 24, 2021
Rules to detect game engines and other technologies based on Steam depot file lists

SteamDB File Detection Rule Sets This is a set of scripts that are used by SteamDB to make educated guesses about the engine(s) & technology used to b

Steam Database 103 Dec 14, 2022
A Finite State Machine System based on Chapter 3.1 of Game Programming Gems 1 by Eric Dybsand

A Finite State Machine System based on Chapter 3.1 of Game Programming Gems 1 by Eric Dybsand,Written by Roberto Cezar Bianchini, July 2010 ported to php by MrFerrys.

null 4 Apr 18, 2022
YesilCMS is based on BlizzCMS and specifically adapted for VMaNGOS Core and includes new features and many bug fixes.

YesilCMS · YesilCMS is based on BlizzCMS and specifically adapted for VMaNGOS Core and includes new features and many bug fixes. Features In addition

yesilmen 12 Jan 4, 2023
Moodle plugin to limit the access to course content according to the user level in Block Game.

Moodle plugin to limit the access to course content according to the user level in Block Game.

null 4 Oct 18, 2022
A useful PocketMine-MP plugin that allows you to create crates in-game!

ComplexCrates A useful PocketMine-MP plugin that allows you to create crates in-game! Commands Main command: /crate Sub commands: create

Oğuzhan 8 Aug 26, 2021
Game Boy Camera Wifi Photo Extractor

Game Boy Camera Fast Wifi Adapter Plug in your Game Boy Camera, turn it on, and you can have the photos on your phone in under 2 minutes! Why I Made I

Matt G 71 Dec 16, 2022
The game is implemented as an example of scalable and high load architecture combined with modern software development practices

Crossword game The game is implemented as an example of scalable and high load architecture combined with modern software development practices Exampl

Roman 56 Oct 27, 2022
This plugin adds custom pets to game for PocketMine-MP!

ComplexPets A plugin that adds pets to game made by OguzhanUmutlu for PocketMine-MP. Command Simply type /pets and summon your favorite animal! Featur

Oğuzhan 10 Aug 12, 2021
A game-mode for Minecraft: Bedrock Edition

HardCoreFactions This is an unpaid commission that was only released for educational purposes, consider using it as a reference rather than having it

Doge 3 Sep 8, 2021
Encuentra_Al_Puffle-Game Es un juego sencillo, lo cuál desarrollé a modo de práctica y por gusto

Encuentra_Al_Puffle-Game Es un juego sencillo, lo cuál desarrollé a modo de práctica y por gusto. Tomando como referencia a los puffles (frailecillos)

Moises Reyes 4 Dec 27, 2021
Simple game server with php without socket programming. Uses the Api request post(json).

QMA server Simple game server with php without socket programming. Uses the Api request post(json). What does this code do? Register the user as a gue

reza malekpour 3 Sep 4, 2021
Steam store auto add to cart game

Steam store auto add to cart game use it for steam trading card farm How does it work? link.php explode and find link from link.txt and next open all

reza malekpour 3 Sep 4, 2021
Simple KPHP game, a proof of concept thing

KPHP Game About This is a game written in PHP using kphp-sdlite library. Gameplay video: https://www.youtube.com/watch?v=L44l4Tqm4Fc This game feature

Iskander (Alex) Sharipov 26 Dec 19, 2022
🚀 An open source multiplayer space strategy game.

Badges Introduction The game story takes place in a virtual galaxy where randomly generated planets produce various raw materials which can be used by

Galaxy of Drones Online 192 Dec 25, 2022
A console noughts and crosses game written in php

Tic-tac-toe A console noughts and crosses game written in php To play, simply clone the file Navigate to the file directory on your terminal and run t

Etorojah Okon 1 Oct 13, 2021