Files
LP_Bot/src/context/GameItemsContext.tsx

119 lines
3.6 KiB
TypeScript
Raw Normal View History

2023-12-05 17:27:18 +08:00
import MainControlData from "@/Common/DataReceived/MainControlData";
2023-12-06 13:56:43 +08:00
import MainControl, { DownloadForm } from "@/Common/MainControl/MainControl";
2023-11-24 11:15:26 +08:00
import BusinessTypeSetting, { BusinessEnum } from "@/_BusinessTypeSetting/BusinessTypeSetting";
2023-12-05 17:27:18 +08:00
import { GameData } from "@/define/gameData";
2023-11-24 11:15:26 +08:00
import { PlayerData } from "@/define/playerData";
2023-11-23 16:33:21 +08:00
import { IGameItems } from "@/types";
import { ReactNode, createContext, useContext, useState } from "react";
type GameItemsProviderProps = {
children: ReactNode;
};
const GameItemsContext = createContext<IGameItems>(undefined);
export function useGameItems() {
return useContext(GameItemsContext);
}
export let gameObj: IGameItems = null;
export function GameItemsProvider({ children }: GameItemsProviderProps) {
2023-12-05 17:27:18 +08:00
const [player, setPlayer] = useState<PlayerData>(initPlayerData());
const [gameData, setGameData] = useState<GameData>(initGameData());
2023-11-23 16:33:21 +08:00
const game: IGameItems = gameObj = {
onLoad,
2023-11-24 11:15:26 +08:00
player,
2023-12-05 17:27:18 +08:00
setPlayer,
gameData,
setGameData
2023-11-23 16:33:21 +08:00
};
async function onLoad(serverType: BusinessEnum.ServerType) {
2023-11-24 11:15:26 +08:00
new MainControl();
2023-12-05 17:27:18 +08:00
new MainControlData();
2023-11-23 16:33:21 +08:00
await Promise.all([
2023-11-24 11:15:26 +08:00
// 設定執行環境
setBusinessType(serverType),
2023-11-23 16:33:21 +08:00
// // 設定LineTools環境
// await setLineTools(),
2023-12-06 13:56:43 +08:00
// DownloadForm
await MainControl.DownloadForm(DownloadForm.FormType.Formread)
2023-11-23 16:33:21 +08:00
]);
}
2023-11-24 11:15:26 +08:00
/** 設定執行環境 */
function setBusinessType(useServerType: BusinessEnum.ServerType): void {
// 連線參數自定義
const queryParameters = new URLSearchParams(location.search);
const servertype: string = queryParameters.get("servertype") ?? useServerType.toString();
const host: string = queryParameters.get("host");
const port: string = queryParameters.get("port");
const patch: string = queryParameters.get("patch");
const downloadurl: string = queryParameters.get("downloadurl");
const liffid: string = queryParameters.get("liffid");
if (servertype) {
// 自定預設環境
BusinessTypeSetting.UseServerType = +servertype;
BusinessTypeSetting.UseHost = BusinessTypeSetting.GetHostUrl(BusinessTypeSetting.UseServerType);
BusinessTypeSetting.UsePort = BusinessTypeSetting.GetPortNum(BusinessTypeSetting.UseServerType);
BusinessTypeSetting.UsePatch = BusinessTypeSetting.GetPatchUrl(BusinessTypeSetting.UseServerType);
BusinessTypeSetting.UseDownloadUrl = BusinessTypeSetting.GetDownloadUrl(BusinessTypeSetting.UseServerType);
BusinessTypeSetting.UseLiffID = BusinessTypeSetting.GetLiffID(BusinessTypeSetting.UseServerType);
BusinessTypeSetting.UseLineID = BusinessTypeSetting.GetLineID(BusinessTypeSetting.UseServerType);
}
if (host) {
// 自定連線1(有自定則無視UseServerType)
BusinessTypeSetting.UseHost = host;
}
if (port) {
// 自定連線2(有自定則無視UseServerType)
BusinessTypeSetting.UsePort = +port;
}
if (patch) {
// 自定連資源伺服器(有自定則無視UseServerType)
BusinessTypeSetting.UsePatch = patch;
}
if (downloadurl) {
// 自定連靜態伺服器(有自定則無視UseServerType)
BusinessTypeSetting.UseDownloadUrl = downloadurl;
}
if (liffid) {
// 自定連Line Liff(有自定則無視UseServerType)
BusinessTypeSetting.UseLiffID = liffid;
}
return;
2023-11-23 16:33:21 +08:00
}
return (
<GameItemsContext.Provider value={game}>
{children}
</GameItemsContext.Provider>
);
}
2023-12-05 17:27:18 +08:00
function initPlayerData(): PlayerData {
return {
token: undefined,
aId: undefined,
f: undefined,
r: undefined,
rf: undefined,
name: undefined,
a: undefined,
m: 0,
lp: undefined,
tr: undefined,
lct: undefined
};
}
function initGameData(): GameData {
return {
slotData: [],
slotList: [],
nowSlotId: undefined,
};
}