Server/project/src/callbacks/ProfileCallbacks.ts

197 lines
6.8 KiB
TypeScript
Raw Normal View History

2023-03-03 16:23:46 +01:00
import { inject, injectable } from "tsyringe";
import { ProfileController } from "@spt-aki/controllers/ProfileController";
import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt-aki/models/eft/httpResponse/INullResponseData";
import { IGetMiniProfileRequestData } from "@spt-aki/models/eft/launcher/IGetMiniProfileRequestData";
import { GetProfileStatusResponseData } from "@spt-aki/models/eft/profile/GetProfileStatusResponseData";
2023-12-20 01:17:27 +01:00
import { ICreateProfileResponse } from "@spt-aki/models/eft/profile/ICreateProfileResponse";
import { IGetProfileSettingsRequest } from "@spt-aki/models/eft/profile/IGetProfileSettingsRequest";
import { IProfileChangeNicknameRequestData } from "@spt-aki/models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "@spt-aki/models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "@spt-aki/models/eft/profile/IProfileCreateRequestData";
import { ISearchFriendRequestData } from "@spt-aki/models/eft/profile/ISearchFriendRequestData";
import { ISearchFriendResponse } from "@spt-aki/models/eft/profile/ISearchFriendResponse";
import { IValidateNicknameRequestData } from "@spt-aki/models/eft/profile/IValidateNicknameRequestData";
import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil";
import { TimeUtil } from "@spt-aki/utils/TimeUtil";
2023-03-03 16:23:46 +01:00
/** Handle profile related client events */
@injectable()
export class ProfileCallbacks
{
constructor(
@inject("HttpResponseUtil") protected httpResponse: HttpResponseUtil,
@inject("TimeUtil") protected timeUtil: TimeUtil,
2023-11-16 02:35:05 +01:00
@inject("ProfileController") protected profileController: ProfileController,
)
{}
2023-03-03 16:23:46 +01:00
/**
* Handle client/game/profile/create
*/
2023-12-20 01:17:27 +01:00
public createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<ICreateProfileResponse>
2023-03-03 16:23:46 +01:00
{
2023-12-20 01:17:27 +01:00
const id = this.profileController.createProfile(info, sessionID);
return this.httpResponse.getBody({ uid: id });
2023-03-03 16:23:46 +01:00
}
/**
* Handle client/game/profile/list
2023-03-03 16:23:46 +01:00
* Get the complete player profile (scav + pmc character)
*/
public getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>
{
return this.httpResponse.getBody(this.profileController.getCompleteProfile(sessionID));
}
/**
* Handle client/game/profile/savage/regenerate
2023-03-03 16:23:46 +01:00
* Handle the creation of a scav profile for player
* Occurs post-raid and when profile first created immediately after character details are confirmed by player
2023-11-16 02:35:05 +01:00
* @param url
2023-03-03 16:23:46 +01:00
* @param info empty
* @param sessionID Session id
* @returns Profile object
*/
public regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>
{
return this.httpResponse.getBody([this.profileController.generatePlayerScav(sessionID)]);
}
/**
* Handle client/game/profile/voice/change event
*/
public changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData
{
this.profileController.changeVoice(info, sessionID);
return this.httpResponse.nullResponse();
}
/**
* Handle client/game/profile/nickname/change event
* Client allows player to adjust their profile name
*/
2023-11-16 02:35:05 +01:00
public changeNickname(
url: string,
info: IProfileChangeNicknameRequestData,
sessionID: string,
): IGetBodyResponseData<any>
2023-03-03 16:23:46 +01:00
{
const output = this.profileController.changeNickname(info, sessionID);
if (output === "taken")
{
return this.httpResponse.getBody(null, 255, "The nickname is already in use");
}
if (output === "tooshort")
{
return this.httpResponse.getBody(null, 1, "The nickname is too short");
}
2023-11-16 02:35:05 +01:00
return this.httpResponse.getBody({ status: 0, nicknamechangedate: this.timeUtil.getTimestamp() });
2023-03-03 16:23:46 +01:00
}
/**
* Handle client/game/profile/nickname/validate
*/
2023-11-16 02:35:05 +01:00
public validateNickname(
url: string,
info: IValidateNicknameRequestData,
sessionID: string,
): IGetBodyResponseData<any>
2023-03-03 16:23:46 +01:00
{
const output = this.profileController.validateNickname(info, sessionID);
if (output === "taken")
{
return this.httpResponse.getBody(null, 255, "225 - ");
2023-03-03 16:23:46 +01:00
}
if (output === "tooshort")
{
return this.httpResponse.getBody(null, 256, "256 - ");
2023-03-03 16:23:46 +01:00
}
2023-11-16 02:35:05 +01:00
return this.httpResponse.getBody({ status: "ok" });
2023-03-03 16:23:46 +01:00
}
/**
* Handle client/game/profile/nickname/reserved
*/
2023-03-03 16:23:46 +01:00
public getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>
{
return this.httpResponse.getBody("SPTarkov");
}
/**
* Handle client/profile/status
2023-03-03 16:23:46 +01:00
* Called when creating a character when choosing a character face/voice
*/
2023-11-16 02:35:05 +01:00
public getProfileStatus(
url: string,
info: IEmptyRequestData,
sessionID: string,
): IGetBodyResponseData<GetProfileStatusResponseData>
2023-03-03 16:23:46 +01:00
{
return this.httpResponse.getBody(this.profileController.getProfileStatus(sessionID));
2023-03-03 16:23:46 +01:00
}
2023-12-27 16:05:07 +01:00
/**
* Handle client/profile/view
* Called when viewing another players profile
*/
public getOtherProfile(
url: string,
info: IEmptyRequestData,
sessionID: string,
): any
{
throw new Error("Not implemented");
}
/**
* Handle client/profile/settings
*/
2023-11-16 02:35:05 +01:00
public getProfileSettings(
url: string,
info: IGetProfileSettingsRequest,
sessionId: string,
): IGetBodyResponseData<string>
2023-03-03 16:23:46 +01:00
{
return this.httpResponse.emptyResponse();
}
/**
* Handle client/game/profile/search
*/
2023-11-16 02:35:05 +01:00
public searchFriend(
url: string,
info: ISearchFriendRequestData,
sessionID: string,
): IGetBodyResponseData<ISearchFriendResponse[]>
2023-03-03 16:23:46 +01:00
{
return this.httpResponse.getBody(this.profileController.getFriends(info, sessionID));
}
/**
* Handle launcher/profile/info
*/
2023-03-03 16:23:46 +01:00
public getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string
{
return this.httpResponse.noBody(this.profileController.getMiniProfile(sessionID));
}
/**
* Handle /launcher/profiles
*/
2023-07-20 14:22:47 +02:00
public getAllMiniProfiles(url: string, info: IEmptyRequestData, sessionID: string): string
2023-03-03 16:23:46 +01:00
{
return this.httpResponse.noBody(this.profileController.getMiniProfiles());
}
2023-11-16 02:35:05 +01:00
}