查看: 8379|回复: 12

[原创发布] 〓 转盘抽奖 〓

[复制链接]
梦石
0
星屑
34459
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-11-19 23:11:00 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 芯☆淡茹水 于 2018-11-19 23:51 编辑

   很久没冒泡了,就拿这个来水一贴。

   以前写的 转盘抽奖 ,觉得不是很好,老早就全部推翻重新写了,但搁在那儿都快忘了。
今天偶然发现了,正好,加上说明就拿出来水咯。

〓 说明 〓
1,抽奖物品全部编辑在公共事件里。
2,游戏中可随时增/减随机的转盘物品。
3,可随时更改抽奖所消耗的东西(金钱/物品)。
4,素材来源=>网络

〓 用法 〓
1,将下面的 脚本 复制到工程 main 前。
2,将下面的 UI图片 下载后,复制到 Graphics\Pictures 文件夹里。
3,参照脚本说明,进行操作。
4,嫌麻烦的同学,可以直接下载下面的范例工程。

〓 演示截图 〓

image0.gif

〓 UI图片 〓

Ui_LotteryDraw.png

〓 脚本 〓
[pre lang="ruby"]#==============================================================================
# 〓 转盘抽奖 (Lottery draw) 〓            Author: 芯☆淡茹水
#==============================================================================
# ■ 说明 ■
#--------------------------------------------------------------------------
# 1,  该转盘抽奖利用公共事件储存抽奖物品,分为 基本物品(设置项设置) 和
#    动态物品(脚本命令添加/删除)两种。
#      转盘上能够随机的物品为以上两种相加。
#--------------------------------------------------------------------------
# 2,  公共事件里编辑 增减物品,增减武器 或 增减防具 。当这个公共事件在物品
#    事件里时,里面的这些项目物品都将添加到转盘的随机物品中。
#--------------------------------------------------------------------------
# 3,  如果总共的随机物品当中有 珍贵物品 时,随机时至少有一件会是 珍贵物品 。
#    其它出现 珍贵物品 概率,依照设置项所设置的概率百分比。
#--------------------------------------------------------------------------
# 4,  进入抽奖场景,而未进行抽奖的,系统将储存当前转盘物品,防止进出抽奖场景
#    刷物品。
#--------------------------------------------------------------------------
# 5,  初始抽奖消耗为 金钱=>100 ,可用脚本命令适时更改。
#==============================================================================
# ■ 脚本命令 ■
#--------------------------------------------------------------------------
# 1,开始转盘抽奖 => XdRs_Ld.start_lottery_draw
#--------------------------------------------------------------------------
# 2,添加公共事件(设置有随机物品)里的所有物品到随机物品 =>
#    XdRs_Ld.add_ld_event(event_id, type)
#    参数  event_id: 公共事件ID。
#          type    : 添加的类型(0:添加到普通物品; 1:添加到珍贵物品)
#    例:将 22 号公共事件里编辑的所有物品,添加到普通的随机物品中 =>
#        XdRs_Ld.add_ld_event(22, 0)
#        将 15 号公共事件里编辑的所有物品,添加到珍贵的随机物品中 =>
#        XdRs_Ld.add_ld_event(15, 1)
#--------------------------------------------------------------------------
# 3,将添加的公共事件里的所有物品从随机物品中删除 =>
#    XdRs_Ld.del_ld_event(event_id, type)
#    参数同第 2 条。
#--------------------------------------------------------------------------
# 4,清空所有第 2 条添加的公共事件 => XdRs_Ld.clear_ld_events
#--------------------------------------------------------------------------
# 5,清除系统所记忆的转盘物品 =>  XdRs_Ld.clear_ld_data
#--------------------------------------------------------------------------
# 6,更改抽奖所需的消耗品 => XdRs_Ld.change_consume(type, num1, num2)
#    参数  type: 消耗类型(0:金钱;1:物品)
#          num1: 数值1,消耗类型为 0(金钱)时,写所需的金钱数;
#                       消耗类型为 1(物品)时,写物品ID。
#          num2: 数值2,消耗类型为 0(金钱)时,省略不写;
#                       消耗类型为 1(物品)时,写所需的数量。
#    例:设置抽奖消耗金钱 500 => XdRs_Ld.change_consume(0, 500)
#        设置抽奖消耗 10 号物品 3 个 => XdRs_Ld.change_consume(1, 10, 3)
#==============================================================================
#==============================================================================
module XdRs_Ld
#==============================================================================
# ■ 设置项 ■
#==============================================================================
#--------------------------------------------------------------------------
# 游戏分辨率宽。
Graphics_Width = 640

