import DB from "../utils/DB"; import {MsgCode} from "../role/EEnum"; import SKDataUtil from "../gear/SKDataUtil"; import TeamMgr from "../core/TeamMgr"; import GameUtil from "../core/GameUtil"; export default class Marry { static shared = new Marry(); // 结婚数据 marry_map: Map; constructor() { this.marry_map = new Map(); } init() { DB.selectMarry((code: any, info: any) => { if (MsgCode.SUCCESS == code){ for (const data of info) { this.marry_map.set(data.roleid_a,{roleid_a: data.roleid_a, rolename_a: data.rolename_a, roleid_b: data.roleid_b, rolename_b: data.rolename_b}); } } }); } //获取结婚状态 getMarryState(roleid: number){ for(let [key, value] of this.marry_map){ if(value.roleid_a == roleid || value.roleid_b == roleid) { return true; } } return false; } //获取结婚对象 getMarryRoleName(roleid: number){ for(let [key, value] of this.marry_map){ if(value.roleid_a == roleid){ return value.rolename_b; } if(value.roleid_b == roleid){ return value.rolename_a; } } } getMarried(player: any, team: any){ for(let tplayer of team){ let flag = this.getMarryState(tplayer.roleid); if(flag){ player.send_notice(`${tplayer.name}已结婚`); return; } if(tplayer.money < 10000000 || tplayer.bind_jade < 100000){ player.send_notice(`${tplayer.name}结婚所需费用不足`); return; } } player.send("s2c_get_married",{ teamlist: SKDataUtil.toJson(team,"[]") }) } operationMarry(player: any, oper: number){ let team = TeamMgr.shared.getTeamPlayer(player.teamid); if(team){ if(oper == 0){ player.send("s2c_operation_married",{ roleid: player.roleid, oper: oper }) } if(oper == 1){ for(let tplayer of team){ tplayer.send_notice(`玩家${player.name}拒绝了结婚`); } return; } if(oper == 2){ for(let tplayer of team){ tplayer.send_notice(`玩家${player.name}没有确认,暂时不能为你们办理婚礼!`); } return; } if(oper == 3){ let leader = null; let member = null; for (let tplayer of team) { if(tplayer.isleader){ leader = tplayer; }else{ member = tplayer; } tplayer.addMoney(GameUtil.goldKind.Money,-10000000,"结婚") tplayer.addMoney(GameUtil.goldKind.BindJade,-100000,"结婚") } if(leader != null && member != null){ this.marry_map.set(leader.roleid,{roleid_a: leader.roleid, roleid_b: member.roleid}); DB.insertMarry(leader.roleid,leader.name,member.roleid,member.name); } } } } //离婚 divorceById(player: any){ let flag = false; let otherid = 0; //另一个玩家的id for(let [key, value] of this.marry_map){ if(value.roleid_a == player.roleid){ otherid = value.roleid_b; flag = true; break; } if(value.roleid_b == player.roleid){ otherid = value.roleid_a; flag = true; break; } } if(flag){ if(player.team_id <= 0){ if(player.money < 5000000 || player.bind_jade < 500000){ player.send_notice('离婚所需费用不足!'); return; } let name = this.getMarryRoleName(player.roleid); player.addMoney(GameUtil.goldKind.Money, -5000000, "离婚"); player.addMoney(GameUtil.goldKind.BindJade, -500000, "离婚"); this.confirmDivorce(player.roleid); player.send_notice(`你已经和${name}离婚了`); return; }else{ let team = TeamMgr.shared.getTeamPlayer(player.teamid); if(team.length > 2){ player.send_notice('组队成员只能有结婚对象!'); return; } if(team.length < 2){ if(player.money < 5000000 || player.bind_jade < 500000){ player.send_notice('离婚所需费用不足!'); return; } let name = this.getMarryRoleName(player.roleid); player.addMoney(GameUtil.goldKind.Money, -5000000, "离婚"); player.addMoney(GameUtil.goldKind.BindJade, -500000, "离婚"); this.confirmDivorce(player.roleid); player.send_notice(`你已经和${name}离婚了`); return; }else{ for(let tplayer of team){ if(tplayer.money < 5000000 || player.bind_jade < 500000){ player.send_notice(`${tplayer.name}离婚所需费用不足!`); return; } } for(let tplayer of team){ if(tplayer.roleid != player.roleid && tplayer.roleid == otherid){ player.addMoney(GameUtil.goldKind.Money, -1000000, "离婚"); player.addMoney(GameUtil.goldKind.BindJade, -100000, "离婚"); tplayer.addMoney(GameUtil.goldKind.Money, -1000000, "离婚"); tplayer.addMoney(GameUtil.goldKind.BindJade, -100000, "离婚"); player.send_notice(`你已经和${tplayer.name}离婚了`); tplayer.send_notice(`你已经和${player.name}离婚了`); this.confirmDivorce(player.roleid); return; } } } } }else{ player.send_notice('你还没结过婚呢!'); return; } } confirmDivorce(roleid: any){ for(let [key, value] of this.marry_map){ if(value.roleid_a == roleid || value.roleid_b == roleid) { this.marry_map.delete(key); DB.deleteMarry(value.roleid_a); break; } } } }