Add team creation stubs

This commit is contained in:
Tau 2019-04-12 21:58:31 -04:00
parent 2da9276176
commit cacf10816a
15 changed files with 141 additions and 2 deletions

View File

@ -0,0 +1,9 @@
import { RequestCode } from "./_defs";
import { CheckTeamNameRequest } from "../request/checkTeamName";
checkTeamName.msgCode = 0x00a2 as RequestCode;
checkTeamName.msgLen = 0x0040;
export function checkTeamName(buf: Buffer): CheckTeamNameRequest {
return { type: "check_team_name_req" };
}

View File

@ -0,0 +1,23 @@
import iconv = require("iconv-lite");
import { RequestCode } from "./_defs";
import { Id } from "../model/base";
import { Profile } from "../model/profile";
import { CreateTeamRequest } from "../request/createTeam";
createTeam.msgCode = 0x0071 as RequestCode;
createTeam.msgLen = 0x0050;
export function createTeam(buf: Buffer): CreateTeamRequest {
return {
type: "create_team_req",
profileId: buf.readUInt32LE(0x0004) as Id<Profile>,
teamName: iconv.decode(buf.slice(0x0008, 0x0028), "shift_jis"),
field_0028: buf.readUInt16LE(0x0028),
field_002C: buf.readUInt32LE(0x002c),
field_0030: buf.readUInt8(0x0030),
field_0032: buf.readUInt16LE(0x0032),
prevTeamId: buf.readUInt32LE(0x0034),
field_0038: buf.slice(0x0038, 0x0045),
};
}

View File

