The Black Sacrament -- A Guide To Black Mage

Language: JP EN DE FR
2010-09-08
New Items
users online
Forum » FFXI » Jobs » Black Mage » The Black Sacrament -- A Guide to Black Mage
The Black Sacrament -- A Guide to Black Mage
First Page 2 3 ... 13 14
 Asura.Finbar
Offline
Server: Asura
Game: FFXI
user: Finbar
Posts: 52
By Asura.Finbar 2019-03-13 09:24:21
Link | Quote | Reply
 
Yeah, I was going to edit to put a "maybe" in there, as I'd have to do the math for the INT and MAB vs the MBD2, but I figured I'd let someone correct me. Ea +1 Pigaches has -7 MAB, -28 INT, +6 Macc, and +5 MBD2 compared to Jhakri +2. There's a few too many factors for me to calculate it here at work.
 Lakshmi.Miang
Offline
Server: Lakshmi
Game: FFXI
user: Miang
Posts: 31
By Lakshmi.Miang 2019-03-14 18:57:21
Link | Quote | Reply
 
Been doing Orpheus's Sash testing so I can add it to my BLM lua
Code
Distance	Percent
0	1.148348348
1	1.148348348
2	1.139039039
3	1.12972973
4	1.118318318
5	1.109009009
6	1.0996997
7	1.088288288
8	1.078978979
9	1.069369369
10	1.058258258
11	1.048948949
12	1.039339339
13	1.028228228
14	1.018793574
15	1.009396787
16	1.009396787


Used linear regression to create this function for lua:
Code
function get_orpheus_damage_percent(spell)
	if spell.target.distance < 1 then
		return 1.148348348
	end
	if spell.target.distance > 15 then
		return 1.009396787
	end
	return -0.01 * spell.target.distance + 1.1589
end


Just pass the current spell in during midcast and it will return the % boost you'll get from the sash.

If you want to compare it against Hachirin obi you can use the following function to get the % boost from that too:
Code
opposingElement = T{
	['Water'] = 'Fire',
	['Lightning'] = 'Water',
	['Earth'] = 'Lightning',
	['Wind'] = 'Earth',
	['Ice'] = 'Wind',
	['Fire'] = 'Ice',
	['Light'] = 'Dark',
	['Dark'] = 'Light',
}
stormNames = T{
	['Fire'] = 178,
	['Ice'] = 179,
	['Wind'] = 180,
	['Earth'] = 181,
	['Lightning'] = 182,
	['Water'] = 183,
	['Light'] = 184,
	['Dark'] = 185,
}
storm2Names = T{
	['Fire'] = 589,
	['Ice'] = 590,
	['Wind'] = 591,
	['Earth'] = 592,
	['Lightning'] = 593,
	['Water'] = 594,
	['Light'] = 595,
	['Dark'] = 596,
}
function get_obi_percent(spell)
	local intensity = 1.00

	-- Helix spells are always affected by weather, so obi is never required to force weather proc
	if spell.skill == 'Elemental Magic' and (spell.english:sub(-5) == 'helix' or spell.english:sub(-8) == 'helix II') then
		return intensity
	end

	if buffactive[stormNames[spell.element]] then
		intensity = intensity + 0.1
	elseif buffactive[storm2Names[spell.element]] then
		intensity = intensity + 0.25
	elseif spell.element == world.weather_element then
		if gearswap.res.weather[world.weather_id].intensity == 2 then
			intensity = intensity + 0.25
		elseif gearswap.res.weather[world.weather_id].intensity == 1 then
			intensity = intensity + 0.1
		end
	elseif world.weather_element == opposingElement[spell.element] then
		if gearswap.res.weather[world.weather_id].intensity == 2 then
			intensity = intensity - 0.25
		elseif gearswap.res.weather[world.weather_id].intensity == 1 then
			intensity = intensity - 0.1
		end
	end

	if world.day_element == spell.element then
		intensity = intensity + 0.1
	elseif world.day_element == opposingElement[spell.element] then
		intensity = intensity - 0.1
	end

	return intensity
end


In my midcast section I have the following:
Code
local weatherLevel = get_obi_percent(spell)
if weatherLevel > 1.00 then
    if spell.skill == 'Elemental Magic' and sets.Orpheus.waist and get_orpheus_damage_percent(spell) > weatherLevel then
        equip(sets.Orpheus)
    else
        equip(sets[spell.element])
    end
else
    equip(sets.Orpheus)
end


