str = {}
fun = {}

str["Debug.ReloadFieldBegin"] = Debug.ReloadFieldBegin

Debug.ReloadFieldBegin = function(str_1, str_2)
  str["不洗牌"] = str_1 & DUEL_PSEUDO_SHUFFLE
  str["无BP"] = str_1 & DUEL_ATTACK_FIRST_TURN

  if str_2 then
    if str_2 == 3 then
    str["规则"] = "大师3 "
    elseif str_2 == 4 then
      str["规则"] = "新大师 "
    elseif str_2 == 5 then
      str["规则"] = "大师2020 "
      end
  else
    str["规则"] = "大师2020 "
    end
  str["Debug.ReloadFieldBegin"](str_1, str_2)
  end

fun["通关邀请"] = function(str_1)
  local effect_1
  effect_1 = Effect.GlobalEffect()
  effect_1:SetType(EFFECT_TYPE_FIELD
    + EFFECT_TYPE_CONTINUOUS)
  effect_1:SetCode(EVENT_DAMAGE)
  function cache_1()
    cache_1 = Duel.GetLP(1)
    if cache_1 <= 0 then
      if str_1 == "QB" then
        if cache_1 < 0 then
          Debug.ShowHint(str_2)
          end
        end
      cache_1 = true
    else
      cache_1 = false
      end
    return cache_1
    end
  effect_1:SetCondition(cache_1)
  function cache_1()
    Debug.ShowHint("残局群181175613")
    return
    end
  effect_1:SetOperation(cache_1)

  Duel.RegisterEffect(effect_1
    , 0)
  end

fun["是否效果卡"] = function(card)

  cache_1 = Card.IsType(card, TYPE_SPELL)
  cache_2 = Card.IsType(card, TYPE_TRAP)
  cache_3 = Card.IsType(card, TYPE_EFFECT)

  if cache_1
  or cache_2
  or cache_3 then
    return true
    end
  cache_1 = Card.IsType(card, TYPE_PENDULUM)

  if cache_1 then
    cache_1 = Card.IsCode(card, 28363749)
    cache_2 = Card.IsCode(card, 19474136)
    cache_3 = Card.IsCode(card, 17390179)
    cache_4 = Card.IsCode(card, 83980492)
    if cache_1
    or cache_2
    or cache_3
    or cache_4 then
    else
      return true
      end
    end

  return false
  end

fun["开局说明"] = function()
  if str["开局说明吗"] == 1 then
    return
  else
    str["开局说明吗"] = 1
    end

  cache_1 = 0
  cache_1 = cache_1 + LOCATION_DECK
  cache_1 = cache_1 + LOCATION_HAND
  cache_1 = cache_1 + LOCATION_MZONE
  cache_1 = cache_1 + LOCATION_SZONE
  cache_1 = cache_1 + LOCATION_GRAVE
  cache_1 = cache_1 + LOCATION_REMOVED
  cache_1 = cache_1 + LOCATION_EXTRA

  str["这个残局的效果卡数量"] = Duel.GetMatchingGroupCount(fun["是否效果卡"],0,cache_1,cache_1,nil)

  cache_1 = Duel.GetOverlayGroup(0, LOCATION_MZONE, LOCATION_MZONE)

  for k in aux.Next(cache_1) do
    cache_1 = fun["是否效果卡"](k)
    if cache_1 then
      str["这个残局的效果卡数量"] = str["这个残局的效果卡数量"] + 1
      end
    end

  str["开局说明"] =""

  str["开局说明"] = str["开局说明"] .. str["这个残局的效果卡数量"]
  str["开局说明"] = str["开局说明"] .. "卡 "

  str["开局说明"] = str["开局说明"] .. str["规则"]

  if str["不洗牌"] == 0 then
  else
    str["开局说明"] = str["开局说明"] .. "伪洗牌 "
    end
  if str["无BP"] == 0 then
    str["开局说明"] = str["开局说明"] .. "无BP "
    end

  if str["开局添加手卡"] then
    str["开局说明"] = str["开局说明"] .. "选"
    str["开局说明"] = str["开局说明"] .. str["开局添加手卡"]
    str["开局说明"] = str["开局说明"] .. "卡 "
    end

  if str["禁格"] then
    str["开局说明"] = str["开局说明"] .. "禁"
    str["开局说明"] = str["开局说明"] .. str["禁格"]
    str["开局说明"] = str["开局说明"] .. "格 "
    end

  if str["印卡"] then
    str["开局说明"] = str["开局说明"] .. "印卡 "
    end

  Debug.ShowHint(str["开局说明"])
  fun["通关邀请"]()
  end