#--------------------------------------------------------------------------
# 游戏分辨率高。
Graphics_Height = 480

#--------------------------------------------------------------------------
# 基本普通抽奖物品的公共事件ID。
Base_Ordinary = 10

#--------------------------------------------------------------------------
# 基本珍贵抽奖物品的公共事件ID。
Base_Precious = 11

#--------------------------------------------------------------------------
# 转盘出现珍贵物品的概率百分比。
Precious_Rate = 10

#--------------------------------------------------------------------------
# 金钱图标名。
Gold_Icon = "035-Item04"

#--------------------------------------------------------------------------
# 得到奖品时播放的动画ID。
Award_Anm = 46

#--------------------------------------------------------------------------
# 指针转动时,播放的SE。
Needle_Se = "041-Knock02"

#--------------------------------------------------------------------------
end
#==============================================================================
# ■ 脚本正文 ■
#==============================================================================
module XdRs_Ld
  #--------------------------------------------------------------------------
  def self.ui_name
    return "Ui_LotteryDraw"    #UI图片名
  end
  #--------------------------------------------------------------------------
  # 闪烁灯位置
  #--------------------------------------------------------------------------
  def self.lamp_place(index)
    return [[201,21],[264,70],[289,156],[263,234],[196,283],[101,282],
    [31,222],[11,144],[39,67],[103,18]][index]
  end
  #--------------------------------------------------------------------------
  # 物品图标位置
  #--------------------------------------------------------------------------
  def self.item_place(index)
    return [[182,52],[230,92],[250,150],[230,210],[182,248],[120,248],
    [68,210],[46,150],[68,92],[120,52]][index]
  end
  #--------------------------------------------------------------------------
  def self.has_ld_items
    data = [[Base_Ordinary], [Base_Precious]]
    data[0] += $game_system.ld_data[0]
    data[1] += $game_system.ld_data[1]
    return data.any?{|d| self.type_has_ld_items(d)}
  end
  #--------------------------------------------------------------------------
  def self.type_has_ld_items(data)
    return data.any?{|id| self.ld_list(id).size > 0}
  end
  #--------------------------------------------------------------------------
  def self.ld_items
    data = []
    base = [[Base_Ordinary], [Base_Precious]]
    data[0] = self.type_items(0, base) + self.type_items(0, $game_system.ld_data)
    data[1] = self.type_items(1, base) + self.type_items(1, $game_system.ld_data)
    return data
  end
  #--------------------------------------------------------------------------
  def self.type_items(type, data)
    items = []
    data[type].size.times do |i|
      list = self.ld_list(data[type])
      list.each{|l| items << Ld_Item.new(self.item_obj(l))}
    end
    return items
  end
  #--------------------------------------------------------------------------
  def self.ld_list(eventId)
    event = $data_common_events[eventId]
    return event.list.find_all{|l| [126,127,128].include?(l.code)}
  end
  #--------------------------------------------------------------------------
  def self.item_obj(list)
    case list.code
    when 126; return $data_items[list.parameters[0]]
    when 127; return $data_weapons[list.parameters[0]]
    when 128; return $data_armors[list.parameters[0]]
    end
  end
  #--------------------------------------------------------------------------
  def self.lnitial_consumption
    return ["gold", [100]]    #初始抽奖消耗:金钱=>100
  end
  #--------------------------------------------------------------------------
  def self.can_ld_start
    cst = $game_system.consumption_data
    return $game_party.gold >= cst[1][0] if cst[0] == "gold"
    return $game_party.item_number(cst[1][0]) >= cst[1][1]
  end
  #--------------------------------------------------------------------------
  def self.deductible
    cst = $game_system.consumption_data
    tp = cst[0]; d = cst[1][0]; n = cst[1][1]
    tp == "gold" ? $game_party.lose_gold(d) : $game_party.gain_item(d, -n)
  end
  #--------------------------------------------------------------------------
  def self.start_lottery_draw
    unless self.has_ld_items
      $game_temp.message_text = "没有抽奖物品,暂时无法抽奖!"
      return
    end
    $scene = Lottery_Draw.new
  end
  #--------------------------------------------------------------------------
  def self.add_ld_event(event_id, type=0)
    return if type > 1
    $game_system.set_ld_events(event_id, "add", type)
  end
  #--------------------------------------------------------------------------
  def self.del_ld_event(event_id, type=0)
    return if type > 1
    $game_system.set_ld_events(event_id, "del", type)
  end
  #--------------------------------------------------------------------------
  def self.clear_ld_data
    $game_system.save_ld_items([])
  end
  #--------------------------------------------------------------------------
  def self.clear_ld_events
    $game_system.clear_all_ld_events
  end
  #--------------------------------------------------------------------------
  def self.change_consume(type, num1, num2=0)
    return if type == 0 && num1 <= 0
    return if type == 1 && (!$data_items[num1] || num2 <= 0)
    $game_system.set_consumption(type == 0 ? "gold" : "item", [num1,num2])
  end
