您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
雀魂自制回放
当前为
// ==UserScript== // @name 雀魂回放编辑器Replay_Editor // @namespace http://tampermonkey.net/ // @version 0.1.4 // @description 雀魂自制回放 // @author xiaolan16 // @homepageURL https://github.com/xiaolan16/make-a-replay-in-maj-soul // @match https://game.maj-soul.com/1/ // @match https://game.mahjongsoul.com/ // @match https://mahjongsoul.game.yo-star.com/ // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @license Apache-2.0 License // ==/UserScript== class Majsoul_Replay_Editor{ save(name){ let allreplay=GM_getValue('allreplay',{}); saveproject(); loadreplay(); allreplay[name]=JSON.stringify(editdata); loadproject(lstscene); GM_setValue('allreplay',allreplay); } load(name){ let allreplay=GM_getValue('allreplay',{}); try{edit(JSON.parse(allreplay[name]))}catch(e){throw(e);} } saveproject(name){ let project=GM_getValue('project',{}); saveproject(); project[name]=JSON.stringify(lstscene); GM_setValue('project',project); } loadproject(name){ let project=GM_getValue('project',{}); loadproject(JSON.parse(project[name])); } open(){ unsafeWindow.editdata=editdata; unsafeWindow.settings=settings; unsafeWindow.gamebegin=gamebegin; unsafeWindow.gameend=gameend; unsafeWindow.edit=edit; unsafeWindow.canceledit=canceledit; unsafeWindow.roundbegin=roundbegin; unsafeWindow.roundend=roundend; unsafeWindow.randompaishan=randompaishan; unsafeWindow.tiles0=tiles0; unsafeWindow.tiles1=tiles1; unsafeWindow.tiles2=tiles2; unsafeWindow.tiles3=tiles3; unsafeWindow.paishan=paishan; unsafeWindow.muyuseats=muyuseats; unsafeWindow.discardtiles=discardtiles; unsafeWindow.mopai=mopai; unsafeWindow.qiepai=qiepai; unsafeWindow.mingpai=mingpai; unsafeWindow.leimingpai=leimingpai; unsafeWindow.notileliuju=notileliuju; unsafeWindow.liuju=liuju; unsafeWindow.hupai=hupai; unsafeWindow.huansanzhang=huansanzhang; unsafeWindow.dingque=dingque; } close(){ try{ delete unsafeWindow.editdata; delete unsafeWindow.settings; delete unsafeWindow.gamebegin; delete unsafeWindow.gameend; delete unsafeWindow.edit; delete unsafeWindow.canceledit; delete unsafeWindow.roundbegin; delete unsafeWindow.roundend; delete unsafeWindow.randompaishan; delete unsafeWindow.tiles0; delete unsafeWindow.tiles1; delete unsafeWindow.tiles2; delete unsafeWindow.tiles3; delete unsafeWindow.paishan; delete unsafeWindow.muyuseats; delete unsafeWindow.discardtiles; delete unsafeWindow.mopai; delete unsafeWindow.qiepai; delete unsafeWindow.mingpai; delete unsafeWindow.leimingpai; delete unsafeWindow.notileliuju; delete unsafeWindow.liuju; delete unsafeWindow.hupai; delete unsafeWindow.huansanzhang; delete unsafeWindow.dingque; }catch(e){throw(e);} } } function editfunction(){ ! function(t) { var e = function(e) { function i() { return null !== e && e.apply(this, arguments) || this } return __extends(i, e), i.play = function(e) { app.Log.log("ActionDiscardTile play data:" + JSON.stringify(e)), e.doras && t.DesktopMgr.Inst.WhenDoras(e.doras, !1); var i = e.seat, n = mjcore.MJPai.Create(e.tile), a = !(null == e.is_liqi || void 0 == e.is_liqi || !e.is_liqi); if(e.muyu && t.DesktopMgr.Inst.onMuyuChange(e.muyu, !0), t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].AddQiPai(n, a, e.moqie), a) { e.is_wliqi ? t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].PlaySound("act_drich") : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].PlaySound("act_rich"); var r = t.DesktopMgr.Inst.player_effects[i][game.EView.lizhi_bgm]; if(r && 0 != r) { var s = cfg.item_definition.item.get(r).sargs[0]; t.AudioMgr.lizhiMuted ? t.AudioMgr.PlayLiqiBgm(s, 300, !0) : (t.BgmListMgr.stopBgm(), Laya.timer.once(1e3, this, function() { t.DesktopMgr.Inst.gameing && (t.BgmListMgr.PlayMJBgm("", !0), t.AudioMgr.PlayLiqiBgm(s, 300, !0)) })) } } var o = !1; e.tile_state && e.tile_state > 0 && (o = !0), i == t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.OnDiscardTile(n, o, !1, e.moqie) : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].onDiscardTile(e.moqie, e.tile, o, !1), e.operation && Laya.timer.once(500, this, function() { t.ActionOperation.play(e.operation) }), void 0 != e.zhenting && void 0 == e.operation && (uiscript.UI_DesktopInfo.Inst.setZhenting(e.zhenting), uiscript.UI_TingPai.Inst.setZhengting(e.zhenting)), i == t.DesktopMgr.Inst.seat && uiscript.UI_TingPai.Inst.setData1(e, !1), Laya.timer.once(500, this, function() { a ? t.DesktopMgr.Inst.clearMindVoice() : t.DesktopMgr.Inst.playMindVoice() }) }, i.fastplay = function(e, i) { app.Log.log("ActionDiscardTile fastplay data:" + JSON.stringify(e) + " usetime:" + i), e.doras && t.DesktopMgr.Inst.WhenDoras(e.doras, !0); var n = e.seat, a = mjcore.MJPai.Create(e.tile), r = !(null == e.is_liqi || void 0 == e.is_liqi || !e.is_liqi), s = !1; e.tile_state && e.tile_state > 0 && (s = !0), t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddQiPai(a, r, e.moqie, !1), e.muyu && t.DesktopMgr.Inst.onMuyuChange(e.muyu, !1), n == t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.OnDiscardTile(a, s, !0, e.moqie) : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].onDiscardTile(e.moqie, e.tile, s, !0), e.operation && -1 != i && Laya.timer.once(500, this, function() { t.ActionOperation.play(e.operation, i) }), void 0 != e.zhenting && void 0 == e.operation && (uiscript.UI_DesktopInfo.Inst.setZhenting(e.zhenting), uiscript.UI_TingPai.Inst.setZhengting(e.zhenting)), n == t.DesktopMgr.Inst.seat && uiscript.UI_TingPai.Inst.setData1(e, !0) }, i.record = function(e, i) { void 0 === i && (i = 0), app.Log.log("ActionDiscardTile record data:" + JSON.stringify(e)), e.doras && t.DesktopMgr.Inst.WhenDoras(e.doras, !0); var n = e.seat, a = mjcore.MJPai.Create(e.tile), r = !(null == e.is_liqi || void 0 == e.is_liqi || !e.is_liqi), s = !1; if(e.is_kailiqi){ if(e.seat!=view.DesktopMgr.Inst.seat){ for(let i=0;i<view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand.length;i++)view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand[i].DoAnim_FullDown(); for(let i=0;i<view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand.length;i++)view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand[i].is_open=true; } /*else{ for (o = 0; o < view.DesktopMgr.Inst.players[0].hand.length; o++) view.DesktopMgr.Inst.players[0].hand[o].Hule(); for (var r = [], s =view.DesktopMgr.Inst.players[0].trans_hand3D, o = 0; o < view.DesktopMgr.Inst.players[0].hand.length; o++) { var l = new t.HandPai3D(s); l.SetVal(view.DesktopMgr.Inst.players[0].hand[o].val, !1), l.SetIndex(o, !1), l.Stand(), t.DesktopMgr.Inst.is_chuanma_mode() && (l.pai3D.is_gap = l.val.type == view.DesktopMgr.Inst.players[0].gap_type, l.pai3D.OnChoosedPai()), r.push(l) } var h = r.length; for (o = 0; o < h; o++) view.DesktopMgr.Inst.players[0]._hand3d[o].DoAnim_FullDown(); }*/ } if(e.tile_state && e.tile_state > 0 && (s = !0), e.muyu && t.DesktopMgr.Inst.onMuyuChange(e.muyu, !0), t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddQiPai(a, r, e.moqie), r && (e.is_wliqi ? t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].PlaySound("act_drich") : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].PlaySound("act_rich"), uiscript.UI_DesktopInfo.Inst.changeHeadEmo(n, "emoji_9", 2e3)), n == t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.OnDiscardTile(a, s, !1, e.moqie) : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].recordDiscardTile(a, e.moqie, s, !1), e.tingpais && t.DesktopMgr.Inst.setTingpai(e.seat, e.tingpais), t.DesktopMgr.Inst.mode == t.EMJMode.live_broadcast && uiscript.UI_Live_Broadcast.Inst.during_play && e.operations) for(var o = 0; o < e.operations.length; o++) t.ActionOperation.ob(e.operations[o], i, 450); return 500 }, i.fastrecord = function(e, i) { void 0 === i && (i = -1), app.Log.log("ActionDiscardTile fastrecord data:" + JSON.stringify(e)), e.doras && t.DesktopMgr.Inst.WhenDoras(e.doras, !0); var n = e.seat, a = mjcore.MJPai.Create(e.tile), r = !(null == e.is_liqi || void 0 == e.is_liqi || !e.is_liqi), s = !1; if(e.is_kailiqi){ if(e.seat!=view.DesktopMgr.Inst.seat){ for(let i=0;i<view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand.length;i++)view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand[i].DoAnim_FullDown(); for(let i=0;i<view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand.length;i++)view.DesktopMgr.Inst.players[(4+e.seat-view.DesktopMgr.Inst.seat)%4].hand[i].is_open=true; } /*else{ for (o = 0; o < view.DesktopMgr.Inst.players[0].hand.length; o++) view.DesktopMgr.Inst.players[0].hand[o].Hule(); for (var r = [], s =view.DesktopMgr.Inst.players[0].trans_hand3D, o = 0; o < view.DesktopMgr.Inst.players[0].hand.length; o++) { var l = new t.HandPai3D(s); l.SetVal(view.DesktopMgr.Inst.players[0].hand[o].val, !1), l.SetIndex(o, !1), l.Stand(), t.DesktopMgr.Inst.is_chuanma_mode() && (l.pai3D.is_gap = l.val.type == view.DesktopMgr.Inst.players[0].gap_type, l.pai3D.OnChoosedPai()), r.push(l) } var h = r.length; for (o = 0; o < h; o++)view.DesktopMgr.Inst.players[0]._hand3d[o].FullDown(); }*/ } if(e.tile_state && e.tile_state > 0 && (s = !0), e.muyu && t.DesktopMgr.Inst.onMuyuChange(e.muyu, !1), t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddQiPai(a, r, e.moqie, !1), n == t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.OnDiscardTile(a, s, !0, e.moqie) : t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].recordDiscardTile(a, e.moqie, s, !0), e.tingpais && t.DesktopMgr.Inst.setTingpai(e.seat, e.tingpais), t.DesktopMgr.Inst.mode == t.EMJMode.live_broadcast && uiscript.UI_Live_Broadcast.Inst.during_play && i >= 0 && e.operations) for(var o = 0; o < e.operations.length; o++) t.ActionOperation.ob(e.operations[o], i, 450) }, i }(t.ActionBase); t.ActionDiscardTile = e }(view || (view = {})); !function(t){ var e=function(e){ function i(){ return null!==e&&e.apply(this,arguments)||this } return __extends(i,e),i.play=function(e){ app.Log.log("ActionBabei play data:"+JSON.stringify(e)),e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,!1); var i=e.seat,n; e.tile?n=mjcore.MJPai.Create(e.tile):n=mjcore.MJPai.Create("4z"); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].AddBabei(n,e.moqie,!0),t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].PlaySound("act_babei"); var a=!1; e.tile_state&&e.tile_state>0&&(a=!0),e.muyu&&t.DesktopMgr.Inst.onMuyuChange(e.muyu,!0),i==t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.onBabei(n,a,!1):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].onBabei(e.moqie,a,!1),e.operation&&Laya.timer.once(500,this,function(){ t.ActionOperation.play(e.operation) }),void 0 !=e.zhenting&&void 0==e.operation&&(uiscript.UI_DesktopInfo.Inst.setZhenting(e.zhenting),uiscript.UI_TingPai.Inst.setZhengting(e.zhenting)),i==t.DesktopMgr.Inst.seat&&uiscript.UI_TingPai.Inst.setData1(e,!1),t.DesktopMgr.Inst.waiting_lingshang_deal_tile=!0 },i.fastplay=function(e,i){ app.Log.log("ActionBabei fastplay data:"+JSON.stringify(e)+" usetime:"+i),e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,!0); var n=e.seat,a; e.tile?a=mjcore.MJPai.Create(e.tile):a=mjcore.MJPai.Create("4z"); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddBabei(a,e.moqie,!1); var r=!1; e.tile_state&&e.tile_state>0&&(r=!0),e.muyu&&t.DesktopMgr.Inst.onMuyuChange(e.muyu,!1),n==t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.onBabei(a,r,!0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].onBabei(e.moqie,r,!0),e.operation&&-1 !=i&&Laya.timer.once(500,this,function(){ t.ActionOperation.play(e.operation,i) }),void 0 !=e.zhenting&&void 0==e.operation&&(uiscript.UI_DesktopInfo.Inst.setZhenting(e.zhenting),uiscript.UI_TingPai.Inst.setZhengting(e.zhenting)),n==t.DesktopMgr.Inst.seat&&uiscript.UI_TingPai.Inst.setData1(e,!0),t.DesktopMgr.Inst.waiting_lingshang_deal_tile=!0 },i.record=function(e,i){ void 0===i&&(i=0),app.Log.log("ActionBabei record data:"+JSON.stringify(e)),e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,!0); var n=e.seat,a; e.tile?a=mjcore.MJPai.Create(e.tile):a=mjcore.MJPai.Create("4z"); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddBabei(a,e.moqie,!0),t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].PlaySound("act_babei"); var r=!1; if(e.tile_state&&e.tile_state>0&&(r=!0),e.muyu&&t.DesktopMgr.Inst.onMuyuChange(e.muyu,!0),n==t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.onBabei(a,r,!1):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].recordBabei(a,e.moqie,r,!1),e.tingpais&&t.DesktopMgr.Inst.setTingpai(e.seat,e.tingpais),t.DesktopMgr.Inst.mode==t.EMJMode.live_broadcast&&uiscript.UI_Live_Broadcast.Inst.during_play&&e.operations) for(var s=0;s<e.operations.length;s++)t.ActionOperation.ob(e.operations[s],i,450); return t.DesktopMgr.Inst.waiting_lingshang_deal_tile=!0,1e3 },i.fastrecord=function(e,i){ void 0===i&&(i=-1),app.Log.log("ActionBabei fastrecord data:"+JSON.stringify(e)),e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,!0); var n=e.seat,a; e.tile?a=mjcore.MJPai.Create(e.tile):a=mjcore.MJPai.Create("4z"); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].AddBabei(a,e.moqie,!1); var r=!1; if(e.tile_state&&e.tile_state>0&&(r=!0),e.muyu&&t.DesktopMgr.Inst.onMuyuChange(e.muyu,!1),n==t.DesktopMgr.Inst.seat ? t.DesktopMgr.Inst.mainrole.onBabei(a,r,!0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(n)].recordBabei(a,e.moqie,r,!0),e.tingpais&&t.DesktopMgr.Inst.setTingpai(e.seat,e.tingpais),t.DesktopMgr.Inst.mode==t.EMJMode.live_broadcast&&uiscript.UI_Live_Broadcast.Inst.during_play&&i>=0&&e.operations) for(var s=0;s<e.operations.length;s++)t.ActionOperation.ob(e.operations[s],i,450); t.DesktopMgr.Inst.waiting_lingshang_deal_tile=!0 },i }(t.ActionBase); t.ActionBabei=e }(view||(view={})); !function(t){ var e=function(e){ function i(){ return null!==e&&e.apply(this,arguments)||this } return __extends(i,e),i.record=function(e,i){ var i=this,n=1; e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,0); Laya.timer.once(100,this,function(){ var a=e.hules,r=0; if(a[0].zimo){ var s=a[0].seat; uiscript.UI_Huleshow.Inst.showZimo([t.DesktopMgr.Inst.seat2LocalPosition(s)]),r+=n?1200:200, Laya.timer.once(r,i,function(){ t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(s)].AddBabei(mjcore.MJPai.Create(a[0].hu_tile),true,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai(); s==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.OnDiscardTile(mjcore.MJPai.Create(a[0].hu_tile),0,0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(s)].recordDiscardTile(mjcore.MJPai.Create(a[0].hu_tile),true,0,0); }) if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0; //if(t.DesktopMgr.Inst.lastqipai&&t.DesktopMgr.Inst.lastqipai.model.meshRender)t.DesktopMgr.Inst.lastqipai.OnChoosedPai(); } else{ for(var o=0,l=-1,h=[],c=0;c<a.length;c++){ var _=a[c].seat; h.push(t.DesktopMgr.Inst.seat2LocalPosition(_)),-1==l&&(l=_) } l>=0&&(o=t.DesktopMgr.Inst.player_effects[l][game.EView.hupai_effect]),n&&uiscript.UI_Huleshow.Inst.showRong(h),r+=n?1200:200,Laya.timer.once(r,i,function(){ if(!t.DesktopMgr.Inst.isLastPaiMingPai())t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(t.DesktopMgr.Inst.lastpai_seat)].QiPaiNoPass(); else{ t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; t.DesktopMgr.Inst.lastqipai.val.type+=10; t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } for(var e=0;e<a.length;e++){ var i=a[e].seat; var s=mjcore.MJPai.Create(a[0].hu_tile); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].AddBabei(s,true,1); //i==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.onBabei(mjcore.MJPai.Create(a[e].hu_tile),0,0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].recordBabei(mjcore.MJPai.Create(a[e].hu_tile),true,0,0); if(e!=0)t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); else t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.val.type+=10; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } }) } r+=2e3,Laya.timer.once(r,i,function(){ for (var n=0,r=t.DesktopMgr.Inst.players;n<r.length;n++){ r[n].hideLiqi() } e.liqi?Laya.timer.once(2500,i,function(){ t.ActionLiqi.play(e.liqi) }):uiscript.UI_DesktopInfo.Inst.setLiqibang(0); for (var s=[],o=0;o<e.delta_scores.length;o++){ var l={ title_id:0, score:0, delta:0 }; if(e.delta_scores[o]>0){ o==t.DesktopMgr.Inst.seat,uiscript.UI_DesktopInfo.Inst.changeHeadEmo(o,"emoji_7",-1),l.delta=e.delta_scores[o]; for(var h=0,c=a;h<c.length;h++) { var _=c[h]; if(_.seat == o){ l.title_id=_.title_id; break } } } else e.delta_scores[o]<0&&(l.delta=e.delta_scores[o],uiscript.UI_DesktopInfo.Inst.changeHeadEmo(o,"emoji_8",-1)); l.score=e.old_scores[o],s.push(l) } Laya.timer.once(200,i,function(){ t.DesktopMgr.Inst.setScores(e.scores) }),uiscript.UI_Hu_Xuezhan.Inst.showScoreChange(s) }),r+=3e3,Laya.timer.once(r,i,function(){ t.DesktopMgr.Inst.ActionRunComplete() }) }) return 6e3; },i.fastrecord=function(e,i){ app.Log.log("ActionHule fastplay data:"+JSON.stringify(e)); var n=e.hules; if(n[0].zimo){ a=n[0].seat; t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(a)].AddBabei(mjcore.MJPai.Create(n[0].hu_tile),true,0); a==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.OnDiscardTile(mjcore.MJPai.Create(n[0].hu_tile),0,1):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(a)].recordDiscardTile(mjcore.MJPai.Create(n[0].hu_tile),true,0,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai(); } else{ if(!t.DesktopMgr.Inst.isLastPaiMingPai())t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(t.DesktopMgr.Inst.lastpai_seat)].QiPaiNoPass(); else{ t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; t.DesktopMgr.Inst.lastqipai.val.type+=10; t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } for(s=0;s<n.length;s++){ var o=n[s].seat; t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(o)].AddBabei(mjcore.MJPai.Create(n[s].hu_tile),true,0); //o==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.onBabei(mjcore.MJPai.Create(n[s].hu_tile),0,1):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(o)].recordBabei(mjcore.MJPai.Create(n[s].hu_tile),true,0,1); if(s!=0)t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); else t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.val.type+=10; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } } for (var l=0,h=t.DesktopMgr.Inst.players;l<h.length;l++){ var c=h[l]; c.hideLiqi() } e.liqi?t.ActionLiqi.fastplay(e.liqi,0):uiscript.UI_DesktopInfo.Inst.setLiqibang(0),t.DesktopMgr.Inst.setScores(e.scores) },i }(t.ActionBase); t.ActionHuleXueLiu=e }(view||(view={})); !function(t){ var e=function(e){ function i(){ return null!==e&&e.apply(this,arguments)||this } return __extends(i,e),i.record=function(e){ var i=this,n=1; e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,0); Laya.timer.once(100,this,function(){ var a=e.hules,r=0; if(e.hules_history)Laya.timer.once(3e3,i,function(){ for(var i=0,a=e.hules_history;i<a.length;i++){ var r=a[i], s=t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(r.seat)]; if(s&&s.already_xuezhan_hule_state){ for(var o=[],l=0;l<r.hand.length;l++)o.push(mjcore.MJPai.Create(r.hand[l])); o=o.sort(mjcore.MJPai.Distance),s.onXuezhanEnd(o,!n) } } }) if(a[0].zimo){ var s=a[0].seat; uiscript.UI_Huleshow.Inst.showZimo([t.DesktopMgr.Inst.seat2LocalPosition(s)]),r+=n?1200:200, Laya.timer.once(r,i,function(){ t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(s)].AddBabei(mjcore.MJPai.Create(a[0].hu_tile),true,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai(); s==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.OnDiscardTile(mjcore.MJPai.Create(a[0].hu_tile),0,0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(s)].recordDiscardTile(mjcore.MJPai.Create(a[0].hu_tile),true,0,0); }) if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0; //if(t.DesktopMgr.Inst.lastqipai&&t.DesktopMgr.Inst.lastqipai.model.meshRender)t.DesktopMgr.Inst.lastqipai.OnChoosedPai(); } else{ for(var o=0,l=-1,h=[],c=0;c<a.length;c++){ var _=a[c].seat; h.push(t.DesktopMgr.Inst.seat2LocalPosition(_)),-1==l&&(l=_) } l>=0&&(o=t.DesktopMgr.Inst.player_effects[l][game.EView.hupai_effect]),n&&uiscript.UI_Huleshow.Inst.showRong(h),r+=n?1200:200,Laya.timer.once(r,i,function(){ if(!t.DesktopMgr.Inst.isLastPaiMingPai())t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(t.DesktopMgr.Inst.lastpai_seat)].QiPaiNoPass(); else{ t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; t.DesktopMgr.Inst.lastqipai.val.type+=10; t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } for(var e=0;e<a.length;e++){ var i=a[e].seat; var s=mjcore.MJPai.Create(a[0].hu_tile); t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].AddBabei(s,true,1); //i==t.DesktopMgr.Inst.seat?t.DesktopMgr.Inst.mainrole.onBabei(mjcore.MJPai.Create(a[e].hu_tile),0,0):t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].recordBabei(mjcore.MJPai.Create(a[e].hu_tile),true,0,0); if(e!=0)t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,.4); else t.DesktopMgr.Inst.lastqipai.lastColor=new Laya.Vector4(1,.78,.78,1); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,t.DesktopMgr.Inst.lastqipai.lastColor); if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.model.meshRender.sharedMaterial.blend=2; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.val.type+=10; if(t.DesktopMgr.Inst.lastqipai)t.DesktopMgr.Inst.lastqipai.isxuezhanhu=!0,t.DesktopMgr.Inst.lastqipai.OnChoosedPai() } }) } r+=2e3,Laya.timer.once(r,i,function(){ for (var n=0,r=t.DesktopMgr.Inst.players;n<r.length;n++){ r[n].hideLiqi() } e.liqi?Laya.timer.once(2500,i,function(){ t.ActionLiqi.play(e.liqi) }):uiscript.UI_DesktopInfo.Inst.setLiqibang(0); for (var s=[],o=0;o<e.delta_scores.length;o++){ var l={ title_id:0, score:0, delta:0 }; if(e.delta_scores[o]>0){ o==t.DesktopMgr.Inst.seat,uiscript.UI_DesktopInfo.Inst.changeHeadEmo(o,"emoji_7",-1),l.delta=e.delta_scores[o]; for(var h=0,c=a;h<c.length;h++) { var _=c[h]; if(_.seat == o){ l.title_id=_.title_id; break } } } else e.delta_scores[o]<0&&(l.delta=e.delta_scores[o],uiscript.UI_DesktopInfo.Inst.changeHeadEmo(o,"emoji_8",-1)); l.score=e.old_scores[o],s.push(l) } Laya.timer.once(200,i,function(){ t.DesktopMgr.Inst.setScores(e.scores) }),uiscript.UI_Hu_Xuezhan.Inst.showScoreChange(s) }),r+=2500,Laya.timer.once(r,this,function(){ for(var i=0;i<e.allplayertiles.length;i++){ for(var n=e.allplayertiles[i].split("|"),r=[],s=0;s<n.length;s++)r.push(mjcore.MJPai.Create(n[s])); r=r.sort(mjcore.MJPai.Distance),t.DesktopMgr.Inst.players[t.DesktopMgr.Inst.seat2LocalPosition(i)].Huangpai(!0,r,!1) } }),r+=2500,Laya.timer.once(r,i,function(){ uiscript.UIMgr.Inst.ShowWin(e,!1),t.DesktopMgr.Inst.ActionRunComplete() }) }) return 1e5; },i.fastrecord=function(e,i){ app.Log.log("ActionHule fastplay data:"+JSON.stringify(e)); t.BgmListMgr.stopBgm(),t.DesktopMgr.Inst.gameing=!1,e.muyu&&t.DesktopMgr.Inst.onMuyuChange(e.muyu,!1),e.doras&&t.DesktopMgr.Inst.WhenDoras(e.doras,!1),t.DesktopMgr.Inst.setScores(e.scores),uiscript.UIMgr.Inst.ShowWin(e,!1) },i }(t.ActionBase); t.ActionHuleXueLiuEnd=e }(view||(view={})); let OnChoosedPai=view.ViewPai.prototype.OnChoosedPai; view.ViewPai.prototype.OnChoosedPai=function(){ try{ let e=view.DesktopMgr.Inst.choosed_pai; if(null==e||0!=mjcore.MJPai.Distance(this.val,e)) { if(this.lastColor!==undefined)this.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,this.lastColor); else if(this.isxuezhanhu||this.ispaopai)this.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,new Laya.Vector4(1,.78,.78,1)); else if(this.ismoqie)this.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,new Laya.Vector4(.8,.8,.8,1)); else this.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,this.GetDefaultColor()); } else this.model.meshRender.sharedMaterial.setColor(caps.Cartoon.COLOR,new Laya.Vector4(.615,.827,.976,1)); }catch(e){ OnChoosedPai.call(this); console.error(e); } } uiscript.UI_Replay.prototype.doRecord=function(t){ try{ var e=0; switch(t.name){ case "RecordNewRound": e=view.ActionNewRound.record(t.data); break; case "RecordChangeTile": e=view.ActionChangeTile.record(t.data); break; case "RecordSelectGap": e=view.ActionSelectGap.record(t.data); break; case "RecordDiscardTile": e=view.ActionDiscardTile.record(t.data); break; case "RecordDealTile": e=view.ActionDealTile.record(t.data); break; case "RecordChiPengGang": e=view.ActionChiPengGang.record(t.data); break; case "RecordAnGangAddGang": e=view.ActionAnGangAddGang.record(t.data); break; case "RecordBaBei": e=view.ActionBabei.record(t.data); break; case "RecordHule": e=view.ActionHule.record(t.data); break; case "RecordLiuJu": e=view.ActionLiuJu.record(t.data); break; case "RecordNoTile": e=view.ActionNoTile.record(t.data); break; case "RecordHuleXueZhanMid": e=view.ActionHuleXueZhanMid.record(t.data); break; case "RecordHuleXueZhanEnd": e=view.ActionHuleXueZhanEnd.record(t.data); break; case "RecordGangResult": e=view.ActionGangResult.record(t.data); break; case "RecordGangResultEnd": e=view.ActionGangResultEnd.record(t.data); break; case "RecordHuleXueLiu": e=view.ActionHuleXueLiu.record(t.data); break; case "RecordHuleXueLiuEnd": e=view.ActionHuleXueLiuEnd.record(t.data) } return this.auto_play&&(e+=this._get_autoplay_delay(t)),"RecordNewRound"!=t.name&&"RecordDealTile"!=t.name||this.page_paishan.refresh(),e }catch (e){ var i={}; return i.error=e.message,i.stack=e.stack,i.method="ui_replay doRecord",i.name=t.name,i.data=t.data,GameMgr.Inst.onFatalError(i),1e6 } }; uiscript.UI_Replay.prototype.doFastRecord = function(t) { try{ switch(t.name){ case "RecordNewRound": view.ActionNewRound.fastrecord(t.data); break; case "RecordChangeTile": view.ActionChangeTile.fastrecord(t.data); break; case "RecordSelectGap": view.ActionSelectGap.fastrecord(t.data); break; case "RecordDiscardTile": view.ActionDiscardTile.fastrecord(t.data); break; case "RecordDealTile": view.ActionDealTile.fastrecord(t.data); break; case "RecordChiPengGang": view.ActionChiPengGang.fastrecord(t.data); break; case "RecordAnGangAddGang": view.ActionAnGangAddGang.fastrecord(t.data); break; case "RecordHule": view.ActionHule.fastrecord(t.data); break; case "RecordLiuJu": view.ActionLiuJu.fastrecord(t.data); break; case "RecordNoTile": view.ActionNoTile.fastrecord(t.data); break; case "RecordBaBei": view.ActionBabei.fastrecord(t.data); break; case "RecordHuleXueZhanMid": view.ActionHuleXueZhanMid.fastrecord(t.data); break; case "RecordHuleXueZhanEnd": view.ActionHuleXueZhanEnd.fastrecord(t.data); break; case "RecordHuleXueLiu": view.ActionHuleXueLiu.fastrecord(t.data); break; case "RecordHuleXueLiuEnd": view.ActionHuleXueLiuEnd.fastrecord(t.data); } "RecordNewRound"!=t.name&&"RecordDealTile"!=t.name||this.page_paishan.refresh() }catch (i){ var e={}; return e.error=i.message,e.stack=i.stack,e.method="ui_replay doRecord",e.name=t.name,e.data=t.data,GameMgr.Inst.onFatalError(e),1e6 } return 0 } uiscript.UI_Replay.prototype._get_autoplay_delay=function(t){ switch(t.name){ case "RecordNewRound": return 0; case "RecordChangeTile": case "RecordDiscardTile": case "RecordDealTile": case "RecordChiPengGang": return 500; case "RecordAnGangAddGang": case "RecordBaBei": return 200; case "RecordHuleXueZhanMid": return 500; case "RecordHuleXueLiu": return 500; } return 0 } } function md5(string){ function md5_RotateLeft(lValue,iShiftBits){ return(lValue<<iShiftBits)|(lValue>>>(32-iShiftBits)); } function md5_AddUnsigned(lX,lY){ var lX4,lY4,lX8,lY8,lResult; lX8=(lX&0x80000000); lY8=(lY&0x80000000); lX4=(lX&0x40000000); lY4=(lY&0x40000000); lResult=(lX&0x3FFFFFFF)+(lY&0x3FFFFFFF); if(lX4&lY4)return(lResult^0x80000000^lX8^lY8); if(lX4|lY4){ if(lResult&0x40000000)return(lResult^0xC0000000^lX8^lY8); else return(lResult^0x40000000^lX8^lY8); } else return(lResult^lX8^lY8); } function md5_F(x,y,z){ return(x&y)|((~x)&z); } function md5_G(x,y,z){ return(x&z)|(y&(~z)); } function md5_H(x,y,z){ return(x^y^z); } function md5_I(x,y,z){ return(y^(x|(~z))); } function md5_FF(a,b,c,d,x,s,ac){ a=md5_AddUnsigned(a,md5_AddUnsigned(md5_AddUnsigned(md5_F(b,c,d),x),ac)); return md5_AddUnsigned(md5_RotateLeft(a,s),b); }; function md5_GG(a,b,c,d,x,s,ac){ a=md5_AddUnsigned(a,md5_AddUnsigned(md5_AddUnsigned(md5_G(b,c,d),x),ac)); return md5_AddUnsigned(md5_RotateLeft(a,s),b); }; function md5_HH(a,b,c,d,x,s,ac){ a=md5_AddUnsigned(a,md5_AddUnsigned(md5_AddUnsigned(md5_H(b,c,d),x),ac)); return md5_AddUnsigned(md5_RotateLeft(a,s),b); }; function md5_II(a,b,c,d,x,s,ac){ a=md5_AddUnsigned(a,md5_AddUnsigned(md5_AddUnsigned(md5_I(b,c,d),x),ac)); return md5_AddUnsigned(md5_RotateLeft(a,s),b); }; function md5_ConvertToWordArray(string){ var lWordCount; var lMessageLength=string.length; var lNumberOfWords_temp1=lMessageLength+8; var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1%64))/64; var lNumberOfWords=(lNumberOfWords_temp2+1)*16; var lWordArray=Array(lNumberOfWords-1); var lBytePosition=0; var lByteCount=0; while(lByteCount<lMessageLength){ lWordCount=(lByteCount-(lByteCount%4))/4; lBytePosition=(lByteCount%4)*8; lWordArray[lWordCount]=(lWordArray[lWordCount]|(string.charCodeAt(lByteCount)<<lBytePosition)); lByteCount++; } lWordCount=(lByteCount-(lByteCount%4))/4; lBytePosition=(lByteCount%4)*8; lWordArray[lWordCount]=lWordArray[lWordCount]|(0x80<<lBytePosition); lWordArray[lNumberOfWords-2]=lMessageLength<<3; lWordArray[lNumberOfWords-1]=lMessageLength>>>29; return lWordArray; }; function md5_WordToHex(lValue){ var WordToHexValue="", WordToHexValue_temp="", lByte,lCount; for(lCount=0;lCount<=3;lCount++){ lByte=(lValue>>>(lCount*8))&255; WordToHexValue_temp="0"+lByte.toString(16); WordToHexValue=WordToHexValue+WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2); } return WordToHexValue; }; function md5_Utf8Encode(string){ string=string.replace(/\r\n/g,"\n"); var utftext=""; for(var n=0;n<string.length;n++){ var c=string.charCodeAt(n); if(c<128)utftext+=String.fromCharCode(c); else if((c>127)&&(c<2048)){ utftext+=String.fromCharCode((c>>6)|192); utftext+=String.fromCharCode((c&63)|128); }else{ utftext+=String.fromCharCode((c>>12)|224); utftext+=String.fromCharCode(((c>>6)&63)|128); utftext+=String.fromCharCode((c&63)|128); } } return utftext; }; var x=Array(); var k,AA,BB,CC,DD,a,b,c,d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9, S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; string=md5_Utf8Encode(string); x=md5_ConvertToWordArray(string); a=0x67452301; b=0xEFCDAB89; c=0x98BADCFE; d=0x10325476; for(k=0;k<x.length;k+=16){ AA=a; BB=b; CC=c; DD=d; a=md5_FF(a,b,c,d,x[k+0],S11,0xD76AA478); d=md5_FF(d,a,b,c,x[k+1],S12,0xE8C7B756); c=md5_FF(c,d,a,b,x[k+2],S13,0x242070DB); b=md5_FF(b,c,d,a,x[k+3],S14,0xC1BDCEEE); a=md5_FF(a,b,c,d,x[k+4],S11,0xF57C0FAF); d=md5_FF(d,a,b,c,x[k+5],S12,0x4787C62A); c=md5_FF(c,d,a,b,x[k+6],S13,0xA8304613); b=md5_FF(b,c,d,a,x[k+7],S14,0xFD469501); a=md5_FF(a,b,c,d,x[k+8],S11,0x698098D8); d=md5_FF(d,a,b,c,x[k+9],S12,0x8B44F7AF); c=md5_FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1); b=md5_FF(b,c,d,a,x[k+11],S14,0x895CD7BE); a=md5_FF(a,b,c,d,x[k+12],S11,0x6B901122); d=md5_FF(d,a,b,c,x[k+13],S12,0xFD987193); c=md5_FF(c,d,a,b,x[k+14],S13,0xA679438E); b=md5_FF(b,c,d,a,x[k+15],S14,0x49B40821); a=md5_GG(a,b,c,d,x[k+1],S21,0xF61E2562); d=md5_GG(d,a,b,c,x[k+6],S22,0xC040B340); c=md5_GG(c,d,a,b,x[k+11],S23,0x265E5A51); b=md5_GG(b,c,d,a,x[k+0],S24,0xE9B6C7AA); a=md5_GG(a,b,c,d,x[k+5],S21,0xD62F105D); d=md5_GG(d,a,b,c,x[k+10],S22,0x2441453); c=md5_GG(c,d,a,b,x[k+15],S23,0xD8A1E681); b=md5_GG(b,c,d,a,x[k+4],S24,0xE7D3FBC8); a=md5_GG(a,b,c,d,x[k+9],S21,0x21E1CDE6); d=md5_GG(d,a,b,c,x[k+14],S22,0xC33707D6); c=md5_GG(c,d,a,b,x[k+3],S23,0xF4D50D87); b=md5_GG(b,c,d,a,x[k+8],S24,0x455A14ED); a=md5_GG(a,b,c,d,x[k+13],S21,0xA9E3E905); d=md5_GG(d,a,b,c,x[k+2],S22,0xFCEFA3F8); c=md5_GG(c,d,a,b,x[k+7],S23,0x676F02D9); b=md5_GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A); a=md5_HH(a,b,c,d,x[k+5],S31,0xFFFA3942); d=md5_HH(d,a,b,c,x[k+8],S32,0x8771F681); c=md5_HH(c,d,a,b,x[k+11],S33,0x6D9D6122); b=md5_HH(b,c,d,a,x[k+14],S34,0xFDE5380C); a=md5_HH(a,b,c,d,x[k+1],S31,0xA4BEEA44); d=md5_HH(d,a,b,c,x[k+4],S32,0x4BDECFA9); c=md5_HH(c,d,a,b,x[k+7],S33,0xF6BB4B60); b=md5_HH(b,c,d,a,x[k+10],S34,0xBEBFBC70); a=md5_HH(a,b,c,d,x[k+13],S31,0x289B7EC6); d=md5_HH(d,a,b,c,x[k+0],S32,0xEAA127FA); c=md5_HH(c,d,a,b,x[k+3],S33,0xD4EF3085); b=md5_HH(b,c,d,a,x[k+6],S34,0x4881D05); a=md5_HH(a,b,c,d,x[k+9],S31,0xD9D4D039); d=md5_HH(d,a,b,c,x[k+12],S32,0xE6DB99E5); c=md5_HH(c,d,a,b,x[k+15],S33,0x1FA27CF8); b=md5_HH(b,c,d,a,x[k+2],S34,0xC4AC5665); a=md5_II(a,b,c,d,x[k+0],S41,0xF4292244); d=md5_II(d,a,b,c,x[k+7],S42,0x432AFF97); c=md5_II(c,d,a,b,x[k+14],S43,0xAB9423A7); b=md5_II(b,c,d,a,x[k+5],S44,0xFC93A039); a=md5_II(a,b,c,d,x[k+12],S41,0x655B59C3); d=md5_II(d,a,b,c,x[k+3],S42,0x8F0CCC92); c=md5_II(c,d,a,b,x[k+10],S43,0xFFEFF47D); b=md5_II(b,c,d,a,x[k+1],S44,0x85845DD1); a=md5_II(a,b,c,d,x[k+8],S41,0x6FA87E4F); d=md5_II(d,a,b,c,x[k+15],S42,0xFE2CE6E0); c=md5_II(c,d,a,b,x[k+6],S43,0xA3014314); b=md5_II(b,c,d,a,x[k+13],S44,0x4E0811A1); a=md5_II(a,b,c,d,x[k+4],S41,0xF7537E82); d=md5_II(d,a,b,c,x[k+11],S42,0xBD3AF235); c=md5_II(c,d,a,b,x[k+2],S43,0x2AD7D2BB); b=md5_II(b,c,d,a,x[k+9],S44,0xEB86D391); a=md5_AddUnsigned(a,AA); b=md5_AddUnsigned(b,BB); c=md5_AddUnsigned(c,CC); d=md5_AddUnsigned(d,DD); } return(md5_WordToHex(a)+md5_WordToHex(b)+md5_WordToHex(c)+md5_WordToHex(d)).toLowerCase(); } var initData,initRoom,show; //uiscript.UI_ScoreChange.prototype.setBaopai=function(){} function editgame(editdata){ try{ let UI_Replay=uiscript.UI_Replay.Inst; let rounds=[]; for(let i=0;i<editdata.actions.length;i++){ let whatever={ 'actions':editdata.actions[i], 'xun':[] } try{ whatever.xun=editdata.xun[i][view.DesktopMgr.Inst.seat]; }catch(e){ //throw(e); whatever.xun=editdata.xun[i][0]; } rounds.push(whatever); } UI_Replay.rounds=rounds; UI_Replay.gameResult.result.players=editdata.players; }catch(e){ throw(e); } } function edit(x){ if(initData==undefined)initData=uiscript.UI_Replay.prototype.initData; if(initRoom==undefined)initRoom=view.DesktopMgr.prototype.initRoom; if(show==undefined)show=uiscript.UI_GameEnd.prototype.show; try{editfunction();}catch(e){}; function player_datas(a){ let ret=[]; for(let seat=0;seat<x.player_datas.length;seat++){ ret[seat]={ 'nickname':x.player_datas[seat].nickname, 'avatar_id':x.player_datas[seat].avatar_id, 'avatar_frame':x.player_datas[seat].avatar_frame, 'character':{ 'is_upgraded':true, 'level':5, 'charid':cfg.item_definition.skin.map_[x.player_datas[seat].avatar_id].character_id, 'skin':x.player_datas[seat].avatar_id, }, 'level':{'id':10101}, 'level3':{'id':20101}, 'charid':cfg.item_definition.skin.map_[x.player_datas[seat].avatar_id].character_id, 'seat':seat, 'views':x.player_datas[seat].views, 'title':x.player_datas[seat].title, } if(a[seat].account_id!=undefined)ret[seat].account_id=a[seat].account_id; } return ret; } if(x==undefined)x=JSON.parse(JSON.stringify(editdata)); uiscript.UI_Replay.prototype.initData=function(t){ let _=initData.call(this,t); editgame(x); return _; } view.DesktopMgr.prototype.initRoom=function(e,a,s,o,l){ if(o==1)return initRoom.call(this,x.config,player_datas(a),s,o,l); else return initRoom.call(this,e,a,s,o,l); } //console.log("edit successfully"); } function canceledit(){ uiscript.UI_Replay.prototype.initData=function(t){ return initData.call(this,t); } view.DesktopMgr.prototype.initRoom=function(e,a,s,o,l){ return initRoom.call(this,e,a,s,o,l); } } var scores=[25000,25000,25000,25000],tiles0=null,tiles1=null,tiles2=null,tiles3=null,firstneededscores=null; var baopai=null,liqibang=0,lstliqi=null,doracnt=null,playertiles=null,fulu=null,paihe=null,muyu={'count':5,'seat':0,'id':0}; var liqiinfo=null,drawtype=null,lstdrawtype=null,doras=null,li_doras=null,delta_scores=null,muyutimes=null,muyuseats=null,mingpais=[{},{},{},{}]; var chang=0,ju=0,ben=0,playercnt=null,actions=[],xun=[],players=[],benchangbang=null,chuanmagangs=null; var config=null,hules_history=null,hupaied=null,paishan=null,discardtiles=["","","",""],gaps=null,juc=-1; var specialtiles={ 'all':separatetile("0123456789m0123456789p0123456789s1234567z"), 'lvyise':separatetile("0123456789m0123456789p01579s123457z"), 'ziyise':separatetile("0123456789m0123456789p0123456789s"), 'qinglaotou':separatetile("02345678m02345678p02345678s1234567z"), 'duanyaojiu':separatetile("19m19p19s1234567z"), 'hunlaotou':separatetile("02345678m02345678p02345678s"), 'guoshiwushuang':separatetile("02345678m02345678p02345678s"), 'qingyise_man':separatetile("0123456789p0123456789s1234567z"), 'qingyise_pin':separatetile("0123456789m0123456789s1234567z"), 'qingyise_sou':separatetile("0123456789m0123456789p1234567z"), 'hunyise_man':separatetile("0123456789p0123456789s"), 'hunyise_pin':separatetile("0123456789m0123456789s"), 'hunyise_sou':separatetile("0123456789m0123456789p"), } var settings={}; var editdata={ 'actions':[], 'xun':[], 'players':[], 'config':{}, 'player_datas':[{'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}] }; var lstscene; function saveproject(){ let tmp={}; tmp.scores=JSON.parse(JSON.stringify(scores)); tmp.tiles0=JSON.parse(JSON.stringify(tiles0)); tmp.tiles1=JSON.parse(JSON.stringify(tiles1)); tmp.tiles2=JSON.parse(JSON.stringify(tiles2)); tmp.tiles3=JSON.parse(JSON.stringify(tiles3)); tmp.firstneededscores=JSON.parse(JSON.stringify(firstneededscores)); tmp.baopai=JSON.parse(JSON.stringify(baopai)); tmp.liqibang=JSON.parse(JSON.stringify(liqibang)); tmp.lstliqi=JSON.parse(JSON.stringify(lstliqi)); tmp.doracnt=JSON.parse(JSON.stringify(doracnt)); tmp.playertiles=JSON.parse(JSON.stringify(playertiles)); tmp.fulu=JSON.parse(JSON.stringify(fulu)); tmp.paihe=JSON.parse(JSON.stringify(paihe)); tmp.muyu=JSON.parse(JSON.stringify(muyu)); tmp.liqiinfo=JSON.parse(JSON.stringify(liqiinfo)); tmp.drawtype=JSON.parse(JSON.stringify(drawtype)); tmp.lstdrawtype=JSON.parse(JSON.stringify(lstdrawtype)); tmp.doras=JSON.parse(JSON.stringify(doras)); tmp.li_doras=JSON.parse(JSON.stringify(li_doras)); tmp.delta_scores=JSON.parse(JSON.stringify(delta_scores)); tmp.muyutimes=JSON.parse(JSON.stringify(muyutimes)); tmp.muyuseats=JSON.parse(JSON.stringify(muyuseats)); tmp.mingpais=JSON.parse(JSON.stringify(mingpais)); tmp.chang=JSON.parse(JSON.stringify(chang)); tmp.ju=JSON.parse(JSON.stringify(ju)); tmp.ben=JSON.parse(JSON.stringify(ben)); tmp.playercnt=JSON.parse(JSON.stringify(playercnt)); tmp.actions=JSON.parse(JSON.stringify(actions)); tmp.xun=JSON.parse(JSON.stringify(xun)); tmp.players=JSON.parse(JSON.stringify(players)); tmp.benchangbang=JSON.parse(JSON.stringify(benchangbang)); tmp.chuanmagangs=JSON.parse(JSON.stringify(chuanmagangs)); tmp.config=JSON.parse(JSON.stringify(config)); tmp.hules_history=JSON.parse(JSON.stringify(hules_history)); tmp.hupaied=JSON.parse(JSON.stringify(hupaied)); tmp.paishan=JSON.parse(JSON.stringify(paishan)); tmp.discardtiles=JSON.parse(JSON.stringify(discardtiles)); tmp.gaps=JSON.parse(JSON.stringify(gaps)); tmp.juc=JSON.parse(JSON.stringify(juc)); tmp.settings=JSON.parse(JSON.stringify(settings)); tmp.editdata=JSON.parse(JSON.stringify(editdata)); lstscene=tmp; } function loadproject(x){ if(x!=undefined){ scores=JSON.parse(JSON.stringify(x.scores)); tiles0=JSON.parse(JSON.stringify(x.tiles0)); tiles1=JSON.parse(JSON.stringify(x.tiles1)); tiles2=JSON.parse(JSON.stringify(x.tiles2)); tiles3=JSON.parse(JSON.stringify(x.tiles3)); firstneededscores=JSON.parse(JSON.stringify(x.firstneededscores)); baopai=JSON.parse(JSON.stringify(x.baopai)); liqibang=JSON.parse(JSON.stringify(x.liqibang)); lstliqi=JSON.parse(JSON.stringify(x.lstliqi)); doracnt=JSON.parse(JSON.stringify(x.doracnt)); playertiles=JSON.parse(JSON.stringify(x.playertiles)); fulu=JSON.parse(JSON.stringify(x.fulu)); paihe=JSON.parse(JSON.stringify(x.paihe)); muyu=JSON.parse(JSON.stringify(x.muyu)); liqiinfo=JSON.parse(JSON.stringify(x.liqiinfo)); drawtype=JSON.parse(JSON.stringify(x.drawtype)); lstdrawtype=JSON.parse(JSON.stringify(x.lstdrawtype)); doras=JSON.parse(JSON.stringify(x.doras)); li_doras=JSON.parse(JSON.stringify(x.li_doras)); delta_scores=JSON.parse(JSON.stringify(x.delta_scores)); muyutimes=JSON.parse(JSON.stringify(x.muyutimes)); muyuseats=JSON.parse(JSON.stringify(x.muyuseats)); mingpais=JSON.parse(JSON.stringify(x.mingpais)); chang=JSON.parse(JSON.stringify(x.chang)); ju=JSON.parse(JSON.stringify(x.ju)); ben=JSON.parse(JSON.stringify(x.ben)); playercnt=JSON.parse(JSON.stringify(x.playercnt)); actions=JSON.parse(JSON.stringify(x.actions)); xun=JSON.parse(JSON.stringify(x.xun)); players=JSON.parse(JSON.stringify(x.players)); benchangbang=JSON.parse(JSON.stringify(x.benchangbang)); chuanmagangs=JSON.parse(JSON.stringify(x.chuanmagangs)); config=JSON.parse(JSON.stringify(x.config)); hules_history=JSON.parse(JSON.stringify(x.hules_history)); hupaied=JSON.parse(JSON.stringify(x.hupaied)); paishan=JSON.parse(JSON.stringify(x.paishan)); discardtiles=JSON.parse(JSON.stringify(x.discardtiles)); gaps=JSON.parse(JSON.stringify(x.gaps)); juc=JSON.parse(JSON.stringify(x.juc)); settings=JSON.parse(JSON.stringify(x.settings)); editdata=JSON.parse(JSON.stringify(x.editdata)); return; } scores=[25000,25000,25000,25000];tiles0=null;tiles1=null;tiles2=null;tiles3=null; liqibang=0;muyu={'count':5,'seat':0,'id':0}; mingpais=[{},{},{},{}];chang=0;ju=0;ben=0; paishan=null;discardtiles=["","","",""];juc=-1; editdata={ 'actions':[], 'xun':[], 'players':null, 'config':{}, 'player_datas':[{'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}, {'avatar_frame':0,'avatar_id':400101,'nickname':"电脑(简单)",'title':600001,'views':[]}] }; } function edit_online(){ saveproject(); if(actions.length!=0)roundend(true); gameend(true); try{ if(view.DesktopMgr.Inst.active){ //console.log("Path1"); editgame(JSON.parse(JSON.stringify(editdata))); } else{ //console.log("Path2"); edit(JSON.parse(JSON.stringify(editdata))); } }catch(e){ //console.log("Path2"); edit(JSON.parse(JSON.stringify(editdata))); } try{view.DesktopMgr.Inst.player_datas=(JSON.parse(JSON.stringify(x))).player_datas}catch(e){}; try{view.DesktopMgr.Inst.gameEndResult.players=(JSON.parse(JSON.stringify(x))).players;}catch(e){}; loadproject(lstscene); } function init(){ try{ if(unsafeWindow.tiles0!=null){tiles0=unsafeWindow.tiles0;unsafeWindow.tiles0=null;} if(unsafeWindow.tiles1!=null){tiles1=unsafeWindow.tiles1;unsafeWindow.tiles1=null;} if(unsafeWindow.tiles2!=null){tiles2=unsafeWindow.tiles2;unsafeWindow.tiles2=null;} if(unsafeWindow.tiles3!=null){tiles3=unsafeWindow.tiles3;unsafeWindow.tiles3=null;} if(unsafeWindow.paishan!=null){paishan=unsafeWindow.paishan;unsafeWindow.paishan=null;} if(unsafeWindow.discardtiles!=null){discardtiles=unsafeWindow.discardtiles;unsafeWindow.discardtiles=null;} if(unsafeWindow.muyuseats!=null){muyuseats=unsafeWindow.muyuseats;unsafeWindow.muyuseats=null} }catch(e){}; muyutimes=[1,1,1,1]; if(typeof(muyuseats)=="number")muyuseats=muyuseats.toString(); xun=[[],[],[],[]]; gaps=[]; baopai=[]; actions=[]; lstliqi=0; chuanmagangs={'over':[],'notover':[]}; doracnt={'cnt':1,'lsttype':0}; hupaied=[false,false,false,false]; hules_history=[]; playertiles=[[],[],[],[]]; fulu=[[],[],[],[]]; paihe=[{'liujumanguan':true,'tiles':[]},{'liujumanguan':true,'tiles':[]}, {'liujumanguan':true,'tiles':[]},{'liujumanguan':true,'tiles':[]}]; liqiinfo=[{'liqi':0,'kai':0,'yifa':1},{'liqi':0,'kai':0,'yifa':1}, {'liqi':0,'kai':0,'yifa':1},{'liqi':0,'kai':0,'yifa':1}]; drawtype=1;lstdrawtype=1; playercnt;doras=[];li_doras=[]; if(tiles0==null&&tiles1==null&&tiles2==null&&tiles3==null){ tiles0=[];tiles1=[];tiles2=[];tiles3=[]; if(paishan==null)paishan=randompaishan(""); for(let i=1;i<=3;i++){ if(ju==0)for(let o=1;o<=4;o++){tiles0.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==0||ju==1)for(let o=1;o<=4;o++){tiles1.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==0||ju==1||ju==2)for(let o=1;o<=4;o++){tiles2.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} for(let o=1;o<=4;o++){tiles3.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==1||ju==2||ju==3)for(let o=1;o<=4;o++){tiles0.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==2||ju==3)for(let o=1;o<=4;o++){tiles1.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==3)for(let o=1;o<=4;o++){tiles2.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} } if(ju==0){tiles0.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==0||ju==1){tiles1.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==0||ju==1||ju==2){tiles2.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} tiles3.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2); tiles0.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2); if(ju==1||ju==2||ju==3){tiles1.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==2||ju==3){tiles2.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} if(ju==3){tiles3.push(paishan.substring(paishan.length-2));paishan=paishan.substring(0,paishan.length-2);} } paishan=decompose(paishan); for(let i=0;i<discardtiles.length;i++)discardtiles[i]=decompose(discardtiles[i]); if(typeof(tiles0)=="string")tiles0=separatetile(tiles0); if(typeof(tiles1)=="string")tiles1=separatetile(tiles1); if(typeof(tiles2)=="string")tiles2=separatetile(tiles2); if(typeof(tiles3)=="string")tiles3=separatetile(tiles3); tiles0.sort(cmp); tiles1.sort(cmp); tiles2.sort(cmp); tiles3.sort(cmp); if(tiles3.length==0||tiles3==null){ playercnt=3; for(let i=0;i<5;i++){ doras[i]=paishan[paishan.length-18-4*i]+paishan[paishan.length-17-4*i]; li_doras[i]=paishan[paishan.length-20-4*i]+paishan[paishan.length-19-4*i]; } } else { playercnt=4; for(let i=0;i<5;i++){ doras[i]=paishan[paishan.length-10-4*i]+paishan[paishan.length-9-4*i]; li_doras[i]=paishan[paishan.length-12-4*i]+paishan[paishan.length-11-4*i]; } } delta_scores=[]; for(let i=0;i<playercnt;i++)delta_scores[i]=0; for(let i=0;i<tiles0.length;i++)playertiles[0][i]=tiles0[i]; for(let i=0;i<tiles1.length;i++)playertiles[1][i]=tiles1[i]; for(let i=0;i<tiles2.length;i++)playertiles[2][i]=tiles2[i]; for(let i=0;i<tiles3.length;i++)playertiles[3][i]=tiles3[i]; } function is_xuezhandaodi(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.xuezhandaodi)return true; return false; } function is_huansanzhang(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.huansanzhang)return true; return false; } function is_guyi(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.guyi_mode)return true; return false; } function is_peipaimingpai(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.begin_open_mode)return true; return false; } function is_dora3(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.dora3_mode)return true; return false; } function is_muyu(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.muyu_mode)return true; return false; } function is_chuanma(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.chuanma)return true; return false; } function is_xueliu(){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.xueliu)return true; return false; } function is_openhand(seat){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.open_hand&&config.mode.detail_rule.open_hand[seat]=='1')return true; return false; } function is_shiduan(){ if(!config)return true; if(!config.mode||config.category==2)return true; if(!config.mode.detail_rule)return true; if(config.mode.detail_rule.shiduan==undefined||config.mode.detail_rule.shiduan==true)return true; return false; } function fanfu(){ if(!config)return 1; if(!config.mode)return 1; if(!config.mode.detail_rule||config.mode.detail_rule.fanfu==0)return 1; if(config.mode.detail_rule.fanfu)return config.mode.detail_rule.fanfu; return 1; } function have_zimosun(){ if(!config)return true; if(!config.mode||config.category==2)return true; if(!config.mode.detail_rule)return true; if(config.mode.detail_rule.have_zimosun==undefined||config.mode.detail_rule.have_zimosun==true)return true; return false; } function get_muyu(type){ if(type=="new"){ muyu.id++; muyu.count=5; if(muyuseats&&muyuseats[0]){ muyu.seat=parseInt(muyuseats[0]); muyuseats=muyuseats.substring(1); } else muyu.seat=Math.floor(Math.random()*4); } if(type=="countdown"){ muyu.count--; } return muyu; } function update_muyu(){ muyutimes=[1,1,1,1]; muyutimes[muyu.seat]++; } function decompose(x){ for(let i=0;i<x.length;i++){ if(x[i]!='m'&&x[i]!='p'&&x[i]!='s'&&x[i]!='z') for(let j=i+1;j<x.length;j++){ if(x[j]=='m'||x[j]=='p'||x[j]=='s'||x[j]=='z'){ if(j!=i+1)x=x.substring(0,i+1)+x[j]+x.substring(i+1); i++; break; } } } return x; } function separatetile(x){ x=decompose(x); let ret=[]; while(x.length>0){ ret.push(x.substring(0,2)); x=x.substring(2); } return ret; } function getlstaction(x){ if(x==undefined)x=1; let ret=actions.length; for(let i=1;i<=x;i++){ ret--; while(actions[ret]!=undefined&&(actions[ret].name=="RecordSelectGap"||actions[ret].name=="RecordGangResult"))ret--; } return actions[ret]; } var nxt2=[0,2,3,4,5,6,7,8,9,35,11,12,13,14,15,16,17,18,35,20,21,22,23,24,25,26,27,35,35,35,35,35,35,35,35,36,0,0,0,0]; var doranxt=[0,2,3,4,5,6,7,8,9, 1,11,12,13,14,15,16,17,18,10,20,21,22,23,24,25,26,27,19,29,30,31,28,33,34,32]; function equaltile(x,y){ if(x[1]==y[1]&&x[0]=='0'&&y[0]=='5')return 1; if(x[1]==y[1]&&x[0]=='5'&&y[0]=='0')return 1; if(x==y)return 1; return 0; } function tiletoint(tile,type){ if(type!=undefined){ if(tile=="0m")return 35; if(tile=="0p")return 36; if(tile=="0s")return 37; } if(tile[0]=='0')tile='5'+tile[1]; if(tile[1]=='m')return parseInt(tile); if(tile[1]=='p')return 9+parseInt(tile); if(tile[1]=='s')return 18+parseInt(tile); if(tile[1]=='z')return 27+parseInt(tile); } function inttotile(x){ if(x>=1&&x<=9)return x.toString()+"m"; if(x>=10&&x<=18)return (x-9).toString()+"p"; if(x>=19&&x<=27)return (x-18).toString()+"s"; if(x>=28&&x<=34)return (x-27).toString()+"z"; if(x==35)return "0m"; if(x==36)return "0p"; if(x==37)return "0s"; } function huazhu(seat){ for(let i=0;i<playertiles[seat].length;i++){ if(Math.floor((tiletoint(playertiles[seat][i])-1)/9)==0&&gaps[seat]==1)return true; if(Math.floor((tiletoint(playertiles[seat][i])-1)/9)==1&&gaps[seat]==0)return true; if(Math.floor((tiletoint(playertiles[seat][i])-1)/9)==2&&gaps[seat]==2)return true; } for(let i=0;i<fulu[seat].length;i++){ if(Math.floor((tiletoint(fulu[seat][i].tile[0])-1)/9)==0&&gaps[seat]==1)return true; if(Math.floor((tiletoint(fulu[seat][i].tile[0])-1)/9)==1&&gaps[seat]==0)return true; if(Math.floor((tiletoint(fulu[seat][i].tile[0])-1)/9)==2&&gaps[seat]==2)return true; } return false; } function erasemingpai(tile,seat){ if(mingpais[seat][tile]>0){ mingpais[seat][tile]--; return 1; } return 0; } function calchupai(tls){ let cnt=[],tmp=[]; for(let i=0;i<=36;i++){cnt[i]=0;tmp[i]=0;} for(let i=0;i<tls.length;i++)cnt[tiletoint(tls[i])]++; for(let i=1;i<=34;i++)if(cnt[i]>4)return 0; for(let i=1;i<=34;i++){ if(cnt[i]>=2){ let ok=1; cnt[i]-=2; for(let j=1;j<=34;j++)tmp[j]=cnt[j]; for(let k=1;k<=3;k++){ for(let j=k*9-8;j;j=nxt2[j]){ if(tmp[j]<0){ ok=0; break; } tmp[j]%=3; tmp[nxt2[j]]-=tmp[j]; tmp[nxt2[nxt2[j]]]-=tmp[j]; } tmp[35]=tmp[36]=0; } for(let j=28;j<=34;j++)if(tmp[j]%3!=0)ok=0; cnt[i]+=2; if(ok)return 1; } } let duizi=0; for(let i=1;i<=34;i++){ if(cnt[i]==2)duizi++; if(cnt[i]==4&&is_chuanma())duizi+=2; } if(duizi==7)return 2; let guoshi=1; for(let i=1;i<=34;i++){ if(i==1||i==9||i==10||i==18||i==19||i>=27&&i<=34){if(cnt[i]==0)guoshi=0;} else if(cnt[i]!=0)guoshi=0; } if(guoshi)return 3; return 0; } function tingpai(seat){ if(is_chuanma()&&huazhu(seat))return []; let tls=playertiles[seat]; let cnt=[]; for(let i=0;i<=36;i++)cnt[i]=0; for(let i=0;i<tls.length;i++)cnt[tiletoint(tls[i])]++; for(let i=fulu[seat].length-1;i>=0;i--)if(fulu[seat][i].type==3)cnt[tiletoint(fulu[seat][i].tile[0])]+=4; let res=[]; for(let i=1;i<=34;i++){ tls.push(inttotile(i)); cnt[i]++; if(cnt[i]<5&&calchupai(tls)!=0)res.push({'tile':inttotile(i)}); tls.length=tls.length-1; cnt[i]--; } return res; } function inserthules_history(x){ let flag=false; for(let i=0;i<hules_history.length;i++){ let y=hules_history[i]; let flag2=true; if(x.seat!=y.seat)flag2=false; if(x.hu_tile!=y.hu_tile)flag2=false; if(y.fans.length!=x.fans.length)flag2=false; if(x.dadian!=y.dadian)flag2=false; if(x.zimo!=y.zimo)flag2=false; if(flag2)for(let j=0;j<x.fans.length;j++){ if(x.fans[j].val!=y.fans[j].val||x.fans[j].id!=y.fans[j].id)flag2=false; } if(flag2==true)flag=true; } if(flag==false)hules_history.push(x); } function calcsudian_chuanma(x,type){ if(type==undefined)type=0; let val=0; for(let i=0;i<x.length;i++)val=val+x[i].val; return Math.min(1000*Math.pow(2,val-1),32000)+type*val; } function calcsudian(x,type){ if(type==undefined)type=0; let val=0; for(let i=0;i<x.fans.length;i++)val=val+x.fans[i].val; if(x.yiman==true)return 8000*val+type*val+type*x.fu/5*0.01; else if(val<fanfu())return -2000; else if(val==5)return 2000+type*val+type*x.fu/5*0.01; else if(val==6||val==7)return 3000+type*val+type*x.fu/5*0.01; else if(val>=8&&val<=10)return 4000+type*val+type*x.fu/5*0.01; else if(val==11||val==12)return 6000+type*val+type*x.fu/5*0.01; else if(val>=13)return 8000+type*val+type*x.fu/5*0.01; else return Math.min(Math.pow(2,val+2)*x.fu,2000)+type*val+type*x.fu/5*0.01; } //0:副露的顺子 1:副露的刻子 2:明杠 //3:暗杠 4:拔北宝牌 5:未副露的顺子 //6:未副露的刻子 7:对子 //1~64 //自摸 立直 抢杠 岭上 海底 河底 白 发 中 门风 //场风 断幺 一杯 平和 混全 一气 三色 w立 三同刻 三杠 //对对 三暗 小三元 混老头 七对 纯全 混 二杯 清 一发 //dora 红宝 里宝 北宝 天和 地和 带三元 四暗 字一色 绿一色 //清老头 国士 小四喜 四杠 九莲 八连庄 纯九 四单 十三面 带四喜 //燕返 杠振 十二落抬 五门齐 三连刻 三同顺 1p摸月 9p捞鱼 人和 带车轮 //大竹林 大数邻 石上 带七星 function calcfan_chuanma(tls,seat,zimo,type){ if(tls.length%3==1){ let tingpais=tingpai(seat),ret=[]; for(let i=0;i<tingpais.length;i++){ tls.push(tingpais[i].tile); let tmp=calcfan_chuanma([].concat(tls),seat,zimo,1); if(calcsudian_chuanma(tmp,1)>calcsudian_chuanma(ret,1))ret=tmp; tls.length--; } return ret; } let vals=[]; function tofan(x){ let ans=[]; for(let i=1019;i>=1005;i--){ if(i==1014&&x[1020]){ ans.push({'val':x[1020],'id':1020}); break; } if(x[i]){ ans.push({'val':x[i],'id':i}); break; } if(i==1005&&ans.length==0){ans.push({'val':x[1003],'id':1003});} } if(x[1000])ans.push({'val':x[1000],'id':1000}); if(x[1001])ans.push({'val':x[1001],'id':1001}); if(x[1002])ans.push({'val':x[1002],'id':1002}); if(x[1004])ans.push({'val':x[1004],'id':1004}); if(x[1021])ans.push({'val':x[1021],'id':1021}); return ans; } let lsttile=tls[tls.length-1],fulucnt=0; let ret=[]; let cnt=[]; for(let i=0;i<=36;i++){cnt[i]=0;} for(let i=0;i<tls.length;i++)cnt[tiletoint(tls[i])]++; let partition=[]; for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type!=4)partition.push(fulu[seat][i]); if(fulu[seat][i].type!=4)fulucnt++; } function updateret(x){ if(calcsudian_chuanma(x,1)>calcsudian_chuanma(ret,1))ret=x; } function calc(){ let cnt2=[]; for(let i=0;i<=36;i++)cnt2[i]=0; let partitiontmp=[].concat(partition); for(let i=partitiontmp.length-1;i>=0;i--){ let tiles=partitiontmp[i].tile; if(partitiontmp[i].type==0||partitiontmp[i].type==5){ cnt2[tiletoint(tiles[0])]++; cnt2[tiletoint(tiles[1])]++; cnt2[tiletoint(tiles[2])]++; } else if(partitiontmp[i].type==1||partitiontmp[i].type==6)cnt2[tiletoint(tiles[0])]+=3; else if(partitiontmp[i].type==2||partitiontmp[i].type==3)cnt2[tiletoint(tiles[0])]+=4; else if(partitiontmp[i].type==7)cnt2[tiletoint(tiles[0])]+=2; } function calc0(){ let ans=[]; let typecnt=[]; for(let i=0;i<=34;i++)typecnt[i]=[0,0,0]; for(let i=0;i<partitiontmp.length;i++){ let type=partitiontmp[i].type; if(type==1||type==2||type==3||type==6||type==7)typecnt[tiletoint(partitiontmp[i].tile[0])][0]=type; if(type==1||type==2||type==3||type==6)typecnt[tiletoint(partitiontmp[i].tile[0])][1]=2; if(type==7)typecnt[tiletoint(partitiontmp[i].tile[0])][1]=1; if(type==0||type==5)typecnt[(tiletoint(partitiontmp[i].tile[0])+tiletoint(partitiontmp[i].tile[1])+tiletoint(partitiontmp[i].tile[2]))/3][2]++; } //-------------------------- let quandai=true; for(let i=1;i<=34;i++){ if(i!=2&&i!=8&&i!=11&&i!=17&&i!=20&&i!=26&&typecnt[i][2]>0)quandai=false; if(i!=1&&i!=9&&i!=10&&i!=18&&i!=19&&i!=27&&i<28&&typecnt[i][1]!=0)quandai=false; } //-------------------------- let qingyise=false; for(let k=0;k<=3;k++){ qingyise=true; for(let i=1;i<=34;i++){ if(Math.floor((i-1)/9)!=k&&i<=27&&cnt2[i]>0)qingyise=false; } if(qingyise==true)break; } //-------------------------- let gangzi=0,kezi=0,duizi=0; for(let i=1;i<=34;i++){ if(typecnt[i][0]==3||typecnt[i][0]==2)gangzi++; if(typecnt[i][1]==2)kezi++; } if(partitiontmp.length==7)duizi=7; //--------------------------- let jiangdui=true; for(let i=1;i<=34;i++){ if(i!=2&&i!=5&&i!=8&&i!=11&&i!=14&&i!=17&&i!=20&&i!=23&&i!=26&&cnt2[i]>0)jiangdui=false; } //--------------------------- if(settings.chuanma_points_method){ ans.push({'val':1,'id':1003}); ans.push({'val':0,'id':1000}); for(let i=1;i<=34;i++)if(cnt2[i]==4)ans[1].val++; if(ans[1].val==0)ans.length--; if(type!=1&&zimo&&getlstaction(2)!=undefined&&(getlstaction(2).name=="RecordAnGangAddGang"||getlstaction(2).name=="RecordChiPengGang"))ans.push({'val':1,'id':1001}); if(type!=1&&!zimo&&getlstaction().name!="RecordAnGangAddGang"&&getlstaction(3)!=undefined&&(getlstaction(3).name=="RecordAnGangAddGang"||getlstaction(3).name=="RecordChiPengGang"))ans.push({'val':1,'id':1002}); if(type!=1&&getlstaction().name=="RecordAnGangAddGang")ans.push({'val':1,'id':1004}); if(kezi==4)ans.push({'val':1,'id':1005}); if(qingyise)ans.push({'val':2,'id':1006}); if(duizi==7)ans.push({'val':2,'id':1007}); if(quandai)ans.push({'val':2,'id':1008}); if(fulucnt==4)ans.push({'val':1,'id':1009}); if(jiangdui)ans.push({'val':2,'id':1011}); if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat==ju&&zimo)ans.push({'val':5,'id':1018}); if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&zimo)ans.push({'val':5,'id':1019}); if(type!=1&&paishan.length/2==0)ans.push({'val':1,'id':1021}); return ans; } else{ ans[1000]=0; for(let i=1;i<=34;i++)if(cnt2[i]==4)ans[1000]++;//根 if(type!=1&&zimo&&getlstaction(2)!=undefined&&(getlstaction(2).name=="RecordAnGangAddGang"||getlstaction(2).name=="RecordChiPengGang"))ans[1001]=1;//杠上花 if(type!=1&&!zimo&&getlstaction().name!="RecordAnGangAddGang"&&getlstaction(3)!=undefined&&(getlstaction(3).name=="RecordAnGangAddGang"||getlstaction(3).name=="RecordChiPengGang"))ans[1002]=1;//杠上炮 ans[1003]=1; if(type!=1&&getlstaction().name=="RecordAnGangAddGang")ans[1004]=1;//抢杠 if(kezi==4)ans[1005]=2;//对对和 if(qingyise)ans[1006]=3;//清一色 if(duizi==7)ans[1007]=3;//七对子 if(quandai)ans[1008]=3;//带幺九 if(fulucnt==4)ans[1009]=3;//金钩钩 if(qingyise&&kezi==4)ans[1010]=4;//清对 if(jiangdui&&kezi==4)ans[1011]=4;//将对 if(ans[1000]>0&&duizi==7){ans[1012]=4;ans[1000]--;}//龙七对 if(qingyise&&duizi==7)ans[1013]=5;//清七对 if(qingyise&&fulucnt==4)ans[1014]=5;//清金钩钩 if(qingyise&&ans[1012]==4)ans[1015]=6;//清龙七对 if(gangzi==4){ans[1016]=6;ans[1000]-=4;}//十八罗汉 if(qingyise&&gangzi==4)ans[1017]=6;//清十八罗汉 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat==ju&&zimo)ans[1018]=6;//天和 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&zimo)ans[1019]=6;//地和 if(qingyise&&quandai)ans[1020]=5;//清带幺 if(type!=1&&paishan.length/2==0)ans[1021]=1;//海底捞月 return tofan(ans); } } for(let i=partitiontmp.length-1;i>=0;i--){ let tile=partitiontmp[i].tile,type=partitiontmp[i].type; if(type==5&&(equaltile(tile[0],lsttile)||equaltile(tile[1],lsttile)||equaltile(tile[2],lsttile))){ if(!zimo)partitiontmp[i].type=0; let midtile=inttotile((tiletoint(tile[0])+tiletoint(tile[1])+tiletoint(tile[2]))/3); if(equaltile(midtile,lsttile))updateret(calc0()); else if(tiletoint(lsttile)%9==3&&tiletoint(midtile)%9==2)updateret(calc0()); else if(tiletoint(lsttile)%9==7&&tiletoint(midtile)%9==8)updateret(calc0()); else updateret(calc0()); partitiontmp[i].type=5; } if(type==6&&equaltile(tile[0],lsttile)){ if(!zimo)partitiontmp[i].type=1; updateret(calc0()); partitiontmp[i].type=6; } if(type==7&&equaltile(tile[0],lsttile))updateret(calc0()); } } function dfs(now){ if(now==35){ if(partition.length==7||partition.length==5)calc(); return; } if(cnt[now]==0){ dfs(now+1); return; } let whatever=[0,2,3]; for(let k=0;k<3;k++){ if(cnt[now]<whatever[k])continue; cnt[now]-=whatever[k]; let cnt0=cnt[now]; if(k==1){ partition.push({'type':7,'tile':[inttotile(now),inttotile(now)]}); dfs(now); } else if(k==2)partition.push({'type':6,'tile':[inttotile(now),inttotile(now),inttotile(now)]}); if(cnt[nxt2[now]]>=cnt0&&cnt[nxt2[nxt2[now]]]>=cnt0){ cnt[now]-=cnt0; cnt[nxt2[now]]-=cnt0; cnt[nxt2[nxt2[now]]]-=cnt0; for(let i=1;i<=cnt0;i++)partition.push({'type':5,'tile':[inttotile(now),inttotile(nxt2[now]),inttotile(nxt2[nxt2[now]])]}); dfs(now+1); cnt[now]+=cnt0; cnt[nxt2[now]]+=cnt0; cnt[nxt2[nxt2[now]]]+=cnt0; for(let i=1;i<=cnt0;i++)partition.length=partition.length-1; } if(k==1||k==2)partition.length=partition.length-1; cnt[now]+=whatever[k]; } } dfs(1); return ret; } function calcfan(tls,seat,zimo,fangchong){ let lsttile=tls[tls.length-1],fulucnt=0; let ret={'yiman':false,'fans':0,'fu':0}; let cnt=[],tmp=[]; for(let i=0;i<=36;i++){cnt[i]=0;tmp[i]=0;} for(let i=0;i<tls.length;i++)cnt[tiletoint(tls[i])]++; let partition=[]; for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type!=4)partition.push(fulu[seat][i]); if(fulu[seat][i].type!=4&&fulu[seat][i].type!=3)fulucnt++; } function updateret(x){ if(x==undefined)return; if(calcsudian(x,1)>calcsudian(ret,1))ret=x; } function calc(){ let cnt2=[]; for(let i=0;i<=36;i++)cnt2[i]=0; let partitiontmp=[].concat(partition); for(let i=partitiontmp.length-1;i>=0;i--){ let tiles=partitiontmp[i].tile; if(partitiontmp[i].type==0||partitiontmp[i].type==5){ cnt2[tiletoint(tiles[0])]++; cnt2[tiletoint(tiles[1])]++; cnt2[tiletoint(tiles[2])]++; } else if(partitiontmp[i].type==1||partitiontmp[i].type==6)cnt2[tiletoint(tiles[0])]+=3; else if(partitiontmp[i].type==2||partitiontmp[i].type==3)cnt2[tiletoint(tiles[0])]+=4; else if(partitiontmp[i].type==7)cnt2[tiletoint(tiles[0])]+=2; } function calc0(tingpaifu){ function deletefan(ans,x){ let flag=false; for(let i=0;i<ans.fans.length;i++){ if(flag)ans.fans[i-1]=ans.fans[i]; if(ans.fans[i].id==x)flag=true; } if(flag)ans.fans.length=ans.fans.length-1; return ans; } let tianhu=false; let ans={'yiman':true,'fans':[],'fu':0}; //---------------------------------------------- let typecnt=[]; for(let i=0;i<=34;i++)typecnt[i]=[0,0,0]; for(let i=0;i<partitiontmp.length;i++){ let type=partitiontmp[i].type; if(type==1||type==2||type==3||type==6||type==7)typecnt[tiletoint(partitiontmp[i].tile[0])][0]=type; if(type==1||type==2||type==3||type==6)typecnt[tiletoint(partitiontmp[i].tile[0])][1]=2; if(type==7)typecnt[tiletoint(partitiontmp[i].tile[0])][1]=1; if(type==0||type==5)typecnt[(tiletoint(partitiontmp[i].tile[0])+tiletoint(partitiontmp[i].tile[1])+tiletoint(partitiontmp[i].tile[2]))/3][2]++; } let anke=0,gangzi=0,beikou=0,kezi=0,duizi=0,santongshun=false,sanlianke=false; for(let i=1;i<=34;i++){ if(typecnt[i][0]==3||typecnt[i][0]==6)anke++; if(typecnt[i][0]==3||typecnt[i][0]==2)gangzi++; if(typecnt[i][1]==2)kezi++; if(i>=2&&i<=8||i>=11&&i<=17||i>=20&&i<=26){ if(typecnt[i][1]==2&&typecnt[i-1][1]==2&&typecnt[i+1][1]==2)sanlianke=true; } if(typecnt[i][0]==7)duizi++; beikou+=Math.floor(typecnt[i][2]/2); if(Math.floor(typecnt[i][2]/3)>0)santongshun=true; } //--------------------------- let flag=[true,true,true,true,true]; for(let i=1;i<=34;i++){ if(i!=28&&i!=29&&i!=30&&i!=31&&i!=32&&i!=33&&i!=34&&cnt2[i]>0)flag[0]=false; if(i!=20&&i!=21&&i!=22&&i!=24&&i!=26&&i!=33&&cnt2[i]>0)flag[1]=false; if(i!=1&&i!=9&&i!=10&&i!=18&&i!=19&&i!=27&&cnt2[i]>0)flag[2]=false; if((i==1||i==9||i==10||i==18||i==19||i==27||i>=28&&i<=34)&&cnt2[i]>0)flag[3]=false; if((i>=2&&i<=8||i>=11&&i<=17||i>=20&&i<=26)&&cnt2[i]>0)flag[4]=false; } //--------------------------------- let wumenqi=true; if(cnt2[1]+cnt2[2]+cnt2[3]+cnt2[4]+cnt2[5]+cnt2[6]+cnt2[7]+cnt2[8]+cnt2[9]==0)wumenqi=false; if(cnt2[10]+cnt2[11]+cnt2[12]+cnt2[13]+cnt2[14]+cnt2[15]+cnt2[16]+cnt2[17]+cnt2[18]==0)wumenqi=false; if(cnt2[19]+cnt2[20]+cnt2[21]+cnt2[22]+cnt2[23]+cnt2[24]+cnt2[25]+cnt2[26]+cnt2[27]==0)wumenqi=false; if(cnt2[28]+cnt2[29]+cnt2[30]+cnt2[31]==0)wumenqi=false; if(cnt2[32]+cnt2[33]+cnt2[34]==0)wumenqi=false; //--------------------------------- let jiulian=[0,""],yiqi=false,hunyise=false,qingyise=false; let jlbd=[0,3,1,1,1,1,1,1,1,3]; for(let k=0;k<=2;k++){ if(typecnt[k*9+2][2]>0&&typecnt[k*9+5][2]>0&&typecnt[k*9+8][2]>0)yiqi=true; jiulian=[1,""]; for(let i=1;i<=9;i++)if(cnt2[k*9+i]<jlbd[i])jiulian=[0,""]; if(jiulian[0]==1){ for(let i=1;i<=9;i++)if(cnt2[k*9+i]>jlbd[i])jiulian[1]=inttotile(k*9+i); break; } } for(let i=partitiontmp.length-1;i>=0;i--)if(partitiontmp[i].type==3)jiulian=[0,""]; for(let k=0;k<=3;k++){ hunyise=true;qingyise=true; for(let i=1;i<=34;i++){ if(Math.floor((i-1)/9)!=k&&cnt2[i]>0)qingyise=false; if(Math.floor((i-1)/9)!=k&&i<=27&&cnt2[i]>0)hunyise=false; } if(hunyise==true)break; } //---------------------------------- let sanse=false,sansetongke=false; for(let i=1;i<=9;i++){ if(i>=2&&i<=8&&typecnt[i][2]>0&&typecnt[i+9][2]>0&&typecnt[i+18][2]>0)sanse=true; if(typecnt[i][1]==2&&typecnt[i+9][1]==2&&typecnt[i+18][1]==2)sansetongke=true; } //---------------------------------- let chunquandai=true,hunquandai=true; for(let i=1;i<=34;i++){ if(i!=2&&i!=8&&i!=11&&i!=17&&i!=20&&i!=26&&typecnt[i][2]>0){chunquandai=false;hunquandai=false;} if(i!=1&&i!=9&&i!=10&&i!=18&&i!=19&&i!=27&&i<28&&typecnt[i][1]!=0){chunquandai=false;hunquandai=false;} if(i>=28&&i<=34&&typecnt[i][1]!=0)chunquandai=false; } //------------------------------------ let pinghu=true; if(duizi==7)pinghu=false; for(let i=1;i<=34;i++){ if(typecnt[i][1]==2)pinghu=false; if(typecnt[i][0]==7){ if(tiletoint(((seat-ju+playercnt)%playercnt+1).toString()+"z")==i)pinghu=false; if(tiletoint((chang+1).toString()+"z")==i)pinghu=false; if(i==32||i==33||i==34)pinghu=false; } } let flagcnt=0; if((tiletoint(lsttile)-1)%9>=3)if(typecnt[tiletoint(lsttile)-1][2])flagcnt++; if((tiletoint(lsttile)-1)%9<=5)if(typecnt[tiletoint(lsttile)+1][2])flagcnt++; if(flagcnt==0)pinghu=false; //------------------------------------- let alldoras=[0,0,0,0]; for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type==4){ cnt2[tiletoint(fulu[seat][i].tile[0])]++; if(fulu[seat][i].tile[0]=="4z")alldoras[2]++; } } for(let i=0;i<doracnt.cnt;i++){ if(playercnt==3&&tiletoint(doras[i])==1)alldoras[0]+=cnt2[9]; else alldoras[0]+=cnt2[doranxt[tiletoint(doras[i])]]; if(playercnt==3&&tiletoint(li_doras[i])==1)alldoras[3]+=cnt2[9]; else alldoras[3]+=cnt2[doranxt[tiletoint(li_doras[i])]]; } for(let i=0;i<tls.length;i++)if(tls[i][0]=='0')alldoras[1]++; for(let i=0;i<fulu[seat].length;i++) for(let j=0;j<fulu[seat][i].tile.length;j++)if(fulu[seat][i].tile[j][0]=='0')alldoras[1]++; let lstaction=getlstaction(); for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type==4){ cnt2[tiletoint(fulu[seat][i].tile[0])]--; } } //------------------------------------ if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat==ju&&zimo){ans.fans.push({'val':1,'id':35});tianhu=true;}//天和 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&zimo)ans.fans.push({'val':1,'id':36});//地和 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&!zimo&&is_guyi())ans.fans.push({'val':1,'id':59});//人和 if(typecnt[32][1]+typecnt[33][1]+typecnt[34][1]==6){ ans.fans.push({'val':1,'id':37});//大三元 let fulusanyuancnt=0; for(let i=0;i<fulu[seat].length;i++){ let type=fulu[seat][i].type,tile=tiletoint(fulu[seat][i].tile[0]); if((type==1||type==2||type==3)&&(tile==32||tile==33||tile==34)){ fulusanyuancnt++; if(fulusanyuancnt==3&&!is_xuezhandaodi()&&fulu[seat][i].from)baopai[seat]={'seat':fulu[seat][i].from,'val':1}; } } } if(fulucnt==0&&anke==4&&typecnt[tiletoint(lsttile)][1]==2&&!tianhu)ans.fans.push({'val':1,'id':38});//四暗刻 if(flag[0]==true)ans.fans.push({'val':1,'id':39});//字一色 if(flag[1]==true)ans.fans.push({'val':1,'id':40});//绿一色 if(flag[2]==true)ans.fans.push({'val':1,'id':41});//清老头 if(typecnt[28][1]+typecnt[29][1]+typecnt[30][1]+typecnt[31][1]==7)ans.fans.push({'val':1,'id':43});//小四喜 if(gangzi==4)ans.fans.push({'val':1,'id':44});//四杠子 if(fulucnt==0&&jiulian[0]==1&&!equaltile(lsttile,jiulian[1])&&!tianhu)ans.fans.push({'val':1,'id':45});//九莲宝灯 if(fulucnt==0&&jiulian[0]==1&&(equaltile(lsttile,jiulian[1])||tianhu))ans.fans.push({'val':2,'id':47});//纯正九莲宝灯 if(fulucnt==0&&anke==4&&(typecnt[tiletoint(lsttile)][0]==7||tianhu))ans.fans.push({'val':2,'id':48});//四暗刻单骑 if(typecnt[28][1]+typecnt[29][1]+typecnt[30][1]+typecnt[31][1]==8){ ans.fans.push({'val':2,'id':50});//大四喜 let fulusixicnt=0; for(let i=0;i<fulu[seat].length;i++){ let type=fulu[seat][i].type,tile=tiletoint(fulu[seat][i].tile[0]); if((type==1||type==2||type==3)&&(tile==28||tile==29||tile==30||tile==31)){ fulusixicnt++; if(fulusixicnt==4&&!is_xuezhandaodi()&&fulu[seat][i].from)baopai[seat]={'seat':fulu[seat][i].from,'val':2}; } } } if(is_guyi()){ if(qingyise&&duizi==7&&flag[3]){ if(cnt2[2]>0)ans.fans.push({'val':1,'id':62});//大数邻 if(cnt2[11]>0)ans.fans.push({'val':1,'id':60});//大车轮 if(cnt2[20]>0)ans.fans.push({'val':1,'id':61});//大竹林 } if(liqiinfo[seat].liqi==2&&(zimo&&paishan.length/2-14==0&&lstdrawtype==1||!zimo&&paishan.length/2-14==0))ans.fans.push({'val':1,'id':63});//石上三年 if(flag[0]==true&&duizi==7){ ans=deletefan(ans,39); ans.fans.push({'val':2,'id':64}); }//大七星 } if(liqiinfo[seat].kai&&!zimo&&liqiinfo[fangchong].liqi==0){ if(liqiinfo[seat].liqi==2)ans.fans.push({'val':1,'id':18}); if(liqiinfo[seat].liqi==1)ans.fans.push({'val':1,'id':2}); } if(ans.fans.length!=0)return ans; //------------------------------------ ans.yiman=false; if(liqiinfo[seat].liqi==2)ans.fans.push({'val':2,'id':18});//双立直 if(liqiinfo[seat].liqi==1)ans.fans.push({'val':1,'id':2});//立直 if(liqiinfo[seat].kai)ans.fans[0].val++; if(liqiinfo[seat].liqi!=0&&liqiinfo[seat].yifa!=0)ans.fans.push({'val':1,'id':30});//一发 if(is_guyi()){ if(lstaction.name=="RecordDiscardTile"&&lstaction.data.is_liqi)ans.fans.push({'val':1,'id':51});//燕返 if(!zimo&&lstdrawtype==0)ans.fans.push({'val':1,'id':52});//杠振 if(fulucnt==4)ans.fans.push({'val':1,'id':53});//十二落抬 } if(fulucnt==0&&zimo)ans.fans.push({'val':1,'id':1});//门前清自摸和 if(lstaction.name=="RecordAnGangAddGang")ans.fans.push({'val':1,'id':3});//抢杠 if(zimo&&lstdrawtype==0)ans.fans.push({'val':1,'id':4});//岭上开花 if(zimo&&paishan.length/2-14==0&&lstdrawtype==1)ans.fans.push({'val':1,'id':5});//海底捞月 if(!zimo&&paishan.length/2-14==0)ans.fans.push({'val':1,'id':6});//河底捞鱼 if(typecnt[32][1]==2)ans.fans.push({'val':1,'id':7});//白 if(typecnt[33][1]==2)ans.fans.push({'val':1,'id':8});//发 if(typecnt[34][1]==2)ans.fans.push({'val':1,'id':9});//中 if(typecnt[tiletoint(((seat-ju+playercnt)%playercnt+1).toString()+"z")][1]==2)ans.fans.push({'val':1,'id':10});//门风 if(typecnt[tiletoint((chang+1).toString()+"z")][1]==2)ans.fans.push({'val':1,'id':11});//场风 if(flag[3]==true&&(is_shiduan()||!is_shiduan()&&fulucnt==0))ans.fans.push({'val':1,'id':12});//断幺九 if(beikou==1&&fulucnt==0)ans.fans.push({'val':1,'id':13});//一杯口 if(pinghu&&fulucnt==0)ans.fans.push({'val':1,'id':14});//平和 if(hunquandai&&!chunquandai&&!flag[4]){ if(fulucnt==0)ans.fans.push({'val':2,'id':15}); else ans.fans.push({'val':1,'id':15}); }//混全带幺九 if(yiqi){ if(fulucnt==0)ans.fans.push({'val':2,'id':16}); else ans.fans.push({'val':1,'id':16}); }//一气通贯 if(sanse){ if(fulucnt==0)ans.fans.push({'val':2,'id':17}); else ans.fans.push({'val':1,'id':17}); }//三色同顺 if(sansetongke)ans.fans.push({'val':2,'id':19});//三色同刻 if(gangzi==3)ans.fans.push({'val':2,'id':20});//三杠子 if(kezi==4)ans.fans.push({'val':2,'id':21});//对对和 if(anke==3)ans.fans.push({'val':2,'id':22});//三暗刻 if(typecnt[32][1]+typecnt[33][1]+typecnt[34][1]==5)ans.fans.push({'val':2,'id':23});//小三元 if(flag[4]==true)ans.fans.push({'val':2,'id':24});//混老头 if(duizi==7)ans.fans.push({'val':2,'id':25});//七对子 if(is_guyi()&&wumenqi)ans.fans.push({'val':2,'id':54});//五门齐 if(is_guyi()&&sanlianke)ans.fans.push({'val':2,'id':55});//三连刻 if(chunquandai){ if(fulucnt==0)ans.fans.push({'val':3,'id':26}); else ans.fans.push({'val':2,'id':26}); }//纯全带幺九 if(hunyise&&!qingyise){ if(fulucnt==0)ans.fans.push({'val':3,'id':27}); else ans.fans.push({'val':2,'id':27}); }//混一色 if(is_guyi()&&santongshun){ ans=deletefan(ans,13); if(fulucnt==0)ans.fans.push({'val':3,'id':56}); else ans.fans.push({'val':2,'id':56}); }//一色三同顺 if(beikou==2&&fulucnt==0)ans.fans.push({'val':3,'id':28});//两杯口 if(qingyise){ if(fulucnt==0)ans.fans.push({'val':6,'id':29}); else ans.fans.push({'val':5,'id':29}); }//清一色 if(is_guyi()==2){ if(zimo&&paishan.length/2-14==0&&lstdrawtype==1&&lsttile=="1p"){ ans=deletefan(ans,5); ans.fans.push({'val':5,'id':57});//一筒摸月 } if(!zimo&&paishan.length/2-14==0&&lsttile=="9p"){ ans=deletefan(ans,6); ans.fans.push({'val':5,'id':58});//九筒捞鱼 } } if(calcsudian(ans)==-2000)return ans; if(alldoras[0]!=0)ans.fans.push({'val':alldoras[0],'id':31});//宝牌 if(alldoras[1]!=0)ans.fans.push({'val':alldoras[1],'id':32});//红宝牌 if(alldoras[2]!=0)ans.fans.push({'val':alldoras[2],'id':34});//北宝牌 if(liqiinfo[seat].liqi!=0)ans.fans.push({'val':alldoras[3],'id':33});//里宝牌 //-------------------------------------------------- if(duizi==7){ ans.fu=25; return ans; }//七对子固定符数 ans.fu=20;//符底 if(!pinghu)ans.fu+=tingpaifu;//听牌型符 for(let i=1;i<=34;i++){ if(i==1||i==9||i==10||i==18||i==19||i==27||i>=28&&i<=34){ if(typecnt[i][0]==1)ans.fu+=4; if(typecnt[i][0]==2)ans.fu+=16; if(typecnt[i][0]==3)ans.fu+=32; if(typecnt[i][0]==6)ans.fu+=8; } else{ if(typecnt[i][0]==1)ans.fu+=2; if(typecnt[i][0]==2)ans.fu+=8; if(typecnt[i][0]==3)ans.fu+=16; if(typecnt[i][0]==6)ans.fu+=4; } if(typecnt[i][0]==7){ if(i==tiletoint(((seat-ju+playercnt)%playercnt+1).toString()+"z"))ans.fu+=2; if(i==tiletoint((chang+1).toString()+"z"))ans.fu+=2; if(i==32||i==33||i==34)ans.fu+=2; } }//刻子符 if(zimo&&!pinghu)ans.fu+=2;//自摸符 if(!zimo&&fulucnt==0)ans.fu+=10;//门前清荣和符 ans.fu=Math.ceil(ans.fu/10)*10; if(ans.fan==1&&ans.fu==20)ans.fu=30; //-------------------------------------------------- return ans; } for(let i=partitiontmp.length-1;i>=0;i--){ let tile=partitiontmp[i].tile,type=partitiontmp[i].type; if(type==5&&(equaltile(tile[0],lsttile)||equaltile(tile[1],lsttile)||equaltile(tile[2],lsttile))){ if(!zimo)partitiontmp[i].type=0; let midtile=inttotile((tiletoint(tile[0])+tiletoint(tile[1])+tiletoint(tile[2]))/3); if(equaltile(midtile,lsttile))updateret(calc0(2));//坎张听符 else if(tiletoint(lsttile)%9==3&&tiletoint(midtile)%9==2)updateret(calc0(2));//边张听符 else if(tiletoint(lsttile)%9==7&&tiletoint(midtile)%9==8)updateret(calc0(2));//边张听符 else updateret(calc0(0)); partitiontmp[i].type=5; } if(type==6&&equaltile(tile[0],lsttile)){ if(!zimo)partitiontmp[i].type=1; updateret(calc0(0)); partitiontmp[i].type=6; } if(type==7&&equaltile(tile[0],lsttile))updateret(calc0(2));//单骑符 } } function dfs(now){ if(now==35){ if(partition.length==7||partition.length==5)calc(); return; } if(cnt[now]==0){ dfs(now+1); return; } let whatever=[0,2,3]; for(let k=0;k<3;k++){ if(cnt[now]<whatever[k])continue; cnt[now]-=whatever[k]; let cnt0=cnt[now]; if(k==1)partition.push({'type':7,'tile':[inttotile(now),inttotile(now)]}); else if(k==2)partition.push({'type':6,'tile':[inttotile(now),inttotile(now),inttotile(now)]}); if(cnt[nxt2[now]]>=cnt0&&cnt[nxt2[nxt2[now]]]>=cnt0){ cnt[now]-=cnt0; cnt[nxt2[now]]-=cnt0; cnt[nxt2[nxt2[now]]]-=cnt0; for(let i=1;i<=cnt0;i++)partition.push({'type':5,'tile':[inttotile(now),inttotile(nxt2[now]),inttotile(nxt2[nxt2[now]])]}); dfs(now+1); cnt[now]+=cnt0; cnt[nxt2[now]]+=cnt0; cnt[nxt2[nxt2[now]]]+=cnt0; for(let i=1;i<=cnt0;i++)partition.length=partition.length-1; } if(k==1||k==2)partition.length=partition.length-1; cnt[now]+=whatever[k]; } } dfs(1); if(calchupai(tls)==3){ let tianhu=false; let ans={'yiman':true,'fans':[],'fu':0}; if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat==ju&&zimo){ans.fans.push({'val':1,'id':35});tianhu=true;}//天和 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&zimo)ans.fans.push({'val':1,'id':36});//地和 if(liqiinfo[seat].yifa!=0&&liqiinfo[seat].liqi==0&&seat!=ju&&!zimo&&is_guyi())ans.fans.push({'val':1,'id':59});//人和 if(fulucnt==0&&cnt[tiletoint(lsttile)]==1&&!tianhu)ans.fans.push({'val':1,'id':42});//国士无双 if(fulucnt==0&&(cnt[tiletoint(lsttile)]==2||tianhu))ans.fans.push({'val':2,'id':49});//国士无双十三面 updateret(ans); } return ret; } function calcxun(){ for(let x=0;x<playercnt;x++)if(playertiles[x].length%3==2&&!hupaied[x])xun[x].push(actions.length-1); } function calcdoras(){ doracnt.cnt=Math.min(doracnt.cnt,5); if(is_chuanma())doracnt.cnt=0; let doras0=[]; for(let i=0;i<doracnt.cnt;i++)doras0[i]=doras[i]; return doras0; } function gamebegin(){ try{ if(unsafeWindow.editdata!=null){editdata=unsafeWindow.editdata;unsafeWindow.editdata=null;} if(unsafeWindow.settings!=null){settings=unsafeWindow.settings;unsafeWindow.settings=null;} }catch(e){}; if(editdata.config==undefined) editdata.config={ 'category':2, 'meta':{'mode_id':5}, 'mode':{ 'mode':1, } } if(settings.chuanma_points_method==undefined)settings.chuanma_points_method=0; if(editdata.player_datas==undefined)editdata.player_datas=[]; config=editdata.config; if(config.mode.mode==11){ if(is_guyi())config.mode.detail_rule.guyi_mode=0; if(is_xuezhandaodi())config.mode.detail_rule.xuezhandaodi=0; if(is_huansanzhang())config.mode.detail_rule.huansanzhang=0; if(is_muyu())config.mode.detail_rule.muyu_mode=0; if(is_dora3())config.mode.detail_rule.dora3_mode=0; } if(config.mode.mode==11)playercnt=3; else playercnt=4; if(config.mode&&config.mode.detail_rule&&config.mode.detail_rule.open_hand==1)config.mode.detail_rule.open_hand="1111"; if(config.mode.mode==11){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.init_point)scores=[config.mode.detail_rule.init_point,config.mode.detail_rule.init_point,config.mode.detail_rule.init_point]; else scores=[35000,35000,35000]; } else{ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.init_point)scores=[config.mode.detail_rule.init_point,config.mode.detail_rule.init_point,config.mode.detail_rule.init_point,config.mode.detail_rule.init_point]; else{ if(is_chuanma())scores=[50000,50000,50000,50000]; else if(is_muyu())scores=[40000,40000,40000,40000]; else if(is_dora3())scores=[35000,35000,35000,35000]; else scores=[25000,25000,25000,25000]; } } firstneededscores=scores[0]; edit_online(); } function addNewRound(chang,ju,ben,doras,left_tile_count,liqibang,md5,paishan,scores,tiles0,tiles1,tiles2,tiles3,tingpai){ function mingpai_data(tiles,seat){ let ret={'count':[],'seat':seat,'tiles':[]} let cnt=[]; for(let i=1;i<=37;i++)cnt[i]=0; for(let i=0;i<tiles.length;i++)cnt[tiletoint(tiles[i],1)]++; for(let i=1;i<=37;i++){ if(cnt[i]==0)continue; ret.tiles.push(inttotile(i,1)); ret.count.push(cnt[i]); } for(let i=1;i<=37;i++)mingpais[seat][inttotile(i,1)]=cnt[i]; return ret; } let ret={ 'name':"RecordNewRound", 'data':{ 'chang':chang, 'ju':ju, 'ben':ben, 'left_tile_count':left_tile_count, 'liqibang':liqibang, 'md5':md5, 'paishan':paishan, 'scores':[].concat(scores), 'tiles0':[].concat(tiles0), 'tiles1':[].concat(tiles1), 'tiles2':[].concat(tiles2), 'tiles3':[].concat(tiles3) } }; if(is_huansanzhang()||is_chuanma())ret.data.operations=[{ 'operation_list':[{ 'change_tile_states':[0,0,0], 'change_tiles':[tiles0[0],tiles0[1],tiles0[2]], 'type':12 }], 'seat':0 },{ 'operation_list':[{ 'change_tile_states':[0,0,0], 'change_tiles':[tiles1[0],tiles1[1],tiles1[2]], 'type':12 }], 'seat':1 },{ 'operation_list':[{ 'change_tile_states':[0,0,0], 'change_tiles':[tiles2[0],tiles2[1],tiles2[2]], 'type':12 }], 'seat':2 },{ 'operation_list':[{ 'change_tile_states':[0,0,0], 'change_tiles':[tiles3[0],tiles3[1],tiles3[2]], 'type':12 }], 'seat':3 }]; ret.data.opens=[]; if(is_peipaimingpai()||is_openhand(0))ret.data.opens.push(mingpai_data(tiles0,0)); if(is_peipaimingpai()||is_openhand(1))ret.data.opens.push(mingpai_data(tiles1,1)); if(is_peipaimingpai()||is_openhand(2))ret.data.opens.push(mingpai_data(tiles2,2)); if(is_peipaimingpai()||is_openhand(3))ret.data.opens.push(mingpai_data(tiles3,3)); if(is_chuanma())ret.data.ju_count=editdata.actions.length; if(tingpai!=undefined&&tingpai!=[])ret.data.tingpai=tingpai; if(!is_xuezhandaodi()&&!is_chuanma()){ if(typeof(doras)=="string")ret.data.dora=doras; else ret.data.doras=doras; } if(is_muyu()){ get_muyu("new"); ret.data.muyu={ 'count_max':5, 'count':muyu.count, 'id':muyu.id, 'seat':muyu.seat } update_muyu(); } actions.push(ret); calcxun(); edit_online(); } function roundbegin(){ try{ if(editdata.actions.length==0)gamebegin(); if(is_chuanma()&&juc!=-1){ju=juc;juc=-1;} if(ju==playercnt){chang++;ju=0;} if(chang==playercnt)chang=0; init(); benchangbang=ben; let lsttile=playertiles[ju][playertiles[ju].length-1]; playertiles[ju].length--; let tingpais=[]; for(let i=0;i<playercnt;i++){ let tingpaitmp=tingpai(i); if(tingpaitmp.length!=0)tingpais.push({'seat':i,'tingpais1':tingpaitmp}); } playertiles[ju].push(lsttile); if(is_dora3())doracnt.cnt=3; if(!is_chuanma())addNewRound(chang,ju,ben,calcdoras(),paishan.length/2-14,liqibang,md5(paishan),paishan,[].concat(scores),[].concat(tiles0),[].concat(tiles1),[].concat(tiles2),[].concat(tiles3),tingpais); else addNewRound(chang,ju,ben,calcdoras(),paishan.length/2,liqibang,md5(paishan),paishan,[].concat(scores),[].concat(tiles0),[].concat(tiles1),[].concat(tiles2),[].concat(tiles3),tingpais); saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function addDiscardTile(is_liqi,is_wliqi,doras,moqie,seat,tile,tingpais,tile_state,is_kailiqi){ for(let i=0;i<playertiles[seat].length;i++){ if(playertiles[seat][i]==tile){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } let ret={ 'name':"RecordDiscardTile", 'data':{ 'is_liqi':is_liqi, 'is_wliqi':is_wliqi, 'doras':doras, 'moqie':moqie, 'seat':seat, 'tile':tile, 'tingpais':tingpai(seat) } }; if(is_muyu()){ if(seat==muyu.seat)get_muyu("countdown"); ret.data.muyu={ 'count_max':5, 'count':muyu.count, 'id':muyu.id, 'seat':muyu.seat } update_muyu(); if(muyu.count==0)get_muyu("new"); } if(tile_state!=undefined)ret.data.tile_state=tile_state; if(is_kailiqi)ret.data.is_kailiqi=true; actions.push(ret); calcxun(); edit_online(); } function addDealTile(doras,left_tile_count,seat,tile,liqi,tile_state){ playertiles[seat].push(tile); let ret={ 'name':"RecordDealTile", 'data':{ 'doras':doras, 'left_tile_count':left_tile_count, 'seat':seat, 'tile':tile, } }; if(tile_state!=undefined)ret.data.tile_state=tile_state; if(liqi!=undefined&&liqi!=0)ret.data.liqi=liqi; if(is_muyu()){ if(muyu.seat==seat)ret.data.muyu={ 'count_max':5, 'count':muyu.count, 'id':muyu.id, 'seat':muyu.seat } update_muyu(); } actions.push(ret); calcxun(); edit_online(); } function addChiPengGang(froms,seat,tiles,type,liqi,tile_states){ for(let j=0;j<tiles.length;j++){ for(let i=0;i<playertiles[seat].length;i++){ if(playertiles[seat][i]==tiles[j]){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } } let ret={ 'name':"RecordChiPengGang", 'data':{ 'froms':froms, 'seat':seat, 'tiles':tiles, 'type':type } }; if(liqi!=undefined&&liqi!=0)ret.data.liqi=liqi; if(tile_states!=undefined&&tile_states!=[])ret.data.tile_states=tile_states; if(is_muyu()){ if(muyu.seat==seat)ret.data.muyu={ 'count_max':5, 'count':muyu.count, 'id':muyu.id, 'seat':muyu.seat } update_muyu(); } actions.push(ret); calcxun(); edit_online(); } function addAnGangAddGang(doras,seat,tiles,type,tile_states){ if(type!=3){ for(let i=0;i<playertiles[seat].length;i++){ if(equaltile(playertiles[seat][i],tiles)){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } } else{ for(let j=1;j<=4;j++){ for(let i=0;i<playertiles[seat].length;i++){ if(equaltile(playertiles[seat][i],tiles)){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } } } let ret={ 'name':"RecordAnGangAddGang", 'data':{ 'doras':doras, 'seat':seat, 'tiles':tiles, 'type':type } }; if(tile_states)ret.data.tile_states=tile_states; actions.push(ret); calcxun(); edit_online(); } function addBaBei(doras,seat,moqie,tile,tile_states){ if(typeof(moqie)=="string"){tile=moqie;moqie=undefined;} if(tile==undefined)tile="4z"; if(moqie==undefined){ if(playertiles[seat][playertiles[seat].length-1]==tile)moqie=true; else moqie=false; } for(let i=0;i<playertiles[seat].length;i++){ if(playertiles[seat][i]==tile){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } let ret={ 'name':"RecordBaBei", 'data':{ 'doras':doras, 'moqie':moqie, 'seat':seat, 'tile':tile } }; if(tile_states!=undefined)ret.data.tile_states; actions.push(ret); calcxun(); edit_online(); } function cmp(x,y){ return tiletoint(x)-tiletoint(y); } function hupaioneplayer_chuanma(seat){ function qieshang(x){ return Math.ceil(x/100)*100; } let lstaction=getlstaction(),zimo=false; if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")playertiles[seat].sort(cmp); if(lstaction.name=="RecordDealTile"||lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")zimo=true; else if(lstaction.name=="RecordDiscardTile")playertiles[seat].push(lstaction.data.tile); else if(lstaction.name=="RecordAnGangAddGang")playertiles[seat].push(lstaction.data.tiles); else if(lstaction.name=="RecordBaBei")playertiles[seat].push(lstaction.data.tile); let fangchong; if(!zimo)fangchong=lstaction.data.seat; let ming=[]; for(let i=0;i<fulu[seat].length;i++){ let tiles=fulu[seat][i].tile; if(fulu[seat][i].type==0)ming.push("shunzi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==1)ming.push("kezi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==2)ming.push("minggang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); else if(fulu[seat][i].type==3)ming.push("angang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); } let hand=[].concat(playertiles[seat]),hu_tile; hu_tile=hand[hand.length-1]; hand.length--; hand.sort(cmp); //------------------------------------------- let points={ 'fans':calcfan_chuanma(playertiles[seat],seat,zimo) }; let val=0; for(let i=0;i<points.fans.length;i++)val=val+points.fans[i].val; //------------------------------------------- let sudian=calcsudian_chuanma(points.fans); let zhahu=false; if(calchupai(playertiles[seat])==0||huazhu(seat))zhahu=true; if(calchupai(playertiles[seat])!=3&&lstaction.name=="RecordAnGangAddGang"&&lstaction.data.type==3)zhahu=true; let point_rong=0,point_sum=0,point_zimo_qin=0,point_zimo_xian=0; if(zhahu){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; delta_scores[i]-=-33000; delta_scores[seat]+=-33000; } let ret={ 'count':val, 'doras':[], 'li_doras':[], 'dadian':-delta_scores[seat], 'fans':[], 'fu':20, 'hand':hand, 'hu_tile':hu_tile, 'ming':ming, 'liqi':false, 'qinjia':false, 'seat':seat, 'title_id':0, 'yiman':false, 'zimo':zimo, } playertiles[seat].length--; return ret; } if(zimo){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; delta_scores[i]-=sudian+1000; delta_scores[seat]+=sudian+1000; } } else{ delta_scores[fangchong]-=sudian; delta_scores[seat]+=sudian; } let dadian=Math.max(delta_scores[seat],-delta_scores[seat]); //--------------------------------------------------- let ret={ 'count':val, 'doras':[], 'li_doras':[], 'dadian':dadian, 'fans':points.fans, 'fu':20, 'hand':hand, 'hu_tile':hu_tile, 'ming':ming, 'liqi':false, 'qinjia':false, 'seat':seat, 'title_id':0, 'yiman':false, 'zimo':zimo, } playertiles[seat].length--; return ret; } function hupaioneplayer(seat){ function qieshang(x){ return Math.ceil(x/100)*100; } let lstaction=getlstaction(),zimo=false; if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")playertiles[seat].sort(cmp); if(lstaction.name=="RecordDealTile"||lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")zimo=true; else if(lstaction.name=="RecordDiscardTile")playertiles[seat].push(lstaction.data.tile); else if(lstaction.name=="RecordAnGangAddGang")playertiles[seat].push(lstaction.data.tiles); else if(lstaction.name=="RecordBaBei")playertiles[seat].push(lstaction.data.tile); let fangchong; if(!zimo)fangchong=lstaction.data.seat; let doras0=[]; for(let i=0;i<doracnt.cnt;i++)doras0[i]=doras[i]; let li_doras0=[]; if(liqiinfo[seat].liqi!=0)for(let i=0;i<doracnt.cnt;i++)li_doras0[i]=li_doras[i]; let ming=[]; for(let i=0;i<fulu[seat].length;i++){ let tiles=fulu[seat][i].tile; if(fulu[seat][i].type==0)ming.push("shunzi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==1)ming.push("kezi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==2)ming.push("minggang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); else if(fulu[seat][i].type==3)ming.push("angang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); } let hand=[].concat(playertiles[seat]),hu_tile; hu_tile=hand[hand.length-1]; hand.length--; hand.sort(cmp); //------------------------------ let qinjia; if(seat==ju)qinjia=true; else qinjia=false; let liqi; if(liqiinfo[seat].liqi!=0)liqi=true; else liqi=false; //------------------------------------------- let points=calcfan(playertiles[seat],seat,zimo,fangchong); let val=0,title_id=0; for(let i=0;i<points.fans.length;i++)val=val+points.fans[i].val; if(points.yiman==false&&val==5||calcsudian(points)==2000)title_id=1; if(points.yiman==false&&(val==6||val==7))title_id=2; if(points.yiman==false&&(val==8||val==9||val==10))title_id=3; if(points.yiman==false&&(val==11||val==12))title_id=4; if(points.yiman==false&&val>=13)title_id=11; if(points.yiman==true)title_id=val+4; //------------------------------------------- let sudian=calcsudian(points); let zhahu=false; if(calchupai(playertiles[seat])==0||sudian==-2000)zhahu=true; if(calchupai(playertiles[seat])!=3&&lstaction.name=="RecordAnGangAddGang"&&lstaction.data.type==3)zhahu=true; let point_rong=0,point_sum=0,point_zimo_qin=0,point_zimo_xian=0; if(qinjia){ point_rong=6*sudian; point_zimo_qin=2*sudian;//not needed point_zimo_xian=2*sudian; if(playercnt==3&&have_zimosun()==false)point_zimo_xian=3*sudian; if(playercnt==3&&have_zimosun())point_sum=4*sudian; else point_sum=6*sudian; } else{ point_rong=4*sudian; point_zimo_qin=2*sudian; point_zimo_xian=sudian; if(playercnt==3&&have_zimosun()==false){ point_zimo_qin=sudian*5/2; point_zimo_xian=sudian*3/2; } if(playercnt==3&&have_zimosun())point_sum=3*sudian; else point_sum=4*sudian; } point_rong=qieshang(point_rong); point_sum=qieshang(point_sum); point_zimo_qin=qieshang(point_zimo_qin); point_zimo_xian=qieshang(point_zimo_xian); if(zhahu){ if(qinjia){ point_rong=12000; point_zimo_qin=4000;//not needed point_zimo_xian=4000; if(playercnt==3)point_sum=8000; else point_sum=12000; } else{ point_rong=8000; point_zimo_qin=4000; point_zimo_xian=2000; if(playercnt==3)point_sum=6000; else point_sum=8000; } for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(i==ju||seat==ju){ delta_scores[i]-=qieshang(-4000)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(-4000)*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=qieshang(-2000)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(-2000)*muyutimes[i]*muyutimes[seat]; } } if(playercnt==3&&have_zimosun()==false){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(seat==ju){ delta_scores[i]-=qieshang(-2000)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(-2000)*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=qieshang(-1000)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(-1000)*muyutimes[i]*muyutimes[seat]; } } } let ret={ 'count':0, 'doras':doras0, 'li_doras':li_doras0, 'fans':[], 'fu':0, 'hand':hand, 'hu_tile':hu_tile, 'liqi':liqi, 'ming':ming, 'point_rong':point_rong, 'point_sum':point_sum, 'point_zimo_qin':point_zimo_qin, 'point_zimo_xian':point_zimo_xian, 'qinjia':qinjia, 'seat':seat, 'title_id':1, 'yiman':false, 'zimo':zimo, } playertiles[seat].length--; if(is_xuezhandaodi())ret.dadian=-delta_scores[seat]; return ret; } if(baopai[seat]!=undefined){ if(zimo){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(i==ju||seat==ju){ delta_scores[baopai[seat].seat]-=baopai[seat].val*16000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=baopai[seat].val*16000*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[baopai[seat].seat]-=baopai[seat].val*8000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=baopai[seat].val*8000*muyutimes[i]*muyutimes[seat]; } } for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(i==ju||seat==ju){ delta_scores[i]-=(val-baopai[seat].val)*16000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=(val-baopai[seat].val)*16000*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=(val-baopai[seat].val)*8000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=(val-baopai[seat].val)*8000*muyutimes[i]*muyutimes[seat]; } } if(playercnt==3&&have_zimosun()==false){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(seat==ju){ delta_scores[i]-=(val-baopai[seat].val)*8000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=(val-baopai[seat].val)*8000*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=(val-baopai[seat].val)*4000*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=(val-baopai[seat].val)*4000*muyutimes[i]*muyutimes[seat]; } } } } else{ if(qinjia){ delta_scores[baopai[seat].seat]-=baopai[seat].val*24000*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=baopai[seat].val*24000*muyutimes[fangchong]*muyutimes[seat]; delta_scores[fangchong]-=(val*48000-baopai[seat].val*24000)*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=(val*48000-baopai[seat].val*24000)*muyutimes[fangchong]*muyutimes[seat]; } else{ delta_scores[baopai[seat].seat]-=baopai[seat].val*16000*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=baopai[seat].val*16000*muyutimes[fangchong]*muyutimes[seat]; delta_scores[fangchong]-=(val*32000-baopai[seat].val*16000)*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=(val*32000-baopai[seat].val*16000)*muyutimes[fangchong]*muyutimes[seat]; } } } else{ if(zimo){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(i==ju||seat==ju){ delta_scores[i]-=qieshang(sudian*2)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(sudian*2)*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=qieshang(sudian)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(sudian)*muyutimes[i]*muyutimes[seat]; } } if(playercnt==3&&have_zimosun()==false){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; if(seat==ju){ delta_scores[i]-=qieshang(sudian)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(sudian)*muyutimes[i]*muyutimes[seat]; } else{ delta_scores[i]-=qieshang(sudian/2)*muyutimes[i]*muyutimes[seat]; delta_scores[seat]+=qieshang(sudian/2)*muyutimes[i]*muyutimes[seat]; } } } } else{ if(qinjia){ delta_scores[fangchong]-=qieshang(6*sudian)*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=qieshang(6*sudian)*muyutimes[fangchong]*muyutimes[seat]; } else{ delta_scores[fangchong]-=qieshang(4*sudian)*muyutimes[fangchong]*muyutimes[seat]; delta_scores[seat]+=qieshang(4*sudian)*muyutimes[fangchong]*muyutimes[seat]; } } } let dadian=Math.max(delta_scores[seat],-delta_scores[seat]); if(zimo){ if(baopai[seat]!=undefined){ delta_scores[baopai[seat].seat]-=(playercnt-1)*100*benchangbang; delta_scores[seat]+=(playercnt-1)*100*benchangbang; } else{ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; delta_scores[i]-=100*benchangbang; delta_scores[seat]+=100*benchangbang; } } } else{ delta_scores[fangchong]-=(playercnt-1)*100*benchangbang; delta_scores[seat]+=(playercnt-1)*100*benchangbang; } benchangbang=0; delta_scores[seat]+=liqibang*1000; liqibang=0; //--------------------------------------------------- let ret={ 'count':val, 'doras':doras0, 'li_doras':li_doras0, 'fans':points.fans, 'fu':points.fu, 'hand':hand, 'hu_tile':hu_tile, 'liqi':liqi, 'ming':ming, 'point_rong':point_rong, 'point_sum':point_sum, 'point_zimo_qin':point_zimo_qin, 'point_zimo_xian':point_zimo_xian, 'qinjia':qinjia, 'seat':seat, 'title_id':title_id, 'yiman':points.yiman, 'zimo':zimo, } if(is_xuezhandaodi())ret.dadian=dadian; playertiles[seat].length--; return ret; } function endHule(HuleInfo,old_scores,delta_scores,scores,baopai){ actions.push({ 'name':"RecordHule", 'data':{ 'delta_scores':[].concat(delta_scores), 'gameend':{}, 'hules':HuleInfo, 'old_scores':[].concat(old_scores), 'scores':[].concat(scores), 'baopai':baopai } }); edit_online(); } function addHuleXueZhanMid(HuleInfo,old_scores,delta_scores,scores){ for(let seat=0;seat<playercnt;seat++)liqiinfo[seat].yifa=0;//????? actions.push({ 'name':"RecordHuleXueZhanMid", 'data':{ 'delta_scores':[].concat(delta_scores), 'hules':HuleInfo, 'old_scores':[].concat(old_scores), 'scores':[].concat(scores) } }); edit_online(); } function addHuleXueZhanEnd(HuleInfo,old_scores,delta_scores,scores,hules_history){ actions.push({ 'name':"RecordHuleXueZhanEnd", 'data':{ 'delta_scores':[].concat(delta_scores), 'hules':HuleInfo, 'hules_history':hules_history, 'old_scores':[].concat(old_scores), 'scores':[].concat(scores) } }); } function addHuleXueLiu(HuleInfo,old_scores,delta_scores,scores){ for(let seat=0;seat<playercnt;seat++)liqiinfo[seat].yifa=0; actions.push({ 'name':"RecordHuleXueLiu", 'data':{ 'delta_scores':[].concat(delta_scores), 'hules':HuleInfo, 'old_scores':[].concat(old_scores), 'scores':[].concat(scores) } }); edit_online(); } function addHuleXueLiuEnd(HuleInfo,old_scores,delta_scores,scores,hules_history){ let allplayertiles=["","","",""]; for(let seat=0;seat<playercnt;seat++){ playertiles[seat].sort(cmp); for(let i=0;i<playertiles[seat].length;i++){ allplayertiles[seat]+=playertiles[seat][i]; if(i!=playertiles[seat].length-1)allplayertiles[seat]+="|"; } } for(let seat=0;seat<playercnt;seat++)liqiinfo[seat].yifa=0; actions.push({ 'name':"RecordHuleXueLiuEnd", 'data':{ 'delta_scores':[].concat(delta_scores), 'hules':HuleInfo, 'hules_history':hules_history, 'old_scores':[].concat(old_scores), 'scores':[].concat(scores), 'allplayertiles':allplayertiles } }); edit_online(); } function hupai(x,type){ try{ if(chuanmagangs.notover.length!=0){ let seat=getlstaction().data.seat,tile=getlstaction().data.tiles; for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type==2&&equaltile(fulu[seat][i].tile[0],tile)){ fulu[seat][i].type=1; fulu[seat][i].tile.length--; break; } } chuanmagangs.notover.length=0; } if(typeof(x)=="boolean"){type=x;x=undefined;} if(typeof(x)=="number")x=[x]; if(x==undefined){ let lstaction=getlstaction(); if(lstaction.name=="RecordDealTile")x=[lstaction.data.seat]; else if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")x=[ju]; else{ x=[]; for(let i=ju;i<playercnt+ju;i++){ seat=i%playercnt; if(seat==getlstaction().data.seat||hupaied[seat])continue; if(lstaction.name=="RecordDiscardTile")playertiles[seat].push(lstaction.data.tile); else if(lstaction.name=="RecordAnGangAddGang")playertiles[seat].push(lstaction.data.tiles); else if(lstaction.name=="RecordBaBei")playertiles[seat].push(lstaction.data.tile); if(calchupai(playertiles[seat])!=0)x.push(seat); playertiles[seat].length=playertiles[seat].length-1; } } } if(x.length==0)return; if(!is_xuezhandaodi()&&!is_chuanma()&&!is_xueliu()){ let ret=[],baopait=0; for(let i=0;i<x.length;i++)ret.push(hupaioneplayer(x[i])); for(let i=0;i<x.length;i++)hupaied[x[i]]=true; for(let i=0;i<x.length;i++)if(baopai[x[i]])baopait=baopai[x[i]].seat+1; let old_scores=[].concat(scores); for(let i=0;i<playercnt;i++)scores[i]=scores[i]+delta_scores[i]; endHule(ret,[].concat(old_scores),[].concat(delta_scores),[].concat(scores),baopait); delta_scores=[0,0,0,0]; if(!is_chuanma()&&hupaied[ju])ben++; else if(!is_chuanma()){ ju++; ben=0; } roundend(); } else if((is_xuezhandaodi()||is_chuanma()||is_xueliu())&&(type==undefined||type==false)){ let ret=[]; for(let i=0;i<x.length;i++){ let whatever; if(!is_chuanma())whatever=hupaioneplayer(x[i]); else whatever=hupaioneplayer_chuanma(x[i]); ret.push(whatever); inserthules_history(whatever); } if(is_chuanma()&&juc==-1)juc=x[0]; if(!is_xueliu())for(let i=0;i<x.length;i++)hupaied[x[i]]=true; let old_scores=[].concat(scores); for(let i=0;i<playercnt;i++)scores[i]=scores[i]+delta_scores[i]; if(!is_xueliu())addHuleXueZhanMid(ret,[].concat(old_scores),[].concat(delta_scores),[].concat(scores)); else addHuleXueLiu(ret,[].concat(old_scores),[].concat(delta_scores),[].concat(scores)); delta_scores=[0,0,0,0]; } else if((is_xuezhandaodi()||is_chuanma()||is_xueliu())&&type!=undefined&&type!=false){ let ret=[]; for(let i=0;i<x.length;i++){ let whatever; if(!is_chuanma())whatever=hupaioneplayer(x[i]); else whatever=hupaioneplayer_chuanma(x[i]); ret.push(whatever); inserthules_history(whatever); } if(is_chuanma()&&juc==-1)juc=x[0]; if(!is_xueliu())for(let i=0;i<x.length;i++)hupaied[x[i]]=true; let old_scores=[].concat(scores); for(let i=0;i<playercnt;i++)scores[i]=scores[i]+delta_scores[i]; if(!is_xueliu())addHuleXueZhanEnd(ret,[].concat(old_scores),[].concat(delta_scores),[].concat(scores),hules_history); else addHuleXueLiuEnd(ret,[].concat(old_scores),[].concat(delta_scores),[].concat(scores),hules_history); delta_scores=[0,0,0,0]; if(!is_chuanma())ju++; roundend(); } if(is_chuanma()&&!hupaied[0]&&!hupaied[1]&&!hupaied[2]&&!hupaied[3])ju=x[0]; saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function addChangeTile(change_tile_infos,change_type,doras){ for(let seat=0;seat<playercnt;seat++){ for(let j=0;j<3;j++){ for(let i=0;i<playertiles[seat].length;i++){ if(playertiles[seat][i]==change_tile_infos[seat].out_tiles[j]){ playertiles[seat][i]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length--; break; } } } for(let j=0;j<3;j++)playertiles[seat].push(change_tile_infos[seat].in_tiles[j]); } let ret={ 'name':"RecordChangeTile", 'data':{ 'change_tile_infos':change_tile_infos, 'change_type':change_type, 'doras':doras } }; let lsttile=playertiles[ju][playertiles[ju].length-1]; playertiles[ju].length--; let tingpais=[]; for(let i=0;i<playercnt;i++){ let tingpaitmp=tingpai(i); if(tingpaitmp.length!=0)tingpais.push({'seat':i,'tingpais1':tingpaitmp}); } if(tingpais.length!=0)ret.data.tingpai=tingpais; playertiles[ju].push(lsttile); if(is_chuanma())ret.data.operations=[{ 'operation_list':[{ 'gap_type':0, 'type':13 }], 'seat':0 },{ 'operation_list':[{ 'gap_type':0, 'type':13 }], 'seat':1 },{ 'operation_list':[{ 'gap_type':0, 'type':13 }], 'seat':2 },{ 'operation_list':[{ 'gap_type':0, 'type':13 }], 'seat':3 }]; actions.push(ret); edit_online(); } //0:逆时针 1:对家 2:顺时针 function huansanzhang(tiles0,tiles1,tiles2,tiles3,type){ try{ if(typeof(tiles0)=="string")tiles0=separatetile(tiles0); if(typeof(tiles1)=="string")tiles1=separatetile(tiles1); if(typeof(tiles2)=="string")tiles2=separatetile(tiles2); if(typeof(tiles3)=="string")tiles3=separatetile(tiles3); let ret=[]; let tiles=[tiles0,tiles1,tiles2,tiles3]; for(let seat=0;seat<playercnt;seat++){ ret.push({ 'out_tiles':tiles[seat], 'in_tile_states':[0,0,0], 'in_tiles':tiles[(seat-type-1+playercnt*2)%playercnt], 'out_tile_states':[0,0,0], }) } addChangeTile(ret,type,calcdoras()); saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function addSelectGap(gap_types){ let ret={ 'name':"RecordSelectGap", 'data':{ 'gap_types':gap_types, } }; let tingpais=[]; for(let i=0;i<playercnt;i++){ let tingpaitmp=tingpai(i); if(tingpaitmp.length!=0)tingpais.push({'seat':i,'tingpais1':tingpaitmp}); } if(tingpais.length!=0)ret.data.tingpai=tingpais; actions.push(ret); edit_online(); } //1m2s0p function dingque(x){ try{ if(typeof(x)=="number")x=x.toString(); if(typeof(x)=="string")x=x.split(''); let ret=[]; for(let i=0;i<x.length;i++){ if(x[i]=="wan"||x[i]=="m"||x[i]=="1")ret.push(1); if(x[i]=="bing"||x[i]=="p"||x[i]=="0")ret.push(0); if(x[i]=="suo"||x[i]=="s"||x[i]=="2")ret.push(2); } gaps=ret; addSelectGap(ret); saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function addGangResult(gang_infos){ actions.push({ 'name':"RecordGangResult", 'data':{ 'gang_infos':gang_infos, } }); edit_online(); } function addGangResultEnd(gang_infos){ actions.push({ 'name':"RecordGangResultEnd", 'data':{ 'gang_infos':gang_infos, } }); edit_online(); } function calcgangpoint(type){ try{ let ret={ 'delta_scores':[], 'old_scores':[].concat(scores), 'scores':[] } if(chuanmagangs.notover.length==0)return; for(let i=chuanmagangs.notover.length-1;i>=0;i--){ chuanmagangs.over.push(chuanmagangs.notover[i]); delta_scores[chuanmagangs.notover[i].from]-=chuanmagangs.notover[i].val; delta_scores[chuanmagangs.notover[i].to]+=chuanmagangs.notover[i].val; chuanmagangs.notover.length--; } ret.delta_scores=[].concat(delta_scores); for(let i=0;i<playercnt;i++){ scores[i]=scores[i]+delta_scores[i]; delta_scores[i]=0; } ret.scores=[].concat(scores); if(type==undefined||type==false)addGangResult(ret); else { ret.hules_history=hules_history; addGangResultEnd(ret); } saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function endNoTile(liujumanguan,players,scores){ let ret={ 'name':"RecordNoTile", 'data':{ 'gameend':false, 'liujumanguan':liujumanguan, 'players':players, 'scores':scores } }; if(hules_history.length!=0)ret.data.hules_history=hules_history; actions.push(ret); edit_online(); } function mopai(seat){ try{ if(is_chuanma())calcgangpoint(); let lstaction=getlstaction(); if(lstaction.name=="RecordChiPengGang"||lstaction.name=="RecordBaBei"||lstaction.name=="RecordAnGangAddGang")seat=lstaction.data.seat; if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile"||lstaction.name=="RecordSelectGap")seat=ju; if(lstaction.name=="RecordDiscardTile"||lstaction.name=="RecordHuleXueZhanMid"||lstaction.name=="RecordHuleXueLiu"){ if(lstaction.name=="RecordDiscardTile")seat=(lstaction.data.seat+1)%playercnt; else seat=(lstaction.data.hules[lstaction.data.hules.length-1].seat+1)%playercnt; while(hupaied[seat])seat=(seat+1)%playercnt; } if(doracnt.lsttype==2){ doracnt.lsttype=0; doracnt.cnt++; } for(let i=0;i<playercnt;i++)if(liqiinfo[i].yifa==2)liqiinfo[i].yifa=0; let drawcard,liqi; if(lstliqi!=0&&scores[lstliqi.seat]>=1000){ liqibang=liqibang+1; scores[lstliqi.seat]=scores[lstliqi.seat]-1000; liqiinfo[lstliqi.seat]={'liqi':lstliqi.type,'yifa':1,'kai':lstliqi.kai}; liqi={ 'liqibang':liqibang, 'score':scores[lstliqi.seat], 'seat':lstliqi.seat } } lstliqi=0; let tile_state; if(is_openhand(seat)||liqiinfo[seat].kai)tile_state=1; if(drawtype==1){ if(!is_chuanma())addDealTile(calcdoras(),paishan.length/2-15,seat,paishan.substring(0,2),liqi,tile_state); else addDealTile(calcdoras(),paishan.length/2-1,seat,paishan.substring(0,2),liqi,tile_state); drawcard=paishan.substring(0,2); paishan=paishan.substring(2); lstdrawtype=1; } else{ addDealTile(calcdoras(),paishan.length/2-15,seat,paishan.substring(paishan.length-2),liqi,tile_state); drawcard=paishan.substring(paishan.length-2); paishan=paishan.substring(0,paishan.length-2); lstdrawtype=0; } drawtype=1; saveproject(); return drawcard; }catch(e){ throw(e); loadproject(lstscene); } } function qiepai(seat,kind,is_liqi){ try{ if(typeof(seat)=="boolean"||seat=="liqi"||seat=="kailiqi"){kind=seat;seat=undefined;} if(typeof(kind)=="boolean"||kind=="liqi"||kind=="kailiqi"){is_liqi=kind;kind=undefined;} if(seat!=0&&seat!=1&&seat!=2&&seat!=playercnt-1&&seat!=undefined){kind=seat;seat=undefined;} if(seat==undefined){ let lstaction=getlstaction(); if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile"||lstaction.name=="RecordSelectGap")seat=ju; else seat=lstaction.data.seat; } if(kind==undefined){ if(discardtiles[seat].length!=0){ kind=discardtiles[seat].substring(0,2); discardtiles[seat]=discardtiles[seat].substring(2); if(kind==".."||kind==" ")kind="moqie"; } else kind="moqie"; } if(is_liqi==true)is_liqi="liqi"; if(is_liqi==undefined)is_liqi=false; let is_wliqi=false,is_kailiqi=false; if(is_liqi!=false&&liqiinfo[seat].yifa!=0)is_wliqi=true; if(is_liqi=="liqi"){is_liqi=true;} else if(is_liqi=="kailiqi"){is_liqi=true;is_kailiqi=true;} if(is_wliqi)lstliqi={'seat':seat,'type':2,'kai':0}; else if(is_liqi!=false)lstliqi={'seat':seat,'type':1,'kai':0}; if(is_kailiqi)lstliqi.kai=1; if(doracnt.lsttype==1){ doracnt.lsttype=0; doracnt.cnt++; } let flag=0,tile; if(kind=="moqie")flag=2; else if(typeof(kind)=="string")kind=[kind]; function swap(x){ playertiles[seat][x]=playertiles[seat][playertiles[seat].length-1]; playertiles[seat][playertiles[seat].length-1]=tile; if(x==playertiles[seat].length-1)flag=2; else flag=1; } function intiles(x,tile){ let cnt=[]; for(let i=1;i<=37;i++)cnt[i]=0; for(let i=0;i<x.length;i++)cnt[tiletoint(x[i],1)]++; if(cnt[tiletoint(tile,1)]>=1)return true; else return false; } for(let i=playertiles[seat].length-1;i>=0;i--){ tile=playertiles[seat][i]; if(intiles(kind,tile)){swap(i);break;} } let lstactionname=getlstaction().name; let tile_state; if(is_openhand(seat))tile_state=1; if(flag==0&&kind[0]>='0'&&kind[0]<='9'){ if(is_peipaimingpai()){tile_state=erasemingpai(kind,seat);} paihe[seat].tiles.push(kind); let abc=tiletoint(kind); if(abc!=1&&abc!=9&&abc!=10&&abc!=18&&abc!=19&&abc!=27&&abc<=27)paihe[seat].liujumanguan=false; liqiinfo[seat].yifa=0; if(playertiles[seat][playertiles[seat].length-1]==kind&&lstactionname!="RecordNewRound"&&lstactionname!="RecordChiPengGang")addDiscardTile(is_liqi,is_wliqi,calcdoras(),true,seat,kind,tingpai(seat),tile_state); else addDiscardTile(is_liqi,is_wliqi,calcdoras(),false,seat,kind,tingpai(seat),tile_state,is_kailiqi); saveproject(); return 1; } if(flag==1||lstactionname=="RecordNewRound"||lstactionname=="RecordChiPengGang"){ let tile=playertiles[seat][playertiles[seat].length-1]; if(is_peipaimingpai()){tile_state=erasemingpai(tile,seat);} paihe[seat].tiles.push(tile); let abc=tiletoint(tile); if(abc!=1&&abc!=9&&abc!=10&&abc!=18&&abc!=19&&abc!=27&&abc<=27)paihe[seat].liujumanguan=false; liqiinfo[seat].yifa=0; addDiscardTile(is_liqi,is_wliqi,calcdoras(),false,seat,tile,tingpai(seat),tile_state,is_kailiqi); saveproject(); return 1; } else if(flag==2&&lstactionname!="RecordNewRound"&&lstactionname!="RecordChiPengGang"){ let tile=playertiles[seat][playertiles[seat].length-1]; if(is_peipaimingpai()){tile_state=erasemingpai(tile,seat);} paihe[seat].tiles.push(tile); let abc=tiletoint(tile); if(abc!=1&&abc!=9&&abc!=10&&abc!=18&&abc!=19&&abc!=27&&abc<=27)paihe[seat].liujumanguan=false; liqiinfo[seat].yifa=0; addDiscardTile(is_liqi,is_wliqi,calcdoras(),true,seat,tile,tingpai(seat),tile_state,is_kailiqi); saveproject(); return 1; } else return 0; }catch(e){ throw(e); loadproject(lstscene); } } function mingpai(seat,tiles){ try{ function changedora(x){ if(x[0]=='0')return "5"+x[1]; if(x[0]=='5'&&x[1]!='z')return "0"+x[1]; return x; } function intiles(x,y){ let cnt=[],cnt2=[]; for(let i=1;i<=37;i++)cnt[i]=cnt2[i]=0; for(let i=0;i<x.length;i++)cnt[tiletoint(x[i],1)]++; for(let i=0;i<y.length;i++)cnt2[tiletoint(y[i],1)]++; for(let i=1;i<=37;i++)if(cnt[i]>cnt2[i])return false; return true; } function trying(x,seat){ for(let seat2=0;seat2<playercnt;seat2++){ if((seat==seat2||seat==undefined)&&intiles(x,playertiles[seat2])){ mingpai(seat2,x); return true; } } return false; } if(seat!=0&&seat!=1&&seat!=2&&seat!=playercnt-1){tiles=seat;seat=undefined;} if(seat==undefined){ if(tiles!=undefined&&!equaltile(tiles[0],getlstaction().data.tile))seat=(getlstaction().data.seat+1)%playercnt; else if(tiles!=undefined){ for(let seat2=0;seat2<playercnt;seat2++){ if(seat2==getlstaction().data.seat)continue; let cnt=[]; for(let i=0;i<=36;i++)cnt[i]=0; for(let i=0;i<playertiles[seat2].length;i++)cnt[tiletoint(playertiles[seat2][i])]++; if(tiles.length==3&&cnt[tiletoint(tiles[0])]>=3)seat=seat2; if(tiles.length==2&&cnt[tiletoint(tiles[0])]>=2)seat=seat2; } } } if(typeof(tiles)=="string")tiles=separatetile(tiles); if(tiles==undefined){ let lsttile=getlstaction().data.tile; lsttile=inttotile(tiletoint(lsttile)); if(trying([lsttile,lsttile,lsttile],seat))return; if(lsttile[0]=='5'&&lsttile[1]!='z'){ if(trying(["0"+lsttile[1],lsttile,lsttile],seat))return; if(trying(["0"+lsttile[1],"0"+lsttile[1],lsttile],seat))return; } if(trying([lsttile,lsttile],seat))return; if(lsttile[0]=='5'&&lsttile[1]!='z'){ if(trying(["0"+lsttile[1],lsttile],seat))return; if(trying(["0"+lsttile[1],"0"+lsttile[1]],seat))return; } seat=(getlstaction().data.seat+1)%playercnt; if(lsttile[1]!='z'&&lsttile[0]!='1'&&lsttile[0]!='2'){ if(trying([inttotile(tiletoint(lsttile)-2),inttotile(tiletoint(lsttile)-1)],seat))return; if(trying([changedora(inttotile(tiletoint(lsttile)-2)),inttotile(tiletoint(lsttile)-1)],seat))return; if(trying([inttotile(tiletoint(lsttile)-2),changedora(inttotile(tiletoint(lsttile)-1))],seat))return; } if(lsttile[1]!='z'&&lsttile[0]!='1'&&lsttile[0]!='9'){ if(trying([inttotile(tiletoint(lsttile)-1),inttotile(tiletoint(lsttile)+1)],seat))return; if(trying([changedora(inttotile(tiletoint(lsttile)-1)),inttotile(tiletoint(lsttile)+1)],seat))return; if(trying([inttotile(tiletoint(lsttile)-1),changedora(inttotile(tiletoint(lsttile)+1))],seat))return; } if(lsttile[1]!='z'&&lsttile[0]!='8'&&lsttile[0]!='9'){ if(trying([inttotile(tiletoint(lsttile)+1),inttotile(tiletoint(lsttile)+2)],seat))return; if(trying([changedora(inttotile(tiletoint(lsttile)+1)),inttotile(tiletoint(lsttile)+2)],seat))return; if(trying([inttotile(tiletoint(lsttile)+1),changedora(inttotile(tiletoint(lsttile)+2))],seat))return; } return; } for(let i=0;i<playercnt;i++)liqiinfo[i].yifa=0; let lstaction=getlstaction(); paihe[lstaction.data.seat].liujumanguan=false; let from=getlstaction().data.seat,lsttile=getlstaction().data.tile; let liqi=0; if(lstliqi!=0&&scores[lstliqi.seat]>=1000){ liqibang=liqibang+1; scores[lstliqi.seat]=scores[lstliqi.seat]-1000; liqiinfo[lstliqi.seat]={'liqi':lstliqi.type,'yifa':1,'kai':lstliqi.kai}; liqi={ 'liqibang':liqibang, 'score':scores[lstliqi.seat], 'seat':lstliqi.seat } } lstliqi=0; let tile_states=[]; if(is_peipaimingpai())for(let i=0;i<tiles.length;i++)tile_states.push(erasemingpai(tiles[i],seat)); if(!equaltile(tiles[0],lsttile)){ fulu[seat].push({'type':0,'tile':[tiles[0],tiles[1],lsttile],'from':from}); addChiPengGang([from,seat,seat],seat,[lsttile,tiles[0],tiles[1]],0,liqi,tile_states); } else if(tiles.length==3){ doracnt.lsttype=1; if(!is_chuanma())drawtype=0; else chuanmagangs.notover.push({'from':from,'to':seat,'val':2000}); fulu[seat].push({'type':2,'tile':[tiles[0],tiles[1],tiles[2],lsttile],'from':from}); if(from==(seat+3)%4)addChiPengGang([from,seat,seat,seat],seat,[lsttile,tiles[0],tiles[1],tiles[2]],2,liqi,tile_states); if(from==(seat+2)%4)addChiPengGang([seat,from,seat,seat],seat,[tiles[0],lsttile,tiles[1],tiles[2]],2,liqi,tile_states); if(from==(seat+1)%4)addChiPengGang([seat,seat,seat,from],seat,[tiles[0],tiles[1],tiles[2],lsttile],2,liqi,tile_states); } else{ fulu[seat].push({'type':1,'tile':[tiles[0],tiles[1],lsttile],'from':from}); if(from==(seat+3)%4)addChiPengGang([from,seat,seat],seat,[lsttile,tiles[0],tiles[1]],1,liqi,tile_states); if(from==(seat+2)%4)addChiPengGang([seat,from,seat],seat,[tiles[0],lsttile,tiles[1]],1,liqi,tile_states); if(from==(seat+1)%4)addChiPengGang([seat,seat,from],seat,[tiles[0],tiles[1],lsttile],1,liqi,tile_states); } saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function leimingpai(seat,tile,type){ try{ if(seat=="babei"||seat=="angang"||seat=="jiagang"){tile=seat;seat=undefined;} if(tile=="babei"||tile=="angang"||tile=="jiagang"){type=tile;tile=undefined;} if(seat!=0&&seat!=1&&seat!=2&&seat!=playercnt-1){tile=seat;seat=undefined;} if(tile==undefined){ if(leimingpai("4z","babei"))return true; for(let i=1;i<=34;i++)if(leimingpai(inttotile(i),"angang"))return true; for(let i=1;i<=34;i++)if(leimingpai(inttotile(i),"jiagang"))return true; return false; } if(seat==undefined){ let lstaction=getlstaction(); if(lstaction.name=="RecordNewRound"||lstaction.name=="RecordChangeTile")seat=ju; else seat=lstaction.data.seat; } if(doracnt.lsttype==1){ doracnt.lsttype=0; doracnt.cnt++; } let tile_states=[]; let tilecnt=0,jiagangflag=false; for(let i=0;i<playertiles[seat].length;i++)if(equaltile(tile,playertiles[seat][i]))tilecnt++; if(playercnt==3&&tilecnt>=1&&tile=="4z"&&(type==undefined||type=="babei")){ if(is_peipaimingpai())tile_states.push(erasemingpai(tile,seat)); for(let i=0;i<playercnt;i++)if(liqiinfo[i].yifa==1)liqiinfo[i].yifa=2; fulu[seat].push({'type':4,'tile':[tile]}); drawtype=0; addBaBei(calcdoras(),seat,tile,tile_states); saveproject(); return true; } for(let i=0;i<fulu[seat].length;i++)if(equaltile(fulu[seat][i].tile[0],tile)&&fulu[seat][i].type==1)jiagangflag=true; if(tilecnt>=4&&(type==undefined||type=="angang")){ for(let i=0;i<playercnt;i++)if(liqiinfo[i].yifa==1)liqiinfo[i].yifa=2; doracnt.lsttype=2; fulu[seat].push({'type':3,'tile':[]}); for(let i=0;i<playertiles[seat].length;i++){ if(equaltile(tile,playertiles[seat][i])){ if(is_peipaimingpai())tile_states.push(erasemingpai(playertiles[seat][i],seat)); fulu[seat][fulu[seat].length-1].tile.push(playertiles[seat][i]); } } fulu[seat][fulu[seat].length-1].tile.sort(); let tmptile=fulu[seat][fulu[seat].length-1].tile[2]; fulu[seat][fulu[seat].length-1].tile[2]=fulu[seat][fulu[seat].length-1].tile[1]; fulu[seat][fulu[seat].length-1].tile[1]=fulu[seat][fulu[seat].length-1].tile[0]; fulu[seat][fulu[seat].length-1].tile[0]=tmptile; if(!is_chuanma())drawtype=0; else{ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; chuanmagangs.notover.push({'from':i,'to':seat,'val':2000}); } } addAnGangAddGang(calcdoras(),seat,tile,3,tile_states); saveproject(); return true; } if(jiagangflag&&tilecnt>=1&&(type==undefined||type=="jiagang")){ for(let i=0;i<playercnt;i++)if(liqiinfo[i].yifa==1)liqiinfo[i].yifa=2; doracnt.lsttype=1; for(let i=0;i<fulu[seat].length;i++){ if(fulu[seat][i].type==1&&equaltile(fulu[seat][i].tile[0],tile)){ fulu[seat][i].type=2; for(let j=0;j<playertiles[seat].length;j++){ if(equaltile(tile,playertiles[seat][j])){ if(is_peipaimingpai())tile_states.push(erasemingpai(playertiles[seat][i],seat)); fulu[seat][i].tile.push(playertiles[seat][j]); } } fulu[seat][i].tile.push(tile); break; } } if(!is_chuanma())drawtype=0; else{ if(playertiles[seat][playertiles[seat].length-1]==tile){ for(let i=0;i<playercnt;i++){ if(i==seat||hupaied[i])continue; chuanmagangs.notover.push({'from':i,'to':seat,'val':1000}); } } } addAnGangAddGang(calcdoras(),seat,tile,2,tile_states); saveproject(); return true; } return false; }catch(e){ throw(e); loadproject(lstscene); } } function notileliuju(){ try{ let playerleft=0; for(let seat=0;seat<playercnt;seat++)if(!hupaied[seat])playerleft++; let tingcnt=0; let liujumanguan=false; let ret=[]; for(let i=0;i<playercnt;i++){ let tings=tingpai(i); if(tings.length==0||hupaied[i]){ ret.push({ 'tingpai':false, 'hand':[], 'tings':[] }); } else{ tingcnt++; playertiles[i].sort(cmp); ret.push({ 'tingpai':true, 'hand':[].concat(playertiles[i]), 'tings':tings }); } } let ret2=[]; for(let i=ju;i<playercnt+ju;i++){ if(is_chuanma())break; seat=i%playercnt; if(!paihe[seat].liujumanguan||hupaied[seat])continue; liujumanguan=true; let score=0; playertiles[seat].sort(cmp); for(let i=0;i<playercnt;i++){ if(seat==i||hupaied[i])continue; if(seat==ju||i==ju){ delta_scores[i]-=4000; delta_scores[seat]+=4000; score+=4000; } else{ delta_scores[i]-=2000; delta_scores[seat]+=2000; score+=2000; } } if(playercnt==3&&have_zimosun()==false){ for(let i=0;i<playercnt;i++){ if(seat==i||hupaied[i])continue; if(seat==ju){ delta_scores[i]-=2000; delta_scores[seat]+=2000; score+=2000; } else{ delta_scores[i]-=1000; delta_scores[seat]+=1000; score+=1000; } } } let ming=[]; for(let i=0;i<fulu[seat].length;i++){ let tiles=fulu[seat][i].tile; if(fulu[seat][i].type==0)ming.push("shunzi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==1)ming.push("kezi("+tiles[0]+","+tiles[1]+","+tiles[2]+")"); else if(fulu[seat][i].type==2)ming.push("minggang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); else if(fulu[seat][i].type==3)ming.push("angang("+tiles[0]+","+tiles[1]+","+tiles[2]+","+tiles[3]+")"); } ret2.push({ 'delta_scores':[].concat(delta_scores), 'doras':calcdoras(), 'hand':[].concat(playertiles[seat]), 'ming':ming, 'old_scores':[].concat(scores), 'score':score, 'seat':seat }); for(let i=0;i<playercnt;i++){ scores[i]=scores[i]+delta_scores[i]; delta_scores[i]=0; } } if(liujumanguan&&!is_chuanma()){ endNoTile(true,ret,ret2); if(!is_xuezhandaodi()&&!is_xueliu())ben++; if(ret[ju].tingpai==false||is_xuezhandaodi())ju++; return; } ret2=[{'delta_scores':[],'old_scores':[]}]; if(tingcnt!=0&&tingcnt!=playerleft){ if(!is_chuanma()){ for(let seat=0;seat<playercnt;seat++){ if(hupaied[seat])continue; if(ret[seat].tingpai==true)delta_scores[seat]+=(playerleft-1)*1000/tingcnt; else delta_scores[seat]-=(playerleft-1)*1000/(playerleft-tingcnt); } } else{ for(let seat=0;seat<playercnt;seat++){ for(let i=0;i<playercnt;i++){ if(hupaied[seat]||hupaied[i]||i==seat)continue; if(huazhu(i)&&ret[seat].tingpai==true){ delta_scores[seat]+=Math.max(calcsudian_chuanma(calcfan_chuanma(playertiles[seat],seat,false)),8000); delta_scores[i]-=Math.max(calcsudian_chuanma(calcfan_chuanma(playertiles[seat],seat,false)),8000); } else if(huazhu(i)){ delta_scores[seat]+=8000; delta_scores[i]-=8000; } else if(ret[i].tingpai==false&&ret[seat].tingpai==true){ delta_scores[seat]+=calcsudian_chuanma(calcfan_chuanma(playertiles[seat],seat,false)); delta_scores[i]-=calcsudian_chuanma(calcfan_chuanma(playertiles[seat],seat,false)); } } } } } ret2[0].old_scores=[].concat(scores); ret2[0].delta_scores=[].concat(delta_scores); if(is_chuanma()){ let taxes=[0,0,0,0]; for(let i=0;i<chuanmagangs.over.length;i++){ let from=chuanmagangs.over[i].from,to=chuanmagangs.over[i].to,val=chuanmagangs.over[i].val; if(ret[to].tingpai==false){ taxes[to]-=val; taxes[from]+=val; } } ret2[0].taxes=taxes; for(let seat=0;seat<playercnt;seat++)scores[seat]=scores[seat]+taxes[seat]; } for(let seat=0;seat<playercnt;seat++)scores[seat]=scores[seat]+delta_scores[seat]; endNoTile(false,ret,ret2); if(!is_xuezhandaodi()&&!is_chuanma())ben++; if((ret[ju].tingpai==false||is_xuezhandaodi())&&!is_chuanma())ju++; roundend(); saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function liuju(){ try{ let ret; for(let seat=0;seat<playercnt;seat++){ let cnt=[],yaojiutype=0; for(let i=0;i<=36;i++)cnt[i]=0; for(let i=0;i<playertiles[seat].length;i++)cnt[tiletoint(playertiles[seat][i])]++; if(cnt[1]>=1)yaojiutype++;if(cnt[9]>=1)yaojiutype++; if(cnt[10]>=1)yaojiutype++;if(cnt[18]>=1)yaojiutype++; if(cnt[19]>=1)yaojiutype++;if(cnt[27]>=1)yaojiutype++; if(cnt[28]>=1)yaojiutype++;if(cnt[29]>=1)yaojiutype++; if(cnt[30]>=1)yaojiutype++;if(cnt[31]>=1)yaojiutype++; if(cnt[32]>=1)yaojiutype++;if(cnt[33]>=1)yaojiutype++; if(cnt[34]>=1)yaojiutype++; if(yaojiutype>=9&&liqiinfo[seat].liqi==0&&liqiinfo[seat].yifa==1&&playertiles[seat].length==14){ let lsttile=playertiles[seat][playertiles[seat].length-1]; playertiles[seat].length=playertiles[seat].length-1; playertiles[seat].sort(cmp); playertiles[seat].push(lsttile); if(ret==undefined)ret={ 'name':"RecordLiuJu", 'data':{ 'seat':seat, 'tiles':[].concat(playertiles[seat]), 'type':1 } }; } } if(playercnt==4&&paihe[0].tiles.length==1&&paihe[1].tiles.length==1&&paihe[2].tiles.length==1&&paihe[3].tiles.length==1&&paihe[0].tiles[0]==paihe[1].tiles[0]&&paihe[1].tiles[0]==paihe[2].tiles[0]&&paihe[2].tiles[0]==paihe[3].tiles[0]&&tiletoint(paihe[0].tiles[0])>=28&&tiletoint(paihe[0].tiles[0])<=31){ if(ret==undefined)ret={ 'name':"RecordLiuJu", 'data':{ 'type':2 } }; } let havegang=[0,0,0,0],havegangcnt=0; for(let seat=0;seat<playercnt;seat++){ for(let i=0;i<fulu[seat].length;i++)if(fulu[seat][i].type==2||fulu[seat][i].type==3)havegang[seat]=1; havegangcnt+=havegang[seat]; } if(doracnt.cnt==5&&havegangcnt>=2){ if(ret==undefined)ret={ 'name':"RecordLiuJu", 'data':{ 'type':3 } }; } if(playercnt==4&&ret==undefined){ let liqiplayercnt=0; if(liqiinfo[0].liqi!=0)liqiplayercnt++; if(liqiinfo[1].liqi!=0)liqiplayercnt++; if(liqiinfo[2].liqi!=0)liqiplayercnt++; if(liqiinfo[3].liqi!=0)liqiplayercnt++; if(liqiplayercnt==3&&lstliqi!=0&&scores[lstliqi.seat]>=1000){ liqibang=liqibang+1; scores[lstliqi.seat]=scores[lstliqi.seat]-1000; liqiinfo[lstliqi.seat]={'liqi':lstliqi.type,'yifa':1,'kai':lstliqi.kai}; let allplayertiles=["","","",""]; for(let seat=0;seat<playercnt;seat++){ playertiles[seat].sort(cmp); for(let i=0;i<playertiles[seat].length;i++){ allplayertiles[seat]+=playertiles[seat][i]; if(i!=playertiles[seat].length-1)allplayertiles[seat]+="|"; } } if(ret==undefined)ret={ 'name':"RecordLiuJu", 'data':{ 'type':4, 'liqi':{ 'liqibang':liqibang, 'score':scores[lstliqi.seat], 'seat':lstliqi.seat }, 'allplayertiles':allplayertiles } }; } } if(hules_history.length!=0)ret.data.hules_history=hules_history; actions.push(ret); edit_online(); if(!is_xuezhandaodi()&&!is_chuanma())ben++; roundend(); saveproject(); }catch(e){ throw(e); loadproject(lstscene); } } function roundend(type){ if(actions.length==0)return; if(type==undefined&&is_chuanma()&&chuanmagangs.notover.length!=0&&getlstaction().name!="RecordNoTile"&&getlstaction().name!="RecordHuleXueZhanEnd")calcgangpoint(true); discardtiles=["","","",""]; tiles0=null;tiles1=null;tiles2=null;tiles3=null;paishan=null; muyuseats=""; editdata.actions.push([].concat(actions)); editdata.xun.push([].concat(xun)); xun=[[],[],[],[]]; actions=[]; } function gameend(noedit){ function cmp2(x,y){ if(y.part_point_1>x.part_point_1)return 1; if(y.part_point_1<x.part_point_1)return -1; if(y.seat<x.seat)return 1; if(y.seat>x.seat)return -1; } players=[]; for(let i=0;i<playercnt;i++)players.push({ 'gold':0, 'grading_score':0, 'part_point_1':scores[i], 'part_point_2':0, 'seat':i, 'total_point':0, }); players.sort(cmp2); players[0].part_point_1+=liqibang*1000; let madian=[[15,5,-5,-15],[10,0,-10]]; if(playercnt==3){ for(let i=1;i<3;i++)players[i].total_point=players[i].part_point_1-firstneededscores+madian[1][i]*1000; players[0].total_point=-players[1].total_point-players[2].total_point; } else{ for(let i=1;i<4;i++)players[i].total_point=players[i].part_point_1-firstneededscores+madian[0][i]*1000; players[0].total_point=-players[1].total_point-players[2].total_point-players[3].total_point; } editdata.players=players; if(noedit!=true)edit(); } function randompaishan(paishan,paishanback,reddora){ if(editdata.actions.length==0)gamebegin(); try{ if(unsafeWindow.tiles0!=null){tiles0=unsafeWindow.tiles0;unsafeWindow.tiles0=null;} if(unsafeWindow.tiles1!=null){tiles1=unsafeWindow.tiles1;unsafeWindow.tiles1=null;} if(unsafeWindow.tiles2!=null){tiles2=unsafeWindow.tiles2;unsafeWindow.tiles2=null;} if(unsafeWindow.tiles3!=null){tiles3=unsafeWindow.tiles3;unsafeWindow.tiles3=null;} }catch(e){}; if(typeof(tiles0)=="string")tiles0=separatetile(tiles0); if(typeof(tiles1)=="string")tiles1=separatetile(tiles1); if(typeof(tiles2)=="string")tiles2=separatetile(tiles2); if(typeof(tiles3)=="string")tiles3=separatetile(tiles3); if(typeof(paishanback)=="number"){reddora=paishanback;paishanback=undefined;} paishan=decompose(paishan); if(paishanback!=undefined)paishanback=decompose(paishanback); if(reddora==undefined){ if(config.mode.mode==11){ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.dora_count!=undefined)reddora=config.mode.detail_rule.dora_count; else reddora=2; } else{ if(config&&config.mode&&config.mode.detail_rule&&config.mode.detail_rule.dora_count!=undefined)reddora=config.mode.detail_rule.dora_count; else reddora=3; } } function randomcmp(x,y){ return Math.random()-0.5; } let cnt=[],tls=[]; for(let i=1;i<=34;i++)cnt[i]=4; if(tiles3.length==0){ cnt[2]=0;cnt[3]=0;cnt[4]=0;cnt[5]=0;cnt[6]=0;cnt[7]=0;cnt[8]=0; if(reddora==undefined||reddora==2){cnt[14]=3;cnt[23]=3;cnt[36]=1;cnt[37]=1;} } else{ if(reddora==undefined||reddora==3){cnt[5]=3;cnt[14]=3;cnt[23]=3;cnt[35]=1;cnt[36]=1;cnt[37]=1;} if(reddora==4){cnt[5]=3;cnt[14]=2;cnt[23]=3;cnt[35]=1;cnt[36]=2;cnt[37]=1;} } if(is_chuanma()){cnt[28]=0;cnt[29]=0;cnt[30]=0;cnt[31]=0;cnt[32]=0;cnt[33]=0;cnt[34]=0;cnt[35]=0;cnt[36]=0;cnt[37]=0;cnt[5]=4;cnt[14]=4;cnt[23]=4;} for(let i=0;i<tiles0.length;i++)cnt[tiletoint(tiles0[i],1)]--; for(let i=0;i<tiles1.length;i++)cnt[tiletoint(tiles1[i],1)]--; for(let i=0;i<tiles2.length;i++)cnt[tiletoint(tiles2[i],1)]--; for(let i=0;i<tiles3.length;i++)cnt[tiletoint(tiles3[i],1)]--; for(let i=0;i<paishan.length;i+=2)cnt[tiletoint(paishan[i]+paishan[i+1],1)]--; if(paishanback!=undefined)for(let i=0;i<paishanback.length;i+=2)cnt[tiletoint(paishanback[i]+paishanback[i+1],1)]--; for(let i=1;i<=37;i++){ for(let j=1;j<=cnt[i];j++)tls.push(inttotile(i)); } tls.sort(randomcmp); for(let i=0;i<tls.length;i++)paishan+=tls[i]; if(paishanback!=undefined)paishan+=paishanback; return paishan; } function loadreplay(){ loadproject(); let rounds=uiscript.UI_Replay.Inst.rounds; editdata.config=view.DesktopMgr.Inst.game_config; if(uiscript.UI_Replay.Inst.gameResult.accounts[0])editdata.player_datas[0]=view.DesktopMgr.Inst.player_datas[0]; if(uiscript.UI_Replay.Inst.gameResult.accounts[1])editdata.player_datas[1]=view.DesktopMgr.Inst.player_datas[1]; if(uiscript.UI_Replay.Inst.gameResult.accounts[2])editdata.player_datas[2]=view.DesktopMgr.Inst.player_datas[2]; if(uiscript.UI_Replay.Inst.gameResult.accounts[3])editdata.player_datas[3]=view.DesktopMgr.Inst.player_datas[3]; editdata.player_datas[0].views=[];editdata.player_datas[1].views=[]; editdata.player_datas[2].views=[];editdata.player_datas[3].views=[]; gamebegin(); for(let i=0;i<rounds.length;i++){ let tt=rounds[i].actions; tiles0=rounds[i].actions[0].data.tiles0; tiles1=rounds[i].actions[0].data.tiles1; tiles2=rounds[i].actions[0].data.tiles2; if(rounds[i].actions[0].data.tiles3)tiles3=rounds[i].actions[0].data.tiles3; paishan=rounds[i].actions[0].data.paishan; roundbegin(); for(let j=1;j<tt.length;j++){ if(tt[j].name=="RecordDealTile")mopai(); if(tt[j].name=="RecordDiscardTile")qiepai(tt[j].data.tile,tt[j].data.is_liqi); if(tt[j].name=="RecordChiPengGang"){ let tmp=[]; for(let k=0;k<tt[j].data.tiles.length;k++)if(tt[j].data.froms[k]==tt[j].data.seat)tmp.push(tt[j].data.tiles[k]); mingpai(tmp); } if(tt[j].name=="RecordAnGangAddGang"){ if(tt[j].data.type==3)leimingpai(tt[j].data.tiles,"angang"); else leimingpai(tt[j].data.tiles,"jiagang"); } if(tt[j].name=="RecordBaBei")leimingpai("4z","babei"); if(tt[j].name=="RecordLiuJu")liuju(); if(tt[j].name=="RecordNoTile")notileliuju(); if(tt[j].name=="RecordHule"||tt[j].name=="RecordHuleXueZhanMid"||tt[j].name=="RecordHuleXueZhanEnd"){ let tmp=[]; for(let k=0;k<tt[j].data.hules.length;k++)tmp.push(tt[j].data.hules[k].seat); if(tt[j].name=="RecordHuleXueZhanEnd")hupai(tmp,true); else hupai(tmp); } if(tt[j].name=="RecordChangeTile"){ huansanzhang(tt[j].data.change_tile_infos[0].out_tiles,tt[j].data.change_tile_infos[1].out_tiles,tt[j].data.change_tile_infos[2].out_tiles,tt[j].data.change_tile_infos[3].out_tiles,tt[j].data.change_type); } if(tt[j].name=="RecordSelectGap"){ let tmp=""; for(let k=0;k<tt[j].data.gap_types.length;k++){ if(tt[j].data.gap_types[k]==0)tmp+="p"; if(tt[j].data.gap_types[k]==1)tmp+="m"; if(tt[j].data.gap_types[k]==2)tmp+="s"; } dingque(tmp); } } roundend(); } gameend(); } try{unsafeWindow.MRE=new Majsoul_Replay_Editor;}catch(e){}
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址