Page 1 of 1
Staff that casts a random spell.
Posted: Mon Aug 24, 2015 5:32 pm
by Emera Nova
So I'm working on making a staff that when you activate its specialattack it will cast a spell out of it, this spell is undetermined until its time to cast. Below is the code I'm using for this, I'd like to know if you think this would work or not. I feel that where i start the spell = ( is the problem, and will need to be changed to something else for this to work.
Code: Select all
{
class = "CastSpell",
name = "cast",
uiName = "ShockBurst",
spell = (
local r = math.random()
if r < 0.25 then
spell = "rs_frostburst_2"
elseif r < 0.5 then
spell = "rs_poison_cloud_small_2"
elseif r < 0.75 then
spell = "rs_shockburst_2"
else
spell = "rs_fireburst"
end)
energyCost = 50,
cooldown = 2.2,
requirements = { "air_magic", 1, "earth_magic", 1, "water_magic", 1, "fire_magic", 1 },
},
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 5:40 pm
by Emera Nova
I was most correct on that being formatted wrong xD grimrock had no idea what the hell I was saying. Any suggestions on how to fix this up so that it randomly fires off 1 of those 4 spells when the power attack is used.
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 6:54 pm
by AndakRainor
I think a simple way is to define a new spell that casts randomly one of those effects.
Or maybe you can use the function
ItemActionComponent.onAttack(self, champion, slot, chainIndex) as
CastSpellComponent extends
ItemActionComponent
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 8:13 pm
by Emera Nova
I attempted to make a spell using this
Code: Select all
defineObject{
name = "catalytic_1",
uiName = "Catalytic Blast",
onCast = function(self)
local r = math.random()
if r < 0.25 then
self.go.champion:shootProjectile("rs_frostburst_2")
elseif r < 0.5 then
self.go.champion:shootProjectile("rs_poison_cloud_small_2")
elseif r < 0.75 then
self.go.monster:shootProjectile("rs_shockburst_2")
else
self.go.champion:shootProjectile("rs_fireburst")
end
end
}
And the weapon having this
Code: Select all
defineObject{
name = "rs_staff_catalytic",
baseObject = "base_item",
components = {
{
class = "Model",
model = "assets/models/items/acolyte_staff.fbx",
},
{
class = "Item",
uiName = "Catalytic Staff",
description = "This staff makes destructive spells more powerful. (Tier 1)",
gfxIndex = 340,
gfxIndexPowerAttack = 450,
impactSound = "impact_blunt",
weight = 3.5,
secondaryAction = "cast",
},
{
class = "EquipmentItem",
slot = "Weapon",
willpower = 5,
},
{
class = "CastSpell",
name = "cast",
uiName = "Catalytic Blast",
spell = "catalytic_1",
energyCost = 50,
cooldown = 2.2,
requirements = { "air_magic", 1, "earth_magic", 1, "water_magic", 1, "fire_magic", 1 },
},
},
} -- tier 5
It's popping up telling me unknown spell or unknown wand spell.
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 8:46 pm
by AndakRainor
try this (defineSpell is not defineObject) :
Code: Select all
defineSpell{
name = "catalytic_1",
uiName = "Catalytic Blast",
gesture = 0,
hidden = true,
onCast = function(champion, x, y, direction, elevation, skillLevel)
local r = math.random()
if r < 0.25 then
champion:castSpell(number) -- replace number with rs_frostburst_2 gesture
elseif r < 0.5 then
champion:castSpell(number) -- replace number with rs_poison_cloud_small_2 gesture
elseif r < 0.75 then
champion:castSpell(number) -- replace number with rs_shockburst_2 gesture
else
champion:castSpell(number) -- replace number with rs_fireburst gesture
end
end,
}
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 10:12 pm
by Isaac
Alternatively... This works, and can be customized to suit.
Code: Select all
defineObject{
name = "random_staff",
baseObject = "shaman_staff",
components = {
{
class = "Item",
uiName = "Elemental Staff",
description = "A rune covered staff with a pulsating green gem attached to its tip. You can sense chaotic power in it.",
gfxIndex = 1,
gfxIndexPowerAttack = 440,
impactSound = "impact_blunt",
weight = 3.3,
secondaryAction = "random_spell",
},
{
class = "CastSpell",
name= "random_spell",
uiName = "Elemental Spell",
spell = nil,
charges = 9,
cooldown = 5,
energyCost = 25,
power = 3,
requirements = { "concentration", 2 },
onAttack = function(self)
local randomSpell = {"ice_shards","fireburst","shock","poison_cloud"}
self.go.random_spell:setSpell(randomSpell[math.random(#randomSpell)])
end,
},
},
}
Re: Staff that casts a random spell.
Posted: Mon Aug 24, 2015 10:55 pm
by AndakRainor
Nice ! Seems like the best way to do it.