Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > King's Bounty > King`s Bounty: Warriors of the North

King`s Bounty: Warriors of the North Next game in the award-winning King’s Bounty series

Reply
 
Thread Tools Display Modes
  #1  
Old 10-31-2012, 08:46 AM
Bhruic Bhruic is offline
Approved Member
 
Join Date: Oct 2012
Posts: 233
Default

Alfheim fix - the Alfheim edda is supposed to only cast beneficial spells on allies and harmful spells on enemies, but it was casting both types on any units

addon_arena.lua

original:
Code:
local tab_spell_select = {
    -- õîðîøèå çàêëû
    {s = "spell_dispell",       nf = "magic_immunitet,pawn,boss"},
    {s = "spell_haste",         nf = "magic_immunitet,pawn,boss"},
    {s = "spell_bless",         nf = "undead,magic_immunitet,pawn,boss"},
    {s = "spell_divine_armor",  nf = "undead,magic_immunitet,pawn,boss"},
    {s = "spell_reaction",      nf = "magic_immunitet,pawn,boss"},
    {s = "spell_gifts",         nf = "magic_immunitet,pawn,boss"},
    -- ïëîõèå çàêëû
    {s = "spell_defenseless",   nf = "magic_immunitet,pawn,boss"},
    {s = "spell_slow",          nf = "magic_immunitet,pawn,boss"},
    {s = "spell_magic_bondage", nf = "mind_immunitet,magic_immunitet,pawn,boss"},
    {s = "spell_pygmy",         nf = "magic_immunitet,pawn,boss"},
    {s = "spell_scare",         nf = "magic_immunitet,mind_immunitet,undead,pawn,boss"},
    {s = "spell_weakness",      nf = "undead,golem,plant,magic_immunitet,pawn,boss"},
    {s = "spell_crue_fate",     nf = "magic_immunitet,pawn,boss"}--[[,
    {s = "spell_ram",           nf = "magic_immunitet,pawn,boss,mech"}]]
  }
  local cast = {}
  local spell_count = table.getn(tab_spell_select)
  local acnt = Attack.act_count()
  local total_prob = 0
  for i = 1, spell_count do
    local spell = (tab_spell_select[i]).s
    local nfeatures = (tab_spell_select[i]).nf
    local tab_spell_targets = {}
    for j = 0, acnt-1 do
      if not Attack.act_feature(j, nfeatures) and Attack.act_takesdmg(j) then
        table.insert(tab_spell_targets, j) -- âûáîð áàçîâûõ öåëåé
      end
    end
    if table.getn(tab_spell_targets) > 0 then -- åñòü áàçîâûå öåëè
      local spell_lvl = Game.Random (1, 3) -- óðîâåíü çàêëà, êîòîðûé áóäåì þçàòü
      local applicable = Attack.build_spell_attack(spell, spell_lvl).applicable
      for i, t in ipairs (tab_spell_targets) do
        if applicable(t) then -- çàêë ïðèìåíèì íà ýòó öåëü
          local prob = 10
          total_prob = total_prob + prob
          table.insert(cast, {spell = spell, level = spell_lvl, target = t, prob = prob})
        end
      end
    end
  end
modified:
Code:
local tab_spell_select_positive = {
    -- õîðîøèå çàêëû
    {s = "spell_dispell",       nf = "magic_immunitet,pawn,boss"},
    {s = "spell_haste",         nf = "magic_immunitet,pawn,boss"},
    {s = "spell_bless",         nf = "undead,magic_immunitet,pawn,boss"},
    {s = "spell_divine_armor",  nf = "undead,magic_immunitet,pawn,boss"},
    {s = "spell_reaction",      nf = "magic_immunitet,pawn,boss"},
    {s = "spell_gifts",         nf = "magic_immunitet,pawn,boss"}
  }
  local tab_spell_select_negative = {
    -- ïëîõèå çàêëû
    {s = "spell_defenseless",   nf = "magic_immunitet,pawn,boss"},
    {s = "spell_slow",          nf = "magic_immunitet,pawn,boss"},
    {s = "spell_magic_bondage", nf = "mind_immunitet,magic_immunitet,pawn,boss"},
    {s = "spell_pygmy",         nf = "magic_immunitet,pawn,boss"},
    {s = "spell_scare",         nf = "magic_immunitet,mind_immunitet,undead,pawn,boss"},
    {s = "spell_weakness",      nf = "undead,golem,plant,magic_immunitet,pawn,boss"},
    {s = "spell_crue_fate",     nf = "magic_immunitet,pawn,boss"}--[[,
    {s = "spell_ram",           nf = "magic_immunitet,pawn,boss,mech"}]]
  }
  local cast = {}
  local acnt = Attack.act_count()
  local total_prob = 0
  local spell_count = table.getn(tab_spell_select_positive)
  for i = 1, spell_count do
    local spell = (tab_spell_select_positive[i]).s
    local nfeatures = (tab_spell_select_positive[i]).nf
    local tab_spell_targets = {}
    for j = 0, acnt-1 do
      if not Attack.act_feature(j, nfeatures) and Attack.act_takesdmg(j) and Attack.act_ally(j) then
        table.insert(tab_spell_targets, j) -- âûáîð áàçîâûõ öåëåé
      end
    end
    if table.getn(tab_spell_targets) > 0 then -- åñòü áàçîâûå öåëè
      local spell_lvl = Game.Random (1, 3) -- óðîâåíü çàêëà, êîòîðûé áóäåì þçàòü
      local applicable = Attack.build_spell_attack(spell, spell_lvl).applicable
      for i, t in ipairs (tab_spell_targets) do
        if applicable(t) then -- çàêë ïðèìåíèì íà ýòó öåëü
          local prob = 10
          total_prob = total_prob + prob
          table.insert(cast, {spell = spell, level = spell_lvl, target = t, prob = prob})
        end
      end
    end
  end
  
  spell_count = table.getn(tab_spell_select_negative)
  for i = 1, spell_count do
    local spell = (tab_spell_select_negative[i]).s
    local nfeatures = (tab_spell_select_negative[i]).nf
    local tab_spell_targets = {}
    for j = 0, acnt-1 do
      if not Attack.act_feature(j, nfeatures) and Attack.act_takesdmg(j) and Attack.act_enemy(j) then
        table.insert(tab_spell_targets, j) -- âûáîð áàçîâûõ öåëåé
      end
    end
    if table.getn(tab_spell_targets) > 0 then -- åñòü áàçîâûå öåëè
      local spell_lvl = Game.Random (1, 3) -- óðîâåíü çàêëà, êîòîðûé áóäåì þçàòü
      local applicable = Attack.build_spell_attack(spell, spell_lvl).applicable
      for i, t in ipairs (tab_spell_targets) do
        if applicable(t) then -- çàêë ïðèìåíèì íà ýòó öåëü
          local prob = 10
          total_prob = total_prob + prob
          table.insert(cast, {spell = spell, level = spell_lvl, target = t, prob = prob})
        end
      end
    end
  end
Reply With Quote
  #2  
Old 10-31-2012, 09:15 AM
saroumana saroumana is offline
Approved Member
 
Join Date: Jan 2010
Posts: 87
Default

Book of evil correction :

in spells_power.lua

Original

Quote:
function pwr_evilbook(level)
if tonumber(level) == 0 or level == nil then
level = Obj.spell_level()
if level == 0 then
level = 1
end
if Obj.where() == 6 and Obj.spell_level() ~= 0 then
level = level + 1
end
else
level = tonumber(level)
end

local level = tonumber("0" .. text_dec(Logic.obj_par("spell_evilbook", "level"), level))
local kill = tonumber("0" .. text_dec(Logic.obj_par("spell_evilbook", "kill"), level))
local creator_power = 1 + tonumber(skill_power2("creator", 1)/100)
creator_power = creator_power/2
local int_bonus = 1 + tonumber(Game.Config("spell_power_config/int_power"))*HInt()/100
local item_bonus = tonumber(Logic.hero_lu_item("sp_spell_demonologist ", "count")/100)
local bonus = math.floor(100*(creator_power + int_bonus)*int_bonus)

return bonus, level, kill
end
CHANGE

Quote:
function pwr_evilbook(level)
if tonumber(level) == 0 or level == nil then
level = Obj.spell_level()
if level == 0 then
level = 1
end
if Obj.where() == 6 and Obj.spell_level() ~= 0 then
level = level + 1
end
else
level = tonumber(level)
end

local level = tonumber("0" .. text_dec(Logic.obj_par("spell_evilbook", "level"), level))
local kill = tonumber("0" .. text_dec(Logic.obj_par("spell_evilbook", "kill"), level))
local creator_power = 1 + tonumber(skill_power2("creator", 1)/100)
creator_power = creator_power/2
local int_bonus = 1 + tonumber(Game.Config("spell_power_config/int_power"))*HInt()/100
local item_bonus = tonumber(Logic.hero_lu_item("sp_spell_demonologist ", "count")/100)
local bonus = math.floor(100*(creator_power + item_bonus)*int_bonus)

return bonus, level, kill
end
Reply With Quote
  #3  
Old 10-31-2012, 09:30 AM
Bhruic Bhruic is offline
Approved Member
 
Join Date: Oct 2012
Posts: 233
Default

Nice find. Added that to the first post. Also added a fix for the Song of Svartalfheim.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 02:42 AM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.