And the above will equip the relevant set from these:
Code
sets['Lightning'] = {waist="Hachirin-no-Obi"}
sets['Ice'] = {waist="Hachirin-no-Obi"}
sets['Water'] = {waist="Hachirin-no-Obi"}
sets['Fire'] = {waist="Hachirin-no-Obi"}
sets['Earth'] = {waist="Hachirin-no-Obi"}
sets['Wind'] = {waist="Hachirin-no-Obi"}
sets['Light'] = {waist="Hachirin-no-Obi"}
sets['Dark'] = {waist="Hachirin-no-Obi"}
sets['Orpheus'] = {waist="Orpheus's Sash"}


Just throwing this out there in case anyone else wanted to automate using the sash
 Shiva.Hiep
Offline
Server: Shiva
Game: FFXI
user: Hiepo
Posts: 616
By Shiva.Hiep 2019-03-14 19:04:58
Link | Quote | Reply
 
Does anyone have a function to have Sorcerer's Ring equip under 75% HP? I'd like it for my free nukes!
 Lakshmi.Miang
Offline
Server: Lakshmi
Game: FFXI
user: Miang
Posts: 31
By Lakshmi.Miang 2019-03-15 04:28:11
Link | Quote | Reply
 
Shiva.Hiep said: »
Does anyone have a function to have Sorcerer's Ring equip under 75% HP? I'd like it for my free nukes!
Code
if player.hpp < 75 then
    equip(sets["Sorcerer's Ring"])
end

Put that in your midcast, right after where it equips gear for your nukes
[+]
 Shiva.Hiep
Offline
Server: Shiva
Game: FFXI
user: Hiepo
Posts: 616
By Shiva.Hiep 2019-03-18 02:42:19
Link | Quote | Reply
 
How would I exclude elemental debuffs such as burn?
Code
if player.hpp < 75 and spell.skill == 'Elemental Magic' then
    equip(sets.Sorcerer)
end
 Asura.Byrne
Offline
Server: Asura
Game: FFXI
Posts: 449
By Asura.Byrne 2019-03-18 04:05:57
Link | Quote | Reply
 
Lakshmi.Miang said: »
 
Code
 if buffactive[stormNames[spell.element]] then
        intensity = intensity + 0.1
    elseif buffactive[storm2Names[spell.element]] then
        intensity = intensity + 0.25

Damn, I really need to remember to dig into luas for jobs I don't use!

So I'm guessing this can tell the difference between weather 1 and 2?

If so, I should pass it around for all the RDMs, CORs, BST, WARs, and RNGs that want to distinguish them :o

I would like clarification, but you seem to be saying as much; if so, I'd like to say, nice work, and thanks.
 Asura.Chiaia
Offline
Server: Asura
Game: FFXI
user: Demmis
Posts: 941
By Asura.Chiaia 2019-03-18 04:53:11
Link | Quote | Reply
 
his method is overly complex to tell the diff between weather 1 and 2.
 Shiva.Spynx
Offline
Server: Shiva
Game: FFXI
user: auron86
Posts: 323
By Shiva.Spynx 2019-03-18 05:14:50
Link | Quote | Reply
 
Shiva.Hiep said: »
How would I exclude elemental debuffs such as burn?
Code
if player.hpp < 75 and spell.skill == 'Elemental Magic' then
    equip(sets.Sorcerer)
end
Assuming you are using mote:
Code
function job_post_midcast(spell, action, spellMap, eventArgs)
	if player.hpp < 75 and spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
		equip(sets.Sorcerer)	
	end
end
 Lakshmi.Miang
Offline
Server: Lakshmi
Game: FFXI
user: Miang
Posts: 31
By Lakshmi.Miang 2019-03-18 06:17:27
Link | Quote | Reply
 
Asura.Byrne said: »
Lakshmi.Miang said: »
&nbsp;
Code
&nbsp;if buffactive[stormNames[spell.element]] then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intensity = intensity + 0.1
&nbsp;&nbsp;&nbsp;&nbsp;elseif buffactive[storm2Names[spell.element]] then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intensity = intensity + 0.25

Damn, I really need to remember to dig into luas for jobs I don't use!

So I'm guessing this can tell the difference between weather 1 and 2?

If so, I should pass it around for all the RDMs, CORs, BST, WARs, and RNGs that want to distinguish them :o

I would like clarification, but you seem to be saying as much; if so, I'd like to say, nice work, and thanks.

