2025-04-23 09:34:08 +08:00

189 lines
6.9 KiB
TypeScript

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<number, any>;
constructor() {
this.marry_map = new Map<number, any>();
}
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;
}
}
}
}