#===========================================================================
#动态获得道具脚本 汉化专用版 by hongqizhen
#使用的时候选择事件第三页的脚本,输入
# get(物品类型,物品序号,物品数量)
# 物品类型:1=物品,2=武器,3=防具,0=金币
# 物品数量:大于0时提示得到物品,物品数量增加,小于0时提示失去物品,物品数量
# 减少,等于0时忽略
# 如果不为金币时,小于-99或大于99的忽略
#===========================================================================
#冲突性:几乎没有,因为很少有外挂脚本会修改def start的。
#即使发生冲突也应该很容易进行整合^ ^
#===========================================================================
#改自 动态获得道具脚本 永劫的咎人版
#优点:代码段缩水到只剩1/3,使用简便
#缺点:代码不直观,仅适用于汉化
#附加:提示的中心点直接取用事件的屏幕坐标,杜绝了提示乱跑的问题。
#===========================================================================
class Game_Event < Game_Character
attr_reader :event # event data 这个声明可不能忘啊!
#--------------------------------------------------------------------------
# ● 启动事件 #读取事件坐标
#--------------------------------------------------------------------------
def start
$event_x = 0
$event_y = 0
# 执行内容不为空的情况下
if @list.size > 1
@starting = true
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#就是下面的这个取事件在屏幕上的位置的问题,让我走了好多弯路。
#其实简单到没边,不是么?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if $game_map.events[event.id] == nil
return
end
$event_x = $game_map.events[event.id].screen_x - 16 #取得事件屏幕X值
$event_y = $game_map.events[event.id].screen_y - 64 #取得事件屏幕Y值
end
end
end
#===========================================================================
# 动态取得物品的窗口
#===========================================================================
class Window_get_item < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize(x,y,text)
super(x, y, 640, 50)
@text = text
self.contents = Bitmap.new(width - 32, height - 32)#只用來避免出錯
self.width = self.contents.text_size(@text).width
self.contents = Bitmap.new(width - 32, height - 32)#重定位图
@text_width = self.contents.text_size(@text).width
@extra_width = @text_width - 140 > 0 ? @text_width - 140 : 0
self.x = $event_x > 0 ? $event_x - self.contents.width / 2 : self.contents.width
#几重保险运算
if $event_x - self.width / 2 <= 0
self.x = 0
end
if $event_x + self.width / 2 >= 640
self.x = 640 - self.width
end
self.y = $event_y
if $event_y + self.height / 2 + 6 >= 480
self.y = 480 - self.height
end
self.back_opacity = 200
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = 18
self.contents.font.color = Color.new(255,255,0,255)
self.contents.draw_text(5,0,self.width - 32,18,@text)
self.contents.font.color = normal_color
end
end
class Game_Party
def get(ty1, item_id, n)
if ty1 > 0 and ty1 <= 3
@item_id = item_id
@n = n
#和谐掉得到0个道具和三位数个道具的情况
if @n == 0 or @n > 99 or @n < -99
return
end
# 更改所持有的物品个数
if @item_id > 0
if ty1 == 1
@angel_item_dis = $data_items[item_id]
@items[@item_id] = [[item_number(@item_id) + @n, 0].max, 99].min
end
if ty1 == 2
@angel_item_dis = $data_weapons[item_id]
@weapons[@item_id] = [[weapon_number(@item_id) + @n, 0].max, 99].min
end
if ty1 == 3
@angel_item_dis = $data_armors[item_id]
@armors[@item_id] = [[armor_number(@item_id) + @n, 0].max, 99].min
end
end
#描绘图标的变量带入sprite
$angel_dis = Sprite.new
#描绘图标
if @angel_item_dis.icon_name != ""
$angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
$angel_dis.x = $event_x
$angel_dis.y = $event_y + 6
$angel_dis.opacity = 155
end
#移动图标
for i in 1..10
$angel_dis.y -= 4
$angel_dis.opacity += 10
$angel_dis.update
Graphics.update
end
#计算额外宽度
@extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size * 9 - 140 : 0
#描绘得到道具的窗口
if @n > 0 #如果得到的道具
@text = "得到" + " #{@n}" + "個【" + "#{@angel_item_dis.name}" + "】"
else#除此以外的场合
@n = 0 - n
@text = "失去" + " #{@n}" + "個【" + " #{@angel_item_dis.name}" + "】"
end
$one = 1
$angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
Audio.se_play("Audio/SE/"+"006-System06",80,100)
#只是等待50帧而已
50.times{Graphics.update}
#销毁
$angel_dis.dispose
$angel_name_window.dispose
else
#和谐掉得到0金钱的情况和类型值小于0的情况
@n = n
if ty1 < 0
return
end
if @n == 0
return
end
[url=home.php?mod=space&uid=236945]@gold[/url] = [[[url=home.php?mod=space&uid=236945]@gold[/url] + n, 0].max, 9999999].min
#描绘得到道具的窗口
if @n > 0 #如果得到的道具
@text = "得到" + " #{@n} " + "個" + "#{$data_system.words.gold}"
else#除此以外的场合
@n = 0 - n
@text = "失去" + " #{@n} " + "個" + "#{$data_system.words.gold}"
end
$one = 1
$angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 : 0 ,$event_y - 4,@text)
Audio.se_play("Audio/SE/"+"006-System06",80,100)
#只是等待50帧而已
50.times{Graphics.update}
#销毁
$angel_name_window.dispose
end
end
#傑子 2013.05.04 +++
#========================================================================
#定义事件與角色距離
#========================================================================
def distfromactor(ev_x,ev_y,act_x,act_y)
@dist = Math.sqrt(((ev_x-act_x) ** 2 ) +((ev_y-act_y) ** 2))
return @dist
end
#傑子 2013.05.04 ---
end
class Interpreter
#========================================================================
#定义事件中动态获得东西,并自动区别类型,增减物品
#========================================================================
def get(ty1,item_id, n)#ty1:1=物品,2=武器,3=防具,0=金币
if ty1== 0
item_id = 0
end
return $game_party.get(ty1,item_id, n)
end
#傑子 2013.05.04 +++
#========================================================================
#定义事件與角色距離
#========================================================================
#ev_x,ev_y : 事件座標 act_x,act_y :角色座標
def dfact(ev_x,ev_y,act_x,act_y)
return $game_party.distfromactor(ev_x,ev_y,act_x,act_y)
end
#傑子 2013.05.04 ---
end