Coder Social home page Coder Social logo

lmachens / soc.gg Goto Github PK

View Code? Open in Web Editor NEW
18.0 2.0 9.0 105.96 MB

A Songs of Conquest fansite

Home Page: https://soc.th.gl

License: MIT License

CSS 0.01% TypeScript 86.34% JavaScript 13.47% HTML 0.18%
songs-of-conquest fansite mantine nextjs react

soc.gg's Introduction

SoC.gg - A Songs of Conquest fansite

Features

  • Full codex of all the game's units, skills, factions and wielders
  • Spotlight search
  • and more to come! Feel free to suggest new features.

We have the approval and support of the game studio (Lavapotion) to use the game data in this project ๐Ÿค˜.

Contribution

This app is Open Source. Contributors are highly welcome! You can find open tasks and issues on GitHub.

Join us on Discord if you like to contribute.

Development

First, run the development server:

npm run dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the page by modifying pages/index.tsx. The page auto-updates as you edit the file.

The collection files in lib/collections are extracted from the game data. This is done by a different project, which is not part of the repository. If you require more information, please add an issue.

Game data extractor

This project is based on the game data of Songs of Conquest. See extractor/README.md for more information.

Environment variables

The following list shows the environment variables you can set. You can find more information on Environment Variables:

KEY VALUE
NEXT_PUBLIC_PLAUSIBLE_HOST Plausible API host (optional)
NEXT_PUBLIC_PLAUSIBLE_DOMAIN Plausible domain (optional)

Analytics

If you are interested in the analytics of this project, please visit the dashboard. It's based on Plausible, a privacy-friendly analytics solution without the need of cookie banners or GDPR consent.

License

MIT

soc.gg's People

Contributors

0x0014 avatar dravogh avatar lgtm-migrator avatar lmachens avatar mikitaserabrakou avatar nightshadov avatar rizfn avatar rsgrava avatar unei95 avatar

Stargazers

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

Watchers

 avatar  avatar

soc.gg's Issues

Intimidating, Inspiring and Reach have wrong descriptions

Intimidating, Inspiring and Reach have broken descriptions. The first two of those say only "Give friendly/enemy units within 1 hexagons:", but they do not say what will be given. Reach, on the other hand, says that +1 melee range is given to all friendly units within 1 hexagons, as opposed to +1 melee range for this unit only.

All three of these can be seen in one place on the dragon page.

(P. S.: Thanks for adding the ranged attack info so quickly!)

Monetize this project

It helps me to develop this and other projects if I earn a bit by adding ads or paid services.
For this project, ads should work fine.
I like the idea of closable ads, which works fine on https://aeternum-map.gg/.

This task has low priority.

Pieces of untranslated text

While the main content of the site is available in multiple languages, some text is hardcoded into english. This includes the sidebar, search button and some others like "learn more" in the factions page.

Example, when browsing the site in portuguese:

image

Add missing spell/unit's essence information

It'd be more than useful to be able to check information about spells, their cost and their effect based on tier on soc.gg.
Units having information about what essence they generate would also be more than welcome

Lists not properly aligned on mobile

Some of the lists (wielders, skills, factions/wielders, factions/units) are not aligning left on smaller resolutions.
Example:

image

This only seems to happen when the screen is small enough for the sidebar to collapse. When it's present, everything works as expected:

image

Add patch notes to SoC.gg

Probably not required while the game is in Early Access, but it might be nice to keep a record of the balance changes on the page of every unit/building/spell. See the image for an example.

image

Alternatively, create a page exclusively for patch notes where we detail the version differences.

Add sitemap.xml and robots.txt for SEO

We can tell search machines like Google which pages are available on https://soc.gg and should be scraped.

A simple guide for Next.js:
https://nextjs.org/learn/seo/crawling-and-indexing/xml-sitemaps
https://nextjs.org/learn/seo/crawling-and-indexing/robots-txt

In short, we have to add two routes. The sitemap.xml.ts reads generates an XML for each route with getServerSideProps. The routes are similar to the links in the sidebar.
The robots.txt is static and could be added to the public folder.

If this task is done, I can submit the sitemap.xml to Google Search Console.

Add research

Hi, and thanks for this project!

I have a feature request:
It would be helpful to also see research, and maybe have a link between units and related research available to boost them.

Add ranged attack stats to unit pages

Currently, the unit pages (like Rangers) don't have any ranged attack stats in them (ranged offense, range, deadly range). This makes the unit pages of primarily ranged units (like the aforementioned Rangers) quite unhelpful, as the most important stats of these units are missing.

Since your JSONs with game data have that information in them, I guess this could be easily fixed; and for many of the units, it would make their pages much more useful than how they're now.

Add missing site terms

We started to translate site terms in #32, but there are some terms left, like meta description.

In addition, there are only English, German and Brazilian Portuguese translated for some terms. Other languages are missing.

Some Skills have themselves as a requirement

An example for this is "March" on Sla-Kin.
image

This problem already exists in the files produced by assetRipper
image

I haven't checked in game whether or not skills showing this behavior are unobtainable.

Add building trees for each faction

Please add information for each building of each faction, it would really help in making builds for the game.
-Building name
-Cost
-Units that get produced
-Requirements of this building
-Upgrade cost
-Produce after upgrade

A similar overview is visible in the fandom wiki site, but its not close to finished and not that pretty

Add Faction and Unit Based Research Information