end
#==============================================================================
# 转换物品实例,减少数据容量
#==============================================================================
class Ld_Item
  #--------------------------------------------------------------------------
  def initialize(item)
    @data_id = item.id
    set_type(item)
  end
  #--------------------------------------------------------------------------
  def set_type(item)
    @item_type = case item
    when RPG::Item   ;"item"
    when RPG::Weapon ;"weapon"
    when RPG::Armor  ;"armor"
    end
  end
  #--------------------------------------------------------------------------
  def obj
    case @item_type
    when "item";   return $data_items[@data_id]
    when "weapon"; return $data_weapons[@data_id]
    when "armor";  return $data_armors[@data_id]
    end
  end
end
#==============================================================================
# 添加抽奖所需的各种记录
#==============================================================================
class Game_System
  #--------------------------------------------------------------------------
  def ld_data;         return @ld_data  || [[],[]];  end
  #--------------------------------------------------------------------------
  def ld_items;        return @ld_items || [];       end
  #--------------------------------------------------------------------------
  def has_ld_item;     return ld_items.size > 0;     end
  #--------------------------------------------------------------------------
  def save_ld_items(items); @ld_items = items;       end
  #--------------------------------------------------------------------------
  def set_ld_events(event_id, type, n)
    @ld_data ||= [[],[]]
    return if type == "add" && @ld_data[n].include?(event_id)
    return if type == "del" && !@ld_data[n].include?(event_id)
    type == "add" && @ld_data[n].push(event_id)
    type == "del" && @ld_data[n].delete(event_id)
    save_ld_items([])
  end
  #--------------------------------------------------------------------------
  def consumption_data
    return @consumption_data || XdRs_Ld.lnitial_consumption
  end
  #--------------------------------------------------------------------------
  def set_consumption(type, data)
    @consumption_data = [type, data]
  end
  #--------------------------------------------------------------------------
  def clear_all_ld_events
    @ld_data = nil
  end