Yeah this will tell the difference between the type of weather, both storm based and world weather based. You'd need to include these variables too though:
Code
opposingElement = T{
    ['Water'] = 'Fire',
    ['Lightning'] = 'Water',
    ['Earth'] = 'Lightning',
    ['Wind'] = 'Earth',
    ['Ice'] = 'Wind',
    ['Fire'] = 'Ice',
    ['Light'] = 'Dark',
    ['Dark'] = 'Light',
}
stormNames = T{
    ['Fire'] = 178,
    ['Ice'] = 179,
    ['Wind'] = 180,
    ['Earth'] = 181,
    ['Lightning'] = 182,
    ['Water'] = 183,
    ['Light'] = 184,
    ['Dark'] = 185,
}
storm2Names = T{
    ['Fire'] = 589,
    ['Ice'] = 590,
    ['Wind'] = 591,
    ['Earth'] = 592,
    ['Lightning'] = 593,
    ['Water'] = 594,
    ['Light'] = 595,
    ['Dark'] = 596,
}


The two stormNames variables convert a spell.element format into a buff id. The opposingElement variable is only needed if you want to track negative consequences too.
 Lakshmi.Miang
Offline
Server: Lakshmi
Game: FFXI
user: Miang
Posts: 31
By Lakshmi.Miang 2019-03-18 06:20:47
Link | Quote | Reply
 
Shiva.Spynx said: »
Shiva.Hiep said: »
How would I exclude elemental debuffs such as burn?
Code
if player.hpp < 75 and spell.skill == 'Elemental Magic' then
    equip(sets.Sorcerer)
end
Assuming you are using mote:
Code
function job_post_midcast(spell, action, spellMap, eventArgs)
	if player.hpp < 75 and spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
		equip(sets.Sorcerer)	
	end
end

If you're not using mote:
Code
if player.hpp < 75 and spell.skill == 'Elemental Magic' and spell.english ~= 'Burn' and spell.english ~= 'Frost' and spell.english ~= 'Choke' and spell.english ~= 'Rasp' and spell.english ~= 'Shock' and spell.english ~= 'Drown') then
    equip(sets.Sorcerer)
end
 Asura.Byrne
Offline
Server: Asura
Game: FFXI
Posts: 449
By Asura.Byrne 2019-03-18 15:57:32
Link | Quote | Reply
 
Lakshmi.Miang said: »
Asura.Byrne said: »
Lakshmi.Miang said: »
&nbsp;
Code
&nbsp;if buffactive[stormNames[spell.element]] then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intensity = intensity + 0.1
&nbsp;&nbsp;&nbsp;&nbsp;elseif buffactive[storm2Names[spell.element]] then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intensity = intensity + 0.25

Damn, I really need to remember to dig into luas for jobs I don't use!

So I'm guessing this can tell the difference between weather 1 and 2?

If so, I should pass it around for all the RDMs, CORs, BST, WARs, and RNGs that want to distinguish them :o

I would like clarification, but you seem to be saying as much; if so, I'd like to say, nice work, and thanks.

Yeah this will tell the difference between the type of weather, both storm based and world weather based. You'd need to include these variables too though:
Code
opposingElement = T{
    ['Water'] = 'Fire',
    ['Lightning'] = 'Water',
    ['Earth'] = 'Lightning',
    ['Wind'] = 'Earth',
    ['Ice'] = 'Wind',
    ['Fire'] = 'Ice',
    ['Light'] = 'Dark',
    ['Dark'] = 'Light',
}
stormNames = T{
    ['Fire'] = 178,
    ['Ice'] = 179,
    ['Wind'] = 180,
    ['Earth'] = 181,
    ['Lightning'] = 182,
    ['Water'] = 183,
    ['Light'] = 184,
    ['Dark'] = 185,
}
storm2Names = T{
    ['Fire'] = 589,
    ['Ice'] = 590,
    ['Wind'] = 591,
    ['Earth'] = 592,
    ['Lightning'] = 593,
    ['Water'] = 594,
    ['Light'] = 595,
    ['Dark'] = 596,
}


The two stormNames variables convert a spell.element format into a buff id. The opposingElement variable is only needed if you want to track negative consequences too.

I'll probably just use buffactive[#] to handle the arguments for Obi on Elemental WS since it's pretty straightforward. I just didn't know what the ID's for weather 2 were, as I had tried to find them in the past and failed. Cheers!

Edit: Maybe a bit more thought for COR and RNG, but the melee jobs are going to be standing in a range such that Orpheus will beat out anything but double weather. Of course when firing WS at range that will be different so, I'll have to remember to include the whole gamut for those jobs.
First Page 2 3 ... 13 14
Log in to post.