Update types

This commit is contained in:
Dev 2023-03-09 11:23:08 +00:00
parent 78f1193641
commit aeac2053d3
433 changed files with 4195 additions and 505 deletions

View File

@ -2,7 +2,10 @@ import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate"; import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer"; import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
@ -13,6 +16,7 @@ import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDial
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData"; import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData"; import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -37,9 +41,13 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns * @returns
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
/** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
@ -49,10 +57,14 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns IGetAllAttachmentsResponse * @returns IGetAllAttachmentsResponse
*/ */
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -3,6 +3,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
@ -11,6 +14,8 @@ import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidCo
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -26,9 +31,12 @@ export declare class MatchCallbacks {
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData; sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData; /** Handle client/match/group/invite/accept */
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData; acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
/** Handle client/match/group/invite/cancel */
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData; putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>; getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>; serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
@ -41,6 +49,7 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>; getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>; createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData; deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
} }

View File

@ -2,7 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController { export declare class DialogueController {
@ -35,6 +35,7 @@ export declare class DialogueController {
* @returns IGetMailDialogViewResponseData object * @returns IGetMailDialogViewResponseData object
*/ */
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/** /**
* Get a count of messages with attachments from a particular dialog * Get a count of messages with attachments from a particular dialog
* @param sessionID Session id * @param sessionID Session id

View File

@ -3,6 +3,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper"; import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper"; import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
@ -17,6 +18,8 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService"; import { InsuranceService } from "../services/InsuranceService";
import { LocaleService } from "../services/LocaleService";
import { PmcChatResponseService } from "../services/PmcChatResponseService";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
/** /**
@ -28,10 +31,13 @@ export declare class InraidController {
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected pmcChatResponseService: PmcChatResponseService;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator; protected playerScavGenerator: PlayerScavGenerator;
protected notificationSendHelper: NotificationSendHelper;
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -40,7 +46,7 @@ export declare class InraidController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig; protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig; protected inraidConfig: IInRaidConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, localeService: LocaleService, pmcChatResponseService: PmcChatResponseService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, notificationSendHelper: NotificationSendHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -89,6 +95,7 @@ export declare class InraidController {
* @param offraidData post-raid data of raid * @param offraidData post-raid data of raid
*/ */
protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void;
protected sendLostInsuranceMessage(sessionID: string): void;
/** /**
* Is the player dead after a raid - dead is anything other than "survived" / "runner" * Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object * @param statusOnExit exit value from offraidData object

View File

@ -5,7 +5,9 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
@ -36,6 +38,7 @@ export declare class ProfileController {
getMiniProfile(sessionID: string): any; getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[]; getCompleteProfile(sessionID: string): IPmcData[];
createProfile(info: IProfileCreateRequestData, sessionID: string): void; createProfile(info: IProfileCreateRequestData, sessionID: string): void;
protected givePlayerStartingQuestRewards(profileDetails: IAkiProfile, sessionID: string, response: IItemEventRouterResponse): void;
/** /**
* Generate a player scav object * Generate a player scav object
* pmc profile MUST exist first before pscav can be generated * pmc profile MUST exist first before pscav can be generated

View File

@ -31,7 +31,7 @@ export declare class DialogueHelper {
/** /**
* Get the preview contents of the last message in a dialogue. * Get the preview contents of the last message in a dialogue.
* @param dialogue * @param dialogue
* @returns * @returns MessagePreview
*/ */
getMessagePreview(dialogue: Dialogue): MessagePreview; getMessagePreview(dialogue: Dialogue): MessagePreview;
/** /**

View File

@ -1,12 +1,36 @@
import { INotification } from "../models/eft/notifier/INotifier"; import { INotification } from "../models/eft/notifier/INotifier";
import { Dialogue, IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { MessageType } from "../models/enums/MessageType";
import { SaveServer } from "../servers/SaveServer";
import { WebSocketServer } from "../servers/WebSocketServer"; import { WebSocketServer } from "../servers/WebSocketServer";
import { NotificationService } from "../services/NotificationService"; import { NotificationService } from "../services/NotificationService";
import { HashUtil } from "../utils/HashUtil";
export declare class NotificationSendHelper { export declare class NotificationSendHelper {
protected webSocketServer: WebSocketServer; protected webSocketServer: WebSocketServer;
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected notificationService: NotificationService; protected notificationService: NotificationService;
constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); constructor(webSocketServer: WebSocketServer, hashUtil: HashUtil, saveServer: SaveServer, notificationService: NotificationService);
/** /**
* Send notification message to the appropriate channel * Send notification message to the appropriate channel
* @param sessionID
* @param notificationMessage
*/ */
sendMessage(sessionID: string, notificationMessage: INotification): void; sendMessage(sessionID: string, notificationMessage: INotification): void;
/**
* Send a message directly to the player
* @param sessionId Session id
* @param senderDetails Who is sendin the message to player
* @param messageText Text to send player
* @param messageType Underlying type of message being sent
*/
sendMessageToPlayer(sessionId: string, senderDetails: IUserDialogInfo, messageText: string, messageType: MessageType): void;
/**
* Helper function for sendMessageToPlayer(), get new dialog for storage in profile or find existing by sender id
* @param sessionId Session id
* @param messageType Type of message to generate
* @param senderDetails Who is sending the message
* @returns Dialogue
*/
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue;
} }

View File

@ -0,0 +1,3 @@
export interface IClearMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IDeleteFriendRequest {
friend_id: string;
}

View File

@ -0,0 +1,5 @@
export interface IFriendRequestSendResponse {
status: number;
requestid: string;
retryAfter: number;
}

View File

@ -1,7 +1,6 @@
import { IPmcData } from "../common/IPmcData";
import { Message } from "../profile/IAkiProfile"; import { Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData { export interface IGetMailDialogViewResponseData {
messages: Message[]; messages: Message[];
profiles: IPmcData[]; profiles: any[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -0,0 +1,3 @@
export interface IRemoveMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IAcceptGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,16 @@
export interface IAcceptGroupInviteResponse {
_id: string;
aid: number;
Info: PlayerInviteInfo;
isLeader: boolean;
isReady: boolean;
}
export interface PlayerInviteInfo {
Nickname: string;
Side: string;
Level: number;
MemberCategory: number;
GameVersion: string;
SavageLockTime: number;
SavageNickname: string;
}

View File

@ -0,0 +1,3 @@
export interface ICancelGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,3 @@
export interface IRemovePlayerFromGroupRequest {
aidToKick: string;
}

View File

@ -0,0 +1,4 @@
export interface ISendGroupInviteRequest {
to: string;
inLobby: boolean;
}

View File

@ -1,3 +1,4 @@
import { Message } from "../profile/IAkiProfile";
export interface INotifierChannel { export interface INotifierChannel {
server: string; server: string;
channel_id: string; channel_id: string;
@ -5,7 +6,6 @@ export interface INotifierChannel {
notifierServer: string; notifierServer: string;
ws: string; ws: string;
} }
import { Message } from "../profile/IAkiProfile";
export interface INotification { export interface INotification {
type: "RagfairOfferSold" | "new_message" | "ping"; type: "RagfairOfferSold" | "new_message" | "ping";
eventId: string; eventId: string;

View File

@ -1,3 +1,4 @@
import { MemberCategory } from "../../../models/enums/MemberCategory";
import { MessageType } from "../../enums/MessageType"; import { MessageType } from "../../enums/MessageType";
import { IPmcData } from "../common/IPmcData"; import { IPmcData } from "../common/IPmcData";
import { Item } from "../common/tables/IItem"; import { Item } from "../common/tables/IItem";
@ -36,19 +37,32 @@ export interface WeaponBuild {
items: Item[]; items: Item[];
} }
export interface Dialogue { export interface Dialogue {
_id: string;
messages: Message[];
pinned: boolean;
new: number;
attachmentsNew: number; attachmentsNew: number;
type: MessageType;
new: number;
_id: string;
Users?: IUserDialogInfo[];
pinned: boolean;
messages: Message[];
}
export interface IUserDialogInfo {
_id: string;
info: IUserDialogDetails;
}
export interface IUserDialogDetails {
Nickname: string;
Side: string;
Level: number;
MemberCategory: MemberCategory;
} }
export interface DialogueInfo { export interface DialogueInfo {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
_id: string;
type: MessageType; type: MessageType;
pinned: boolean; pinned: boolean;
Users?: any[];
message: MessagePreview; message: MessagePreview;
_id: string;
} }
export interface Message { export interface Message {
_id: string; _id: string;
@ -57,7 +71,7 @@ export interface Message {
dt: number; dt: number;
UtcDateTime?: number; UtcDateTime?: number;
Member?: IUpdatableChatMember; Member?: IUpdatableChatMember;
templateId: string; templateId?: string;
text?: string; text?: string;
hasRewards: boolean; hasRewards: boolean;
rewardCollected: boolean; rewardCollected: boolean;
@ -72,6 +86,7 @@ export interface MessagePreview {
dt: number; dt: number;
templateId: string; templateId: string;
text?: string; text?: string;
systemData?: ISystemData;
} }
export interface MessageItems { export interface MessageItems {
stash?: string; stash?: string;

View File

@ -13,6 +13,7 @@ export declare enum ConfigTypes {
LOCATION = "aki-location", LOCATION = "aki-location",
MATCH = "aki-match", MATCH = "aki-match",
PLAYERSCAV = "aki-playerscav", PLAYERSCAV = "aki-playerscav",
PMC_CHAT_RESPONSE = "aki-pmcchatresponse",
QUEST = "aki-quest", QUEST = "aki-quest",
RAGFAIR = "aki-ragfair", RAGFAIR = "aki-ragfair",
REPAIR = "aki-repair", REPAIR = "aki-repair",

View File

@ -1,19 +1,19 @@
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { DialogueInfo } from "../../eft/profile/IAkiProfile"; import { DialogueInfo } from "../../eft/profile/IAkiProfile";
export interface IDialogueCallbacks { export interface IDialogueCallbacks {
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>; getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
@ -28,7 +28,7 @@ export interface IDialogueCallbacks {
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
update(): boolean; update(): boolean;
} }

View File

@ -0,0 +1,13 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IPmcChatResponse extends IBaseConfig {
kind: "aki-pmcchatresponse";
victim: IResponseSettings;
killer: IResponseSettings;
}
export interface IResponseSettings {
responseChancePercent: number;
responseTypeWeights: Record<string, number>;
stripCapitalisationChancePercent: number;
allCapsChancePercent: number;
appendBroToMessageEndChancePercent: number;
}

View File

@ -18,4 +18,9 @@ export declare class LocalisationService {
* @returns Localised string * @returns Localised string
*/ */
getText(key: string, args?: any): string; getText(key: string, args?: any): string;
/**
* Get all locale keys
* @returns string array of keys
*/
getKeys(): string[];
} }

View File

@ -0,0 +1,73 @@
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Victim } from "../models/eft/common/tables/IBotBase";
import { IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { IPmcChatResponse } from "../models/spt/config/IPmChatResponse";
import { ConfigServer } from "../servers/ConfigServer";
import { RandomUtil } from "../utils/RandomUtil";
import { LocalisationService } from "./LocalisationService";
export declare class PmcChatResponseService {
protected randomUtil: RandomUtil;
protected notificationSendHelper: NotificationSendHelper;
protected localisationService: LocalisationService;
protected weightedRandomHelper: WeightedRandomHelper;
protected configServer: ConfigServer;
protected pmcResponsesConfig: IPmcChatResponse;
constructor(randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
/**
* Chooses a random victim from those provided and sends a message to the player, can be positive or negative
* @param sessionId Session id
* @param pmcVictims Array of bots killed by player
*/
sendVictimResponse(sessionId: string, pmcVictims: Victim[]): void;
/**
* Not fully implemented yet, needs method of acquiring killers details after raid
* @param sessionId Session id
* @param pmcData Players profile
*/
sendKillerResponse(sessionId: string, pmcData: IPmcData): void;
/**
* Choose a localised message to send the player (different if sender was killed or killed player)
* @param isVictim
* @returns
*/
protected chooseMessage(isVictim: boolean): string;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected stripCapitalistion(isVictim: boolean): boolean;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected allCaps(isVictim: boolean): boolean;
/**
* Should the word 'bro' be appended to the message being sent to player
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
appendBroToMessageEnd(isVictim: boolean): boolean;
/**
* Choose a type of response based on the weightings in pmc response config
* @param isVictim Was responder killed by player
* @returns Response type (positive/negative)
*/
protected chooseResponseType(isVictim?: boolean): string;
/**
* Get locale keys related to the type of response to send (victim/killer)
* @param keyType Positive/negative
* @param isVictim Was responder killed by player
* @returns
*/
protected getResponseLocaleKeys(keyType: string, isVictim?: boolean): string[];
/**
* Randomly draw a victim of the the array and return thier details
* @param pmcVictims Possible victims to choose from
* @returns IUserDialogInfo
*/
protected chooseRandomVictim(pmcVictims: Victim[]): IUserDialogInfo;
}

View File

@ -2,7 +2,10 @@ import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate"; import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer"; import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
@ -13,6 +16,7 @@ import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDial
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData"; import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData"; import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -37,9 +41,13 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns * @returns
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
/** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
@ -49,10 +57,14 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns IGetAllAttachmentsResponse * @returns IGetAllAttachmentsResponse
*/ */
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -3,6 +3,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
@ -11,6 +14,8 @@ import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidCo
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -26,9 +31,12 @@ export declare class MatchCallbacks {
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData; sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData; /** Handle client/match/group/invite/accept */
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData; acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
/** Handle client/match/group/invite/cancel */
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData; putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>; getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>; serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
@ -41,6 +49,7 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>; getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>; createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData; deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
} }

View File

@ -2,7 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController { export declare class DialogueController {
@ -35,6 +35,7 @@ export declare class DialogueController {
* @returns IGetMailDialogViewResponseData object * @returns IGetMailDialogViewResponseData object
*/ */
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/** /**
* Get a count of messages with attachments from a particular dialog * Get a count of messages with attachments from a particular dialog
* @param sessionID Session id * @param sessionID Session id

View File

@ -3,6 +3,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper"; import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper"; import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
@ -17,6 +18,8 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService"; import { InsuranceService } from "../services/InsuranceService";
import { LocaleService } from "../services/LocaleService";
import { PmcChatResponseService } from "../services/PmcChatResponseService";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
/** /**
@ -28,10 +31,13 @@ export declare class InraidController {
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected pmcChatResponseService: PmcChatResponseService;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator; protected playerScavGenerator: PlayerScavGenerator;
protected notificationSendHelper: NotificationSendHelper;
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -40,7 +46,7 @@ export declare class InraidController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig; protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig; protected inraidConfig: IInRaidConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, localeService: LocaleService, pmcChatResponseService: PmcChatResponseService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, notificationSendHelper: NotificationSendHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -89,6 +95,7 @@ export declare class InraidController {
* @param offraidData post-raid data of raid * @param offraidData post-raid data of raid
*/ */
protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void;
protected sendLostInsuranceMessage(sessionID: string): void;
/** /**
* Is the player dead after a raid - dead is anything other than "survived" / "runner" * Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object * @param statusOnExit exit value from offraidData object

View File

@ -5,7 +5,9 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
@ -36,6 +38,7 @@ export declare class ProfileController {
getMiniProfile(sessionID: string): any; getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[]; getCompleteProfile(sessionID: string): IPmcData[];
createProfile(info: IProfileCreateRequestData, sessionID: string): void; createProfile(info: IProfileCreateRequestData, sessionID: string): void;
protected givePlayerStartingQuestRewards(profileDetails: IAkiProfile, sessionID: string, response: IItemEventRouterResponse): void;
/** /**
* Generate a player scav object * Generate a player scav object
* pmc profile MUST exist first before pscav can be generated * pmc profile MUST exist first before pscav can be generated

View File

@ -31,7 +31,7 @@ export declare class DialogueHelper {
/** /**
* Get the preview contents of the last message in a dialogue. * Get the preview contents of the last message in a dialogue.
* @param dialogue * @param dialogue
* @returns * @returns MessagePreview
*/ */
getMessagePreview(dialogue: Dialogue): MessagePreview; getMessagePreview(dialogue: Dialogue): MessagePreview;
/** /**

View File

@ -1,12 +1,36 @@
import { INotification } from "../models/eft/notifier/INotifier"; import { INotification } from "../models/eft/notifier/INotifier";
import { Dialogue, IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { MessageType } from "../models/enums/MessageType";
import { SaveServer } from "../servers/SaveServer";
import { WebSocketServer } from "../servers/WebSocketServer"; import { WebSocketServer } from "../servers/WebSocketServer";
import { NotificationService } from "../services/NotificationService"; import { NotificationService } from "../services/NotificationService";
import { HashUtil } from "../utils/HashUtil";
export declare class NotificationSendHelper { export declare class NotificationSendHelper {
protected webSocketServer: WebSocketServer; protected webSocketServer: WebSocketServer;
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected notificationService: NotificationService; protected notificationService: NotificationService;
constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); constructor(webSocketServer: WebSocketServer, hashUtil: HashUtil, saveServer: SaveServer, notificationService: NotificationService);
/** /**
* Send notification message to the appropriate channel * Send notification message to the appropriate channel
* @param sessionID
* @param notificationMessage
*/ */
sendMessage(sessionID: string, notificationMessage: INotification): void; sendMessage(sessionID: string, notificationMessage: INotification): void;
/**
* Send a message directly to the player
* @param sessionId Session id
* @param senderDetails Who is sendin the message to player
* @param messageText Text to send player
* @param messageType Underlying type of message being sent
*/
sendMessageToPlayer(sessionId: string, senderDetails: IUserDialogInfo, messageText: string, messageType: MessageType): void;
/**
* Helper function for sendMessageToPlayer(), get new dialog for storage in profile or find existing by sender id
* @param sessionId Session id
* @param messageType Type of message to generate
* @param senderDetails Who is sending the message
* @returns Dialogue
*/
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue;
} }

View File

@ -0,0 +1,3 @@
export interface IClearMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IDeleteFriendRequest {
friend_id: string;
}

View File

@ -0,0 +1,5 @@
export interface IFriendRequestSendResponse {
status: number;
requestid: string;
retryAfter: number;
}

View File

@ -1,7 +1,6 @@
import { IPmcData } from "../common/IPmcData";
import { Message } from "../profile/IAkiProfile"; import { Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData { export interface IGetMailDialogViewResponseData {
messages: Message[]; messages: Message[];
profiles: IPmcData[]; profiles: any[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -0,0 +1,3 @@
export interface IRemoveMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IAcceptGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,16 @@
export interface IAcceptGroupInviteResponse {
_id: string;
aid: number;
Info: PlayerInviteInfo;
isLeader: boolean;
isReady: boolean;
}
export interface PlayerInviteInfo {
Nickname: string;
Side: string;
Level: number;
MemberCategory: number;
GameVersion: string;
SavageLockTime: number;
SavageNickname: string;
}

View File

@ -0,0 +1,3 @@
export interface ICancelGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,3 @@
export interface IRemovePlayerFromGroupRequest {
aidToKick: string;
}

View File

@ -0,0 +1,4 @@
export interface ISendGroupInviteRequest {
to: string;
inLobby: boolean;
}

View File

@ -1,3 +1,4 @@
import { Message } from "../profile/IAkiProfile";
export interface INotifierChannel { export interface INotifierChannel {
server: string; server: string;
channel_id: string; channel_id: string;
@ -5,7 +6,6 @@ export interface INotifierChannel {
notifierServer: string; notifierServer: string;
ws: string; ws: string;
} }
import { Message } from "../profile/IAkiProfile";
export interface INotification { export interface INotification {
type: "RagfairOfferSold" | "new_message" | "ping"; type: "RagfairOfferSold" | "new_message" | "ping";
eventId: string; eventId: string;

View File

@ -1,3 +1,4 @@
import { MemberCategory } from "../../../models/enums/MemberCategory";
import { MessageType } from "../../enums/MessageType"; import { MessageType } from "../../enums/MessageType";
import { IPmcData } from "../common/IPmcData"; import { IPmcData } from "../common/IPmcData";
import { Item } from "../common/tables/IItem"; import { Item } from "../common/tables/IItem";
@ -36,19 +37,32 @@ export interface WeaponBuild {
items: Item[]; items: Item[];
} }
export interface Dialogue { export interface Dialogue {
_id: string;
messages: Message[];
pinned: boolean;
new: number;
attachmentsNew: number; attachmentsNew: number;
type: MessageType;
new: number;
_id: string;
Users?: IUserDialogInfo[];
pinned: boolean;
messages: Message[];
}
export interface IUserDialogInfo {
_id: string;
info: IUserDialogDetails;
}
export interface IUserDialogDetails {
Nickname: string;
Side: string;
Level: number;
MemberCategory: MemberCategory;
} }
export interface DialogueInfo { export interface DialogueInfo {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
_id: string;
type: MessageType; type: MessageType;
pinned: boolean; pinned: boolean;
Users?: any[];
message: MessagePreview; message: MessagePreview;
_id: string;
} }
export interface Message { export interface Message {
_id: string; _id: string;
@ -57,7 +71,7 @@ export interface Message {
dt: number; dt: number;
UtcDateTime?: number; UtcDateTime?: number;
Member?: IUpdatableChatMember; Member?: IUpdatableChatMember;
templateId: string; templateId?: string;
text?: string; text?: string;
hasRewards: boolean; hasRewards: boolean;
rewardCollected: boolean; rewardCollected: boolean;
@ -72,6 +86,7 @@ export interface MessagePreview {
dt: number; dt: number;
templateId: string; templateId: string;
text?: string; text?: string;
systemData?: ISystemData;
} }
export interface MessageItems { export interface MessageItems {
stash?: string; stash?: string;

View File

@ -13,6 +13,7 @@ export declare enum ConfigTypes {
LOCATION = "aki-location", LOCATION = "aki-location",
MATCH = "aki-match", MATCH = "aki-match",
PLAYERSCAV = "aki-playerscav", PLAYERSCAV = "aki-playerscav",
PMC_CHAT_RESPONSE = "aki-pmcchatresponse",
QUEST = "aki-quest", QUEST = "aki-quest",
RAGFAIR = "aki-ragfair", RAGFAIR = "aki-ragfair",
REPAIR = "aki-repair", REPAIR = "aki-repair",

View File

@ -1,19 +1,19 @@
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { DialogueInfo } from "../../eft/profile/IAkiProfile"; import { DialogueInfo } from "../../eft/profile/IAkiProfile";
export interface IDialogueCallbacks { export interface IDialogueCallbacks {
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>; getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
@ -28,7 +28,7 @@ export interface IDialogueCallbacks {
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
update(): boolean; update(): boolean;
} }

View File

@ -0,0 +1,13 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IPmcChatResponse extends IBaseConfig {
kind: "aki-pmcchatresponse";
victim: IResponseSettings;
killer: IResponseSettings;
}
export interface IResponseSettings {
responseChancePercent: number;
responseTypeWeights: Record<string, number>;
stripCapitalisationChancePercent: number;
allCapsChancePercent: number;
appendBroToMessageEndChancePercent: number;
}

View File

@ -18,4 +18,9 @@ export declare class LocalisationService {
* @returns Localised string * @returns Localised string
*/ */
getText(key: string, args?: any): string; getText(key: string, args?: any): string;
/**
* Get all locale keys
* @returns string array of keys
*/
getKeys(): string[];
} }

View File

@ -0,0 +1,73 @@
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Victim } from "../models/eft/common/tables/IBotBase";
import { IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { IPmcChatResponse } from "../models/spt/config/IPmChatResponse";
import { ConfigServer } from "../servers/ConfigServer";
import { RandomUtil } from "../utils/RandomUtil";
import { LocalisationService } from "./LocalisationService";
export declare class PmcChatResponseService {
protected randomUtil: RandomUtil;
protected notificationSendHelper: NotificationSendHelper;
protected localisationService: LocalisationService;
protected weightedRandomHelper: WeightedRandomHelper;
protected configServer: ConfigServer;
protected pmcResponsesConfig: IPmcChatResponse;
constructor(randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
/**
* Chooses a random victim from those provided and sends a message to the player, can be positive or negative
* @param sessionId Session id
* @param pmcVictims Array of bots killed by player
*/
sendVictimResponse(sessionId: string, pmcVictims: Victim[]): void;
/**
* Not fully implemented yet, needs method of acquiring killers details after raid
* @param sessionId Session id
* @param pmcData Players profile
*/
sendKillerResponse(sessionId: string, pmcData: IPmcData): void;
/**
* Choose a localised message to send the player (different if sender was killed or killed player)
* @param isVictim
* @returns
*/
protected chooseMessage(isVictim: boolean): string;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected stripCapitalistion(isVictim: boolean): boolean;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected allCaps(isVictim: boolean): boolean;
/**
* Should the word 'bro' be appended to the message being sent to player
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
appendBroToMessageEnd(isVictim: boolean): boolean;
/**
* Choose a type of response based on the weightings in pmc response config
* @param isVictim Was responder killed by player
* @returns Response type (positive/negative)
*/
protected chooseResponseType(isVictim?: boolean): string;
/**
* Get locale keys related to the type of response to send (victim/killer)
* @param keyType Positive/negative
* @param isVictim Was responder killed by player
* @returns
*/
protected getResponseLocaleKeys(keyType: string, isVictim?: boolean): string[];
/**
* Randomly draw a victim of the the array and return thier details
* @param pmcVictims Possible victims to choose from
* @returns IUserDialogInfo
*/
protected chooseRandomVictim(pmcVictims: Victim[]): IUserDialogInfo;
}

View File

@ -2,7 +2,10 @@ import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate"; import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer"; import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
@ -13,6 +16,7 @@ import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDial
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData"; import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData"; import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -37,9 +41,13 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns * @returns
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
/** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
@ -49,10 +57,14 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns IGetAllAttachmentsResponse * @returns IGetAllAttachmentsResponse
*/ */
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -3,6 +3,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
@ -11,6 +14,8 @@ import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidCo
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -26,9 +31,12 @@ export declare class MatchCallbacks {
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData; sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData; /** Handle client/match/group/invite/accept */
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData; acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
/** Handle client/match/group/invite/cancel */
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData; putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>; getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>; serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
@ -41,6 +49,7 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>; getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>; createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData; deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
} }

View File

@ -2,7 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController { export declare class DialogueController {
@ -35,6 +35,7 @@ export declare class DialogueController {
* @returns IGetMailDialogViewResponseData object * @returns IGetMailDialogViewResponseData object
*/ */
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/** /**
* Get a count of messages with attachments from a particular dialog * Get a count of messages with attachments from a particular dialog
* @param sessionID Session id * @param sessionID Session id

View File

@ -3,6 +3,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper"; import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper"; import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
@ -17,6 +18,8 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService"; import { InsuranceService } from "../services/InsuranceService";
import { LocaleService } from "../services/LocaleService";
import { PmcChatResponseService } from "../services/PmcChatResponseService";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
/** /**
@ -28,10 +31,13 @@ export declare class InraidController {
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected pmcChatResponseService: PmcChatResponseService;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator; protected playerScavGenerator: PlayerScavGenerator;
protected notificationSendHelper: NotificationSendHelper;
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -40,7 +46,7 @@ export declare class InraidController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig; protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig; protected inraidConfig: IInRaidConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, localeService: LocaleService, pmcChatResponseService: PmcChatResponseService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, notificationSendHelper: NotificationSendHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -89,6 +95,7 @@ export declare class InraidController {
* @param offraidData post-raid data of raid * @param offraidData post-raid data of raid
*/ */
protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void;
protected sendLostInsuranceMessage(sessionID: string): void;
/** /**
* Is the player dead after a raid - dead is anything other than "survived" / "runner" * Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object * @param statusOnExit exit value from offraidData object

View File

@ -5,7 +5,9 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
@ -36,6 +38,7 @@ export declare class ProfileController {
getMiniProfile(sessionID: string): any; getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[]; getCompleteProfile(sessionID: string): IPmcData[];
createProfile(info: IProfileCreateRequestData, sessionID: string): void; createProfile(info: IProfileCreateRequestData, sessionID: string): void;
protected givePlayerStartingQuestRewards(profileDetails: IAkiProfile, sessionID: string, response: IItemEventRouterResponse): void;
/** /**
* Generate a player scav object * Generate a player scav object
* pmc profile MUST exist first before pscav can be generated * pmc profile MUST exist first before pscav can be generated

View File

@ -31,7 +31,7 @@ export declare class DialogueHelper {
/** /**
* Get the preview contents of the last message in a dialogue. * Get the preview contents of the last message in a dialogue.
* @param dialogue * @param dialogue
* @returns * @returns MessagePreview
*/ */
getMessagePreview(dialogue: Dialogue): MessagePreview; getMessagePreview(dialogue: Dialogue): MessagePreview;
/** /**

View File

@ -1,12 +1,36 @@
import { INotification } from "../models/eft/notifier/INotifier"; import { INotification } from "../models/eft/notifier/INotifier";
import { Dialogue, IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { MessageType } from "../models/enums/MessageType";
import { SaveServer } from "../servers/SaveServer";
import { WebSocketServer } from "../servers/WebSocketServer"; import { WebSocketServer } from "../servers/WebSocketServer";
import { NotificationService } from "../services/NotificationService"; import { NotificationService } from "../services/NotificationService";
import { HashUtil } from "../utils/HashUtil";
export declare class NotificationSendHelper { export declare class NotificationSendHelper {
protected webSocketServer: WebSocketServer; protected webSocketServer: WebSocketServer;
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected notificationService: NotificationService; protected notificationService: NotificationService;
constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); constructor(webSocketServer: WebSocketServer, hashUtil: HashUtil, saveServer: SaveServer, notificationService: NotificationService);
/** /**
* Send notification message to the appropriate channel * Send notification message to the appropriate channel
* @param sessionID
* @param notificationMessage
*/ */
sendMessage(sessionID: string, notificationMessage: INotification): void; sendMessage(sessionID: string, notificationMessage: INotification): void;
/**
* Send a message directly to the player
* @param sessionId Session id
* @param senderDetails Who is sendin the message to player
* @param messageText Text to send player
* @param messageType Underlying type of message being sent
*/
sendMessageToPlayer(sessionId: string, senderDetails: IUserDialogInfo, messageText: string, messageType: MessageType): void;
/**
* Helper function for sendMessageToPlayer(), get new dialog for storage in profile or find existing by sender id
* @param sessionId Session id
* @param messageType Type of message to generate
* @param senderDetails Who is sending the message
* @returns Dialogue
*/
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue;
} }

View File

@ -0,0 +1,3 @@
export interface IClearMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IDeleteFriendRequest {
friend_id: string;
}

View File

@ -0,0 +1,5 @@
export interface IFriendRequestSendResponse {
status: number;
requestid: string;
retryAfter: number;
}

View File

@ -1,7 +1,6 @@
import { IPmcData } from "../common/IPmcData";
import { Message } from "../profile/IAkiProfile"; import { Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData { export interface IGetMailDialogViewResponseData {
messages: Message[]; messages: Message[];
profiles: IPmcData[]; profiles: any[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -0,0 +1,3 @@
export interface IRemoveMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IAcceptGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,16 @@
export interface IAcceptGroupInviteResponse {
_id: string;
aid: number;
Info: PlayerInviteInfo;
isLeader: boolean;
isReady: boolean;
}
export interface PlayerInviteInfo {
Nickname: string;
Side: string;
Level: number;
MemberCategory: number;
GameVersion: string;
SavageLockTime: number;
SavageNickname: string;
}

View File

@ -0,0 +1,3 @@
export interface ICancelGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,3 @@
export interface IRemovePlayerFromGroupRequest {
aidToKick: string;
}

View File

@ -0,0 +1,4 @@
export interface ISendGroupInviteRequest {
to: string;
inLobby: boolean;
}

View File

@ -1,3 +1,4 @@
import { Message } from "../profile/IAkiProfile";
export interface INotifierChannel { export interface INotifierChannel {
server: string; server: string;
channel_id: string; channel_id: string;
@ -5,7 +6,6 @@ export interface INotifierChannel {
notifierServer: string; notifierServer: string;
ws: string; ws: string;
} }
import { Message } from "../profile/IAkiProfile";
export interface INotification { export interface INotification {
type: "RagfairOfferSold" | "new_message" | "ping"; type: "RagfairOfferSold" | "new_message" | "ping";
eventId: string; eventId: string;

View File

@ -1,3 +1,4 @@
import { MemberCategory } from "../../../models/enums/MemberCategory";
import { MessageType } from "../../enums/MessageType"; import { MessageType } from "../../enums/MessageType";
import { IPmcData } from "../common/IPmcData"; import { IPmcData } from "../common/IPmcData";
import { Item } from "../common/tables/IItem"; import { Item } from "../common/tables/IItem";
@ -36,19 +37,32 @@ export interface WeaponBuild {
items: Item[]; items: Item[];
} }
export interface Dialogue { export interface Dialogue {
_id: string;
messages: Message[];
pinned: boolean;
new: number;
attachmentsNew: number; attachmentsNew: number;
type: MessageType;
new: number;
_id: string;
Users?: IUserDialogInfo[];
pinned: boolean;
messages: Message[];
}
export interface IUserDialogInfo {
_id: string;
info: IUserDialogDetails;
}
export interface IUserDialogDetails {
Nickname: string;
Side: string;
Level: number;
MemberCategory: MemberCategory;
} }
export interface DialogueInfo { export interface DialogueInfo {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
_id: string;
type: MessageType; type: MessageType;
pinned: boolean; pinned: boolean;
Users?: any[];
message: MessagePreview; message: MessagePreview;
_id: string;
} }
export interface Message { export interface Message {
_id: string; _id: string;
@ -57,7 +71,7 @@ export interface Message {
dt: number; dt: number;
UtcDateTime?: number; UtcDateTime?: number;
Member?: IUpdatableChatMember; Member?: IUpdatableChatMember;
templateId: string; templateId?: string;
text?: string; text?: string;
hasRewards: boolean; hasRewards: boolean;
rewardCollected: boolean; rewardCollected: boolean;
@ -72,6 +86,7 @@ export interface MessagePreview {
dt: number; dt: number;
templateId: string; templateId: string;
text?: string; text?: string;
systemData?: ISystemData;
} }
export interface MessageItems { export interface MessageItems {
stash?: string; stash?: string;

View File

@ -13,6 +13,7 @@ export declare enum ConfigTypes {
LOCATION = "aki-location", LOCATION = "aki-location",
MATCH = "aki-match", MATCH = "aki-match",
PLAYERSCAV = "aki-playerscav", PLAYERSCAV = "aki-playerscav",
PMC_CHAT_RESPONSE = "aki-pmcchatresponse",
QUEST = "aki-quest", QUEST = "aki-quest",
RAGFAIR = "aki-ragfair", RAGFAIR = "aki-ragfair",
REPAIR = "aki-repair", REPAIR = "aki-repair",

View File

@ -1,19 +1,19 @@
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { DialogueInfo } from "../../eft/profile/IAkiProfile"; import { DialogueInfo } from "../../eft/profile/IAkiProfile";
export interface IDialogueCallbacks { export interface IDialogueCallbacks {
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>; getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
@ -28,7 +28,7 @@ export interface IDialogueCallbacks {
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
update(): boolean; update(): boolean;
} }

View File

@ -0,0 +1,13 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IPmcChatResponse extends IBaseConfig {
kind: "aki-pmcchatresponse";
victim: IResponseSettings;
killer: IResponseSettings;
}
export interface IResponseSettings {
responseChancePercent: number;
responseTypeWeights: Record<string, number>;
stripCapitalisationChancePercent: number;
allCapsChancePercent: number;
appendBroToMessageEndChancePercent: number;
}

View File

@ -18,4 +18,9 @@ export declare class LocalisationService {
* @returns Localised string * @returns Localised string
*/ */
getText(key: string, args?: any): string; getText(key: string, args?: any): string;
/**
* Get all locale keys
* @returns string array of keys
*/
getKeys(): string[];
} }

View File

@ -0,0 +1,73 @@
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Victim } from "../models/eft/common/tables/IBotBase";
import { IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { IPmcChatResponse } from "../models/spt/config/IPmChatResponse";
import { ConfigServer } from "../servers/ConfigServer";
import { RandomUtil } from "../utils/RandomUtil";
import { LocalisationService } from "./LocalisationService";
export declare class PmcChatResponseService {
protected randomUtil: RandomUtil;
protected notificationSendHelper: NotificationSendHelper;
protected localisationService: LocalisationService;
protected weightedRandomHelper: WeightedRandomHelper;
protected configServer: ConfigServer;
protected pmcResponsesConfig: IPmcChatResponse;
constructor(randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
/**
* Chooses a random victim from those provided and sends a message to the player, can be positive or negative
* @param sessionId Session id
* @param pmcVictims Array of bots killed by player
*/
sendVictimResponse(sessionId: string, pmcVictims: Victim[]): void;
/**
* Not fully implemented yet, needs method of acquiring killers details after raid
* @param sessionId Session id
* @param pmcData Players profile
*/
sendKillerResponse(sessionId: string, pmcData: IPmcData): void;
/**
* Choose a localised message to send the player (different if sender was killed or killed player)
* @param isVictim
* @returns
*/
protected chooseMessage(isVictim: boolean): string;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected stripCapitalistion(isVictim: boolean): boolean;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected allCaps(isVictim: boolean): boolean;
/**
* Should the word 'bro' be appended to the message being sent to player
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
appendBroToMessageEnd(isVictim: boolean): boolean;
/**
* Choose a type of response based on the weightings in pmc response config
* @param isVictim Was responder killed by player
* @returns Response type (positive/negative)
*/
protected chooseResponseType(isVictim?: boolean): string;
/**
* Get locale keys related to the type of response to send (victim/killer)
* @param keyType Positive/negative
* @param isVictim Was responder killed by player
* @returns
*/
protected getResponseLocaleKeys(keyType: string, isVictim?: boolean): string[];
/**
* Randomly draw a victim of the the array and return thier details
* @param pmcVictims Possible victims to choose from
* @returns IUserDialogInfo
*/
protected chooseRandomVictim(pmcVictims: Victim[]): IUserDialogInfo;
}

View File

@ -2,7 +2,10 @@ import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate"; import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer"; import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
@ -13,6 +16,7 @@ import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDial
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData"; import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData"; import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -37,9 +41,13 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns * @returns
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
/** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
@ -49,10 +57,14 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns IGetAllAttachmentsResponse * @returns IGetAllAttachmentsResponse
*/ */
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -3,6 +3,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
@ -11,6 +14,8 @@ import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidCo
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -26,9 +31,12 @@ export declare class MatchCallbacks {
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData; sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData; /** Handle client/match/group/invite/accept */
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData; acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
/** Handle client/match/group/invite/cancel */
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData; putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>; getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>; serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
@ -41,6 +49,7 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>; getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>; createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData; deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
} }

View File

@ -2,7 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController { export declare class DialogueController {
@ -35,6 +35,7 @@ export declare class DialogueController {
* @returns IGetMailDialogViewResponseData object * @returns IGetMailDialogViewResponseData object
*/ */
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/** /**
* Get a count of messages with attachments from a particular dialog * Get a count of messages with attachments from a particular dialog
* @param sessionID Session id * @param sessionID Session id

View File

@ -3,6 +3,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper"; import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper"; import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
@ -17,6 +18,8 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService"; import { InsuranceService } from "../services/InsuranceService";
import { LocaleService } from "../services/LocaleService";
import { PmcChatResponseService } from "../services/PmcChatResponseService";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
/** /**
@ -28,10 +31,13 @@ export declare class InraidController {
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected pmcChatResponseService: PmcChatResponseService;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator; protected playerScavGenerator: PlayerScavGenerator;
protected notificationSendHelper: NotificationSendHelper;
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -40,7 +46,7 @@ export declare class InraidController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig; protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig; protected inraidConfig: IInRaidConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, localeService: LocaleService, pmcChatResponseService: PmcChatResponseService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, notificationSendHelper: NotificationSendHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -89,6 +95,7 @@ export declare class InraidController {
* @param offraidData post-raid data of raid * @param offraidData post-raid data of raid
*/ */
protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void;
protected sendLostInsuranceMessage(sessionID: string): void;
/** /**
* Is the player dead after a raid - dead is anything other than "survived" / "runner" * Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object * @param statusOnExit exit value from offraidData object

View File

@ -5,7 +5,9 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
@ -36,6 +38,7 @@ export declare class ProfileController {
getMiniProfile(sessionID: string): any; getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[]; getCompleteProfile(sessionID: string): IPmcData[];
createProfile(info: IProfileCreateRequestData, sessionID: string): void; createProfile(info: IProfileCreateRequestData, sessionID: string): void;
protected givePlayerStartingQuestRewards(profileDetails: IAkiProfile, sessionID: string, response: IItemEventRouterResponse): void;
/** /**
* Generate a player scav object * Generate a player scav object
* pmc profile MUST exist first before pscav can be generated * pmc profile MUST exist first before pscav can be generated

View File

@ -31,7 +31,7 @@ export declare class DialogueHelper {
/** /**
* Get the preview contents of the last message in a dialogue. * Get the preview contents of the last message in a dialogue.
* @param dialogue * @param dialogue
* @returns * @returns MessagePreview
*/ */
getMessagePreview(dialogue: Dialogue): MessagePreview; getMessagePreview(dialogue: Dialogue): MessagePreview;
/** /**

View File

@ -1,12 +1,36 @@
import { INotification } from "../models/eft/notifier/INotifier"; import { INotification } from "../models/eft/notifier/INotifier";
import { Dialogue, IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { MessageType } from "../models/enums/MessageType";
import { SaveServer } from "../servers/SaveServer";
import { WebSocketServer } from "../servers/WebSocketServer"; import { WebSocketServer } from "../servers/WebSocketServer";
import { NotificationService } from "../services/NotificationService"; import { NotificationService } from "../services/NotificationService";
import { HashUtil } from "../utils/HashUtil";
export declare class NotificationSendHelper { export declare class NotificationSendHelper {
protected webSocketServer: WebSocketServer; protected webSocketServer: WebSocketServer;
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected notificationService: NotificationService; protected notificationService: NotificationService;
constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); constructor(webSocketServer: WebSocketServer, hashUtil: HashUtil, saveServer: SaveServer, notificationService: NotificationService);
/** /**
* Send notification message to the appropriate channel * Send notification message to the appropriate channel
* @param sessionID
* @param notificationMessage
*/ */
sendMessage(sessionID: string, notificationMessage: INotification): void; sendMessage(sessionID: string, notificationMessage: INotification): void;
/**
* Send a message directly to the player
* @param sessionId Session id
* @param senderDetails Who is sendin the message to player
* @param messageText Text to send player
* @param messageType Underlying type of message being sent
*/
sendMessageToPlayer(sessionId: string, senderDetails: IUserDialogInfo, messageText: string, messageType: MessageType): void;
/**
* Helper function for sendMessageToPlayer(), get new dialog for storage in profile or find existing by sender id
* @param sessionId Session id
* @param messageType Type of message to generate
* @param senderDetails Who is sending the message
* @returns Dialogue
*/
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue;
} }

View File

@ -0,0 +1,3 @@
export interface IClearMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IDeleteFriendRequest {
friend_id: string;
}

View File

@ -0,0 +1,5 @@
export interface IFriendRequestSendResponse {
status: number;
requestid: string;
retryAfter: number;
}

View File

@ -1,7 +1,6 @@
import { IPmcData } from "../common/IPmcData";
import { Message } from "../profile/IAkiProfile"; import { Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData { export interface IGetMailDialogViewResponseData {
messages: Message[]; messages: Message[];
profiles: IPmcData[]; profiles: any[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -0,0 +1,3 @@
export interface IRemoveMailMessageRequest {
dialogId: string;
}

View File

@ -0,0 +1,3 @@
export interface IAcceptGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,16 @@
export interface IAcceptGroupInviteResponse {
_id: string;
aid: number;
Info: PlayerInviteInfo;
isLeader: boolean;
isReady: boolean;
}
export interface PlayerInviteInfo {
Nickname: string;
Side: string;
Level: number;
MemberCategory: number;
GameVersion: string;
SavageLockTime: number;
SavageNickname: string;
}

View File

@ -0,0 +1,3 @@
export interface ICancelGroupInviteRequest {
requestId: string;
}

View File

@ -0,0 +1,3 @@
export interface IRemovePlayerFromGroupRequest {
aidToKick: string;
}

View File

@ -0,0 +1,4 @@
export interface ISendGroupInviteRequest {
to: string;
inLobby: boolean;
}

View File

@ -1,3 +1,4 @@
import { Message } from "../profile/IAkiProfile";
export interface INotifierChannel { export interface INotifierChannel {
server: string; server: string;
channel_id: string; channel_id: string;
@ -5,7 +6,6 @@ export interface INotifierChannel {
notifierServer: string; notifierServer: string;
ws: string; ws: string;
} }
import { Message } from "../profile/IAkiProfile";
export interface INotification { export interface INotification {
type: "RagfairOfferSold" | "new_message" | "ping"; type: "RagfairOfferSold" | "new_message" | "ping";
eventId: string; eventId: string;

View File

@ -1,3 +1,4 @@
import { MemberCategory } from "../../../models/enums/MemberCategory";
import { MessageType } from "../../enums/MessageType"; import { MessageType } from "../../enums/MessageType";
import { IPmcData } from "../common/IPmcData"; import { IPmcData } from "../common/IPmcData";
import { Item } from "../common/tables/IItem"; import { Item } from "../common/tables/IItem";
@ -36,19 +37,32 @@ export interface WeaponBuild {
items: Item[]; items: Item[];
} }
export interface Dialogue { export interface Dialogue {
_id: string;
messages: Message[];
pinned: boolean;
new: number;
attachmentsNew: number; attachmentsNew: number;
type: MessageType;
new: number;
_id: string;
Users?: IUserDialogInfo[];
pinned: boolean;
messages: Message[];
}
export interface IUserDialogInfo {
_id: string;
info: IUserDialogDetails;
}
export interface IUserDialogDetails {
Nickname: string;
Side: string;
Level: number;
MemberCategory: MemberCategory;
} }
export interface DialogueInfo { export interface DialogueInfo {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
_id: string;
type: MessageType; type: MessageType;
pinned: boolean; pinned: boolean;
Users?: any[];
message: MessagePreview; message: MessagePreview;
_id: string;
} }
export interface Message { export interface Message {
_id: string; _id: string;
@ -57,7 +71,7 @@ export interface Message {
dt: number; dt: number;
UtcDateTime?: number; UtcDateTime?: number;
Member?: IUpdatableChatMember; Member?: IUpdatableChatMember;
templateId: string; templateId?: string;
text?: string; text?: string;
hasRewards: boolean; hasRewards: boolean;
rewardCollected: boolean; rewardCollected: boolean;
@ -72,6 +86,7 @@ export interface MessagePreview {
dt: number; dt: number;
templateId: string; templateId: string;
text?: string; text?: string;
systemData?: ISystemData;
} }
export interface MessageItems { export interface MessageItems {
stash?: string; stash?: string;

View File

@ -13,6 +13,7 @@ export declare enum ConfigTypes {
LOCATION = "aki-location", LOCATION = "aki-location",
MATCH = "aki-match", MATCH = "aki-match",
PLAYERSCAV = "aki-playerscav", PLAYERSCAV = "aki-playerscav",
PMC_CHAT_RESPONSE = "aki-pmcchatresponse",
QUEST = "aki-quest", QUEST = "aki-quest",
RAGFAIR = "aki-ragfair", RAGFAIR = "aki-ragfair",
REPAIR = "aki-repair", REPAIR = "aki-repair",

View File

@ -1,19 +1,19 @@
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { DialogueInfo } from "../../eft/profile/IAkiProfile"; import { DialogueInfo } from "../../eft/profile/IAkiProfile";
export interface IDialogueCallbacks { export interface IDialogueCallbacks {
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>; getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
@ -28,7 +28,7 @@ export interface IDialogueCallbacks {
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
update(): boolean; update(): boolean;
} }

View File

@ -0,0 +1,13 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IPmcChatResponse extends IBaseConfig {
kind: "aki-pmcchatresponse";
victim: IResponseSettings;
killer: IResponseSettings;
}
export interface IResponseSettings {
responseChancePercent: number;
responseTypeWeights: Record<string, number>;
stripCapitalisationChancePercent: number;
allCapsChancePercent: number;
appendBroToMessageEndChancePercent: number;
}

View File

@ -18,4 +18,9 @@ export declare class LocalisationService {
* @returns Localised string * @returns Localised string
*/ */
getText(key: string, args?: any): string; getText(key: string, args?: any): string;
/**
* Get all locale keys
* @returns string array of keys
*/
getKeys(): string[];
} }

View File

@ -0,0 +1,73 @@
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Victim } from "../models/eft/common/tables/IBotBase";
import { IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
import { IPmcChatResponse } from "../models/spt/config/IPmChatResponse";
import { ConfigServer } from "../servers/ConfigServer";
import { RandomUtil } from "../utils/RandomUtil";
import { LocalisationService } from "./LocalisationService";
export declare class PmcChatResponseService {
protected randomUtil: RandomUtil;
protected notificationSendHelper: NotificationSendHelper;
protected localisationService: LocalisationService;
protected weightedRandomHelper: WeightedRandomHelper;
protected configServer: ConfigServer;
protected pmcResponsesConfig: IPmcChatResponse;
constructor(randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
/**
* Chooses a random victim from those provided and sends a message to the player, can be positive or negative
* @param sessionId Session id
* @param pmcVictims Array of bots killed by player
*/
sendVictimResponse(sessionId: string, pmcVictims: Victim[]): void;
/**
* Not fully implemented yet, needs method of acquiring killers details after raid
* @param sessionId Session id
* @param pmcData Players profile
*/
sendKillerResponse(sessionId: string, pmcData: IPmcData): void;
/**
* Choose a localised message to send the player (different if sender was killed or killed player)
* @param isVictim
* @returns
*/
protected chooseMessage(isVictim: boolean): string;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected stripCapitalistion(isVictim: boolean): boolean;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
protected allCaps(isVictim: boolean): boolean;
/**
* Should the word 'bro' be appended to the message being sent to player
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
appendBroToMessageEnd(isVictim: boolean): boolean;
/**
* Choose a type of response based on the weightings in pmc response config
* @param isVictim Was responder killed by player
* @returns Response type (positive/negative)
*/
protected chooseResponseType(isVictim?: boolean): string;
/**
* Get locale keys related to the type of response to send (victim/killer)
* @param keyType Positive/negative
* @param isVictim Was responder killed by player
* @returns
*/
protected getResponseLocaleKeys(keyType: string, isVictim?: boolean): string[];
/**
* Randomly draw a victim of the the array and return thier details
* @param pmcVictims Possible victims to choose from
* @returns IUserDialogInfo
*/
protected chooseRandomVictim(pmcVictims: Victim[]): IUserDialogInfo;
}

View File

@ -2,7 +2,10 @@ import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate"; import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer"; import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData"; import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData"; import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData"; import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
@ -13,6 +16,7 @@ import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDial
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData"; import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData"; import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -37,9 +41,13 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns * @returns
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
/** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
@ -49,10 +57,14 @@ export declare class DialogueCallbacks implements OnUpdate {
* @returns IGetAllAttachmentsResponse * @returns IGetAllAttachmentsResponse
*/ */
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>; getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>; listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>; sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -3,6 +3,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
@ -11,6 +14,8 @@ import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidCo
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -26,9 +31,12 @@ export declare class MatchCallbacks {
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData; sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData; /** Handle client/match/group/invite/accept */
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData; acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
/** Handle client/match/group/invite/cancel */
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData; putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>; getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>; serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
@ -41,6 +49,7 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>; getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>; createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData; deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
} }

View File

@ -2,7 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController { export declare class DialogueController {
@ -35,6 +35,7 @@ export declare class DialogueController {
* @returns IGetMailDialogViewResponseData object * @returns IGetMailDialogViewResponseData object
*/ */
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/** /**
* Get a count of messages with attachments from a particular dialog * Get a count of messages with attachments from a particular dialog
* @param sessionID Session id * @param sessionID Session id

View File

@ -3,6 +3,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper"; import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper"; import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper"; import { TraderHelper } from "../helpers/TraderHelper";
@ -17,6 +18,8 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer"; import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService"; import { InsuranceService } from "../services/InsuranceService";
import { LocaleService } from "../services/LocaleService";
import { PmcChatResponseService } from "../services/PmcChatResponseService";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
/** /**
@ -28,10 +31,13 @@ export declare class InraidController {
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected pmcChatResponseService: PmcChatResponseService;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator; protected playerScavGenerator: PlayerScavGenerator;
protected notificationSendHelper: NotificationSendHelper;
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService; protected insuranceService: InsuranceService;
@ -40,7 +46,7 @@ export declare class InraidController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig; protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig; protected inraidConfig: IInRaidConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, localeService: LocaleService, pmcChatResponseService: PmcChatResponseService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, notificationSendHelper: NotificationSendHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -89,6 +95,7 @@ export declare class InraidController {
* @param offraidData post-raid data of raid * @param offraidData post-raid data of raid
*/ */
protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void;
protected sendLostInsuranceMessage(sessionID: string): void;
/** /**
* Is the player dead after a raid - dead is anything other than "survived" / "runner" * Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object * @param statusOnExit exit value from offraidData object

Some files were not shown because too many files have changed in this diff Show More