end
#==============================================================================
# 图片窗口
#==============================================================================
class XdRs_UiBase < RPG::Sprite
  #--------------------------------------------------------------------------
  def initialize(x, y, ui_name, rect, viewport=nil)
    super(viewport)
    @ui_name = ui_name
    create_all(rect)
    set_rect(rect)
    move(x, y)
  end
  #--------------------------------------------------------------------------
  def dispose
    @drawing_board.bitmap.dispose
    @drawing_board.dispose
    self.bitmap.dispose
    super
  end
  #--------------------------------------------------------------------------
  def create_all(rect)
    self.bitmap = @ui_name == "" ? Bitmap.new(rect.width, rect.height) :
    RPG::Cache.picture(@ui_name)
    @drawing_board = Sprite.new
  end
  #--------------------------------------------------------------------------
  def set_rect(rect)
    if @rect != rect
      @rect = rect
      refresh_rect
    end
  end
  #--------------------------------------------------------------------------
  def refresh_rect
    self.src_rect.set(@rect.x, @rect.y, @rect.width, @rect.height)
    @drawing_board.bitmap && @drawing_board.bitmap.dispose
    @drawing_board.bitmap = Bitmap.new(@rect.width, @rect.height)
    @drawing_board.bitmap.font.bold = true
  end
  #--------------------------------------------------------------------------
  def move(x, y, z=nil)
    self.x = @drawing_board.x = x
    self.y = @drawing_board.y = y
    return unless z
    self.z = z; @drawing_board.z = z + 1
  end
  #--------------------------------------------------------------------------
  def hide;  self.visible = @drawing_board.visible = false;    end
  #--------------------------------------------------------------------------
  def show;  self.visible = @drawing_board.visible = true;     end
  #--------------------------------------------------------------------------
  # 文字描边宽度
  #--------------------------------------------------------------------------
  def out_line_width;    return 2;                             end
  #--------------------------------------------------------------------------
  # 图标尺寸(宽与高)
  #--------------------------------------------------------------------------
  def icon_size;         return 24;                            end
  #--------------------------------------------------------------------------
  def clear;             @drawing_board.bitmap.clear;          end
  #--------------------------------------------------------------------------
  def set_font_size(n);  @drawing_board.bitmap.font.size = n;  end
  #--------------------------------------------------------------------------
  def set_font_color(c); @drawing_board.bitmap.font.color = c; end
  #--------------------------------------------------------------------------
  def draw_text(x, y, w, h, text, a=0)
    last_color = @drawing_board.bitmap.font.color.clone
    ow = out_line_width
    set_font_color(Color.new(0,0,0,160))
    @drawing_board.bitmap.draw_text(x+ow, y, w, h, text, a)
    @drawing_board.bitmap.draw_text(x-ow, y, w, h, text, a)
    @drawing_board.bitmap.draw_text(x, y+ow, w, h, text, a)
    @drawing_board.bitmap.draw_text(x, y-ow, w, h, text, a)
    set_font_color(last_color)
    @drawing_board.bitmap.draw_text(x, y, w, h, text, a)
  end
  #--------------------------------------------------------------------------
  def draw_icon(x, y, icon_name)
    size = icon_size
    blt_image(x, y, Rect.new(0, 0, size, size), RPG::Cache.icon(icon_name))
  end
  #--------------------------------------------------------------------------
  def blt(x, y, rect, image_name=nil)
    blt_image(x, y, rect, RPG::Cache.picture(image_name || @ui_name))
  end
  #--------------------------------------------------------------------------
  def blt_image(x, y, rect, image)
    @drawing_board.bitmap.blt(x, y, image, rect)
  end
  #--------------------------------------------------------------------------
  def draw_item(x, y, item)
    draw_icon(x, y, item.icon_name)
    cw = @drawing_board.bitmap.text_size(item.name).width
    ch = @drawing_board.bitmap.font.size
    draw_text(x+icon_size+2, y, cw, ch, item.name)
  end
  #--------------------------------------------------------------------------
  def play_se(se_name)
    Audio.se_play("Audio/SE/" + se_name, 100, 100) if se_name != ""
  end
  #--------------------------------------------------------------------------
  def play_anm(anm_id)
    anm = $data_animations[anm_id]
    anm && animation(anm, true)
  end
