Project1
标题:
【悬赏】找人写个装备武器改变职业的脚本
[打印本页]
作者:
v2sam
时间:
2010-6-17 16:07
标题:
【悬赏】找人写个装备武器改变职业的脚本
悬赏价格可以商量,具体是:
无装备时职业为“无业” ; 装备剑类时职业为“战士” 以此类推。 判断条件可以为武器属性 或者备注。
作者:
八云紫
时间:
2010-6-17 16:21
v2sam 大大好。
那个,职业技能什么的夜需要跟着换吗?
作者:
负零
时间:
2010-6-17 16:31
似乎武器是跟着职业换的,现在反过来,反了...!
作者:
八云紫
时间:
2010-6-17 16:32
回复
负零
的帖子
这个很正常,不同的武器可以产生不同的技能。
作者:
负零
时间:
2010-6-17 16:36
回复
提妲
的帖子
比如吧,装备力量之剑变成剑士,但假如转成剑士不能装备力量之剑...当然,这个可以自己设定,觉得别扭而已,不如使用什么就变职业吧,最多无限使用...
作者:
八云紫
时间:
2010-6-17 16:43
回复
负零
的帖子
在某个范围内是可以变通的。
法师使用魔杖,法杖。战士使用剑,斧等。技能可能都不一样。
但是,法师是不可能去使用斧头啦什么的,NC除外。
以上~~
作者:
负零
时间:
2010-6-17 16:50
一不小心又晚生了4个月,谢谢指正
作者:
darkdrium
时间:
2010-6-17 19:20
game_actor页397行
when 0 # 武器
if id == 0 or $game_party.weapon_number(id) > 0
$game_party.gain_weapon(@weapon_id, 1)
@weapon_id = id
$game_party.lose_weapon(id, 1)
self.class_id = $weapon_class[id]
end
441行删除if行和end行,留下return true
if $data_classes[@class_id].weapon_set.include?(item.id)
return true
end
538行:删除这三行
unless equippable?($data_weapon[@wepaon_id])
equip(0, 0)
end
最后在main脚本前插入
$weapon_class = [xx,xx,xx,xx] #从id=1的武器开始,依次对应的职业id
简单的实现了下
作者:
darkdrium
时间:
2010-6-17 19:20
用xp做的。。。刚看到lz要求的是vx的。。。
作者:
v2sam
时间:
2010-6-17 22:00
v2sam 大大好。
那个,职业技能什么的夜需要跟着换吗?
提妲 发表于 2010-6-17 16:21
提妲MM 我的确有用到武器决定技能脚本。
至于负零 提到的问题:在数据库中所有职业可以装备所有武器,但是装备了别的武器就变其他职业了,所以并没有冲突。至于更多细节问题就不在这里讨论了。
最后诚心期待提妲MM 能给与帮助XDDD
作者:
八云紫
时间:
2010-6-18 09:01
本帖最后由 提妲 于 2010-6-18 09:06 编辑
回复
v2sam
的帖子
好久好久没有碰 VX 的说,看看有没有有爱人士帮忙吧。
咱得回去看看脚本了。~
回复
darkdrium
的帖子
VX 有备注啦,说明什么可以使用的说。
作者:
v2sam
时间:
2010-6-18 09:03
有爱人士很难等啊~
作者:
八云紫
时间:
2010-6-18 09:09
回复
v2sam
的帖子
我回家后看看吧。上班中~~~ 嘎哦。
作者:
v2sam
时间:
2010-6-18 09:33
回复
提妲
的帖子
嗯嗯~~等你哟~XDD
作者:
八云紫
时间:
2010-6-18 10:14
回复
v2sam
的帖子
那个,有没有使用外带关于 武器,职业的脚本的说?
作者:
v2sam
时间:
2010-6-18 10:59
没有,只用了沉影的武器带技能脚本。还有zh99998帮我写的地图上显示武器装备窗口。
作者:
darkdrium
时间:
2010-6-18 11:50
回复 darkdrium 的帖子
VX 有备注啦,说明什么可以使用的说。
这个什么意思啊?
刚看了下vx的actor页,改下应该比较容易的
不知道lz希望什么样的效果,是改变武器改变职业后,将原职业所有技能以往并且习得新职业到目前为止的所有技能吗?还有主角会有不论职业怎么改变都不变的技能?
作者:
八云紫
时间:
2010-6-18 12:43
本帖最后由 提妲 于 2010-6-18 12:44 编辑
回复
darkdrium
的帖子
VX 比 XP 多了一个备注栏可以用。
-------------------------------------------------------------------------
有爱人士出现~~~~ {:nm_4:}
作者:
v2sam
时间:
2010-6-18 13:59
回复
darkdrium
的帖子
应该是和沉影的那个装备武器习得技能结合吧。
具体效果就是,装备武器学得某编号技能,并且改变当前职业。卸下武器则忘却该武器的技能及还原为默认职业。
以上
作者:
八云紫
时间:
2010-6-18 14:09
回复
v2sam
的帖子
添加的技能是自定的吧?
下载 VX 去,看起来不是很难。
作者:
v2sam
时间:
2010-6-18 14:17
回复
提妲
的帖子
嗯,指定的,是根据备注来决定学几号技能。
顺道找来沉影的脚本。
#==============================================================================
# 武器带技能 by 沉影不器
#------------------------------------------------------------------------------
# 武器备注栏写 skill=技能号 表示武器带该技能.
# 允许同时带多技能 skill=技能号,技能号,技能号...
# 写法比较偷懒,bug未知
#==============================================================================
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
module RPG
class Weapon < BaseItem
def skill_ids
return read_note('skill').split(/,/)
end
end
class Armor < BaseItem
def skill_ids
return read_note('skill').split(/,/)
end
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 技能绑定
#--------------------------------------------------------------------------
def skill_plus
@skills.clear
for i in self.class.learnings
learn_skill(i.skill_id) if i.level <= @level
end
unless @armor3_id == 0
ids = equips[3].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor4_id == 0
ids = equips[4].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @weapon_id == 0
ids = equips[0].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor1_id == 0
ids = equips[1].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor2_id == 0
ids = equips[2].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
end
#--------------------------------------------------------------------------
# ● 设置
#--------------------------------------------------------------------------
alias old_setup setup
def setup(actor_id)
old_setup(actor_id)
skill_plus
end
#--------------------------------------------------------------------------
# ● 更改装备
#--------------------------------------------------------------------------
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # 武器
@weapon_id = item_id
unless two_hands_legal? # 违反双手拿取的情况下
change_equip(1, nil, test) # 解除反手的装备
end
when 1 # 盾
@armor1_id = item_id
unless two_hands_legal? # 违反双手拿取的情况下
change_equip(0, nil, test) # 解除反手的装备
end
when 2 # 头
@armor2_id = item_id
when 3 # 身体
@armor3_id = item_id
when 4 # 装饰品
@armor4_id = item_id
end
skill_plus
end
#--------------------------------------------------------------------------
# ● 废弃装备
#--------------------------------------------------------------------------
def discard_equip(item)
if item.is_a?(RPG::Weapon)
if @weapon_id == item.id
@weapon_id = 0
elsif two_swords_style and @armor1_id == item.id
@armor1_id = 0
end
elsif item.is_a?(RPG::Armor)
if not two_swords_style and @armor1_id == item.id
@armor1_id = 0
elsif @armor2_id == item.id
@armor2_id = 0
elsif @armor3_id == item.id
@armor3_id = 0
elsif @armor4_id == item.id
@armor4_id = 0
end
end
skill_plus
end
end
复制代码
作者:
darkdrium
时间:
2010-6-18 14:58
本帖最后由 darkdrium 于 2010-6-18 15:01 编辑
使用该脚本显示read_note方法未定义,而且奇怪的是显示错误的armor行……
明白了,read_note在另外的页面定义的?先是plus_skill调用了armor的skill_ids。
作者:
v2sam
时间:
2010-6-18 15:12
哈哈,这个我也不爱懂,天赋不在这上面= =
作者:
darkdrium
时间:
2010-6-18 15:45
很忐忑的在沉影的脚本里添加了read_item方法,已经实现lz需要的效果
#==============================================================================
# 武器带技能 by 沉影不器
#------------------------------------------------------------------------------
# 武器备注栏写 skill=技能号 表示武器带该技能.
# 允许同时带多技能 skill=技能号,技能号,技能号...
# 写法比较偷懒,bug未知
#==============================================================================
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
module RPG
class BaseItem
def read_note(str)
[email protected]
("\n")
note=notes.find do |line|
line.include?(str+'=')
end
if note
note.sub(str+"="){|m| ""}
else
""
end
end
end
class Weapon < BaseItem
def skill_ids
return read_note('skill').split(/,/)
end
def class_ids
read_note('class')
end
end
class Armor < BaseItem
def skill_ids
return read_note('skill').split(/,/)
end
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 技能绑定
#--------------------------------------------------------------------------
def skill_plus
@skills.clear
for i in self.class.learnings
learn_skill(i.skill_id) if i.level <= @level
end
unless @armor3_id == 0
ids = equips[3].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor4_id == 0
ids = equips[4].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @weapon_id == 0
ids = equips[0].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor1_id == 0
ids = equips[1].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
unless @armor2_id == 0
ids = equips[2].skill_ids
for s in ids
learn_skill(s.to_i)
end
end
end
#--------------------------------------------------------------------------
# ● 设置
#--------------------------------------------------------------------------
alias old_setup setup
def setup(actor_id)
old_setup(actor_id)
skill_plus
end
#--------------------------------------------------------------------------
# ● 更改装备
#--------------------------------------------------------------------------
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # 武器
@weapon_id = item_id
if equips[0] && equips[0].read_note("class") != ""
self.class_id = equips[0].read_note("class").to_i
else
self.class_id = $data_actors[@actor_id].class_id
end
unless two_hands_legal? # 违反双手拿取的情况下
change_equip(1, nil, test) # 解除反手的装备
end
when 1 # 盾
@armor1_id = item_id
unless two_hands_legal? # 违反双手拿取的情况下
change_equip(0, nil, test) # 解除反手的装备
end
when 2 # 头
@armor2_id = item_id
when 3 # 身体
@armor3_id = item_id
when 4 # 装饰品
@armor4_id = item_id
end
skill_plus
end
#--------------------------------------------------------------------------
# ● 废弃装备
#--------------------------------------------------------------------------
def discard_equip(item)
if item.is_a?(RPG::Weapon)
if @weapon_id == item.id
@weapon_id = 0
elsif two_swords_style and @armor1_id == item.id
@armor1_id = 0
end
elsif item.is_a?(RPG::Armor)
if not two_swords_style and @armor1_id == item.id
@armor1_id = 0
elsif @armor2_id == item.id
@armor2_id = 0
elsif @armor3_id == item.id
@armor3_id = 0
elsif @armor4_id == item.id
@armor4_id = 0
end
end
skill_plus
end
end
复制代码
作者:
darkdrium
时间:
2010-6-18 15:47
本帖最后由 darkdrium 于 2010-6-18 15:56 编辑
回复
v2sam
的帖子
动了两处,在module rpg处添加了BaseItem的read_note方法
还有更改武器的106-110行
使用方法,在备注中一行写skill=xx,xx,xx技能,回车换行,写class=xx。不写class=xx的恢复默认职业
ps:class和skill顺序可以变动
再ps:未完善异常处理,猜测如果你把职业id写的大于职业数量会出错
作者:
v2sam
时间:
2010-6-18 16:24
啊,如果是备注行的识别,我还有另外一个脚本支持识别备注的标记,所以不用特地去写这个了。谢谢XDD
作者:
darkdrium
时间:
2010-6-18 16:26
回复
v2sam
的帖子
:L 很显然由于你没给出备注识别脚本,导致我只好自己写了- -
作者:
v2sam
时间:
2010-6-18 16:52
哈哈,对不起啊,补上:
#==============================================================================
# 读取rmvx备注栏指定字段 by 沉影不器
# -----------------------------------------------------------------------------
# 使用方法:
# 在vx数据库比如1号物品的备注栏里书写: 耐久度 = 10
# 读取时使用: p $data_items[1].read_note('耐久度')
# 几点注意:
# ① 忽略空格
# ② 返回值为文本格式
#==============================================================================
module RPG
#=============================================================================
# ■ BaseItem
#=============================================================================
class BaseItem
#-------------------------------------------------------------------------
# ○ 读取rmvx备注栏指定字段
# section : 字段名
# ignore_caps : 忽略大小写(仅字段名)
#-------------------------------------------------------------------------
def read_note(section, ignore_caps = false)
result = ''
# 忽略大小写时,全部转大写
section.upcase! if ignore_caps
# 转symbol方便比较
s = section.to_sym
self.note.each_line{|line|
temp = line.split(/=/)
# 去掉干扰字符
temp.each {|i| i.strip!}
temp[0].upcase! if ignore_caps
if temp[0].to_sym == s
unless temp[1] == nil
result = temp[1]
end
# 如果希望同名字段值覆盖前面的字段,去掉下一行
break
end
}
return result
end
end
#=============================================================================
# ■ Enemy
#=============================================================================
class Enemy
#-------------------------------------------------------------------------
# ○ 读取rmvx备注栏指定字段
# section : 字段名
# ignore_caps : 忽略大小写(仅字段名)
#-------------------------------------------------------------------------
def read_note(section, ignore_caps = false)
result = ''
# 忽略大小写时,全部转大写
section.upcase! if ignore_caps
# 转symbol方便比较
s = section.to_sym
self.note.each_line{|line|
temp = line.split(/=/)
# 去掉干扰字符
temp.each {|i| i.strip!}
temp[0].upcase! if ignore_caps
if temp[0].to_sym == s
unless temp[1] == nil
result = temp[1]
end
# 如果希望同名字段值覆盖前面的字段,去掉下一行
break
end
}
return result
end
end
#=============================================================================
# ■ State
#=============================================================================
class State
#-------------------------------------------------------------------------
# ○ 读取rmvx备注栏指定字段
# section : 字段名
# ignore_caps : 忽略大小写(仅字段名)
#-------------------------------------------------------------------------
def read_note(section, ignore_caps = false)
result = ''
# 忽略大小写时,全部转大写
section.upcase! if ignore_caps
# 转symbol方便比较
s = section.to_sym
self.note.each_line{|line|
temp = line.split(/=/)
# 去掉干扰字符
temp.each {|i| i.strip!}
temp[0].upcase! if ignore_caps
if temp[0].to_sym == s
unless temp[1] == nil
result = temp[1]
end
# 如果希望同名字段值覆盖前面的字段,去掉下一行
break
end
}
return result
end
end
end
复制代码
作者:
darkdrium
时间:
2010-6-18 19:23
回复
v2sam
的帖子
那么只要106-110行就可以。
读取备注脚本上,我的思路跟沉影大大的比较相似,区别就是他做的比我完善多了……bow,差距啊差距,所幸接口统一,他的read_note返回结果和我的一样
作者:
小幽的马甲
时间:
2010-6-18 20:05
总觉得那个脚本的防具带技能那块是我加进去的T_T
顺便,我想知道如何处理二刀流= =
作者:
v2sam
时间:
2010-6-18 20:58
回复
小幽的马甲
的帖子
没错就是小幽你加的啊0 0
作者:
v2sam
时间:
2010-6-18 21:35
回复
darkdrium
的帖子
放进去没有效果= =|||class=08
作者:
wsffx13
时间:
2010-6-18 22:27
其实得说清职业影响
是一换装备,就改变职业后,技能,能力都完全改变呢,还是改变职业后,升级时能学相应的技能,和相对应的能力提升。
从你前面描述的看,貌似第一种。
那就重定义下人物职业的属性吧,另外武器附加职业id和技能。这里也可以取消武器附加技能,而在换物器时附加个技能变化操作,忘记所有技能,学会对应职业等级的所有技能。
作者:
darkdrium
时间:
2010-6-18 22:28
回复
v2sam
的帖子
摊手,我测试了下,用沉影大大的读取备注脚本和武器改变技能脚本,加上我那5句就可以了
我用棒槌备注class=3,职业变成牧师
作者:
v2sam
时间:
2010-6-19 11:51
回复
darkdrium
的帖子
依然没有效果= =||| 可不可以给个完整的看看
作者:
darkdrium
时间:
2010-6-19 12:10
回复
v2sam
的帖子
Project1.rar
(246.64 KB, 下载次数: 26)
2010-6-19 12:08 上传
点击文件名下载附件
直接给你我昨天的测试用范例
脚本添加了两页,读取备注和武器附带技能,武器附带技能里我添加了那几行
游戏中那个npc会给一根棍棒,棍棒我设置了职业是牧师
作者:
v2sam
时间:
2010-6-19 13:01
嗯……这个BUG还有许多……
BUG1:如果角色默认装备了一个武器,该武器指定的职业无用。
BUG2:如果角色把所有武器卸下(或指向一个空白),就会出错。
作者:
darkdrium
时间:
2010-6-19 13:13
回复
v2sam
的帖子
bug2解决办法:game_actor页630行
for i in 0..4 # 除去不可用的装备
改成for i in 1..4
bug原因:这个方法和我写的语句里的class_id=方法互相调用,陷入死循环
第一个bug……为什么要通过脚本解决?直接设置主角初始职业和武器职业匹配不就好了么
作者:
大喷菇
时间:
2010-6-19 13:31
提示:
作者被禁止或删除 内容自动屏蔽
作者:
v2sam
时间:
2010-6-19 14:40
这个……怎么结贴?
作者:
ClaudeBell
时间:
2010-6-19 17:48
#-------------------------------------------------------
# 2010-6-19
# 说明
# $g_weapon_class 中存放 武器与职业 的对应关系
# 第一个数是职业id,另一个是武器id
# 例: 1号武器对应1号职业,2号武器对应3号职业
# $g_weapon_class = {1=>1, 2=>2}
# 注意:每个武器只能对应一种职业,即不能出现 1=>1, 2=>1 的情况
# 若 $g_bForgetSkills = true 则换武器后遗忘原有技能,为false则不会
# 若 $g_bLearnSkills = true 则换武器后学习有技能,为false则不会
#-------------------------------------------------------
# 定义哈希表,用以存储与武器对应的职业编号
$g_weapon_class = {1=>1}
# 定义无职业的id号
$noClass = 9
# 定义布尔变量,用以判断是否遗忘原有职业技能
$g_bForgetSkills = true
$g_bLearnSkills = true
#--------------------------------------------------------
# 重定义装备数据显示界面(未实现)
# 重定义装备道具部分
class Game_Actor < Game_Battler
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # 武器
@weapon_id = item_id
unless two_hands_legal? # 非双手装备的场合,自动卸下装备
change_equip(1, nil, test)
end
# 遗忘原职业技能
if $g_bForgetSkills
for i in self.class.learnings
forget_skill(i.skill_id) if i.level <= @level
end
end
# 变更职业
@newClassID = $g_weapon_class.index(item_id)
if @newClassID == nil
@class_id = $noClass
else
@class_id = @newClassID
end
# 习得新职业技能
if $g_bLearnSkills
for i in self.class.learnings
learn_skill(i.skill_id) if i.level <= @level
end
end
when 1 # 盾
@armor1_id = item_id
unless two_hands_legal? # 非双手装备的场合,自动卸下装备
change_equip(0, nil, test)
end
when 2 # 头部防具
@armor2_id = item_id
when 3 # 身体防具
@armor3_id = item_id
when 4 # 装饰品
@armor4_id = item_id
end
end
end
复制代码
写了一个比较简单的...{:nm_3:}
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1