@ -1,7 +1,8 @@
import { Transform } from "stream";
import { saveTimeAttack } from "./saveTimeAttack";
import { checkTeamName } from "./checkTeamName";
import { createProfile } from "./createProfile";
import { createTeam } from "./createTeam";
import { joinAutoTeam } from "./joinAutoTeam";
import { discoverProfile } from "./discoverProfile";
import { load2on2 } from "./load2on2";
@ -23,6 +24,7 @@ import { saveGarage } from "./saveGarage";
import { saveProfile } from "./saveProfile";
import { saveSettings } from "./saveSettings";
import { saveStocker } from "./saveStocker";
import { saveTimeAttack } from "./saveTimeAttack";
import { saveTopic } from "./saveTopic";
import { unlockProfile } from "./unlockProfile";
import { updateProvisionalStoreRank } from "./updateProvisionalStoreRank";
@ -41,7 +43,9 @@ export type ReaderFn = ((buf: Buffer) => Request) & {
};
const funcList: ReaderFn[] = [
checkTeamName,
createProfile,
createTeam,
joinAutoTeam,
discoverProfile,
load2on2,

View File

@ -0,0 +1,10 @@
import { CheckTeamNameResponse } from "../response/checkTeamName";
export function checkTeamName(res: CheckTeamNameResponse): Buffer {
const buf = Buffer.alloc(0x0010);
buf.writeUInt16LE(0x00a3, 0x0000);
buf.writeUInt32LE(res.status, 0x0004);
return buf;
}

View File

@ -0,0 +1,11 @@
import { CreateTeamResponse } from "../response/createTeam";
export function createTeam(res: CreateTeamResponse): Buffer {
const buf = Buffer.alloc(0x0010);
buf.writeUInt16LE(0x0072, 0x0000);
buf.writeUInt32LE(res.status, 0x0004);
buf.writeUInt32LE(res.teamId, 0x0008);
return buf;
}

View File

@ -1,6 +1,8 @@
import { Transform } from "stream";
import { _team } from "./_team";
import { checkTeamName } from "./checkTeamName";
import { createTeam } from "./createTeam";
import { discoverProfile } from "./discoverProfile";
import { generic } from "./generic";
import { lockProfile } from "./lockProfile";
@ -27,6 +29,12 @@ import { Response } from "../response";
function encode(res: Response): Buffer {
switch (res.type) {
case "check_team_name_res":
return checkTeamName(res);
case "create_team_res":
return createTeam(res);
case "discover_profile_res":
return discoverProfile(res);

View File

@ -0,0 +1,13 @@
import { CheckTeamNameRequest } from "../request/checkTeamName";
import { CheckTeamNameResponse } from "../response/checkTeamName";
import { World } from "../world";
export function checkTeamName(
w: World,
req: CheckTeamNameRequest
): CheckTeamNameResponse {
return {
type: "check_team_name_res",
status: 0,
};
}

View File

@ -0,0 +1,16 @@
import { Id } from "../model/base";
import { Team } from "../model/team";
import { CreateTeamRequest } from "../request/createTeam";
import { CreateTeamResponse } from "../response/createTeam";
import { World } from "../world";
export function createTeam(
w: World,
req: CreateTeamRequest
): CreateTeamResponse {
return {
type: "create_team_res",
status: 0,
teamId: 3 as Id<Team>,
};
}

View File

@ -1,6 +1,7 @@
import { _team } from "./_team";
import { saveTimeAttack } from "./saveTimeAttack";
import { checkTeamName } from "./checkTeamName";
import { createProfile } from "./createProfile";
import { createTeam } from "./createTeam";
import { discoverProfile } from "./discoverProfile";
import { load2on2 } from "./load2on2";
import { loadConfig } from "./loadConfig";
@ -21,6 +22,7 @@ import { saveGarage } from "./saveGarage";
import { saveProfile } from "./saveProfile";
import { saveSettings } from "./saveSettings";
import { saveStocker } from "./saveStocker";
import { saveTimeAttack } from "./saveTimeAttack";
import { saveTopic } from "./saveTopic";
import { unlockProfile } from "./unlockProfile";
import { updateProvisionalStoreRank } from "./updateProvisionalStoreRank";
@ -35,9 +37,15 @@ import { World } from "../world";
export async function dispatch(w: World, req: Request): Promise<Response> {
switch (req.type) {
case "check_team_name_req":
return checkTeamName(w, req);
case "create_profile_req":
return createProfile(w, req);
case "create_team_req":
return createTeam(w, req);
case "join_auto_team_req":
return _team(w, req);

View File

@ -0,0 +1,3 @@
export interface CheckTeamNameRequest {
type: "check_team_name_req";
}

View File

@ -0,0 +1,14 @@
import { Id } from "../model/base";
import { Profile } from "../model/profile";
export interface CreateTeamRequest {
type: "create_team_req";
profileId: Id<Profile>; // u32
teamName: string; // len 0x20
field_0028: number; // u16
field_002C: number; // u32 (but only holds a u8)
field_0030: number; // u8
field_0032: number; // u16
prevTeamId: number; // u32
field_0038: Buffer; // len 0x0D ..? weird length
}

View File

@ -1,4 +1,6 @@
import { CheckTeamNameRequest } from "./checkTeamName";
import { CreateProfileRequest } from "./createProfile";
import { CreateTeamRequest } from "./createTeam";
import { DiscoverProfileRequest } from "./discoverProfile";
import { JoinAutoTeamRequest } from "./joinAutoTeam";
import { Load2on2Request } from "./load2on2";
@ -32,7 +34,9 @@ import { UpdateUiReportRequest } from "./updateUiReport";
import { UpdateUserLogRequest } from "./updateUserLog";
export type Request =
| CheckTeamNameRequest
| CreateProfileRequest
| CreateTeamRequest
| DiscoverProfileRequest
| JoinAutoTeamRequest
| Load2on2Request

View File

@ -0,0 +1,4 @@
export interface CheckTeamNameResponse {
type: "check_team_name_res";
status: number; // Anything other than 4 is success
}

View File

@ -0,0 +1,8 @@
import { Id } from "../model/base";
import { Team } from "../model/team";
export interface CreateTeamResponse {
type: "create_team_res";
status: number; // 0 is success, 1 is failure
teamId: Id<Team>;
}

View File

@ -1,3 +1,5 @@
import { CheckTeamNameResponse } from "./checkTeamName";
import { CreateTeamResponse } from "./createTeam";
import { DiscoverProfileResponse } from "./discoverProfile";
import { GenericResponse } from "./generic";
import { JoinAutoTeamResponse } from "./joinAutoTeam";
@ -24,6 +26,8 @@ import { UpdateStoryClearNumResponse } from "./updateStoryClearNum";
import { UnlockProfileResponse } from "./unlockProfile";
export type Response =
| CheckTeamNameResponse
| CreateTeamResponse
| DiscoverProfileResponse
| GenericResponse
| JoinAutoTeamResponse