end
#==============================================================================
# 图片按钮
#==============================================================================
class XdRs_Button < XdRs_UiBase
  #--------------------------------------------------------------------------
  def initialize(x, y, ui_name, rect, n_rect, viewport=nil)
    super(x, y, ui_name, rect, viewport)
    @c_rect = rect
    @n_rect = n_rect
    @is_current = true
    @press_count = 0
  end
  #--------------------------------------------------------------------------
  def refresh_rect
    super
    self.ox = @rect.width / 2
    self.oy = @rect.height / 2
  end
  #--------------------------------------------------------------------------
  def refresh_current(state)
    if @is_current != state
      @is_current = state
      set_rect(@is_current ? @c_rect : @n_rect)
    end
  end
  #--------------------------------------------------------------------------
  def press
    self.zoom_x = self.zoom_y = 0.9
    @press_count = 3
  end
  #--------------------------------------------------------------------------
  def reduction
    self.zoom_x = self.zoom_y = 1
  end
  #--------------------------------------------------------------------------
  def update
    super
    update_press
  end
  #--------------------------------------------------------------------------
  def update_press
    return if @press_count == 0
    @press_count -= 1
    @press_count == 0 && reduction
  end
end
#==============================================================================
# 闪烁灯
#==============================================================================
class XdRs_LdLamp < XdRs_Button
  #--------------------------------------------------------------------------
  def initialize(index, x, y)
    rect0 = Rect.new(300, 206, 16, 16)
    rect1 = Rect.new(300, 222, 28, 28)
    place = XdRs_Ld.lamp_place(index)
    super(x+place[0], y+place[1], XdRs_Ld.ui_name, rect0, rect1)
    @twinkle_type = index % 2
    @count = 20
    refresh_current(@twinkle_type == 0)
  end
  #--------------------------------------------------------------------------
  def start_twinkle
    @twinkle_type = (@twinkle_type+1)%2
    refresh_current(@twinkle_type == 0)
    @count = 20
  end
  #--------------------------------------------------------------------------
  def update
    super
    update_twinkle
  end
  #--------------------------------------------------------------------------
  def update_twinkle
    return unless self.visible
    @count > 0 ? @count -= 1 : start_twinkle
  end
end
#==============================================================================
# 白色转幕
#==============================================================================
class XdRs_LdCurtain < XdRs_UiBase
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, XdRs_Ld.ui_name, Rect.new(495,48,78,128))
    self.ox = @rect.width / 2
    self.oy = @rect.height
    @index = rand 10
    start_turn
  end
  #--------------------------------------------------------------------------
  def start_turn
    @count = 0
    self.angle = 360 - (@index * 36 + 18)
    @index = (@index+1) % 10
  end
  #--------------------------------------------------------------------------
  def update
    super
    update_turn
  end
  #--------------------------------------------------------------------------
  def update_turn
    return unless self.visible
    @count < 10 ? @count += 1 : start_turn
  end
end
#==============================================================================
# 转针
#==============================================================================
class XdRs_LdNeedle < XdRs_UiBase
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, XdRs_Ld.ui_name, Rect.new(381,48,114,150))
    self.ox = @rect.width / 2
    self.oy = 93
    @index = rand 10
    @count = @speed = 0
    @is_start = false
    self.angle = 360 - (@index * 36 + 18)
  end
  #--------------------------------------------------------------------------
  def start
    return if @is_start
    add = rand 100
    @count = (rand(2) == 0 ? add : -add) + 200
    @is_start = true
  end
  #--------------------------------------------------------------------------
  def index;        return @index;     end
  #--------------------------------------------------------------------------
  def in_rotation;  return @is_start;  end
  #--------------------------------------------------------------------------
  def refresh_angle
    play_se(XdRs_Ld::Needle_Se)
    @index = (@index+1) % 10
    self.angle = 360 - (@index * 36 + 18)
    @speed = [(300 - @count) / 50, 1].max
  end
  #--------------------------------------------------------------------------
  def update
    super
    update_turn
  end
  #--------------------------------------------------------------------------
  def update_turn
    return if !self.visible || !@is_start
    @count -= 1 if @count > 0
    @speed -= 1 if @speed > 0
    @speed == 0 && refresh_angle
    @is_start = false if @count == 0
  end
