Merge pull request 'dev' (#9) from dev into main
All checks were successful
/ checking (push) Successful in 14s
All checks were successful
/ checking (push) Successful in 14s
Reviewed-on: #9
This commit is contained in:
commit
aba414e68d
13 changed files with 5454 additions and 3579 deletions
69
.forgejo/workflows/build_preview.yml
Normal file
69
.forgejo/workflows/build_preview.yml
Normal file
|
@ -0,0 +1,69 @@
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+pre[0-9]+'
|
||||
|
||||
jobs:
|
||||
checking:
|
||||
runs-on: docker
|
||||
container: node:lts
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: https://code.forgejo.org/actions/checkout@v3
|
||||
- name: Install packages
|
||||
run: npm install
|
||||
- name: Run astro check (linting + static analysis)
|
||||
run: npm run astro check
|
||||
|
||||
build-site:
|
||||
needs: [checking]
|
||||
if: success()
|
||||
runs-on: dind
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: forgejo.neshweb.net
|
||||
username: ${{ secrets.FORGEJO_USERNAME }}
|
||||
password: ${{ secrets.FORGEJO_TOKEN }}
|
||||
- name: Push to Package Registry
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
push: true
|
||||
tags: forgejo.neshweb.net/firq/firq-dev-website:${{ github.ref_name }}, forgejo.neshweb.net/firq/firq-dev-website:preview
|
||||
|
||||
publish:
|
||||
needs: [build-site]
|
||||
if: success()
|
||||
runs-on: docker
|
||||
steps:
|
||||
- name: Release New Version
|
||||
uses: actions/forgejo-release@v1
|
||||
with:
|
||||
direction: upload
|
||||
url: https://forgejo.neshweb.net
|
||||
release-dir: release
|
||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||
tag: ${{ github.ref_name }}
|
||||
|
||||
# doesn't work atm
|
||||
# unlighthouse:
|
||||
# needs: [publish]
|
||||
# if: success()
|
||||
# runs-on: docker
|
||||
# container: registry.gitlab.com/gitlab-ci-utils/lighthouse:latest
|
||||
# services:
|
||||
# website:
|
||||
# image: forgejo.neshweb.net/firq/firq-dev-website:preview
|
||||
# steps:
|
||||
# - name: Install Dependencies
|
||||
# run: npm install @unlighthouse/cli puppeteer
|
||||
# - name: Run unlighthouse
|
||||
# run: node_modules/.bin/unlighthouse-ci
|
||||
# - name: Upload reports
|
||||
# uses: actions/upload-artifact@v3
|
||||
# with:
|
||||
# name: unlighthouse-reports
|
||||
# path: unlighthouse-reports/
|
53
.forgejo/workflows/build_release.yml
Normal file
53
.forgejo/workflows/build_release.yml
Normal file
|
@ -0,0 +1,53 @@
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+'
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+a[0-9]+'
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+b[0-9]+'
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+rc[0-9]+'
|
||||
|
||||
jobs:
|
||||
checking:
|
||||
runs-on: docker
|
||||
container: node:lts
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: https://code.forgejo.org/actions/checkout@v3
|
||||
- name: Install packages
|
||||
run: npm install
|
||||
- name: Run astro check (linting + static analysis)
|
||||
run: npm run astro check
|
||||
run: npm run astro check
|
||||
|
||||
build-site:
|
||||
needs: [checking]
|
||||
if: success()
|
||||
runs-on: dind
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: forgejo.neshweb.net
|
||||
username: ${{ secrets.FORGEJO_USERNAME }}
|
||||
password: ${{ secrets.FORGEJO_TOKEN }}
|
||||
- name: Push to Package Registry
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
push: true
|
||||
tags: forgejo.neshweb.net/firq/firq-dev-website:${{ github.ref_name }}, forgejo.neshweb.net/firq/firq-dev-website:latest
|
||||
|
||||
release:
|
||||
needs: [build-site]
|
||||
if: success()
|
||||
runs-on: docker
|
||||
steps:
|
||||
- name: Release New Version
|
||||
uses: actions/forgejo-release@v1
|
||||
with:
|
||||
direction: upload
|
||||
url: https://forgejo.neshweb.net
|
||||
release-dir: release
|
||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||
tag: ${{ github.ref_name }}
|
16
.forgejo/workflows/linting.yml
Normal file
16
.forgejo/workflows/linting.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- "**"
|
||||
|
||||
jobs:
|
||||
checking:
|
||||
runs-on: docker
|
||||
container: node:lts
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: https://code.forgejo.org/actions/checkout@v3
|
||||
- name: Install packages
|
||||
run: npm install
|
||||
- name: Run astro check (linting + static analysis)
|
||||
run: npm run astro check
|
95
.forgejo/workflows/unlighthouse.yml
Normal file
95
.forgejo/workflows/unlighthouse.yml
Normal file
|
@ -0,0 +1,95 @@
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+unlighthouse[0-9]+'
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+ulh[0-9]+'
|
||||
|
||||
jobs:
|
||||
unlighthouse:
|
||||
runs-on: docker
|
||||
container: forgejo.neshweb.net/firq/unlighthouse-docker:latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: https://code.forgejo.org/actions/checkout@v3
|
||||
- name: Run unlighthouse
|
||||
run: unlighthouse-ci --site "https://preview.firq.dev/"
|
||||
- name: Prepare artifacts
|
||||
run: cp serve.json unlighthouse-reports
|
||||
- name: Upload reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: unlighthouse-reports
|
||||
path: unlighthouse-reports/
|
||||
|
||||
deploy-unlighthouse-files:
|
||||
needs: [ unlighthouse ]
|
||||
runs-on: docker
|
||||
env:
|
||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||
steps:
|
||||
- name: Install and update ssh + rsync
|
||||
run: |
|
||||
which rsync || ( apt update -y && apt install rsync -y)
|
||||
which ssh-agent || ( apt update -y && apt install openssh-client -y)
|
||||
- name: Downloading static site artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: unlighthouse-reports
|
||||
path: public
|
||||
- name: Install SSH Key
|
||||
uses: https://github.com/shimataro/ssh-key-action@v2
|
||||
with:
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
known_hosts: unnecessary
|
||||
- name: Adding Known Hosts
|
||||
run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
|
||||
- name: Stop screen session, delete old files
|
||||
uses: https://github.com/appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ env.DEPLOY_HOST }}
|
||||
username: ${{ env.DEPLOY_USER }}
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
script: |
|
||||
screen -X -S firq_dev-unlighthouse kill
|
||||
rm -r -f firq_dev/unlighthouse/*
|
||||
- name: Copy files using rsync
|
||||
run: rsync -az --stats public/* ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}:~/firq_dev/unlighthouse
|
||||
- name: Check files on deploy target
|
||||
uses: https://github.com/appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ env.DEPLOY_HOST }}
|
||||
username: ${{ env.DEPLOY_USER }}
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
script: |
|
||||
cd firq_dev
|
||||
find unlighthouse -maxdepth 1 -printf "%p\n"
|
||||
|
||||
deploy-unlighthouse-site:
|
||||
needs: [ deploy-unlighthouse-files ]
|
||||
runs-on: docker
|
||||
env:
|
||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||
steps:
|
||||
- name: Install and update ssh + rsync
|
||||
run: |
|
||||
which rsync || ( apt update -y && apt install rsync -y)
|
||||
which ssh-agent || ( apt update -y && apt install openssh-client -y)
|
||||
- name: Install SSH Key
|
||||
uses: https://github.com/shimataro/ssh-key-action@v2
|
||||
with:
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
known_hosts: unnecessary
|
||||
- name: Adding Known Hosts
|
||||
run: ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
|
||||
- name: Start new screen session
|
||||
uses: https://github.com/appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ env.DEPLOY_HOST }}
|
||||
username: ${{ env.DEPLOY_USER }}
|
||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
script: |
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
cd firq_dev
|
||||
screen -S firq_dev-unlighthouse -dm serve unlighthouse/ -p ${{ secrets.UNLIGHTHOUSE_DEPLOY_PORT }}
|
|
@ -1,14 +0,0 @@
|
|||
image: node:lts
|
||||
pages:
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
script:
|
||||
- npm install
|
||||
- npm run build
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
expire_in: 3 days
|
||||
only:
|
||||
- main
|
17
Dockerfile
Normal file
17
Dockerfile
Normal file
|
@ -0,0 +1,17 @@
|
|||
FROM node:lts AS build
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN npm i
|
||||
RUN npm run build
|
||||
|
||||
FROM node:lts AS runtime
|
||||
RUN npm install --global "@warren-bank/serve"
|
||||
|
||||
COPY --from=build /app/dist /public
|
||||
COPY --from=build /app/serve.json /public/serve.json
|
||||
RUN rm -r /public/assets/data/
|
||||
|
||||
ENV PORT 8081
|
||||
EXPOSE 8081
|
||||
|
||||
CMD [ "serve", "public/", "-p", "8081" ]
|
|
@ -7,7 +7,7 @@ import sitemap from "@astrojs/sitemap";
|
|||
export default defineConfig({
|
||||
sitemap: true,
|
||||
base: '/',
|
||||
outDir: 'public',
|
||||
outDir: 'dist',
|
||||
publicDir: 'static',
|
||||
site: 'https://firq.dev/',
|
||||
integrations: [sitemap()]
|
||||
|
|
8606
package-lock.json
generated
8606
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@firq/fgosite",
|
||||
"type": "module",
|
||||
"version": "0.1.6",
|
||||
"version": "0.1.7",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
|
@ -11,8 +11,10 @@
|
|||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/sitemap": "^1.2.1",
|
||||
"astro": "^2.8.0",
|
||||
"iconoir": "^6.1.0"
|
||||
"@astrojs/check": "^0.3.3",
|
||||
"@astrojs/sitemap": "^3.0.3",
|
||||
"astro": "^4.0.7",
|
||||
"iconoir": "^6.1.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ const fulllink = `/${slug}`
|
|||
width: 200px;
|
||||
}
|
||||
li > a {
|
||||
display: inline-flex;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
justify-content: center;
|
||||
|
@ -49,11 +50,12 @@ const fulllink = `/${slug}`
|
|||
font-size: 1.4em;
|
||||
height: 100%;
|
||||
font-weight: bold;
|
||||
gap: 0.2em;
|
||||
}
|
||||
li > a:hover {
|
||||
color: var(--c-purplepink);
|
||||
}
|
||||
.current {
|
||||
color: var(--c-darkpurple);
|
||||
color: var(--c-darkpurple) !important;
|
||||
}
|
||||
</style>
|
||||
|
|
115
src/pages/blog/instant-death.md
Normal file
115
src/pages/blog/instant-death.md
Normal file
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
layout: ../../layouts/blogPost.astro
|
||||
title: 'FGO Mechanics: Instant Death'
|
||||
pubDate: 2023-08-19
|
||||
description: 'Blog post talking about instant death in FGO, how you can take advantage of it and what its limits are.'
|
||||
author: 'Firq'
|
||||
tags: ['fgo', 'games']
|
||||
---
|
||||
|
||||
> **Disclaimer**<br>
|
||||
> While writing this, Requiem and I faced a bit of a challenge concerning death rate calculations. Case in point is the passive "Item Construction"
|
||||
and its interaction with Instant Kill, as we could not reach a final verdict if it affects Instant Kill Hit rate or not. In case of this article, I will assume
|
||||
it doesn't interact with the hitrate, but if you have proof that this is different, I will gladly incorporate this in the article.
|
||||
|
||||
## Introduction
|
||||
|
||||
Instant Kill & Instant Death: One of the most rejected systems to exist in FGO. Most players know of it, but discard it because of its unreliability and uselessness against stronger enemies. In this article, I want to dive a bit into the workings of Instant Kill and help you understand how you can, in specific scenarios, use it to your advantage.
|
||||
|
||||
There are a multitude of servants that have access to instant-kill, but I will only highlight a few here (You can view the full list on <a href="https://gamepress.gg/grandorder/instant-death" target="_blank" rel="noopener noreferrer" style="font-style: unset">Gamepress</a>)
|
||||
|
||||
- **Nitocris (Caster)**: The most prominent figure, as she has easy access to her instant-killing NP and a skill that increases her death hit rate
|
||||
- **Void Shiki (Saber)**: Another Example of an AOE Instant-Kill servant who also has access to Death Resist debuffs. One quest in her release event even specifically used the Instant Kill mechanic (<a href="https://apps.atlasacademy.io/db/NA/quest/94021308/1" target="_blank" rel="noopener noreferrer" style="font-style: unset">Quest Link here</a>)
|
||||
- **King Hassan (Assassin)**: The only servant that can afflict enemies with instant death on normal attacks (Note: David can do this as well, but only if he has his Bond CE equipped)
|
||||
|
||||
But since Instant Kill is based on probability, most players are relucatant to use it in their farming compositions. This thems from the different death rates enemies have:
|
||||
|
||||
- Bronze: 80%
|
||||
- Silver: 50%
|
||||
- Gold: 20%
|
||||
|
||||
This list here is just for rarities. However, there are a lot more factors to consider, as some enemies have higher death rate, some lower. Be sure to check each case individually, as rates may vary.
|
||||
|
||||
Also, servant enemies usually have a death rate of 0.1%, sometimes a bit more like 0.3% or 0.4%. So going for Instant Kill on servants will, in the majority of cases, not work.
|
||||
|
||||
## Calculating Instant Death Rate
|
||||
|
||||
The formular for getting the probability of an enemy dying to Instant Kill is as follows:
|
||||
|
||||
```
|
||||
death = hitRate * deathRate * (1 + instantDeathRateUp - instantDeathRateDown - instantDeathResistUp + instantDeathResistDown)
|
||||
```
|
||||
|
||||
The parameters here are the following:
|
||||
|
||||
- `hitRate`: The Death Hit rate of the effect or NP used
|
||||
- `deathRate`: The Enemy Death rate
|
||||
- `instantDeathRateUp`: Buffs that increases instant kill success rate (Nitocris S1)
|
||||
- `instantDeathRateDown`: Debuffs that decreases instant kill success rate
|
||||
- `instantDeathResistUp`: Buffs that increases instant kill resistance (Taira S2)
|
||||
- `instantDeathResistDown`: Debuffs that decreases instant kill resistance (Void Shiki S1)
|
||||
|
||||
## Example
|
||||
|
||||
The main reason this came up was because of a farming comp used in <a href="https://apps.atlasacademy.io/db/NA/quest/94061820/1" target="_blank" rel="noopener noreferrer" style="font-style: unset">Hunting Quest XI - Day 5 - Pride+</a>. The node is structured
|
||||
into a 2 - 1 - 1 Layout, meaning using a dual-DPS setup would be the way to go.
|
||||
|
||||
Looking at the stats for the first wave, it made sense to use Nitocris: Both Ghouls have a 100% Death Rate <a href="https://apps.atlasacademy.io/db/NA/enemy/9940700" target="_blank" rel="noopener noreferrer" style="font-style: unset">according to Atlas Academy</a>.
|
||||
|
||||
I went with using Nitocris, since she has a 100% NP charge and a skill that increases her Instant Death rate by 100%. Not needing any additional charge meant that no other buffs or AOE charges needed to be used on turn 1.
|
||||
|
||||
Her kit brings the following stats:
|
||||
|
||||
* Her NP has an Insta-Kill Hit Rate of 50% when used at Overcharge 1 (meaning 100% charge)
|
||||
* Her S1 increases Insta-Kill success rate by 100%
|
||||
|
||||
### Actual calculation
|
||||
|
||||
When using the formular from above, we have the following values
|
||||
|
||||
```
|
||||
hitRate: 50%
|
||||
deathRate: 100%
|
||||
instantDeathRateUp: 100%
|
||||
instantDeathRateDown: 0%
|
||||
instantDeathResistUp: 0%
|
||||
instantDeathResistDown: 0%
|
||||
```
|
||||
|
||||
This means we can fill in the formular like this
|
||||
|
||||
```
|
||||
death = 0.5 * 1 * (1 + 1 - 0 - 0 + 0)
|
||||
```
|
||||
|
||||
We now break everything down step by step
|
||||
|
||||
```
|
||||
death = 0.5 * (1 + 1)
|
||||
= 0.5 * 2
|
||||
= 1
|
||||
= 100%
|
||||
```
|
||||
|
||||
So her death succeeds 100% of the time on these ghouls, which makes her perfect to use in this scenario.
|
||||
|
||||
For other skill levels, this looks like this (_Her S1 scales from 50% to 100%_)
|
||||
|
||||
```
|
||||
Skill Level | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
|
||||
-------------|-----|-------|-----|-------|-----|-------|-----|-------|-----|------
|
||||
Death % | 75% | 77.5% | 80% | 82.5% | 85% | 87.5% | 90% | 92.5% | 95% | 100%
|
||||
```
|
||||
|
||||
In the end, this resulted in the following comp that worked like a charm.
|
||||
|
||||
<div style="width: 100%; display: flex; justify-content: center; padding-top: 0.75rem">
|
||||
<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/UwbNp_dB_VU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
## Conclusion
|
||||
|
||||
This small article should have given you an insight into using Instant Death as an advantage in the future. But remember: Stacking Gacha in a Gacha game can backfire.
|
||||
|
||||
That's all for now, thanks for reading
|
||||
~ Firq
|
|
@ -2,17 +2,17 @@
|
|||
{
|
||||
"link": "/",
|
||||
"text": "Home",
|
||||
"icon": "iconoir-home-alt"
|
||||
"icon": "iconoir-home"
|
||||
},
|
||||
{
|
||||
"link": "/servants",
|
||||
"text": "Servants",
|
||||
"icon": "iconoir-database-script"
|
||||
"icon": "iconoir-task-list"
|
||||
},
|
||||
{
|
||||
"link": "/ta-collection",
|
||||
"text": "TA Collection",
|
||||
"icon": "iconoir-db"
|
||||
"icon": "iconoir-database"
|
||||
},
|
||||
{
|
||||
"link": "/blog",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
export default {
|
||||
site: 'staging.firq.dev',
|
||||
puppeteerOptions: {
|
||||
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
||||
},
|
||||
|
@ -7,6 +6,5 @@ export default {
|
|||
budget: 90,
|
||||
buildStatic: true
|
||||
},
|
||||
auth: { username: "staging", password: "staging" },
|
||||
outputPath: "unlighthouse-reports",
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue