战神的挑战2LUA脚本修改心得
2023-06-15 07:36:47
大中小
一、首先说一个最令我高兴的发现,搜刮宝箱小游戏
Puzzle Quest 2\Assets\Scripts\Puzzles\PuzzleConfiguration.lua,这个脚本是小游戏全局设置 PuzzleConfiguration.HOARD = { GEM_DISTRIBUTION = { Gold5 = 60, Gold50 = 48, Gold500 = 36, Chest1 = 3, Chest5 = 1, }, 注意这个GEM_DISTRIBUTION,程序员的命名习惯相当好啊,百度一下就知道,这个是指小游戏中随机出现的宝石种类和几率, Gold5从命名上就知道是价值为5的金币,Chest1是普通宝箱,Chest5是稀有宝箱,也就是说,开宝箱的小游戏中,5元的金币最多,其次是50、500的金币,随机出现的箱子是最少的。由于不知道程序的具体设计,所以,最好是互换这几组数字,而不是随心所欲的改动,以防游戏出错
Gold5=1,
Gold50=3,
Gold500=36,
Chest1=48,
Chest5=60,
改完后保存,重新启动游戏,再次开宝箱时,你会发现,哇塞,满屏幕的金箱子啊~~~ 二、法师的WildMana技能 在指定的位置处创建一个+3的通配符,有这个技能,无限连、收集魔法,就容易多了,仅仅+3你会不会嫌少呢,要是+7该多好啊
Puzzle Quest 2\Assets\Scripts\Spells\WildMana.lua WildMana.cost = { green = 1, blue = 1, 这一段大家都知道了,耗蓝量修改,不多说了 local TRANSFORM_MAP = { Wildcard2 = "Wildcard4", Wildcard3 = "Wildcard5", Wildcard4 = "Wildcard6", Wildcard5 = "Wildcard7", Wildcard6 = "Wildcard7", Wildcard7 = "Wildcard7", } …… function WildMana:Apply(params) local gemtype = params.grid[params.targetX][params.targetY].name params.notify:PushAttribute("gemx", params.targetX) params.notify:PushAttribute("gemy", params.targetY) return function () Spell:Pause(Spell.SPELL_INTRO_PAUSE) Spell:TransformGem(params, params.targetX, params.targetY, TRANSFORM_MAP[gemtype] or "Wildcard3") Spell:Pause(Spell.SPELL_MIN_DURATION) Spell:Pause(Spell.SPELL_OUTRO_PAUSE) end end 关键是这一段,什么意思呢,就是在一个通配符上释放该魔法时,如果是+2通配符,就会变成+4,+3变+5,以此类推,那么,只要把以上“”中的都改成Wildcard7就行了
如:Wildcard2="Wildcard7"
别急,还没完,还有更重要的一步要改,刚才只改了在通配符上放魔法都会变+7,还要改在普通宝石上放魔法也变+7 留意代码中的WildMana函数 Spell:TransformGem(params, params.targetX, params.targetY, TRANSFORM_MAP[gemtype] or "Wildcard3") 这句是说,释放该魔法时,利用刚刚改的那个数组改变宝石(也就是通配符+2,最高+7),或者,对于普通宝石,改成+3通配符,把"Wildcard3"改成"Wildcard7",这样你用Wildmana(通配魔法)时,就会变一个+7的通配符出来了
注意,最高只能+7,如果你改成"Wildcard9",那么用该魔法时就会创建一个看不见消不掉的BUG石头出来了 什么,你说这魔法只能法师用,其他职业只能干瞪眼,没关系,小改一下,让每个职业都能高速收集魔法吧
Puzzle Quest 2\Assets\Scripts\Hero\ 目录下有 Assassin.lua(刺客)、Barbarian.lua(野蛮人)、Inquisitor.lua(骑士)、WarMage.lua(巫师)四个文件定义四个职业的初始属性和能学到的技能 level_bonuses = { { }, -- Level 1 { spell = "SwiftStrike"}, -- Level 2 { spell = "Confuse"}, -- Level 3 { spell = "Stealth"}, -- Level 4 { spell = "StoneStrike" }, -- Level 5 { spell = "SeekShadows"}, { spell = "Disarm"}, { spell = "PressurePoints"}, …… …… { upgrade = true}, { spell = "DualShot" }, -- Level 40 { }, { }, { }, { upgrade = true}, { }, -- Level 45 { }, { }, 看有很多个{}里是空的把,照着脚本的格式在空的{}里加上想要的技能就可以了,PS: -- Level 45 这是脚本注释,程序会忽略以 -- 开头直到行末的内容
如{ spell = "WildMana" },这样在角色达到{}所代表的等级时学到WildMana技能了 PS: 第一个{}代表第1级,以此类推 -- Level ×× 的注释正是说明了该技能多少级可以学到 三、野蛮人的Skull Crusher技能 利用盘中的骷髅让对方无法行动,爽吧,但没5个骷髅才停一次,郁闷吧
Puzzle Quest 2\Assets\Scripts\Spells\SkullCrusher.lua function SkullCrusher:Apply(params) local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5") local numTurns = 1 + math.floor(numSkulls/5) return function () -- Destroy Skulls Spell:Pause(Spell.SPELL_INTRO_PAUSE) Spell:ExplodeGemByName(params, "Skull", false, Spell.SPELL_TRANSFORM_PAUSE) Spell:ExplodeGemByName(params, "Skull5", false, Spell.SPELL_TRANSFORM_PAUSE) -- Stun Enemy Spell:ApplyStatusEffectTo(params.target, params, self, "Stun", 2*numTurns) Spell:Pause(Spell.SPELL_MIN_DURATION) Spell:Pause(Spell.SPELL_OUTRO_PAUSE) end end 看看这个函数,local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5")
这个变量获取盘中骷髅的数目,Skull是普通骷髅,Skull5是+5骷髅,一视同仁,其实你可以改成
local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5")*5,
这样+5的骷髅会算5个而不是一个
local numTurns = 1 + math.floor(numSkulls/5)
这个变量获取敌方停止的次数,关键位置啊,表示至少停一回合,外加骷髅数/5(忽略小数)个回合,啊,直接把/5删掉吧,一个骷髅停他一回合(觉得BT了可以改成
local numTurns = 1 + math.floor(numSkulls/3)什么的)
Puzzle Quest 2\Assets\Scripts\Puzzles\PuzzleConfiguration.lua,这个脚本是小游戏全局设置 PuzzleConfiguration.HOARD = { GEM_DISTRIBUTION = { Gold5 = 60, Gold50 = 48, Gold500 = 36, Chest1 = 3, Chest5 = 1, }, 注意这个GEM_DISTRIBUTION,程序员的命名习惯相当好啊,百度一下就知道,这个是指小游戏中随机出现的宝石种类和几率, Gold5从命名上就知道是价值为5的金币,Chest1是普通宝箱,Chest5是稀有宝箱,也就是说,开宝箱的小游戏中,5元的金币最多,其次是50、500的金币,随机出现的箱子是最少的。由于不知道程序的具体设计,所以,最好是互换这几组数字,而不是随心所欲的改动,以防游戏出错
Gold5=1,
Gold50=3,
Gold500=36,
Chest1=48,
Chest5=60,
改完后保存,重新启动游戏,再次开宝箱时,你会发现,哇塞,满屏幕的金箱子啊~~~ 二、法师的WildMana技能 在指定的位置处创建一个+3的通配符,有这个技能,无限连、收集魔法,就容易多了,仅仅+3你会不会嫌少呢,要是+7该多好啊
Puzzle Quest 2\Assets\Scripts\Spells\WildMana.lua WildMana.cost = { green = 1, blue = 1, 这一段大家都知道了,耗蓝量修改,不多说了 local TRANSFORM_MAP = { Wildcard2 = "Wildcard4", Wildcard3 = "Wildcard5", Wildcard4 = "Wildcard6", Wildcard5 = "Wildcard7", Wildcard6 = "Wildcard7", Wildcard7 = "Wildcard7", } …… function WildMana:Apply(params) local gemtype = params.grid[params.targetX][params.targetY].name params.notify:PushAttribute("gemx", params.targetX) params.notify:PushAttribute("gemy", params.targetY) return function () Spell:Pause(Spell.SPELL_INTRO_PAUSE) Spell:TransformGem(params, params.targetX, params.targetY, TRANSFORM_MAP[gemtype] or "Wildcard3") Spell:Pause(Spell.SPELL_MIN_DURATION) Spell:Pause(Spell.SPELL_OUTRO_PAUSE) end end 关键是这一段,什么意思呢,就是在一个通配符上释放该魔法时,如果是+2通配符,就会变成+4,+3变+5,以此类推,那么,只要把以上“”中的都改成Wildcard7就行了
如:Wildcard2="Wildcard7"
别急,还没完,还有更重要的一步要改,刚才只改了在通配符上放魔法都会变+7,还要改在普通宝石上放魔法也变+7 留意代码中的WildMana函数 Spell:TransformGem(params, params.targetX, params.targetY, TRANSFORM_MAP[gemtype] or "Wildcard3") 这句是说,释放该魔法时,利用刚刚改的那个数组改变宝石(也就是通配符+2,最高+7),或者,对于普通宝石,改成+3通配符,把"Wildcard3"改成"Wildcard7",这样你用Wildmana(通配魔法)时,就会变一个+7的通配符出来了
注意,最高只能+7,如果你改成"Wildcard9",那么用该魔法时就会创建一个看不见消不掉的BUG石头出来了 什么,你说这魔法只能法师用,其他职业只能干瞪眼,没关系,小改一下,让每个职业都能高速收集魔法吧
Puzzle Quest 2\Assets\Scripts\Hero\ 目录下有 Assassin.lua(刺客)、Barbarian.lua(野蛮人)、Inquisitor.lua(骑士)、WarMage.lua(巫师)四个文件定义四个职业的初始属性和能学到的技能 level_bonuses = { { }, -- Level 1 { spell = "SwiftStrike"}, -- Level 2 { spell = "Confuse"}, -- Level 3 { spell = "Stealth"}, -- Level 4 { spell = "StoneStrike" }, -- Level 5 { spell = "SeekShadows"}, { spell = "Disarm"}, { spell = "PressurePoints"}, …… …… { upgrade = true}, { spell = "DualShot" }, -- Level 40 { }, { }, { }, { upgrade = true}, { }, -- Level 45 { }, { }, 看有很多个{}里是空的把,照着脚本的格式在空的{}里加上想要的技能就可以了,PS: -- Level 45 这是脚本注释,程序会忽略以 -- 开头直到行末的内容
如{ spell = "WildMana" },这样在角色达到{}所代表的等级时学到WildMana技能了 PS: 第一个{}代表第1级,以此类推 -- Level ×× 的注释正是说明了该技能多少级可以学到 三、野蛮人的Skull Crusher技能 利用盘中的骷髅让对方无法行动,爽吧,但没5个骷髅才停一次,郁闷吧
Puzzle Quest 2\Assets\Scripts\Spells\SkullCrusher.lua function SkullCrusher:Apply(params) local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5") local numTurns = 1 + math.floor(numSkulls/5) return function () -- Destroy Skulls Spell:Pause(Spell.SPELL_INTRO_PAUSE) Spell:ExplodeGemByName(params, "Skull", false, Spell.SPELL_TRANSFORM_PAUSE) Spell:ExplodeGemByName(params, "Skull5", false, Spell.SPELL_TRANSFORM_PAUSE) -- Stun Enemy Spell:ApplyStatusEffectTo(params.target, params, self, "Stun", 2*numTurns) Spell:Pause(Spell.SPELL_MIN_DURATION) Spell:Pause(Spell.SPELL_OUTRO_PAUSE) end end 看看这个函数,local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5")
这个变量获取盘中骷髅的数目,Skull是普通骷髅,Skull5是+5骷髅,一视同仁,其实你可以改成
local numSkulls = params.grid:CountByName("Skull") + params.grid:CountByName("Skull5")*5,
这样+5的骷髅会算5个而不是一个
local numTurns = 1 + math.floor(numSkulls/5)
这个变量获取敌方停止的次数,关键位置啊,表示至少停一回合,外加骷髅数/5(忽略小数)个回合,啊,直接把/5删掉吧,一个骷髅停他一回合(觉得BT了可以改成
local numTurns = 1 + math.floor(numSkulls/3)什么的)