end
#==============================================================================
# 奖品显示
#==============================================================================
class XdRs_LdPrize < XdRs_UiBase
  #--------------------------------------------------------------------------
  def initialize
    x = XdRs_Ld::Graphics_Width / 2
    y = XdRs_Ld::Graphics_Height / 2
    super(x, y, "", Rect.new(0,0,300,300))
    self.ox = @drawing_board.ox = 150
    self.oy = @drawing_board.oy = 150
    show_prize
  end
  #--------------------------------------------------------------------------
  def show_prize(prize=nil)
    hide; clear
    return if !prize
    play_anm(XdRs_Ld::Award_Anm)
    image = XdRs_Ld.ui_name
    blt(50, 80, Rect.new(300, 255, 200, 45), image)
    blt(125, 140, Rect.new(381, 198, 50, 50), image)
    ix = (50 - icon_size) / 2
    draw_icon(125+ix, 140+ix, prize.icon_name)
    draw_text(0, 200, 300, 24, prize.name, 1)
    show
  end
end
#==============================================================================
# 抽奖场景
#==============================================================================
class Lottery_Draw
  #--------------------------------------------------------------------------
  def main
    init_data
    create_all
    start
    Graphics.transition
    loop do
      Graphics.update; Input.update; update
      break if $scene != self
    end
    Graphics.freeze
    dispose_all
  end
  #--------------------------------------------------------------------------
  def init_data
    @process = 0
    @all_items = XdRs_Ld.ld_items
  end
  #--------------------------------------------------------------------------
  def create_all
    @lamps = []
    x = (XdRs_Ld::Graphics_Width - 300) / 2
    y = (XdRs_Ld::Graphics_Height - 300) / 2
    cy = y + 304; hx = x + 150; hy = y + 150
    rect1 = Rect.new(300,48,81,79); rect2 = Rect.new(300,127,81,79)
    @map_bg     = Spriteset_Map.new
    @turntable  = XdRs_UiBase.new(x, y, XdRs_Ld.ui_name,Rect.new(0,0,300,300))
    @consume    = XdRs_UiBase.new(x, cy, XdRs_Ld.ui_name,Rect.new(300,0,300,48))
    @curtain    = XdRs_LdCurtain.new(hx, hy)
    @needle     = XdRs_LdNeedle.new(hx, hy)
    @button     = XdRs_Button.new(hx, hy, XdRs_Ld.ui_name, rect1, rect2)
    @prize_show = XdRs_LdPrize.new
    10.times{|i| @lamps << XdRs_LdLamp.new(i, x, y)}
  end
  #--------------------------------------------------------------------------
  def dispose_all
    @map_bg.dispose
    @button.dispose
    @needle.dispose
    @curtain.dispose
    @consume.dispose
    @turntable.dispose
    @prize_show.dispose
    @lamps.each{|l| l.dispose}
  end
  #--------------------------------------------------------------------------
  def start
    refresh_items
    refresh_demand
    refresh_button
  end
  #--------------------------------------------------------------------------
  def refresh_items
    @now_items = $game_system.has_ld_item ? $game_system.ld_items : create_new_items
    draw_now_items
  end
  #--------------------------------------------------------------------------
  def refresh_demand
    @consume.clear
    data = $game_system.consumption_data
    x = 80; y = (48 - @consume.icon_size) / 2 + 2
    @consume.set_font_color(Color.new(255,255,255))
    if data[0] == "gold"
      @consume.draw_icon(x, y, XdRs_Ld::Gold_Icon)
      x += @consume.icon_size + 2
      @consume.draw_text(x, y, 200, 24, $data_system.words.gold)
    else
      @consume.draw_item(x, y, $data_items[data[1][0]])
    end
    color = XdRs_Ld.can_ld_start ? Color.new(255,255,255) : Color.new(200,0,0)
    @consume.set_font_color(color)
    @consume.draw_text(0, y, 284, 24, num_text(data), 2)
  end
  #--------------------------------------------------------------------------
  def refresh_button
    @button.refresh_current(XdRs_Ld.can_ld_start)
  end
  #--------------------------------------------------------------------------
  def create_new_items
    data = []
    p_index = @all_items[1].size > 0 ? rand(10) : nil
    can_repeat = (@all_items[0] + @all_items[1]).size < 10
    while data.size < 10
      item = rand_item(is_precious(p_index, data) ? 1 : 0)
      item && (can_repeat || !data.include?(item)) && data.push(item)
    end
    $game_system.save_ld_items(data)
    return data
  end
  #--------------------------------------------------------------------------
  def is_precious(index, data)
    return rand(100) < XdRs_Ld::Precious_Rate || index && index == data.size
  end
  #--------------------------------------------------------------------------
  def rand_item(type)
    obj = @all_items[type]
    return obj[rand(obj.size)]
  end
  #--------------------------------------------------------------------------
  def draw_now_items
    @turntable.clear
    10.times do |i|
      next unless @now_items
      place = XdRs_Ld.item_place(i)
      x = place[0] - @turntable.icon_size / 2
      y = place[1] - @turntable.icon_size / 2
      @turntable.draw_icon(x,y,@now_items.obj.icon_name)
    end
  end
  #--------------------------------------------------------------------------
  def num_text(d)
    num1 = d[0] == "gold" ? $game_party.gold : $game_party.item_number(d[1][0])
    num2 = d[0] == "gold" ? d[1][0] : d[1][1]
    return num2.to_s + "/" + num1.to_s
  end
  #--------------------------------------------------------------------------
  def prize
    return @now_items[@needle.index].obj
  end
  #--------------------------------------------------------------------------
  def get_prize
    case prize
    when RPG::Item   ;$game_party.gain_item(prize.id, 1)
    when RPG::Weapon ;$game_party.gain_weapon(prize.id, 1)
    when RPG::Armor  ;$game_party.gain_armor(prize.id, 1)
    end
  end
  #--------------------------------------------------------------------------
  def update
    update_windows
    send("process"+@process.to_s)
  end
  #--------------------------------------------------------------------------
  def update_windows
    @button.update
    @needle.update
    @curtain.update
    @prize_show.update
    @lamps.each{|l| l.update}
  end
  #--------------------------------------------------------------------------
  def process0
    Input.trigger?(Input::C) && ready_start
    Input.trigger?(Input::B) && return_to_map
  end
  #--------------------------------------------------------------------------
  def process1
    !@needle.in_rotation && end_rotation
  end
  #--------------------------------------------------------------------------
  def process2
    Input.trigger?(Input::C) && come_again
  end
  #--------------------------------------------------------------------------
  def ready_start
    @button.press
    if !XdRs_Ld.can_ld_start
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    $game_system.save_ld_items([])
    XdRs_Ld.deductible
    refresh_demand
    @needle.start
    @curtain.hide
    @lamps.each{|l| l.hide}
    @process = 1
  end
  #--------------------------------------------------------------------------
  def end_rotation
    @prize_show.show_prize(prize)
    get_prize
    refresh_demand
    refresh_button
    @process = 2
  end
  #--------------------------------------------------------------------------
  def come_again
    $game_system.se_play($data_system.decision_se)
    @prize_show.show_prize
    @curtain.show
    @lamps.each{|l| l.show}
    refresh_items
    @process = 0
  end
  #--------------------------------------------------------------------------
  def return_to_map
    $game_system.se_play($data_system.cancel_se)
    $scene = Scene_Map.new
  end
