源战役
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

205 satır
10 KiB

%%%------------------------------------------------
%%% File : mail.erl
%%% Author : zhenghehe
%%% Created : 2012-02-01
%%% Description: 信件record定义
%%%------------------------------------------------
%% ------------------ 进程字典 ------------------
-define(P_MAIL_KEY(RoleId), lists:concat(["P_Mail_Key", RoleId])). %% 邮件 value:[#mail{}|...]
%% ------------------ 邮件类型 ------------------
-define(MAIL_TYPE_SYS, 1). % 系统邮件
-define(MAIL_TYPE_PRIV, 2). % 私人邮件
-define(MAIL_TYPE_GUILD, 3). % 公会邮件
-define(MAIL_TYPE_GUILD_MEMBER, 4). % 公会个人邮件
-define(MAIL_TYPE_AUCTION, 5). % 拍卖邮件
%% ------------------ 邮件状态 ------------------
-define(MAIL_STATE_READ, 1). % 已读
-define(MAIL_STATE_NO_READ, 2). % 未读
-define(MAIL_STATE_HAS_RECEIVE, 3). % 已领取附件
%% ------------------ 锁定状态 ------------------
-define(MAIL_LOCKED_YES, 1). % 邮件锁定
-define(MAIL_LOCKED_NO, 2). % 邮件未锁定
%% ------------------ 附件类型 ------------------
-define(ATTACHMENT_TYPE_NO, 0). % 没有附件
-define(ATTACHMENT_TYPE_OWN_SQ, 1). % 拥有特殊物品的附件
-define(ATTACHMENT_TYPE_CM, 2). % 只有普通附件
%% ------------------ 发送邮件日志的类型 ------------------
-define(SEND_LOG_TYPE_NO, 0). % 不加入日志
-define(SEND_LOG_TYPE_YES, 1). % 加入日志
%% ------------------ 是否立即发送邮件 ------------------
-define(SCHEDULE_SAVE_MAIL, 0). % 否
-define(DIRECT_SAVE_MAIL, 1). % 是
%% ------------------ 是否是重要邮件 ------------------
-define(NOT_IMPORTANT_MAIL, 0). % 否
-define(IMPORTANT_MAIL, 1). % 是
%% ------------------ 文本 ------------------
% -define(MAIL_TXT_SYS_NAME, 1). % 邮件系统名字
%% ------------------ 其他定义 ------------------
-define(DEFAULT_LOGIN_DAY, 30). %% 默认最近30天登录
-define(DEFAULT_MAX_LV, 999). %% 默认最大等级
%% 邮件
-record(mail, {
id = 0 % 邮件id
, type = 1 % 邮件类型
, state = 2 % 邮件状态
, locked = 2 % 锁定状态
, sid = 0 % 发送者id
, sname = undefined % 发件人名字(第一次读信加载)
, rid = 0 % 接受者id
, title = <<>> % 标题
, content = <<>> % 信件内容(第一次读信加载) 修改老版undefined|<<>>
, cm_attachment = [] % 普通附件列表,[{Type,GoodsTypeId,Num},...]
% , sq_attachment :: undefined | [] % 特殊附件列表(保留字段,后续处理)
, timestamp = 0 % 时间戳(微秒)
, time = 0 % 秒
, effect_st = 0 % 有效开始时间
, effect_et = 0 % 有效结束时间
, module_id = 0 % 模块id
, sub_module_id = 0 % 子模块id
, important = 0 % 是否重要邮件 0否|1是
}).
%% ------------------ 邮件 ------------------
%% 邮件属性
-define(sql_mail_insert, <<"
INSERT INTO
mail(id, type, state, locked, sid, rid, title, cm_attachment, module_id, sub_module_id, timestamp, effect_st, content, important)
VALUES(~p, ~p, ~p, ~p, ~p, ~p, '~ts', '~ts', ~p, ~p, ~p, ~p, '~ts', ~p)">>).
-define(sql_mail_select, <<"SELECT id, type, state, locked, sid, rid, title, cm_attachment, timestamp, effect_st, module_id, sub_module_id, important FROM mail WHERE rid = ~p">>).
-define(sql_mail_delete, <<"DELETE FROM mail WHERE id = ~p">>).
-define(sql_mail_delete_more, <<"DELETE FROM mail WHERE id in (~ts)">>).
-define(sql_mail_update_cm_attachment, <<"UPDATE mail SET cm_attachment = '~ts' WHERE id = ~p">>).
-define(sql_mail_update_state_read, <<"UPDATE mail SET state = 1 WHERE id = ~p">>).
-define(sql_mail_update_cm_attachment_and_effect_st, <<"UPDATE mail SET cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
-define(sql_mail_update_state_and_effect_st, <<"UPDATE mail SET state = ~p, effect_st = ~p WHERE id = ~p">>).
-define(sql_mail_update_receive_state, <<"UPDATE mail SET state = ~p, cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
%% 邮件内容
%%-define(sql_mail_content_insert, <<"INSERT INTO mail_content(id, rid, content) VALUES(~p, ~p, '~ts')">>).
%%-define(sql_mail_content_select, <<"SELECT content FROM mail_content WHERE id = ~p">>).
%%-define(sql_mail_content_delete, <<"DELETE FROM mail_content WHERE id = ~p">>).
%%-define(sql_mail_content_delete_more, <<"DELETE FROM mail_content WHERE id in (~ts)">>).
%% 改造
-define(sql_mail_select_content, <<"SELECT content FROM mail WHERE id = ~p">>).
% %% 特殊附件列表(保留,后续看需求处理)
% -define(sql_mail_sq_attachment_replace, <<"REPLACE INTO mail_sq_attachment(id, rid, goods_id) WHERE id = ~p">>).
% -define(sql_mail_sq_attachment_select, <<"SELECT goods_id FROM mail_sq_attachment WHERE id = ~p">>).
% -define(sql_mail_sq_attachment_delete, <<"DELETE FROM mail_sq_attachment WHERE id = ~p">>).
%% ------------------ PHP后台 ------------------
%% 根据在线、来源、等级来获取玩家id
-define(sql_role_id_by_source_and_onlineflag_and_lv, <<"
SELECT
player_low.id FROM player_low, player_login
WHERE player_login.source = '~ts' AND player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
%% 根据在线、等级来获取玩家id
-define(sql_role_id_by_onlineflag_and_lv, <<"
SELECT
player_low.id FROM player_low, player_login
WHERE player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
%% 根据等级和平台来获取玩家id
-define(sql_role_id_by_source_and_lv, <<"
SELECT
player_low.id FROM player_low, player_login, role_vip
WHERE player_login.source = '~ts' AND (player_login.last_logout_time >= ~p OR player_login.last_login_time >= ~p) AND player_low.lv>= ~p AND role_vip.real_lv >= ~p AND role_vip.real_lv <= ~p
AND role_vip.role_id = player_login.id AND player_login.id = player_low.id">>).
%% 细分判断,以减少连表查询操作
%% ================ 有渠道 =================
%% 根据等级&平台&vip等级&最近登录时间来获取玩家id
-define(SQL_ROLE_ID_BY_ALL_CON,
<<"SELECT log_res.logid FROM
(SELECT low.id AS logid, COALESCE(vip.real_lv, 0) AS viplv FROM player_low low LEFT JOIN player_login log ON low.id = log.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id
WHERE log.last_login_time >= ~p AND low.lv>= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
%% 无VIP无天数限制
-define(SQL_ROLE_ID_BY_LV,
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
%% 有VIP无天数限制
-define(SQL_ROLE_ID_BY_VIP_AND_LV,
<<"SELECT log_res.logid FROM
(SELECT low.id AS logid, COALESCE(vip.real_lv,0) AS viplv FROM player_login log LEFT JOIN player_low low ON log.id = low.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id
WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
%% 无VIP有天数限制
-define(SQL_ROLE_ID_BY_LOGIN_DAY,
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
%% ================ 无渠道 ==================
%% 根据等级&vip&最近登录时间来获取玩家id
-define(sql_role_id_by_lv,
<<"SELECT vip_res.vipid FROM (SELECT low.id as vipid, coalesce(vip.real_lv, 0) as viplv
FROM player_low low LEFT JOIN player_login log ON low.id = log.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id WHERE low.lv >= ~p AND low.lv <= ~p AND log.last_login_time >= ~p) vip_res
WHERE vip_res.viplv >= ~p AND vip_res.viplv <= ~p">>).
%% 无VIP无天数限制
-define(SQL_ROLE_ID_BY_LV_WITHOUT_SOURCE,
<<"SELECT id FROM player_low WHERE lv >= ~p AND lv <= ~p">>).
%% 无VIP有天数限制
-define(SQL_ROLE_ID_BY_DAY_WITHOUT_SOURCE,
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p">>).
%% 有VIP无天数限制
-define(SQL_ROLE_ID_BY_VIP_WITHOUT_SOURCE,
<<"SELECT log_res.vipid FROM
(SELECT low.id as vipid, coalesce(vip.real_lv, 0) as viplv FROM player_low low LEFT outer JOIN role_vip vip ON low.id = vip.role_id WHERE low.lv >= ~p AND low.lv <= ~p) log_res
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
%% 根据等级,最近下线时间来获取玩家id
-define(sql_role_id_by_lv_and_lastlogouttime, <<"
SELECT
low.id FROM player_low low, player_login login
WHERE
login.id = low.id AND low.lv >= ~p
AND (login.online_flag = 1 OR (login.online_flag <> 1 AND login.last_logout_time >= ~p))">>).
%% ------------------ 反馈 ------------------
-define(sql_feedback_insert, <<"
INSERT INTO feedback(
player_id, player_name, content, timestamp, ip, server)
VALUES(~p, '~ts', '~ts', ~p, '~ts', '~ts')">>).
%% ------------------ 限时邮件 -----------------
-define(SQL_LIMIT_MAIL_SELECT,
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail">>).
-define(SQL_ONE_LIMIT_MAIL_SELECT,
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id = ~p">>).
-define(SQL_LIMIT_MAIL_DELETE,
<<"DELETE FROM limited_mail WHERE id = ~p">>).
-define (SQL_TARGET_LIMIT_MAIL_SELECT,
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id in ~s">>).
-define (SQL_TARGET_LIMIT_MAIL_DELETE,
<<"DELETE FROM limited_mail WHERE id in ~s">>).