%% --------------------------------------------------------------------------- %% @doc guild.hrl %% @author hjh %% @email hejiahua@163.com %% @since 2016-12-19 %% @deprecated 公会 %% --------------------------------------------------------------------------- %% @说明 %%20201215补充 %%社团等级创建初始化,社团活跃(劳务)任务可增加社团经验 满足则自动升级 %%call进程判断的时候最好在玩家进程,不要在公会进程 %%社团贡献 TYPE_GFAME 8 100004 %% ----------------------- 进程字典定义 ----------------------- %% 公会数据较大,使用进程State会导致存储和读取的性能差,目前使用进程字典来避免. %% 公会进程的进程字典 -define(P_GUILD, "P_Guild"). % 公会Maps Value:#{GuildId => #guild{} } -define(P_GUILD_MEMBER(GuildId), lists:concat(["P_Guild_Member_", GuildId])). % 公会玩家Maps Value:#{MemberId => #guild_member{}} -define(P_MEMBER_GUILD_ID, "P_Member_Guild_Id"). % 成员和公会id的Maps Value:#{玩家id => 公会id} -define(P_GUILD_DEPOT, "P_Guild_Depot"). % 公会仓库 -define(P_GUILD_SKILL, "P_Guild_Skill"). % 公会技能 % -define(P_GUILD_BUILDING_LV(GuildId), lists:concat(["P_Guild_Building_Lv_", GuildId])). % 建筑 Value:#{BuildingType => BuildingLv} -define(P_POS_PERMISSION(GuildId), lists:concat(["P_Pos_Permission_", GuildId])). % 职位权限 Value:#{Pos => #{PermissionType=IsAllow} } -define(P_POS_NAME(GuildId), lists:concat(["P_Pos_Name_", GuildId])). % 职位名字 Value:#{Pos => PositionName} -define(P_GUILD_APPLY, "P_Guild_Apply"). % Value:#{ {RoleId, GuildId} => #guild_apply{} } -define(P_GUILD_APPLY_GUILD, "P_Guild_Apply_Guild"). % Value:{GuildId => [RoleId|...]} -define(P_GUILD_MERGE_GUILD, "P_Guild_Merge_Guild"). -define(P_GUILD_SUPPORT(GuildId), lists:concat(["P_Guild_Support_", GuildId])). % 公会协助 %% 玩家进程dict拼单感谢信和记录相关key -define(P_GUILD_ORDER_THANK, guild_order_thank). % 公会拼单礼包 -define(P_GUILD_ORDER_LOG, guild_order_log). % 公会拼单记录 % -define(P_GUILD_WAR_SHINE_BUY(GuildId), lists:concat(["P_Guild_War_Shine_Buy_", GuildId])). % 公会祭坛购买 Value:#guild_war_shine_buy{} % -define(P_GUILD_WAR_SHINE_MACHINE(GuildId), lists:concat(["P_Guild_War_Shine_Machine_", GuildId])). % Value: [{MachineId, Num}|...] -define(P_GUILD_DONATE_LOG(GuildId), lists:concat(["P_GUILD_DONATE_LOG_", GuildId])). % 捐献日志 Value:[{CfgId, Name, DonateNum, Gfunds, Time}|..] %% ----------------------- 职位定义(#guild_member.position/.sec_position) ----------------------- -define(POS_CHIEF, 1). % 会长 -define(POS_DUPTY_CHIEF, 2). % 副会长 -define(POS_DIRECTOR, 3). % 长老 -define(POS_ELITE, 4). % 精英 -define(POS_NORMAL, 5). % 普通成员 默认是普通成员 -define(POS_AGENT, 6). % 代理团长 %% ----------------------- 职位变更类型 ------------------------------- -define(POS_LOG_JOIN, 0). % 加入社团 -define(POS_LOG_CHIEF, 1). % 成为团长 -define(POS_LOG_DUPTY_CHIEF, 2). % 成为副团长 -define(POS_LOG_ELITE, 3). % 成为骨干 -define(POS_LOG_BABY, 4). % 成为活宝 -define(POS_LOG_NORMAIL, 5). % 成为普通成员 -define(POS_LOG_AGENT, 6). % 成为代理团长 -define(POS_LOG_QUIT, 7). % 离开社团 %%社团合并相关 -define(MERGE_APPLY, 1). %%申请合并 -define(MERGE_AGREE, 2). %%同意合并 -define(MERGE_REFUSE, 3). %%拒绝合并 %% 徽章特性,详情看后台配置 -define(GBADGE_CASH, 1). %%分红税率降低 -define(GBADGE_CONTRIBUTE, 2). %%社团贡献增加 -define(GBADGE_REPUTATION, 3). %%名望值收益 -define(GBADGE_BOSS, 4). %%社团BOSS伤害 -define(GBADGE_ATTR, 5). %%徽章属性 %日志内容 %1.玩家加入 %2.玩家活跃记录 %3.职位变更 %4.社团升级 %% 职位(用于初始化职位名字和职位权限列表) -define(POS_LIST, [ ?POS_NORMAL , ?POS_ELITE , ?POS_DIRECTOR , ?POS_DUPTY_CHIEF , ?POS_CHIEF , ?POS_AGENT ]). %% 能被任命的职位 -define(BE_APPOINT_POS_LIST, [ ?POS_NORMAL , ?POS_ELITE , ?POS_DIRECTOR , ?POS_DUPTY_CHIEF ]). %% 能被修改权限的职位列表 -define(MODIFIED_PERMISSION_POS_LIST, [ ?POS_BABY , ?POS_DIRECTOR , ?POS_DUPTY_CHIEF ]). %% ----------------------- 权限(permission) ----------------------- -define(PERMISSION_APPROVE_APPLY, 1). % 审批申请 -define(PERMISSION_APPOINT_POS, 2). % 任命职位 -define(PERMISSION_FIRE_MEMBER, 3). % 开除成员 -define(PERMISSION_MODIFY_TENET_AND_ANNOUNCE, 4). % 宣言/公告修改 -define(PERMISSION_APPROVE_SETTING, 5). % 审批设置 -define(PERMISSION_RENAME, 6). % 改名 -define(PERMISSION_GUILD_MERGE, 7). % 社团合并 %% 可修改的权限列表 -define(MODIFIABLE_PERMISSION_LIST, [ ?PERMISSION_APPROVE_APPLY , ?PERMISSION_FIRE_MEMBER ]). %% ----------------------- #guild.apply_type ----------------------- -define(APPROVE_TYPE_AUTO, 0). % 自动 -define(APPROVE_TYPE_MANUAL, 1). % 手动 %% ----------------------- permission_type is_allow ----------------------- -define(IS_ALLOW_NO, 0). % 不允许使用该权限 -define(IS_ALLOW_YES, 1). % 允许 %% ----------------------- 搜索和匹配 ----------------------- %% 公会成员的搜索 %% search_guild_memer -define(sgm_default, 0). % 默认 -define(sgm_lv, 1). % 等级 -define(sgm_guild_pos, 2). % 公会职位 -define(sgm_donate, 3). % 贡献 -define(sgm_liveness, 4). % 活跃度 -define(sgm_online_pos_lv, 5). % 根据在线,职位,等级降序(40006默认) -define(sgm_pos_donate_lv_liveness, 6). % 根据职位,贡献,等级,活跃度降序(40008默认) -define(sgm_pos_lv_donate, 7). % 根据职位,等级,贡献降序(40016默认) -define(sort_flag_desc, 0). % 降序 -define(sort_flag_asc, 1). % 升序 -define(member_type_all, 0). % 所有成员 -define(member_type_online, 1). % 在线成员 -define(member_type_logout, 2). % 离线成员 %% search 的 特殊类型 -define(s_special_type_normal, 0). % 正常 -define(s_special_type_take_me_first, 1). % 提取自己在最前面 -define(s_special_type_del_me, 2). % 移除自己 -define(MANUAL_APPOINT, 1). % 手动任命会长 -define(AUTO_APPOINT, 2). % 自动任命会长 -define(CREATE_GUILD, 1). % 创建公会 -define(DISBAND_REASON_MERGE, 2). % 社团合并 -define(DISBAND_REASON_CHIEF, 3). % 会长解散公会 -define(DISBAND_REASON_MEMBER_NUM,4). % 人数达不到要求自动解散 -define(DISBAND_REASON_ACTIVITY, 5). % 活跃度不足自动解散 -define(DISBAND_REASON_CHIEF_QUIT, 6). % 会长退出公会 -define(DISBAND_REASON_GM, 7). % GM解散公会 -define(DISBAND_REASON_FUNDS, 8). % 社团管理资金不足自动解散 %% ----------------------- 事件定义 ----------------------- -define(GEVENT_APPOINT_POSITION_TO_CHIEF, 1). % 任命成会长 -define(GEVENT_APPOINT_POSITION_TO_OTHER, 2). % 任命成其他职位(除了会长,领袖,学徒) -define(GEVENT_RENAME_POSITION, 3). % 修改职位称谓 -define(GEVENT_BECOME_NORAML_AF_APPOINT_OTHER_TO_CHIEF, 4). % 在任命其他人为会长后旧会长第一职位变成普通成员 -define(GEVENT_CREATE_GUILD, 5). % 创建公会 -define(GEVENT_QUIT, 6). % 主动退出 -define(GEVENT_KICK_OUT, 7). % 被踢出公会 -define(GEVENT_UPGRADE_GUILD, 8). % 升级公会 -define(GEVENT_RENAME, 9). % 公会改名 -define(GEVENT_JOIN_GUILD, 10). % 加入公会 %% ----------------------- 日志定义 ----------------------- -define(SEPARATOR_STRING, "=>"). -define(GLOG_CREATE, 1). % 创建公会 -define(GLOG_JOIN, 2). % 加入公会 -define(GLOG_KICK_OUT, 3). % 踢出公会 -define(GLOG_POS_CHANGE, 4). % 职位变动 -define(GLOG_DISBAND, 5). % 解散公会 -define(GLOG_QUIT, 6). % 主动退出公会 -define(GLOG_AUTO_CHIEF, 7). % 自动任命会长 -define(GLOG_MERGE, 8). % 社团合并 % -define(GLOG_DONATE, 7). % 捐献 %% ----------------------- 其他定义 ----------------------- -define(GUILD_PID, mod_guild). % 公会进程 -define(NEED_SQL_TYPE, 1). % 需要操作sql -define(NO_SQL_TYPE, 2). % 不需要操作sql -define(MAX_SMALLINT, 65535). % 最大的smallint数值 -define(MAX_INT, 4294967295). % 最大的int数值 -define(CAL_GUILD_POWER_VAILD_TIME, 86400 * 2). % 超过这个离线时间不计入公会战力 -define(AUTO_DISBAND_OFFLINE_TIME, 86400 * 2). % 公会所有成员离线超过这个时间自动解散 -define(AUTO_DISBAND_AF_WARNNING, 86400). % 在解散警告时间多久后自动解散公会 -define(AUTO_DISBAND_NEED_NUM, 1). % 公会少于这个人数进入自动解散倒计时 -define(DISBAND_NEED_NUM, 3). % 公会少于这个人数可以解散 -define(APPLY_EXPIRED_TIME, 86400). % 申请过期时间 -define(DEPOT_EXP_EXCHANGE_SCORE, 2000). % 仓库里面的经验道具兑换需要积分 -define(DEPOT_EXP_GOODS_ID, 18030001). % 仓库经验道具的物品类型id -define(DEPOT_RECORD_SHOW_LEN, 20). % 仓库记录显示长度限制 -define(DEPOT_RECORD_MAX_LEN, 40). % 仓库记录缓存长度限制 -define(KICK_OUT_POSTION, 0). % 提出公会默认职位 -define(PAGE_SIZE, 40). % 默认页码 %% ---------------------- 公会共用仓库操作 ---------------------- -define(GUILD_DEPOT_CTRL_ADD, 1). % 往仓库存放道具 -define(GUILD_DEPOT_CTRL_EXCHANGE, 2). % 从仓库兑换道具 -define(GUILD_DEPOT_CTRL_DESTORY, 3). % 销毁仓库道具 -define(GUILD_REM_POOL(GuildId), (GuildId rem ?GUILD_REM)). -define(GUILD_REM, 20).%N个驻地分线池 %% ------------------------------------------------ %% @doc 游戏数据格式 %% ------------------------------------------------ %% ----------- 基础 -------------- %% 公会 活跃就是经验值 -record(guild, { id = 0 % 公会id , name = <<>> % 公会名字 , name_upper = "" % 公会名字(大写) , announce = <<>> % 公会公告 , chief_id = 0 % 会长id , chief_name = <<>> % 会长名字 , agent = 0 % 代理团长 , agent_time = 0 % 代理时间 , lv = 0 % 等级 , exp = 0 % 经验 , division = 0 % 评级 , funds = 0 % 资金 , arrears = 0 % 拖欠次数 , flag = 0 % 社团旗帜 , member_num = 0 % 成员数量 , combat_power = 0 % 战力 , create_time = 0 % 创建时间 , modify_times = 0 % 公告修改次数 , approve_type = 0 % 审批类型 0:自动 1:手动 , auto_approve_lv = 0 % 自动加入的等级 , auto_approve_power = 0 % 自动加入的战力 , disband_warnning_time = 0 % 自动解散警告时间 , week_labor = 0 % 周活跃(劳动量) , week_labor_refresh = 0 % 周刷新时间 , week_labor_last = 0 % 上周活跃(劳动量) , c_rename = 0 % 免费改名次数 0: 没有免费改名 >1:能免费改名字 , c_rename_time = 0 % 最后免费改名时间 , badges = [] , fire_num = 0 %%篝火周最高参与人数 , assist = 0 %%周助战次数 , war_win = 0 %%社团战获胜累记 , last_renew = 0 %%下次刷新时间 , race_rank = 0 % 竞速榜排名 , add_member_num = 0 % 增加成员人数 , cgwar_room = 0 % 团战名次(房间) }). %% 公会成员 -record(guild_member, { id = 0 % 玩家ID , figure = undefined % #figure{} , guild_id = 0 % 公会ID , guild_name = <<>> % 公会名称 , position = 0 % 职位 , precursor = 5 % 前身职位 申请代理社长记录旧的职位 , week_labor = 0 % 周活跃 , week_labor_refresh = 0 % 周刷新时间 , labors = 0 % 历史活跃 , online_flag = 0 % 是否在线 , combat_power = 0 % 玩家当前战力 , h_combat_power = 0 % 历史最高战力 , last_login_time = 0 % 最后登录时间 , last_logout_time = 0 % 最后登出游戏时间 , create_time = 0 % 入会时间 }). %% 公会请求 -record(guild_apply, { key = undefined % key值 , role_id = 0 % 玩家id , guild_id = 0 % 公会id , create_time = 0 % 创建时间 , position = 0 }). %% 公会合并 -record(guild_merge, { guild_id = 0 % 公会id , tapply = 0 % 我申请合并的社团 , fapplys = [] % 向我申请合并的社团 , notes = [] % 记录最近三天内五组拒绝数据 }). %% 玩家进程status -record(status_guild, { id = 0 % 公会id , flag = 0 % 社团旗帜 , name = <<>> % 公会名字 , lv = 0 % 公会等级 , position = 0 % 职位 , position_name = <<>> % 职位名字 , create_time = 0 % 入会时间 , leave_time = 0 % 退出公会时间 , attr = [] % 公会的属性加成 , red_packet = 0 % 抢的红包金额 , red_gold_packet = 0 % 抢的钻石红包金额 , support_id = 0 % 协助Id(唯一Id) , support_cfg_id = 0 % 协助配置Id , support_leader_id = 0 % 协助玩家Id , support_leader_name = "" % 协助玩家名字 , support_team_id = 0 % 协助队伍Id , support_scene_info = [] % 协助场景信息(判断玩家是否成功进入协助场景) , is_support_asker = 0 % 是否请求协助者 , is_in_support = 0 % 是否在协助玩法中 0-否 1-是 , guild_reputation = 0 % 社团每日声望(已废弃) , badges = [] , orders = [] % 拼单任务 }). %%徽章结构 -record(guild_badge, { id = 0, type = 0, stime = 0, etime = 0 }). %%徽章配置 -record(base_badge, { id = 0, name = "", level = 0, type = 0, cool = 0, %%冷却时间 0表示永久 effect = 0, condition = [], next = 0 }). %% 公会技能 -record(guild_skill, { guild_id = 0, % 公会id skill_id = 0, % 技能id research_lv = 0 % 研究等级 }). %% 公会技能 ps上的 -record(status_guild_skill, { attr = [], gskill_map = #{} }). %% 公会协助 -record(guild_support, { support_sid = 0, %% 协助Id,全服唯一 ask_id = 0, %% 请求协助者 ask_scene_id = 0, %% 请求协助者场景Id ask_pool_id = 0, %% 请求协助者场景分区进程Id ask_copy_id = 0, %% 请求协助者副本Id ask_x = 0, %% 请求协助者坐标X ask_y = 0, %% 请求协助者坐标Y support_cfg_id = 0, %% 协助的配置Id support_role_list = [], %% 协助者列表 status = 0, %% 协助状态 0-未开始 1-正在进行 2-已经结束 content = {}, %% 请求协助内容.例如{team, TeamId, CopyId}, {boss, BossId}... extra_data = [], %% 其他数据(各类玩法定制) team_id = 0, %% 队伍Id(请求协助者所在队伍Id) team_leader_name = "", %% 队伍队长名字(请求协助者所在队伍队长名字) create_time = 0 %% 创建时间 ,module = 0 %% 处理模块名 }). %% ------------------------------------------------ %% @doc 公会基础配置 %% ------------------------------------------------ %% ----------- 基础 -------------- %% 创建公会配置 -record(base_guild_create,{ cfg_id = 0, cost = [], %%消耗 guild_lv = 0, %%初始公会大厅等级 condition = [] %%创建条件 }). %% 公会等级配置 -record(base_guild_lv, { lv = 0, exp = 0, member_capacity = 0, pos_list = [] }). %% 公会职位配置 -record(guild_pos_cfg, { position = 0 % 职位(看宏) , name = "" % 职位名字 , permission_list = [] % 权限列表 , num = 0 % 人数 }). %% 公会职位配置 -record(base_guild_pos, { position = 0 % 职位(看宏) , name = "" % 职位名字 , permission_list = [] % 权限列表 , reputation_add % 每日声望加成 }). %% 公会商店 -record(base_shop_good, { auto_id = 0, % 唯一id id = 0, % 商品id cost = 0, % 消耗贡献 limit = 0, % 购买上限 building_lv = 0 % 建筑等级 }). %% 公会技能 -record(base_skill,{ skill_id = 0, skill_lv = 0, skill_name = "", building_lv = 0, % 所需建筑等级下限 building_lv_max = 0,% 所需建筑等级上限 guild_lv = 0, % 公会等级 role_min_lv = 0, % 人物等级下限 role_max_lv = 0, % 人物等级上限 attr = [], cost = 0 % 消耗贡献 }). %% 公会个人额外活跃度奖励 -record(base_extra_live_reward, { reward_id = 0, % 奖励id live = 0, % 个人累计活跃度 extra_add = 0 % 额外公会活跃度 }). %% 公会技能 -define(DEFAULT_GSKILL_RESEARCH_LV, 3). %% 默认公会技能研究等级 -record(guild_skill_cfg, { skill_id = 0 % 技能id(技能配置表) , type = 0 % 类型 1: 基础技能 2: 高级技能 , unlock_lv = 0 % 解锁需要的公会等级 }). %% 公会技能研究 -record(guild_skill_research_cfg, { skill_id = 0 % 技能id(技能配置表) , lv = 0 % 等级 , research_condition = [] % 研究条件 , research_cost = [] % 研究消耗 , learn_condition = [] % 学习条件 , learn_cost = [] % 学习消耗 }). -define(INIT_ORDER, 0). %%初始化 -define(ANCHOR_ORDER, 1). %%可拼单 -define(ALIVE_ORDER, 2). %%已出单待完成 -define(OVER_ORDER, 3). %%已完成可感谢 -define(CLOSE_ORDER, 4). %%已完成 %%社团派单 -record(guild_order, { id = 0, %%位置ID cfgid = 0, %%配置ID status = 0, %%订单状态0未派发1选中(可拼单)1已出待完成3已完成可领取 content = {}, %%任务内容{} teams = [], %%拼单人 finish_time = 0 %%完成时间 }). %% 拼单感谢礼包 -record(guild_order_thank_packet, { ask_id = 0, order_id = 0, role_list = [], order_cfg_id = 0, content = [], is_send = 0, %% 是否已经发送感谢 time = 0 }). %% 拼单记录(需求发起者先发送感谢) -record(guild_order_thank_log, { ask_id = 0, order_id = 0, order_cfg_id = 0, content = [], chat_msg = "", is_receive = 0, %% 是否已经领取奖励 time = 0 }). %%订单配置 -record(base_guild_order, { id = 0, name = "", color = 0, min_lv = 0, max_lv = 0, content = {}, max_num = 0, %%可拼单人数 cost = [], gain = [], %%派单奖励 awards = [] %%完成获得 ,thank_reward = [] %% 感谢奖励(发起者获得) ,order_reward = [] %% 接单奖励(协助者获得) ,weight = 0 ,ai_ratio = 0 %%AI收益百分比 ,people_ratio = 0 %%真人收益百分比 }). %% 社团协助配置表 -record(base_guild_support, { support_id = 0, %% 协助Id(主键) module_id = 0, %% 功能Id sub_mod_id = 0, %% 功能子Id mod_name = "", %% 玩法名字 support_limit = 0, %% 协助人数上限 reward_reputation = 0, %% 协助声望 thank_reward = [], %% 感谢奖励 support_reward = [] %% 协助奖励 ,is_conflict = 1 %% 协助状态冲突 ,out_scene_cancel = 1 %% 退出场景是否取消协助请求 ,is_lv_limit = 1 %% 是否限制等级 ,scene_limit = 0 %% 场景限制(是否可以发协助) ,show_support_list = 0 %% 是否展示协助列表 ,show_hurt = 0 %% 是否显示伤害列表 ,show_ask_picture = 0 %% 是否显示被协助者头像 ,head_label = 0 %% 协助者头标 }). -define(SAVE_ORDER_THANK, <<"REPLACE INTO guild_order_thank (`order_id`, `guild_id`, `ask_id`,`cfg_id`,`role_list`,`content`,`is_send`,`time`) VALUES (~p, ~p, ~p, ~p, '~ts', '~ts', ~p, ~p)">>). -define(SELECT_ORDER_THANK, <<"SELECT `order_id`,`guild_id`,`ask_id`,`cfg_id`,`role_list`,`content`,`is_send`,`time` FROM guild_order_thank WHERE `ask_id` = ~p and `time` > ~p">>). -define(DELETE_ORDER_THANK, <<"DELETE FROM guild_order_thank WHERE `time` < ~p">>). -define(BATCH_SAVE_ORDER_LOG, <<"REPLACE INTO guild_order_log (`order_id`,`guild_id`,`role_id`,`ask_id`,`cfg_id`,`content`,`chat_msg`,`is_receive`,`time`) VALUES ~ts">>). -define(BATCH_SAVE_ORDER_LOG_VALUE, <<"(~p, ~p, ~p, ~p, ~p, '~ts', '~ts', ~p, ~p)">>). -define(SELECT_ORDER_LOG, <<"SELECT `order_id`,`guild_id`,`role_id`,`ask_id`,`cfg_id`,`content`,`chat_msg`,`is_receive`,`time` FROM guild_order_log WHERE `role_id` = ~p and `time` > ~p">>). -define(DELETE_ORDER_LOG, <<"DELETE FROM guild_order_log WHERE `time` < ~p">>).