end
#==============================================================================
# end
#==============================================================================[/pre]

〓 范例工程 〓

xp 测试.rar (356.53 KB, 下载次数: 125, 售价: 1 星屑)

点评

有大佬可以帮忙解答下这个升级版的转盘抽奖怎么转成MV插件?下载范例后看是XP的,我想用在MV里。  发表于 2020-6-18 03:30

评分

参与人数 10星屑 +150 赞 +10 收起 理由
zf756268 + 1 大佬,我也想用在MV里
ainimen726 + 1 大佬,这个升级版的转盘抽奖能用在MV吗?或.
RyanBern + 150 + 1 精品文章
Tsar_NicholasII + 1 塞糖
祈祷歌姬 + 1 塞糖
水母书亚 + 1 塞糖
Kim_Shyuen + 1 精品文章
真·可乐 + 1 精品文章
haosama + 1 棒
张咚咚 + 1 精品文章

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
梦石
0
星屑
927
在线时间
152 小时
注册时间
2018-3-16
回帖
50
发表于 2018-11-19 23:31:14 | 显示全部楼层
好贴顶一下
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2018-11-20 01:58:20 | 显示全部楼层
转盘抽奖还是挺好玩的···不过看了下使用的素材···
如果要修改转盘奖品数量概率之类的代码和素材要一起调整···
不过还是足够了

