雀魂回放编辑器Replay_Editor

雀魂自制回放

目前为 2021-06-21 提交的版本。查看 最新版本

// ==UserScript==
// @name         雀魂回放编辑器Replay_Editor
// @namespace    http://tampermonkey.net/
// @version      0.1.6
// @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.getlstaction=getlstaction;
        unsafeWindow.loadproject=loadproject;
        unsafeWindow.tingpai=tingpai;

        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{
            unsafeWindow.getlstaction=null;
            unsafeWindow.loadproject=null;
            unsafeWindow.tingpai=null;

            unsafeWindow.editdata=null;
            unsafeWindow.settings=null;
            unsafeWindow.gamebegin=null;
            unsafeWindow.gameend=null;
            unsafeWindow.edit=null;
            unsafeWindow.canceledit=null;

            unsafeWindow.roundbegin=null;
            unsafeWindow.roundend=null;
            unsafeWindow.randompaishan=null;
            unsafeWindow.tiles0=null;
            unsafeWindow.tiles1=null;
            unsafeWindow.tiles2=null;
            unsafeWindow.tiles3=null;
            unsafeWindow.paishan=null;
            unsafeWindow.muyuseats=null;
            unsafeWindow.discardtiles=null;

            unsafeWindow.mopai=null;
            unsafeWindow.qiepai=null;
            unsafeWindow.mingpai=null;
            unsafeWindow.leimingpai=null;
            unsafeWindow.notileliuju=null;
            unsafeWindow.liuju=null;
            unsafeWindow.hupai=null;

            unsafeWindow.huansanzhang=null;
            unsafeWindow.dingque=null;
        }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或关注我们的公众号极客氢云获取最新地址