fun["开局添加手卡"] = function(str_1)
  str["开局添加手卡"] = str_1
  effect_1 = Effect.GlobalEffect()
  effect_1:SetType(EFFECT_TYPE_FIELD
    + EFFECT_TYPE_CONTINUOUS)
  effect_1:SetCode(EVENT_ADJUST)
  effect_1:SetCountLimit(1)
  function cache_1()
    if str["已添加手卡"] == 1 then
      return false
    else
      str["已添加手卡"] = 1
      return true
      end

    end
  effect_1:SetCondition(cache_1)
  function cache_1(effect_event
    , player_who_activate_the_effect)

    str["玩家选定的卡"] = Duel.SelectMatchingCard(player_who_activate_the_effect
       , Card.IsAbleToHand
       , player_who_activate_the_effect
       , LOCATION_DECK
       , 0
       , str_1
       , str_1
       , nil)
    Duel.SendtoHand(str["玩家选定的卡"]
      , nil
      , REASON_RULE)
    end
  effect_1:SetOperation(cache_1)
  Duel.RegisterEffect(effect_1
    , 0)
  fun["开局说明"]()
  end

fun["禁格"] = function(str_1)
  str["禁格"] = str_1
  effect_1 = Effect.GlobalEffect()
  effect_1:SetType(EFFECT_TYPE_FIELD)
  effect_1:SetCode(EFFECT_USE_EXTRA_MZONE)
  effect_1:SetValue(str_1)
  Duel.RegisterEffect(effect_1,0)
  end

fun["印卡"] = function(str_1, str_2, str_3)
  str["印卡"] = 1

  if str_3 then
  else
    str_3 = str_2
    end

  str["当前印卡数"] = 1

  effect_1 = Effect.CreateEffect(str_1)

  effect_1:SetType(EFFECT_TYPE_IGNITION)

  effect_1:SetProperty(EFFECT_FLAG_BOTH_SIDE
    + EFFECT_FLAG_UNCOPYABLE
    + EFFECT_FLAG_CANNOT_NEGATE
    + EFFECT_FLAG_CANNOT_DISABLE)


  cache_1 = function()
    Duel.SetChainLimit(aux.FALSE)
    return true
    end

  effect_1:SetTarget(cache_1)

  effect_1:SetRange(LOCATION_EXTRA)

  function print_hand(effect_event
      , player_who_activate_the_effect)
    announce_card = Duel.AnnounceCard(player_who_activate_the_effect)
    card = Duel.CreateToken(player_who_activate_the_effect
      , announce_card)
    if str["当前印卡数"] <= str_2 then
      str["当前印卡数"] = str["当前印卡数"] + 1
      Duel.SendtoHand(card,nil,REASON_RULE)
    else
      if str["当前印卡数"] <= str_3 then
        str["当前印卡数"] = str["当前印卡数"] + 1
        Duel.Remove(card,POS_FACEUP,REASON_RULE)
        Duel.SendtoDeck(card,player_who_activate_the_effect,0,REASON_RULE)
      else
        Debug.ShowHint("印卡过多！")
        end

      end
    end
  effect_1:SetOperation(print_hand)
  str_1:RegisterEffect(effect_1)
  end