但是话说回来现在基本是箱子摸球或者抽池子这种了吧今年上半年连黄油RPG都是抽池子了
这种抽池子的有什么比较好的思路吗?(我以前做了一个,不过是把奖品按3-5星分组,然后每个奖品设权重,单抽就是正常的5星合计2%,4星合计18%,3星合计80%的三组放到一起抽,十连的情况其中一张是5星合计2%,4星合计98%的两组放到一起抽,十次十连的情况其中一张是5星合计100%的抽,能有个办法简化一下就好了)
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
6245
在线时间
558 小时
注册时间
2018-6-5
回帖
125
发表于 2018-12-5 01:12:15 | 显示全部楼层
配合限制SL次数的脚本更有意思(心疼非酋1秒)
俄罗斯帝国末代沙皇尼古拉二世
#俄文转写 = Царь Николай II
回复

使用道具 举报

梦石
0
星屑
4597
在线时间
460 小时
注册时间
2016-8-28
回帖
144

开拓者

发表于 2018-12-11 22:12:12 | 显示全部楼层
可以可以,很有趣
回复

使用道具 举报

梦石
0
星屑
708
在线时间
86 小时
注册时间
2020-2-26
回帖
7
发表于 2020-6-18 03:43:01 | 显示全部楼层
请教的那个问题想趁下一楼请教下大佬们,不小心点了个点评跑上面了~~~【抱歉】
用老版本的抽奖我分辨率是1140*640,使用后抽奖底座和指针偏移右边,修改图片和修改插件里面的数字画面就乱了。
这个更新的版本下是XP的,想请教大佬这个新版本怎么用在MV里?或者老版本修改分辨率改修改哪里的数字?

点评

@芯☆淡茹水 其实7L有白字(Ctrl+A  发表于 2020-6-18 17:16
有MV版的转盘  发表于 2020-6-18 10:20
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
5706
在线时间
922 小时
注册时间
2013-8-29
回帖
1401
发表于 2020-6-18 07:17:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
708
在线时间
86 小时
注册时间
2020-2-26
回帖
7
发表于 2020-6-18 19:39:23 | 显示全部楼层
ainimen726 发表于 2020-6-18 03:43
请教的那个问题想趁下一楼请教下大佬们,不小心点了个点评跑上面了~~~【抱歉】
用老版本的抽奖我分辨率是11 ...

回复:芯☆淡茹水
就是用你mv版的转盘,(我制作的工程分辨率设置的是1140*640),转盘游戏启动后,转盘指针和底座偏移转盘,PS改图片指针位置和改插件里Scene_Prize.prototype.iniRect = function()后面的数字,就出现转盘图形变花!不知道改插件里哪点能让位置转盘和指针的位置摆正?
回复

使用道具 举报

梦石
0
星屑
708
在线时间
86 小时
注册时间
2020-2-26
回帖
7
发表于 2020-6-18 19:41:00 | 显示全部楼层
1140*640的分辨率,使用后转盘是这样子的
QQ图片20200618192815.png
回复

使用道具 举报

梦石
0
星屑
6412
在线时间
1700 小时
注册时间
2018-1-16
回帖
364
发表于 2021-4-2 05:02:30 | 显示全部楼层
感谢,大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部