eq2emu-content/SpawnScripts/Generic/ClassChangeModule.lua

1078 lines
51 KiB
Lua
Raw Permalink Normal View History

2025-08-29 11:11:44 +00:00
-- promotion_subset_router.lua
-- Call with: PromoteByKeyStrict(Player, "fp-22") or PromoteByKeyStrict(Player, "qy-28"), etc.
local PROMOTE_MAP = {
-- Freeport (first two)
["fp-22"] = "PromoteToSorcerer", -- 22
["fp-28"] = "PromoteToSummoner", -- 28
-- using qeynos as temp freeport holders (seem to be identical in requirements, unless we want to set something specific Qeynos/FP on the Player)
["fp-35"] = "PromoteToBardQ", -- 35
["fp-5"] = "PromoteToBrawlerQ", -- 5
["fp-12"] = "PromoteToClericQ", -- 12
["fp-8"] = "PromoteToCrusaderQ", -- 8
["fp-15"] = "PromoteToDruidQ", -- 15
["fp-25"] = "PromoteToEnchanterQ", -- 25
["fp-38"] = "PromoteToPredatorQ", -- 38
["fp-32"] = "PromoteToRogueQ", -- 32
["fp-18"] = "PromoteToShamanQ", -- 18
["fp-2"] = "PromoteToWarriorQ", -- 2
-- temp freeport placeholders
-- Qeynos (rest)
["qy-35"] = "PromoteToBardQ", -- 35
["qy-5"] = "PromoteToBrawlerQ", -- 5
["qy-12"] = "PromoteToClericQ", -- 12
["qy-8"] = "PromoteToCrusaderQ", -- 8
["qy-15"] = "PromoteToDruidQ", -- 15
["qy-25"] = "PromoteToEnchanterQ", -- 25
["qy-38"] = "PromoteToPredatorQ", -- 38
["qy-32"] = "PromoteToRogueQ", -- 32
["qy-18"] = "PromoteToShamanQ", -- 18
["qy-22"] = "PromoteToSorcererQ", -- 22
["qy-28"] = "PromoteToSummonerQ", -- 28
["qy-2"] = "PromoteToWarriorQ", -- 2
}
-- Strict dispatcher for your subset
function PromoteByKeyStrict(Player, key)
local fname = PROMOTE_MAP[key]
if not fname then
return false, "Unsupported promotion key '"..tostring(key).."'."
end
local fn = _G[fname]
if type(fn) ~= "function" then
return false, "Missing promotion function '"..fname.."'."
end
fn(Player)
SetInfoStructString(Player, "refresh_advspells", "true")
return true
end
-- Optional: enumerate supported keys (useful for debugging/UI)
function ListSupportedPromotionKeys()
local keys = {}
for k,_ in pairs(PROMOTE_MAP) do table.insert(keys, k) end
table.sort(keys)
return keys
end
-- PromoteByKeyStrict(Player, "fp-22") → PromoteToSorcerer(Player)
-- PromoteByKeyStrict(Player, "qy-28") → PromoteToSummonerQ(Player)
-- ListSupportedPromotionKeys() → returns the full set you can expose in UI or logs.
2025-08-29 00:00:06 +00:00
------------------------------
-- Freeport Classes
------------------------------
function PromoteToSorcerer(Player)
SetAdventureClass(Player,22) -- Sorcerer (Freeport)
SendMessage(Player, "Congratulations! You are a Sorcerer.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Sorcerer.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- adds (same as your original, with messages preserved)
EnsureSkills(Player, {
{id=3820670534, min=1, max=level, message="You have learned the Evocations skill"}, -- Evocations/Mage
{id=2533124061, min=1, max=level, message="You have learned the Sorcery skill"}, -- Sorcery/Sorcerer
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"}, -- Crushing
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"}, -- Piercing
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"}, -- Disruption
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"}, -- Ministration
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"}, -- Ordination
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"}, -- Subjugation
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"}, -- Focus
{id=545043066, min=1, max=level, message="You are now more proficient with a Symbol"},-- Symbol
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},-- Dagger
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"}, -- Staff (2h)
})
-- removals (exactly your list; deduped & with Spawn→Player fix)
RemoveSkills(Player, {
-- Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Priest
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3467160477,3191839982,
-- Mage (non-sorcerer lines)
287643040,2898101972,2950599749,2662430630,193411854,2120065377,2042842194,
289471519,
-- Weapons/Armor
2246237129,241174330,770311065,3177806075,1696217328,2292577688,2954459351,
1653482350,3173504370,2608320658,570458645,4037812502
})
end
-- extracted promotion logic (Freeport Summoner)
function PromoteToSummoner(Player)
SetAdventureClass(Player,28)
SendMessage(Player, "Congratulations! You are a Summoner.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Summoner.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved)
EnsureSkills(Player, {
{id=3820670534, min=1, max=level, message="You have learned the Evocations skill"}, -- Mage
{id=2120065377, min=1, max=level, message="You have learned the Legerdemain skill"}, -- Summoner
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=545043066, min=1, max=level, message="You are now more proficient with a Symbol"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (consolidated & deduped; Great Spear set to 2380184628; Spawn->Player fixed)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Remove Priest
2463145248, -- Inspirations/Priest
3341842907, -- Theurgy/Cleric
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3282420779, -- Archegenesis/Druid
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Remove Mage (non-summoner subclasses)
287643040, -- Enchantments/Enchanter
2898101972, -- Hallucinations/Illusionist
2950599749, -- Protean/Coercer
2533124061, -- Sorcery/Sorcerer
2662430630, -- Elemental Mastery/Wizard
193411854, -- Noctivagance/Warlock
2042842194, -- Conjurations/Conjurer
289471519, -- Sepulchers/Necromancer
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
770311065, -- Mace
3177806075, -- Fists
1696217328, -- Sword
2292577688, -- Great Sword
2954459351, -- Great Axe
2380184628, -- Great Spear (correct)
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
4037812502, -- Buckler
})
end
------------------------------
-- Qeynos Classes
------------------------------
function PromoteToBardQ(Player)
SetAdventureClass(Player,35)
SendMessage(Player, "Congratulations! You are a Bard.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Bard.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (preserve your messages & Safe Fall min=31; omit Spear because you remove it later)
EnsureSkills(Player, {
{id=1921433074, min=1, max=level, message="You have learned the Reconnaissance skill"}, -- Scout
{id=1311635100, min=1, max=level, message="You have learned the Melodies skill"}, -- Bard
{id=1468243427, min=1, max=level, message="You have learned the Tracking skill"},
{id=2200201799, min=1, max=level, message="You have learned the Disarm Trap skill"},
{id=3232294366, min=31, max=level, message="You have learned the Safe Fall skill"},
{id=1756482397, min=1, max=level, message="You have learned the Ranged skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"},
{id=1852383242, min=1, max=level, message="You have learned the Dual Wield skill"},
{id=2650425026, min=1, max=level, message="You have learned the Thrown Weapon skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=3173504370, min=1, max=level, message="You are now more proficient with a Roundshield"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=1743366740, min=1, max=level, message="You are now more proficient with a Bow"},
{id=2476073427, min=1, max=level, message="You are now more proficient with an Axe"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=641561514, min=1, max=level, message="You are now more proficient with a Rapier"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
-- Casting skills that appeared in your original block (fixed Spawn→Player)
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
})
-- Removals (exactly your lists; deduped, and unchanged semantics)
RemoveSkills(Player, {
-- Remove Fighter for Scout
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Removed Advance Scout subclasses
296246391,340921594,1514256692,2663054519,1519965519,3167106577,1400160844,2711101135,
-- Removed Priest for Scout
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3343700951,3467160477,3191839982,
-- Removed Mage for Scout
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- Remove weapon/armor not intended for Bard (per your list)
2246237129,241174330,3177806075,2292577688,2954459351,1653482350,
1616998748, -- Spear (omit from adds above to avoid add/remove churn)
2608320658,570458645,540022425,1553857724,3429135390
})
end
function PromoteToBrawlerQ(Player)
SetAdventureClass(Player,5) -- (preserved from your script)
SendMessage(Player, "Congratulations! You are a Brawler.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Brawler.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
-- keep this from your original
RemoveSpellBookEntry(Player, 2550401)
local level = GetLevel(Player) * 5
-- Adds (exact messages and IDs preserved; Slashing fixed at 36/36)
EnsureSkills(Player, {
{id=1408356869, min=1, max=level, message="You have learned the Martial skill"},
{id=3856706740, min=1, max=level, message="You have learned the Brawling skill"},
{id=3850377186, min=1, max=level, message="You have learned the Deflection skill"},
{id=3232294366, min=1, max=level, message="You have learned the Safe Fall skill"},
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=418532101, min=36, max=36, message="You have learned the Slashing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=3177806075, min=1, max=level, message="You are now more proficient with your Fists"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
{id=1653482350, min=1, max=level, message="You are now more proficient with a Great Hammer"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (your lists consolidated & de-duplicated)
RemoveSkills(Player, {
-- Removed Advanced Fighter branches
1124719197,433335062,1209716810,2011726342,3067436248,3809066846,90523872,2741805322,
-- Removed Scout for Fighter
1921433074,1311635100,296246391,340921594,1514256692,2663054519,1519965519,3167106577,1400160844,2711101135,
-- Removed Priest for Fighter
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,3343700951,3467160477,3191839982,
-- Removed Mage for Fighter
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,2120065377,2042842194,289471519,
-- Weapons/armor/casting you explicitly removed
540022425, -- Parry
241174330, -- Heavy Armor
3173504370, -- Roundshield
2608320658, -- Kite Shield
2476073427, -- Axe
2954459351, -- Great Axe
1696217328, -- Sword
2292577688, -- Great Sword
1553857724, -- Investigation
3429135390, -- Mystical Destruction
2200201799, -- Disarm Trap
366253016, -- Ministration
613995491, -- Disruption
882983852, -- Subjugation
3587918036, -- Ordination
})
end
function PromoteToClericQ(Player)
SetAdventureClass(Player,12)
SendMessage(Player, "Congratulations! You are a Cleric.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Cleric.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved). NOTE: skipping 2463145248 (Inspirations), 3341842907 (Theurgy),
-- and 1653482350 (Great Hammer) to avoid add/remove churn with your removal list below.
EnsureSkills(Player, {
-- priest
{id=2463145248, min=1, max=level, message="You have learned the Inspirations skill"}, -- ??
{id=3341842907, min=1, max=level, message="You have learned the Theurgy skill"}, -- ??
-- Core combat/casting
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=545043066, min=1, max=level, message="You are now more proficient with a Symbol"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
{id=1653482350, min=1, max=level, message="You are now more proficient with a Great Hammer"}, -- ??
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (exactly your lists; de-duplicated)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Removed Priest (as provided)
2463145248, -- Inspirations/Priest
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3282420779, -- Archegenesis/Druid
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3343700951, -- Talismans/Shaman
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Removed Mage
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR
2246237129,241174330,3177806075,2292577688,2380184628,2954459351,1616998748,
3173504370,2608320658,570458645,
})
end
function PromoteToCrusaderQ(Player)
SetAdventureClass(Player,8)
SendMessage(Player, "Congratulations! You are a Crusader.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Crusader.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (omits any skills that are later removed to avoid churn)
EnsureSkills(Player, {
{id=1408356869, min=1, max=level, message="You have learned the Martial skill"}, -- Martial
{id=3809066846, min=1, max=level, message="You have learned the Faith skill"}, -- Faith
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"}, -- Crushing
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"}, -- Slashing
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"}, -- Piercing
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"}, -- Focus
-- armor/shields & weapon proficiencies you keep
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=2246237129, min=1, max=level, message="You are now more proficient with Medium Armor"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=3173504370, min=1, max=level, message="You are now more proficient with a Roundshield"},
{id=2608320658, min=1, max=level, message="You are now more proficient with a Kite Shield"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
{id=2292577688, min=1, max=level, message="You are now more proficient with a Great Sword"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
-- (not adding 1653482350 Great Hammer or 3180399725 Staff since you remove them below)
-- (not adding 3809066846 Faith, nor caster lines, since you also remove them)
})
-- Removals (your lists consolidated & de-duplicated; also fixed the few inverted checks)
RemoveSkills(Player, {
-- Removed Advanced Fighter branches
1124719197,433335062,1209716810,3856706740,2011726342,3067436248,2380184628,90523872,2741805322,
-- Removed Scout for Fighter
1921433074,1311635100,296246391,340921594,1514256692,2663054519,1519965519,3167106577,1400160844,2711101135,
-- Removed Priest for Fighter
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,3343700951,3467160477,3191839982,
-- Removed Mage for Fighter
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,2120065377,2042842194,289471519,
-- Weapon/armor/casting removals (as in your script)
540022425, -- Parry
241174330, -- Heavy Armor
3177806075, -- Fists
2476073427, -- Axe
2954459351, -- Great Axe
3180399725, -- Staff (2h)
1553857724, -- Investigation
3429135390, -- Mystical Destruction
2200201799, -- Disarm Trap
366253016, -- Ministration
613995491, -- Disruption
882983852, -- Subjugation
3587918036, -- Ordination
1653482350, -- Great Hammer
})
end
-- extracted Qeynos Druid promotion logic
function PromoteToDruidQ(Player)
SetAdventureClass(Player,15)
SendMessage(Player, "Congratulations! You are a Druid.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Druid.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved; omit IDs that are removed below)
EnsureSkills(Player, {
-- Priest/Druid lines you keep
{id=2463145248, min=1, max=level, message="You have learned the Inspirations skill"}, -- Inspirations
{id=3282420779, min=1, max=level, message="You have learned the Archegenesis skill"}, -- Druid
-- {id=3341842907, min=1, max=level, message="You have learned the Theurgy skill"}, -- omitted (removed below)
-- combat + casting
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- proficiencies
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
{id=1653482350, min=1, max=level, message="You are now more proficient with a Great Hammer"}, -- omitted (removed below)
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (exactly your lists; de-duplicated)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Remove Priest (non-druid lines)
3341842907, -- Theurgy/Cleric
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3343700951, -- Talismans/Shaman
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Remove Mage
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
3177806075, -- Fists
2292577688, -- Great Sword
2954459351, -- Great Axe
2380184628, -- Great Spear
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
545043066, -- Symbol
})
end
-- extracted promotion logic (Qeynos Enchanter)
function PromoteToEnchanterQ(Player)
SetAdventureClass(Player,25)
SendMessage(Player, "Congratulations! You are an Enchanter.","yellow")
SendPopUpMessage(Player, "Congratulations! You are an Enchanter.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved; omit Symbol because you remove it later)
EnsureSkills(Player, {
{id=3820670534, min=1, max=level, message="You have learned the Evocations skill"}, -- Mage
{id=287643040, min=1, max=level, message="You have learned the Enchantments skill"},-- Enchanter
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (exactly your lists; de-duplicated)
RemoveSkills(Player, {
-- Removed Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Removed Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Removed Priest
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3467160477,3191839982,
-- Removed Mage (non-enchanter subclasses)
2898101972,2950599749,2533124061,2662430630,193411854,2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
770311065, -- Mace
3177806075, -- Fists
1696217328, -- Sword
2292577688, -- Great Sword
2954459351, -- Great Axe
1653482350, -- Great Spear
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
545043066, -- Symbol
4037812502, -- Buckler
})
end
-- extracted Qeynos Predator promotion logic
function PromoteToPredatorQ(Player)
SetAdventureClass(Player,38)
SendMessage(Player, "Congratulations! You are a Predator.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Predator.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved; Safe Fall min=31)
EnsureSkills(Player, {
-- scout core
{id=1921433074, min=1, max=level, message="You have learned the Reconnaissance skill"},
{id=3167106577, min=1, max=level, message="You have learned the Stalking skill"},
{id=1468243427, min=1, max=level, message="You have learned the Tracking skill"},
{id=2200201799, min=1, max=level, message="You have learned the Disarm Trap skill"},
{id=3232294366, min=31, max=level, message="You have learned the Safe Fall skill"},
{id=1756482397, min=1, max=level, message="You have learned the Ranged skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"},
{id=1852383242, min=1, max=level, message="You have learned the Dual Wield skill"},
{id=2650425026, min=1, max=level, message="You have learned the Thrown Weapon skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- proficiencies
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=3173504370, min=1, max=level, message="You are now more proficient with a Roundshield"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=1743366740, min=1, max=level, message="You are now more proficient with a Bow"},
{id=2476073427, min=1, max=level, message="You are now more proficient with an Axe"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=641561514, min=1, max=level, message="You are now more proficient with a Rapier"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
{id=1616998748, min=1, max=level, message="You are now more proficient with a Spear"},
})
-- Removals (your lists consolidated & de-duplicated; Spawn→Player fixed)
RemoveSkills(Player, {
-- Remove Fighter for Scout
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Removed Advance Scout (non-Predator scout branches)
1311635100,296246391,340921594,1514256692,2663054519,1519965519,1400160844,2711101135,
-- Removed Priest for Scout
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3343700951,3467160477,3191839982,
-- Removed Mage for Scout
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR / misc
2246237129, -- Medium Armor
241174330, -- Heavy Armor
3177806075, -- Fists
2292577688, -- Great Sword
2954459351, -- Great Axe
1653482350, -- Great Spear
2608320658, -- Kite Shield
570458645, -- Tower Shield
540022425, -- Parry
1553857724, -- Investigation
3429135390, -- Mystical Destruction
366253016, -- Ministration
613995491, -- Disruption
882983852, -- Subjugation
3587918036, -- Ordination
})
end
-- extracted Qeynos Rogue promotion logic
function PromoteToRogueQ(Player)
SetAdventureClass(Player,32)
SendMessage(Player, "Congratulations! You are a Rogue.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Rogue.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved; Safe Fall min=31; Spear omitted to avoid add→remove churn)
EnsureSkills(Player, {
-- Scout core
{id=1921433074, min=1, max=level, message="You have learned the Reconnaissance skill"},
{id=1514256692, min=1, max=level, message="You have learned the Skulldugery skill"},
{id=1468243427, min=1, max=level, message="You have learned the Tracking skill"},
{id=2200201799, min=1, max=level, message="You have learned the Disarm Trap skill"},
{id=3232294366, min=31, max=level, message="You have learned the Safe Fall skill"},
{id=1756482397, min=1, max=level, message="You have learned the Ranged skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"},
{id=1852383242, min=1, max=level, message="You have learned the Dual Wield skill"},
{id=2650425026, min=1, max=level, message="You have learned the Thrown Weapon skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=3173504370, min=1, max=level, message="You are now more proficient with a Roundshield"},
{id=1616998748, min=1, max=level, message="You are now more proficient with a Spear"}, -- omitted
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=1743366740, min=1, max=level, message="You are now more proficient with a Bow"},
{id=2476073427, min=1, max=level, message="You are now more proficient with an Axe"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=641561514, min=1, max=level, message="You are now more proficient with a Rapier"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
})
-- Removals (your lists consolidated & de-duplicated; Spawn→Player fixed)
RemoveSkills(Player, {
-- Remove Fighter for Scout
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Removed Advance Scout (non-Rogue scout branches)
1311635100,296246391,340921594,3167106577,2663054519,1519965519,1400160844,2711101135,
-- Removed Priest for Scout
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3343700951,3467160477,3191839982,
-- Removed Mage for Scout
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR / misc
2246237129, -- Medium Armor
241174330, -- Heavy Armor
3177806075, -- Fists
2292577688, -- Great Sword
2954459351, -- Great Axe
1653482350, -- Great Spear
2608320658, -- Kite Shield
570458645, -- Tower Shield
540022425, -- Parry
1553857724, -- Investigation
3429135390, -- Mystical Destruction
366253016, -- Ministration
613995491, -- Disruption
882983852, -- Subjugation
3587918036, -- Ordination
})
end
-- extracted Qeynos Shaman promotion logic
function PromoteToShamanQ(Player)
SetAdventureClass(Player,18)
SendMessage(Player, "Congratulations! You are a Shaman.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Shaman.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved)
EnsureSkills(Player, {
-- priest/shaman lines
{id=2463145248, min=1, max=level, message="You have learned the Inspirations skill"}, -- Inspirations
{id=3343700951, min=1, max=level, message="You have learned the Talismans skill"}, -- Shaman
-- combat + casting
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- proficiencies
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=1616998748, min=1, max=level, message="You are now more proficient with a Spear"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
{id=1653482350, min=1, max=level, message="You are now more proficient with a Great Hammer"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (consolidated; Great Spear corrected to 2380184628)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Remove Priest (non-shaman lines)
3341842907, -- Theurgy/Cleric
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3282420779, -- Archegenesis/Druid
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Remove Mage
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
3177806075, -- Fists
2292577688, -- Great Sword
2954459351, -- Great Axe
2380184628, -- Great Spear (corrected)
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
545043066, -- Symbol
})
end
-- extracted promotion logic (Qeynos Sorcerer)
function PromoteToSorcererQ(Player)
SetAdventureClass(Player,22)
SendMessage(Player, "Congratulations! You are a Sorcerer.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Sorcerer.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved)
EnsureSkills(Player, {
{id=3820670534, min=1, max=level, message="You have learned the Evocations skill"}, -- Mage
{id=2533124061, min=1, max=level, message="You have learned the Sorcery skill"}, -- Sorcerer
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies
{id=545043066, min=1, max=level, message="You are now more proficient with a Symbol"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (consolidated & deduped; Great Spear corrected)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Remove Priest
2463145248, -- Inspirations/Priest (fixed Spawn->Player)
3341842907, -- Theurgy/Cleric
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3282420779, -- Archegenesis/Druid
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Remove Mage (non-sorcerer subclasses)
287643040, -- Enchantments/Enchanter
2898101972, -- Hallucinations/Illusionist
2950599749, -- Protean/Coercer
2662430630, -- Elemental Mastery/Wizard
193411854, -- Noctivagance/Warlock
2120065377, -- Legerdemain/Summoner
2042842194, -- Conjurations/Conjurer
289471519, -- Sepulchers/Necromancer
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
770311065, -- Mace
3177806075, -- Fists
1696217328, -- Sword
2292577688, -- Great Sword
2954459351, -- Great Axe
2380184628, -- Great Spear (correct)
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
4037812502, -- Buckler
})
end
-- extracted promotion logic (Qeynos Summoner)
function PromoteToSummonerQ(Player)
SetAdventureClass(Player,28)
SendMessage(Player, "Congratulations! You are a Summoner.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Summoner.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved)
EnsureSkills(Player, {
{id=3820670534, min=1, max=level, message="You have learned the Evocations skill"}, -- Mage
{id=2120065377, min=1, max=level, message="You have learned the Legerdemain skill"}, -- Summoner
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=613995491, min=1, max=level, message="You have learned the Disruption skill"},
{id=366253016, min=1, max=level, message="You have learned the Ministration skill"},
{id=3587918036, min=1, max=level, message="You have learned the Ordination skill"},
{id=882983852, min=1, max=level, message="You have learned the Subjugation skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- Proficiencies (you keep these)
{id=545043066, min=1, max=level, message="You are now more proficient with a Symbol"},
{id=887279616, min=1, max=level, message="You are now more proficient with a Dagger"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
})
-- Removals (consolidated & deduped; Great Spear set to 2380184628; Spawn->Player fixed)
RemoveSkills(Player, {
-- Remove Fighter
1408356869,1124719197,433335062,1209716810,3856706740,2011726342,3067436248,
3809066846,90523872,2741805322,
-- Remove Scout
1921433074,1311635100,296246391,340921594,1514256692,3167106577,2663054519,
1519965519,1400160844,2711101135,
-- Remove Priest
2463145248, -- Inspirations/Priest (fixed to Player)
3341842907, -- Theurgy/Cleric
2581053277, -- Regimens/Templar
1829443087, -- Inquisitions/Inquisitor
3282420779, -- Archegenesis/Druid
1624274802, -- Nature's Reckoning/Fury
1040683335, -- Nature's Refuge/Warden
3467160477, -- Fetichisms/Mystic
3191839982, -- Vehemence/Defiler
-- Remove Mage (non-summoner subclasses)
287643040, -- Enchantments/Enchanter
2898101972, -- Hallucinations/Illusionist
2950599749, -- Protean/Coercer
2533124061, -- Sorcery/Sorcerer
2662430630, -- Elemental Mastery/Wizard
193411854, -- Noctivagance/Warlock
2042842194, -- Conjurations/Conjurer
289471519, -- Sepulchers/Necromancer
-- REMOVE WEAPON / ARMOR
2246237129, -- Medium Armor
241174330, -- Heavy Armor
770311065, -- Mace
3177806075, -- Fists
1696217328, -- Sword
2292577688, -- Great Sword
2954459351, -- Great Axe
2380184628, -- Great Spear (correct)
3173504370, -- Round Shield
2608320658, -- Kite Shield
570458645, -- Tower Shield
4037812502, -- Buckler
})
end
-- extracted promotion logic (Qeynos Warrior)
function PromoteToWarriorQ(Player)
SetAdventureClass(Player,2)
SendMessage(Player, "Congratulations! You are a Warrior.","yellow")
SendPopUpMessage(Player, "Congratulations! You are a Warrior.",250,250,200)
ApplySpellVisual(Player, 324)
PlaySound(Player, "sounds/test/endquest.wav", GetX(Player), GetY(Player), GetZ(Player), Player)
local level = GetLevel(Player) * 5
-- Adds (messages preserved)
EnsureSkills(Player, {
-- core
{id=1408356869, min=1, max=level, message="You have learned the Martial skill"},
{id=1124719197, min=1, max=level, message="You have learned the Tactics skill"},
{id=3421494576, min=1, max=level, message="You have learned the Crushing skill"},
{id=418532101, min=1, max=level, message="You have learned the Slashing skill"},
{id=1756482397, min=1, max=level, message="You have learned the Ranged skill"},
{id=2650425026, min=1, max=level, message="You have learned the Thrown Weapon skill"},
{id=3048574950, min=1, max=level, message="You have learned the Piercing skill"},
{id=1852383242, min=1, max=level, message="You have learned the Dual Wield skill"},
{id=2638198038, min=1, max=level, message="You have learned the Focus skill"},
-- proficiencies
{id=2897193374, min=1, max=level, message="You are now more proficient with Light Armor"},
{id=2246237129, min=1, max=level, message="You are now more proficient with Medium Armor"},
{id=1743366740, min=1, max=level, message="You are now more proficient with a Bow"},
{id=4037812502, min=1, max=level, message="You are now more proficient with a Buckler"},
{id=3173504370, min=1, max=level, message="You are now more proficient with a Roundshield"},
{id=2476073427, min=1, max=level, message="You are now more proficient with an Axe"},
{id=2954459351, min=1, max=level, message="You are now more proficient with a Great Axe"},
{id=1696217328, min=1, max=level, message="You are now more proficient with a Sword"},
{id=2292577688, min=1, max=level, message="You are now more proficient with a Great Sword"},
{id=770311065, min=1, max=level, message="You are now more proficient with a Mace"},
{id=554333641, min=1, max=level, message="You are now more proficient with a Hammer"},
{id=1653482350, min=1, max=level, message="You are now more proficient with a Great Hammer"},
{id=3180399725, min=1, max=level, message="You are now more proficient with a Staff"},
{id=641561514, min=1, max=level, message="You are now more proficient with a Rapier"},
{id=1616998748, min=1, max=level, message="You are now more proficient with a Spear"},
{id=570458645, min=1, max=level, message="You are now more proficient with a Tower Shield"},
{id=2608320658, min=1, max=level, message="You are now more proficient with a Kite Shield"},
})
-- Removals (consolidated & de-duplicated)
RemoveSkills(Player, {
-- Removed Advanced Fighter branches (non-Warrior)
433335062, -- Berserk/Berserker
1209716810, -- Protection/Guardian
3856706740, -- Brawl/Brawling
2011726342, -- Tranquility/Monk
3067436248, -- Physicality/Bruiser
3809066846, -- Faith/Crusader
90523872, -- Determined Faith/Paladin
2741805322, -- Determined Zeal/Shadowknight
-- Removed Scout for Fighter
1921433074,1311635100,296246391,340921594,1514256692,2663054519,1519965519,
3167106577,1400160844,2711101135,
-- Removed Priest for Fighter
2463145248,3341842907,2581053277,1829443087,3282420779,1624274802,1040683335,
3343700951,3467160477,3191839982,
-- Removed Mage for Fighter
3820670534,287643040,2898101972,2950599749,2533124061,2662430630,193411854,
2120065377,2042842194,289471519,
-- REMOVE WEAPON / ARMOR / misc
540022425, -- Parry
241174330, -- Heavy Armor
3177806075, -- Fists
1553857724, -- Investigation
3429135390, -- Mystical Destruction
2200201799, -- Disarm Trap
366253016, -- Ministration
613995491, -- Disruption
882983852, -- Subjugation
3587918036, -- Ordination
})
end
------------------------------
-- Helpers
------------------------------
function EnsureSkills(Player, skills)
for _, s in ipairs(skills) do
if not HasSkill(Player, s.id) then
AddSkill(Player, s.id, s.min, s.max)
if s.message ~= nil then
SendMessage(Player, s.message)
end
end
end
end
function RemoveSkills(Player, skill_ids)
for _, id in ipairs(skill_ids) do
if HasSkill(Player, id) then
RemoveSkill(Player, id)
end
end
end