mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 05:43:41 +03:00
Implement panel missions as static unlock-all
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
package masterdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"lunar-tear/server/internal/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WebviewPanelMissionCatalog struct {
|
||||||
|
PageIds []int32 // every WebviewPanelMissionPageId, sorted ascending
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadWebviewPanelMissionCatalog() *WebviewPanelMissionCatalog {
|
||||||
|
rows, err := utils.ReadTable[EntityMWebviewPanelMissionPage]("m_webview_panel_mission_page")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("load webview panel mission page table: %v", err)
|
||||||
|
return &WebviewPanelMissionCatalog{}
|
||||||
|
}
|
||||||
|
ids := make([]int32, 0, len(rows))
|
||||||
|
for _, r := range rows {
|
||||||
|
ids = append(ids, r.WebviewPanelMissionPageId)
|
||||||
|
}
|
||||||
|
sort.Slice(ids, func(i, j int) bool { return ids[i] < ids[j] })
|
||||||
|
return &WebviewPanelMissionCatalog{PageIds: ids}
|
||||||
|
}
|
||||||
@@ -44,6 +44,30 @@ const informationPage = `<!DOCTYPE html>
|
|||||||
</body>
|
</body>
|
||||||
</html>`
|
</html>`
|
||||||
|
|
||||||
|
const panelMissionPage = `<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Panel Missions</title>
|
||||||
|
<style>
|
||||||
|
body { margin:0; padding:48px 20px; font-family:"Noto Sans",sans-serif;
|
||||||
|
background:#0a0a0f; color:#d4cfc6; text-align:center; }
|
||||||
|
h1 { font-size:1.3em; letter-spacing:.15em; color:#e8e0d0; margin-bottom:6px; }
|
||||||
|
.sub { font-size:.75em; color:#888; margin-bottom:28px; }
|
||||||
|
.sep { width:60px; border:none; border-top:1px solid #333; margin:24px auto; }
|
||||||
|
p { font-size:.85em; line-height:1.6; color:#999; max-width:340px; margin:0 auto; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>PANEL MISSIONS</h1>
|
||||||
|
<div class="sub">Card Stories</div>
|
||||||
|
<hr class="sep">
|
||||||
|
<p>All panel missions are cleared.</p>
|
||||||
|
<p>Their Card Stories are available in Library › Extra Stories.</p>
|
||||||
|
</body>
|
||||||
|
</html>`
|
||||||
|
|
||||||
// resourcesURLOriginal is the base URL embedded in list.bin; must be replaced with same-length (43 bytes) when rewriting.
|
// resourcesURLOriginal is the base URL embedded in list.bin; must be replaced with same-length (43 bytes) when rewriting.
|
||||||
const resourcesURLOriginal = "https://resources.app.nierreincarnation.com"
|
const resourcesURLOriginal = "https://resources.app.nierreincarnation.com"
|
||||||
|
|
||||||
@@ -456,6 +480,13 @@ func (s *OctoHTTPServer) handleWebAPI(w http.ResponseWriter, r *http.Request, pa
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.Contains(path, "panelmission") {
|
||||||
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
|
w.WriteHeader(200)
|
||||||
|
w.Write([]byte(panelMissionPage))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
w.WriteHeader(200)
|
w.WriteHeader(200)
|
||||||
w.Write([]byte(`<!DOCTYPE html><html><body></body></html>`))
|
w.Write([]byte(`<!DOCTYPE html><html><body></body></html>`))
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package userdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"lunar-tear/server/internal/masterdata"
|
||||||
|
"lunar-tear/server/internal/store"
|
||||||
|
"lunar-tear/server/internal/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
var webviewPanelMissionCatalog = sync.OnceValue(masterdata.LoadWebviewPanelMissionCatalog)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
register("IUserWebviewPanelMission", func(user store.UserState) string {
|
||||||
|
pageIds := webviewPanelMissionCatalog().PageIds
|
||||||
|
records := make([]map[string]any, 0, len(pageIds))
|
||||||
|
for _, pageId := range pageIds {
|
||||||
|
records = append(records, map[string]any{
|
||||||
|
"userId": user.UserId,
|
||||||
|
"webviewPanelMissionPageId": pageId,
|
||||||
|
"rewardReceiveDatetime": user.GameStartDatetime,
|
||||||
|
"latestVersion": user.GameStartDatetime,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
s, _ := utils.EncodeJSONMaps(records...)
|
||||||
|
return s
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -102,6 +102,7 @@ func FullClientTableMap(user store.UserState) map[string]string {
|
|||||||
"IUserBigHuntWeeklyStatus": projectTable("IUserBigHuntWeeklyStatus", user),
|
"IUserBigHuntWeeklyStatus": projectTable("IUserBigHuntWeeklyStatus", user),
|
||||||
"IUserFacebook": projectTable("IUserFacebook", user),
|
"IUserFacebook": projectTable("IUserFacebook", user),
|
||||||
"IUserApple": projectTable("IUserApple", user),
|
"IUserApple": projectTable("IUserApple", user),
|
||||||
|
"IUserWebviewPanelMission": projectTable("IUserWebviewPanelMission", user),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user