Compare commits

...

34 commits

Author SHA1 Message Date
aba414e68d Merge pull request 'dev' (#9) from dev into main
All checks were successful
/ checking (push) Successful in 14s
Reviewed-on: #9
2023-12-21 11:27:53 +00:00
c97469662d
fixed deploy steps
All checks were successful
/ checking (push) Successful in 13s
/ deploy-unlighthouse-site (push) Successful in 8s
/ deploy-unlighthouse-files (push) Successful in 9s
/ unlighthouse (push) Successful in 35s
2023-12-21 12:23:10 +01:00
22f4a5f0b8
fixed artifact names
All checks were successful
/ checking (push) Successful in 14s
/ deploy-unlighthouse-files (push) Successful in 9s
/ deploy-unlighthouse-site (push) Successful in 7s
/ unlighthouse (push) Successful in 37s
2023-12-21 12:20:39 +01:00
16eac7e22c
using custom docker
Some checks failed
/ checking (push) Successful in 13s
/ deploy-unlighthouse-site (push) Has been skipped
/ unlighthouse (push) Successful in 1m10s
/ deploy-unlighthouse-files (push) Failing after 7s
2023-12-21 12:18:01 +01:00
69643c74f2
implemented unlighthouse report uploading
Some checks failed
/ checking (push) Successful in 15s
/ deploy-unlighthouse-files (push) Has been skipped
/ deploy-unlighthouse-site (push) Has been skipped
/ unlighthouse (push) Failing after 37s
2023-12-21 11:54:15 +01:00
b73bda3a78
mobile fix, reworked unlighthouse
All checks were successful
/ checking (push) Successful in 14s
/ build-site (push) Successful in 2m28s
/ publish (push) Successful in 8s
/ unlighthouse (push) Successful in 1m13s
2023-12-21 11:39:45 +01:00
1e672c1a10
testing 15
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been cancelled
2023-12-21 02:17:25 +01:00
8a7abf0414
testing 14
Some checks failed
/ checking (push) Successful in 12s
/ unlighthouse (push) Has been cancelled
2023-12-21 02:09:01 +01:00
affa1b5fc0
testing 13
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been cancelled
2023-12-21 02:03:47 +01:00
e5ca5eaeb1
testing 12
All checks were successful
/ checking (push) Successful in 14s
2023-12-21 02:02:28 +01:00
316e7c336b
testing 11
All checks were successful
/ checking (push) Successful in 15s
2023-12-21 02:00:25 +01:00
dfd29ddc94
testing 10
Some checks failed
/ unlighthouse (push) Failing after 8s
/ checking (push) Successful in 14s
2023-12-21 01:58:08 +01:00
d509e40f2a
testing 9
Some checks failed
/ checking (push) Successful in 17s
/ unlighthouse (push) Failing after 56s
2023-12-21 01:54:57 +01:00
5cbf9e7633
testing 8
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Failing after 1m7s
2023-12-21 01:53:50 +01:00
84912239a2
testing 7
Some checks failed
/ checking (push) Successful in 13s
/ unlighthouse (push) Failing after 7s
2023-12-21 01:52:27 +01:00
41273a8c94
testing 6
Some checks failed
/ checking (push) Successful in 13s
/ unlighthouse (push) Failing after 1m1s
2023-12-21 01:42:30 +01:00
9d4fab7c56
testing 5
Some checks failed
/ checking (push) Successful in 16s
/ unlighthouse (push) Failing after 1m0s
2023-12-21 01:36:54 +01:00
edce15b262
testing 4
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Failing after 8s
2023-12-21 01:33:23 +01:00
8462755842
testing 3
Some checks failed
/ checking (push) Successful in 15s
/ unlighthouse (push) Failing after 20s
2023-12-21 01:31:58 +01:00
adefc49065
testing 2
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Failing after 5s
2023-12-21 01:30:36 +01:00
139a768168
testing
Some checks failed
/ checking (push) Successful in 15s
/ unlighthouse (push) Failing after 2s
2023-12-21 01:29:11 +01:00
b3a820639a
testing with no protocol
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been cancelled
2023-12-21 01:24:41 +01:00
c9a286bffd
testing with no port
Some checks failed
/ checking (push) Successful in 13s
/ unlighthouse (push) Has been cancelled
2023-12-21 01:22:05 +01:00
39cfe4392c
testing with http
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been cancelled
2023-12-21 01:19:15 +01:00
c50630745d
updated site
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been cancelled
2023-12-21 01:03:51 +01:00
f7d4e18989
fixed stuck issue
Some checks failed
/ checking (push) Successful in 14s
/ unlighthouse (push) Failing after 52s
2023-12-21 00:57:26 +01:00
90eb5ff3e1
fixed stuck issue
Some checks are pending
/ unlighthouse (push) Blocked by required conditions
/ checking (push) Successful in 12s
2023-12-21 00:56:50 +01:00
8835d0047e
added seperate unlighthouse option
Some checks are pending
/ checking (push) Successful in 14s
/ unlighthouse (push) Blocked by required conditions
2023-12-21 00:55:41 +01:00
0b18f24a4a
changed install from global to local
Some checks failed
/ checking (push) Successful in 34s
/ build-site (push) Successful in 2m21s
/ publish (push) Successful in 7s
/ unlighthouse (push) Has been cancelled
2023-12-21 00:35:20 +01:00
89b6895395
gitlab lighthouse container with chrome
Some checks failed
/ checking (push) Successful in 14s
/ build-site (push) Successful in 2m13s
/ publish (push) Successful in 6s
/ unlighthouse (push) Failing after 1m24s
2023-12-21 00:28:33 +01:00
cbd4d56078
fixed output dir
Some checks failed
/ unlighthouse (push) Failing after 56s
/ checking (push) Successful in 15s
/ build-site (push) Successful in 2m28s
/ publish (push) Successful in 21s
2023-12-21 00:22:04 +01:00
83661b9d38
Implemented forgejo ci
Some checks failed
/ publish (push) Has been skipped
/ checking (push) Successful in 14s
/ unlighthouse (push) Has been skipped
/ build-site (push) Failing after 2m13s
2023-12-21 00:16:39 +01:00
73d0debc1e
small visual fixes + upgrade to astro v4 2023-12-20 23:48:28 +01:00
c4670958fe
IK article 2023-08-19 23:25:17 +02:00
13 changed files with 5454 additions and 3579 deletions

View 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/

View 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 }}

View 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

View 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 }}

View file

@ -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
View 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" ]

View file

@ -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()]

8630
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -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"
}
}

View file

@ -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>

View 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

View file

@ -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",

View file

@ -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",
}