For example Barya's "Move Fast" Harima troop research gives +5 initiative each level but at third level it also gives them +1 troop movement. This isn't known until you've reached that research in game so an external tool with this info on it would be very good. Unit specific research especially is usually like this. For example Musketeer research grants +10 ranged offense, then +range, then +essence all completely different upgrades at each tier.

Add Random Events

Example:

Faction: Arleon
Name: Prize Hen
Description: A patrol stumble upon a village in celebration. They quickly find out what the ruckus is all about. A hen has layed a solid golden egg. The egg and the hen were swiftly claimed for the realm's profit.

In addition, details about triggers, recipient value, artefact types or penalities would be nice.

Full data extracted from game:

{
    "id": 2,
    "randomEventData": {
      "type": 1,
      "uniqueName": "Arleon/GoldenEgg/PrizeHen",
      "nameKey": "RandomEvents/Arleon/GoldenEgg/PrizeHen",
      "descriptionKey": "RandomEvents/Arleon/GoldenEgg/PrizeHen/Description",
      "eventChainNameKey": "RandomEvents/Arleon/GoldenEgg",
      "isReoccuring": 0,
      "chanceOfHappening": 0.08,
      "eventEvaluationTrigger": 0,
      "requirementEvaluationType": 0,
      "requirements": [
        {
          "requirementType": 7,
          "resourceType": 0,
          "entityType": 6,
          "artifactType": 7,
          "factionIndex": 0,
          "unitIndex": 0,
          "eventReference": {
            "uniqueName": null
          },
          "value": 5
        }
      ],
      "eventRecipient": 0,
      "recipientArtifactType": 7,
      "recipientFactionIndex": 1,
      "recipientUnitIndex": 1,
      "recipientTroopUpgradeType": 0,
      "recipientValue": 500,
      "reward": {
        "rewardDataList": []
      },
      "penalty": {
        "penaltyDataList": [
          {
            "penaltyType": 0,
            "resourcePenalty": {
              "type": 0,
              "amountMinMax": {
                "min": 500,
                "max": 800
              }
            },
            "destroyOwnedBuilding": {
              "buildingToDestroy": 0,
              "destroyAll": 0,
              "amount": 1
            },
            "createHostile": {
              "troop1": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop2": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop3": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop4": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop5": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop6": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop7": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop8": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "troop9": {
                "factionIndex": 0,
                "unitIndex": 0,
                "size": 0,
                "upgradeType": 0
              },
              "amountOfHostiles": 1,
              "spawnLocation": 0,
              "battleMapName": null
            },
            "createRandomHostile": {
              "faction": {
                "factionIndex": 1
              },
              "tier": 1,
              "maxUpgradeType": 0,
              "maxCost": 5000,
              "troopCount": 5,
              "amountOfHostiles": 1,
              "spawnLocation": 0,
              "battleMapName": null
            },
            "reduceRecruitmentPool": {
              "troopsToReduce": [],
              "percentage": 0
            }
          }
        ]
      }
    },
    "type": "GoldenEggPrizeHen"
  }

Random event troop requirements displaying incorrectly

image

This is a Barya event, and it requires the unit with index 3 and faction 3. The faction is correctly mapped to barya, but the unit needs to be mapped to barya's 3rd unit (I think it's either dreath, brute, or sassanid.... probably brute), as opposed to arleons (ranger)

The problem also occurs in the random event descriptions of other factions like Loth

If possible, can we change it to something like
<recipient> produces <number> or more <unitName> per round?
So something like "Recipient (Team) produces 1 or more Brute or more per round"

Add locale selector

This project already supports multiple locales, but you can not select a different locale.
Examples:
https://www.soc.gg/en/factions (English)
https://www.soc.gg/de/factions (German)

The locale is automatically detected. See https://nextjs.org/docs/advanced-features/i18n-routing#automatic-locale-detection for more details.

The available locales are equal to the locales in-game.
https://github.com/lmachens/soc.gg/blob/main/lib/collections/locale.json is generated from the game-assets.

The task is to create a locale/language selector to transit between locales.
Technically, we can add links to change the locale:
https://nextjs.org/docs/advanced-features/i18n-routing#transition-between-locales
I am open for ideas how to implement a selector on UI side.
One idea is to add a https://mantine.dev/core/action-icon/ with https://mantine.dev/core/popover/ next to the social icons (GitHub / Discord). I think a country flag would be nice here.
Icon packs:
https://github.com/lipis/flag-icons
https://www.npmjs.com/package/country-flag-icons

Add details to unit pages

Right now, https://www.soc.gg/units/Barya/Sassanid and other unit pages doesn't display details except the name, icon and lore.

image
image
image

I would like to add the information displayed in the in-game codex.
This task requires to update the type definition in:
https://github.com/lmachens/soc.gg/blob/main/lib/units.ts and add missing properties for purchaseCost, obsoleteGoldCost, stats and troopAbility. This data is already in https://github.com/lmachens/soc.gg/blob/main/lib/collections/units.json

For legal compliance, add link to Privacy policy, Attributions, and Disclaimers

Standard practice to add a link to a privacy policy that explains if information is user session info is tracked, exactly what information is tracked, and how to opt out.

Attributions should also be listed for content that is used on website that is not owned by the website's developers including images and libraries.

Disclaimers are also common, explaining who owns the intellectual property.

This information is all commonly placed in a footer or header.

Add a home landing page

Add a landing page for https://soc.gg/ Currently the Factions details are the default landing page.

This would be a good place to add links to official Songs of Conquest websites and discord.

display skills as a tree

It would be much quicker and easier to understand if skill dependencies were shown as a graph

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.