HJ_Server/src/globalListener.ts

261 lines
11 KiB
TypeScript

import { ApiCall, ApiReturn } from 'tsrpc';
import { reissuePrize } from './api_s2c/event/kaifukuanghuan/ApiOpen';
import { qiRiDengLuAddDay } from './api_s2c/event/qiridenglu/ApiOpen';
import { addDay } from './api_s2c/event/yuedujijin/ApiOpen';
import { payZhanLing } from './api_s2c/event/zhanling/ApiOpen';
import { md_redPoint_check } from './api_s2c/gongyu/mingdao/ApiOpen';
import { ActionLog } from './public/actionLog/actionLog';
import { EmailFun } from './public/email';
import { GHManage } from './public/gonghui/manage';
import { PayFun } from './public/pay';
import { SignFun } from './public/sign';
import { TaskAllEmitFun, TaskFun } from './public/task';
import { XstaskFun } from './public/xstask';
import { ZhanLingTasks } from './public/zhanling';
import { player } from './shared/protocols/user/type';
import { PublicShared } from './shared/public/public';
import { setGud } from './public/gud';
import {checkResetBuyLog} from "./api_s2c/event/zhoumolibao/ApiOpen";
import {Christmasfun} from "./api_s2c/event/christmas/fun";
import {PushGiftFun} from "./public/pushgift";
import {LeiChongLiBaoBuyGift} from "./api_s2c/event/leichonglibao/ApiReceive";
export type gEventType = {
/**玩家断开连接 */
PLAYER_DISCONNECT: (uid: string) => void;
/**玩家修改名字 */
PLAYER_CHANGE_NAME: (gud: player, name: string) => void;
/**玩家充值 */
PLAYER_PAY: (gud: player, payId: string, type: 'user' | 'system', call) => void;
/**玩家发生api调用 */
API_CALL: (node: { call: ApiCall, return: ApiReturn<any>; }) => void;
/**玩家每日首次登陆 */
FIRST_LOGIN_EVERY_DAY: (gud: player, lastLoginTime: number, curLoginTime: number) => void;
/**玩家消耗道具 */
USE_ITEM: (gud: player, items: atn[]) => void;
/**进行n次签到*/
Class_task_100: (eventname, call, val, chkVal) => void;
/**升级 n 次干部 */
Class_task_101: (eventname, call, val, chkVal) => void;
/**杂货店购买 n 次道具 */
Class_task_102: (eventname, call, val, chkVal) => void;
/**日常任务完成 n 次 */
Class_task_999: (eventname, call, val, chkVal) => void;
/**玩家等级升到 n 次 */
Class_task_104: (eventname, call, val, chkVal) => void;
/**成就任务完成 n 次 */
Class_task_105: (eventname, call, val, chkVal) => void;
/**玩家通关主线关卡 n 次 */
Class_task_1: (eventname, call, val, chkVal) => void;
/**干部等级达到 n 级 */
Class_task_106: (eventname, call, val, chkVal) => void;
/**同时出站 n 个干部 */
Class_task_107: (eventname, call, val, chkVal) => void;
/**n 个干部进阶配置k阶 */
Class_task_108: (eventname, call, val, chkVal) => void;
/**综合聊天频道聊天 n 次 */
Class_task_109: (eventname, call, val, chkVal) => void;
/**升级 n 次训练技能 */
Class_task_110: (eventname, call, val, chkVal) => void;
/**装备强化 n 次 */
Class_task_111: (eventname, call, val, chkVal) => void;
/**装备强化到 n 级 */
Class_task_112: (eventname, call, val, chkVal) => void;
/**有 n 件强化 配置 等级装备 */
Class_task_113: (eventname, call, val, chkVal) => void;
/**获得 n 个 配置颜色 干部 */
Class_task_114: (eventname, call, val, chkVal) => void;
/**获得 n 个 配置颜色 装备 */
Class_task_115: (eventname, call, val, chkVal) => void;
/**累计充值 n 钻石 */
Class_task_116: (eventname, call, val, chkVal) => void;
/**使用 n 次点金 */
Class_task_117: (eventname, call, val, chkVal) => void;
/**酒吧招募 n 次 */
Class_task_118: (eventname, call, val, chkVal) => void;
/**商店购买 n 次道具 */
Class_task_119: (eventname, call, val, chkVal) => void;
/**探险进行 n 次战斗 不管输赢 */
Class_task_120: (eventname, call, val, chkVal) => void;
/**势力捐献进行 n 次捐献 */
Class_task_121: (eventname, call, val, chkVal) => void;
/**进行 n 次快速探险 */
Class_task_122: (eventname, call, val, chkVal) => void;
/**竞技场中挑战 n 次对手 */
Class_task_123: (eventname, call, val, chkVal) => void;
/**斩草除根进行 n 次通关或扫荡 */
Class_task_124: (eventname, call, val, chkVal) => void;
/**挑战 n 次物资筹集 */
Class_task_125: (eventname, call, val, chkVal) => void;
/**地盘争夺抢夺或战领 n 次 */
Class_task_126: (eventname, call, val, chkVal) => void;
/**挑战 n 次清缴真主党 */
Class_task_127: (eventname, call, val, chkVal) => void;
/**竞技场首次达到x名 */
Class_task_129: (eventname, call, val, chkVal) => void;
/**在仓库使用 x 次交易10次(交易一次不算) */
Class_task_130: (eventname, call, val, chkVal) => void;
/**在仓库使用 x 次指定高级仓库 */
Class_task_131: (eventname, call, val, chkVal) => void;
/**进行 x 次公路狂飙 */
Class_task_132: (eventname, call, val, chkVal) => void;
/**进行 x 次教会招募 */
Class_task_133: (eventname, call, val, chkVal) => void;
/**消耗 x 个 配置道具 */
Class_task_134: (eventname, call, val, chkVal, any) => void;
/**累计登录天数 */
Class_task_135: (eventname, call, val, chkVal) => void;
/**修复 x 次名刀 */
Class_task_136: (eventname, call, val, chkVal) => void;
/**获得 x 个 配置颜色 配件 */
Class_task_137: (eventname, call, val, chkVal, any) => void;
/**配件升级 xx 次 */
Class_task_138: (eventname, call, val, chkVal) => void;
/**配件升级到 xx 级 */
Class_task_139: (eventname, call, val, chkVal) => void;
/**配置 配件升级到 xx 级(颜色限制) */
Class_task_140: (eventname, call, val, chkVal) => void;
// 在仓库交易x次
Class_task_141: (eventname, call, val, chkVal) => void;
/**势力 配置xx 捐献进行 n 次捐献 */
Class_task_142: (eventname, call, val, chkVal) => void;
/**穿戴X件以上装备 */
Class_task_143: (eventname, call, val, chkVal) => void;
/**进行x次好友申请或送礼 */
Class_task_144: (eventname, call, val, chkVal) => void;
/**领取x次挂机收益 */
Class_task_145: (eventname, call, val, chkVal) => void;
/**合成x次英雄 */
Class_task_146: (eventname, call, val, chkVal) => void;
/**合成x次装备 */
Class_task_147: (eventname, call, val, chkVal) => void;
/**合成x次英雄 */
Class_task_148: (eventname, call, val, chkVal) => void;
/**合成x次装备 */
Class_task_149: (eventname, call, val, chkVal) => void;
/**合成x次英雄 */
Class_task_150: (eventname, call, val, chkVal) => void;
/**合成x次装备 */
Class_task_151: (eventname, call, val, chkVal) => void;
/**合成x次装备 */
Class_task_152: (eventname, call, val, chkVal) => void;
/**合成x次装备 */
Class_task_153: (eventname, call, val, chkVal) => void;
/**参与圣诞活动小游戏 */
Class_task_154: (eventname, call, val, chkVal) => void;
/**每日任务宝箱领取 */
Class_task_155: (eventname, call, val, chkVal) => void;
/**每日钻石消耗 */
Class_task_156: (eventname, call, val, chkVal) => void;
/**每日获取vip经验 */
Class_task_157: (eventname, call, val, chkVal) => void;
/**今日参与{1}次抓娃娃小游戏 */
Class_task_158: (eventname, call, val, chkVal) => void;
};
export function addListener() {
// 注册任务相关监听
TaskFun.addevent();
G.on('PLAYER_DISCONNECT', uid => {
//离线时删除该玩家的悬赏任务缓存
if (XstaskFun.uidTask[uid]) {
XstaskFun.uidTask[uid] = null;
delete XstaskFun.uidTask[uid];
}
setGud(uid,{ logoutTime: G.time });
G.mongodb.collection('user').updateOne({ uid: uid }, { $set: { logoutTime: G.time } });
});
G.on('PLAYER_CHANGE_NAME', async (player, name) => {
//说明是公会会长 修改数据库里公会的会长名字
if (player.ghId && player.ghLevel == 1) {
(await GHManage.getGH(player.ghId)).updateCreateName(name);
}
});
G.on('PLAYER_PAY', async (player, payId, payArgs,call) => {
let conf: any = await PayFun.getConf(payId, payArgs);
ActionLog.addDayLog(player.uid, { key: 'pay', val: conf.payExp[0].n });
ActionLog.addRetainLog(player.uid, { key: 'pay', val: conf.payExp[0].n });
if (payId == G.gc.zhanling.payId) payZhanLing(player);
let payEmailConf = G.gc.payEmail[payId] as _gcType['payEmail']['caifutequan'];
if (payEmailConf?.length > 0) {
let sendEmailConfs = payEmailConf;
sendEmailConfs.forEach(conf => {
EmailFun.addEmail({
uid: player.uid,
type: 'system',
title: conf.title,
content: conf.content,
prize: conf.prize,
});
});
}
G.mongodb.collection('dayPay').updateOne(
{ uid: player.uid, time: PublicShared.getToDayZeroTime(G.time) },
{ $inc: { payNum: conf.money } },
{ upsert: true }
);
await PushGiftFun.buy(player.uid, payId) // 推送礼包
await LeiChongLiBaoBuyGift(call, payId) // 累充礼包
});
G.on("FIRST_LOGIN_EVERY_DAY", (gud, lastTime, curTime) => {
// 签到增加天数
SignFun.updateLogin(gud.uid);
ActionLog.initDayLog(gud.uid);
ActionLog.addRetainLog(gud.uid, { key: 'login_day', val: 1 });
ZhanLingTasks.clearLog(gud.uid, 'day');
PayFun.checkGiftDayEmail(gud, lastTime, curTime);
reissuePrize(gud, lastTime, curTime);
addDay(gud);
// 任务累计登录天数
let call = PayFun.getCall(gud);
G.emit("Class_task_135", 'Class_task_135', call, 1, 0);
// 七日登录活动计数
qiRiDengLuAddDay(call);
// 周末礼包检测刷新
checkResetBuyLog(call);
});
G.on('API_CALL', node => {
if (node.return.isSucc && node.call.uid && node.call.service.name != 'user/Ping') {
ActionLog.addDayLog(node.call.uid, { key: node.call.service.name, val: 1 });
if (node.call.service.name == 'shop/Buy') {
ActionLog.addDayLog(node.call.uid, { key: node.call.service.name + `/${node.call.req.shopId}`, val: 1 });
}
}
//战令任务
node.return.isSucc && ZhanLingTasks.addListener(node);
// 所有任务监听
TaskAllEmitFun.allEmit(node);
});
G.on('USE_ITEM', (gud, items) => {
ActionLog.addDayLog(gud.uid, ...items.map(item => {
if (item.t == 'rmbmoney') {
ActionLog.addRetainLog(gud.uid, { key: `use_${item.a}_${item.t}`, val: item.n });
ZhanLingTasks.addLog(gud.uid, 'day', `use_${item.a}_${item.t}`, item.n);
ZhanLingTasks.addLog(gud.uid, 'round', `use_${item.a}_${item.t}`, item.n);
md_redPoint_check(G.server.uid_connections[gud.uid], 'use_attr_rmbmoney');
}
return {
key: `use_${item.a}_${item.t}`,
val: item.n
};
}));
let call = PayFun.getCall(gud);
G.emit("Class_task_134", 'Class_task_134', call, 1, 0, items);
});
}