• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!
  • ✅ The POLL for Hive's Texturing Contest #34 is OPEN! Vote for the TOP 3 SKINS! 🔗Click here to cast your vote!
  • ✅ The POLL for Hive's Techtree Contest #20 is OPEN! Vote for the TOP 3 FACTIONS! 🔗Click here to cast your vote!

Hero Line Wars RoC v6.5

Hero Line Wars RoC v6.5
by bi_a_op




Introduction
Hero Line Wars RoC was a project that lasted from 2005 to 2010, based on the classic HLW map by Rubberneck. The German mapmakers, Kueken and froggygoggy, preferred Reign of Chaos over TFT and created a dedicated HLW map just for RoC. This map still sees a lot of daily play, with a very loyal playerbase that swears by this version of HLW over the others. The latest official release was 5.3b in 2010. Since then we've seen a number of cheated versions, rogue versions, and versions patched for Reforged. That's why there's a jump in the version number from 5.3b to 6.3 with this release.

There are bigger plans in the works, but this release focuses primarily on QoL improvements. Most of the work has gone into tooltips, hotkeys, icons and spell effects. As well as some bug fixes and performance tweaks. I have deliberately not made any balance changes in this release, except for a few instances I believed to be genuine oversights by the original authors. The goal of this release is to give HLW RoC a modernized look and fix spells and items that haven't functioned properly for 15 years, without sacrificing the nostalgia.




Spell Tooltips
One of the issues with HLW RoC is the overall difficulty. In 5.2, Kueken made Tier 1 creeps significantly stronger. Combined with the old tooltips system, this punished new players even further and often drove people away before they learned the map. The updated tooltips are designed to provide some extra clarity for the player, and lessen confusion during the challenging early game. It is now much clearer which spells deal damage and which are passive or support spells.

merged-water-learn.png



Item Tooltips
Item tooltips used to be inconsistent and cluttered, so they’ve been redesigned to be clearer and to the point. Buying items is often far superior to buying stats, yet most players still resort to buying stats. Hopefully the new tooltips make it clearer that buying items generally outperforms buying stats.

merged-glacier.png


merged-thor.png



Icon Borders
Proper icon borders have been added to spells and items, making passives and autocasts easy to identify at a glance.

merged-passive.png



Select modes
A variety of game modes already existed, but without proper on-screen information most players never even knew they existed. Game mode selection has now moved to a dialog menu, and chosen modes are displayed to all players. This makes setup smoother and also ensures all players are aware of the available modes.

0111-1-5.gif



Changelog
Released: 25.05.2026
General Changes:
• [QoL] Upgrading to Tier 3 creeps now auto-select the creep building, matching Tier 1 and 2 behavior
• [UI] Removed mana costs from spell tooltips to reduce clutter
• [UI] Corrected spelling errors


Hero Changes:
Aya Sunstrider - Disciple of the Phoenix
• [QoL] Fire Storm can no longer be cancelled if you issue an order too soon after casting

Bulwar - Razormane
• [Bug Fix] Fixed an issue preventing Confuse from creating an illusion

Rukhor - Water Brood
• [Bug Fix] Fixed an issue where Breed Water would not spawn a breedling on high hp enemies
Released: 10.01.2025
General Changes:
• [QoL] Changed hotkeys for all spells, items and creeps to correspond with a QWER layout
• [QoL] Added dialog options to pick gamemodes
• [QoL] Added the following commands:

-commands or -? for a list of chat commands
-modes or -i to display the current game modes
-r now also works for -random
-tip off or -to to turn off tips
-tip on to turn them on again
-clear or -c to clear all onscreen DisplayText
• [QoL] Increased the camera pan speed after hero selection
• [QoL] Camera now pans to the hero on respawn after death
• [QoL] Increased the default zoom distance 1650 → 1750
• [UI] Fixed tooltips to reflect changes made from 5.0 to 5.3b
• [UI] Formatted all tooltips for better clarity and color contrasts
• [UI] Removed DisplayText income message to reduce clutter. Income is already displayed on the multiboard
• [UI] Removed DisplayText intro message to reduce clutter
• [UI] Added a warning message informing the player that Shrine kills does not grant gold
• [UI] Increased the Quest (F9) text description area
• [UI] Changed shrine spell positions
• [UI] Changed Level 120 Blink icon Summon → Blink
• [Performance] Replaced multiboard BJ wrappers with natives
• [Bug Fix] Fixed an issue where entering the lake could trigger Bebi to spawn from any unit instead of only Souls


Hero Changes:

Alma - Psychotic Child
• [QoL] Psy Storm can no longer be cancelled if you issue an order too soon after casting
• [UI] Changed Psychic Shield icon Animate Dead → BTNNatureBarrierSphere


Andorath - Dark Lord

• [UI] Added passive icon border to Rising Energy

Arashicage - Blademaster

• [UI] Renamed Blademaster Fighting Style changed → Blademasters Discipline
• [UI] Added autocast icon border to Krush Varrok
• [UI] Added passive icon border to Blademaster Discipline


Ashrok - Barbarian

• [UI] Renamed Seismic Slam → Seismic Wave to better reflect the spell's behaviour
• [UI] Added passive icon border to Rampage
• [Performance] Removed TerrainDeformRipple from Leap and Ground Stomp


Aya Sunstrider - Disciple of the Phoenix

• [UI] Added passive icon border to Mirradon Flame

Azorian - Heretic

• [UI] Changed Unstable Concoction icon Earthquake → Burning Oil
• [UI] Changed Cloud buff icon to match its spell icon
• [UI] Changed Restoration buff to match its spell icon


Balnazzar - Diabolist

• [Performance] Removed TerrainWobble on Sonic Slam
• [Bug Fix] Rain of Fire now properly renders on targets


Bor Stoneshaker - Tauren Soldier

• [QoL] Torch now has a lower cast time to reduce interruption while in combat
• [UI] Changed War Cry buff icon to match its spell icon
• [UI] Added passive icon border to Crushing Blow
• [UI] Added passive icon border to Spell Shield
• [UI] Added autocast icon border to Torch
• [Bug Fix] Fixed an issue where Torch would not autocast beyond the first cast


Brelon - Arcane Watcher

• [UI] Renamed the hero name Brelon the Mystical → Brelon
• [UI] Added passive icon border to Hardened Skin
• [UI] Added button icon border to Arcane Rift


Bulwar - Razormane

• [UI] Changed spell positions
• [UI] Added passive icon border to Confuse
• [Performance] Confusion no longer causes memory leaks


Coone Lightweaver - Warrior of the Elements

• [Visual] Added a visual effect to Twisters while the spell is active
• [UI] Added passive icon border to Stone Skin
• [Bug Fix] Fixed an issue where Twisters would sometimes end too soon


Dalvengyr - Demon Lord

• [UI] Added passive icon border to Chaos
• [Bug Fix] Fixed an issue where Fury would decrease the Demon Lord's armor


Deriac - Defiler

• [UI] Added passive icon border to Enraged

Eldin Sunstrider - Bloodmage

• [Visual] Added sound and visual effects to Soul Extraction
• [UI] Added passive icon border to Multishot
• [Performance] Disabled a leaky trigger which toggled the missile attachment on the Bloodmage's staff on and off on attack
• [Bug Fix] Fixed an issue where Lightmare level 1 and 2 units would not render


Furion - Keeper of the Grove

• [UI] Renamed Evil Energies → Evil Energy

Granis - Revenant

• [UI] Renamed Activate Lightning Storm → Lightning Storm
• [UI] Added passive icon border to Guard


Ishtir Anam - SoulStealer

• [UI] Changed spell positions
• [UI] Added passive icon border to Soul Steal and Absorption
• [Performance] Unleash Souls no longer cause memory leaks
• [Performance] Removed TerrainDeformRipple from Unleash Souls


Jaina - Archmage

• [Balance] Meditation passive now properly scales with all eligible spells

John Preston - Grammaton Cleric

• [QoL] Gunkata can now be learned and cast while in melee mode
• [QoL] Evasion during Gunkata now shows as buff instead of ability
• [UI] Changed spell positions
• [UI] Switch Weapon is now named the same everywhere
• [UI] Changed Weapon Switch icon Refined Gunpowder → Black Gunpowder, to better distinguish it from Gunkata
• [UI] Added passive icon border to Melee Attack
• [UI] Added passive icon border to Ranged Attack


Kishiren - Dragonhawk

• [UI] Added passive icon border to Flame Consumption
• [Bug Fix] Fixed an issue where Eternal Focus would decrease the Dragonhawk's armor


Lord Darkscythe - Death Knight

• [Bug Fix] Removed the looping sound effect on the hero

Lyra - Forest Guardian

• [UI] Renamed Summon Trees → Summon Treant
• [UI] Renamed Eat Tree → Eat Treant, and changed the icon Pulverize → Eat Tree
• [UI] Renamed Revenge of Nature → Nature's Revenge, and changed the icon Eat Tree → Orb of Death
• [UI] Renamed Fairy → Faerie Twilight, and changed the icon Circle of Power → Elune's Grace
• [UI] Changed spell positions
• [UI] Added passive icon border to Nature Enhanced Spears
• [Performance] Summon Treant no longer cause memory leaks
• [Bug Fix] Fixed an issue where Forest Guardian's missile would linger after impact


Mal Sen - Apparition

• [UI] Added passive icon border to Replica Master
• [UI] Added passive icon border to Brilliance


Maratec - Ancestor

• [QoL] Support Trap now autocasts Cripple on valid targets, prioritizing higher health targets
• [QoL] Support Trap now autocasts Heal and Inner Fire, prioritizing the Ancestor
• [UI] Added autocast icon border to Firebolt


Mave Whisperwind - Priestess of the Moon

• [UI] Renamed Sentinel → Summon Sentinel

Orthac - Ghost Rider

• [Audio] Added sound effects to Thrust and Satanic Fury
• [UI] Added passive icon border to Percussion


Reska Thul - Sasquatch Psyker

• [UI] Renamed Mental Disorder → Mental Shock, to avoid confusion with Mental Disruption
• [UI] Changed Mental Shock icon Chain Lightning → BTNStormSphere
• [UI] Changed Mental Disruption icon Banshee → BTNShadowCore
• [UI] Changed Mental Ignition icon Advanced Unholy Strength → BTNDemonicBolt
• [UI] Changed spell positions
• [Bug Fix] Fixed an issue where Mental Disruption's effect would not apply at low attack speeds


Romegas - Chevalier

• [UI] Added passive icon border to Divine Aura and Divine Shield

Rukhor - Water Brood

• [UI] Added passive icon border to Multishot
• [UI] Added passive icon border to Frost Armor


Seraphim - Thunder of Sereish

• [Visual] Added a visual effect to units damaged by Heaven’s Light
• [UI] The passive ability associated with BFG is now hidden while BFG is active
• [UI] Added passive icon border to Spell Blocker, Agility and Light Shield


Shadowsong - Demon Hunter

• [UI] Renamed Metamorph → Metamorphosis
• [Balance] Increased Metamorphosis lvl 1 damage 0 → 50
• [Bug Fix] Fixed an issue where Metamorphosis would decrease the Demon Hunter's armor


Shalis Darkhunter - Warden

• [UI] Added a buff status to Night Runners armor debuff to show on the affected target
• [UI] Added passive icon border to Lightning Attack
• [UI] Added button icon border to Shuriken Toss
• [Bug Fix] Nightmare sound effect no longer loops infinitely, and only triggers on attack


Shidaya - Frozen Phantom

• [Balance] Changed spell damage types normal → magic

Snibble - Murloc Mystic

• [UI] Changed Charge icon Unholy Strength → BTNPowerElectric

Spawn - Hellspawn

• [UI] Changed Blade Fist icon Claws of Attack → Vorpal Blade
• [UI] Changed Doom Regeneration icon Health Potion → Rejuvenation Potion
• [UI] Changed Hell Chains icon Thorns Aura → BTNMoonChains
• [UI] Added passive icon border to Knockback


The Summoner - Medivh

• [QoL] Acolytes Freak Out now autocasts on valid targets
• [UI] Renamed Acolytes Freak out! → Freak Out
• [UI] Fixed some typos in spell names
• [UI] Changed spell positions
• [UI] Added button icon border to Poison Incarnation


Sylvanas Windrunner - Dark Ranger

• [Bug Fix] Fixed an issue where Nightmare level 9 and 10 units would not render
• [Bug Fix] Nightmare level 9 and 10 unit sounds no longer loops infinitely


Trapec - Gnoll Master

• [Visual] Added a visual effect to Shades to properly visualize their AoE damage on death
• [UI] Changed hero icon Gnoll → Gnoll Warden, to better match the characters purple model color
• [UI] Added passive icon border to Gnoll Mastery
• [Performance] Mine and Shade no longer cause memory leaks
• [Bug Fix] Deflect now properly scales with Gnoll Mastery


Creeps

• [UI] Changed spell positions for Sentinel
• [UI] Changed spell positions for Teddy
• [UI] Changed spell positions for Chaos Mage
• [UI] Added passive icon border to Leak Aura for Shredder
• [UI] Added passive icon border to Rage Aura for Archmage
• [UI] Added passive icon border to Cleaving Attack, Demonic Aura for Teddy
• [Bug Fix] Fixed an issue where some visual effects would not render properly on Light (Light level 1 creep)


Items

• [Visual] Added a visual effect and TextTag when Fury Claws damage block triggers
• [Visual] Added a visual effect and TextTag when Lightning Shield spell block triggers
• [QoL] Antimagic Potion is now sold in stacks of 2
• [UI] Changed Gargoyle Wings name and icon to Blink Boots to better reflect its function
• [UI] Changed Blessed Orb name and icon to Blessed Branch of Stats to avoid it being mistaken for an orb item
• [UI] Changed Forbidden Circlet buff icon to match the item icon
• [UI] Added button icon border to Poison Sword
• [Bug Fix] Blink Boots (formerly Gargoyle Wings) now properly teleports the player to the shops



Credits

Tarrasque - Demon Knight model, Katana model, UndeadWarlock model
JetFangInferno - Dark Lightning Nova effect model
Kimbo - Hydralisk Revised model
shadow1500 - StaffByShadow1500 model
Kitabatake - Pistol model
assasin_lord - HeroGlow model
Golden-Drake - BTNMoonChains icon
mortal - BTNPowerElectric icon
JollyD - BTNNatureBarrierSphere icon
Darkfang - BTNStormSphere icon, BTNShadowCore icon, BTNDemonicBolt icon
grim001 - AutoIndex
Cohadar - PUI
Vexorian - XE Libraries, TimerUtils, BoundSentinel
wrda - Help with script and triggers
Mayday - Quest dialog mod
TESCAO - Special thanks

With permission from the original authors Kueken and froggygoggy.
permission_proof2-png.568907
Contents

Hero Line Wars RoC v6.5 (Map)

Reviews
deepstrasz
A nice update and maintenance version. Approved. If you want more reviews, you should participate in the The Grand Review Exchange! R U L E S Site Rules Map Submission Rules M A P - D E S C R I P T I O N BB CODES BB Codes | HIVE MELEE MAPS...
A nice update and maintenance version.
Approved.


If you want more reviews, you should participate in the The Grand Review Exchange!

R U L E S

Site Rules
Map Submission Rules

M A P - D E S C R I P T I O N
BB CODES
BB Codes | HIVE

MELEE MAPS
Description Guide - Melee Maps
Describing Your Melee Map
Melee Map Description Generator v1.3


MAPS IN GENERAL
The importance of a Description
Description Guide - Maps
Map Thread Guide
Map Description Making: Good & Bad
Map Description - Templates
Map Description Generator [1.2]

How to Add a Screenshot to your Map Description


ADDITIONAL NECESSARY INFORMATION
  • A credits list in the map thread description is required where the names of the resource (models, skins, icons, spells, sound etc.) authors are mentioned along with the specific resource. It would be a luxury to have links leading to the used resources. Credits in the Quest Log would be appreciated too.
  • A detailed changelog in the first post would be helpful to reviewers and notify fans about the newest implementations to your map.
  • Map thread tags are important. Please use those that fit and not more or none.


M A P - C R E A T I O N - G U I D E S

If you're not satisfied with the review and wish another opinion, contact the other reviewers or use the staff contact:
https://www.hiveworkshop.com/forums/staff-contact.692/
 
A nice update and maintenance version.
Approved.


If you want more reviews, you should participate in the The Grand Review Exchange!

R U L E S

Site Rules
Map Submission Rules

M A P - D E S C R I P T I O N
BB CODES
BB Codes | HIVE

MELEE MAPS
Description Guide - Melee Maps
Describing Your Melee Map
Melee Map Description Generator v1.3


MAPS IN GENERAL
The importance of a Description
Description Guide - Maps
Map Thread Guide
Map Description Making: Good & Bad
Map Description - Templates
Map Description Generator [1.2]

How to Add a Screenshot to your Map Description


ADDITIONAL NECESSARY INFORMATION
  • A credits list in the map thread description is required where the names of the resource (models, skins, icons, spells, sound etc.) authors are mentioned along with the specific resource. It would be a luxury to have links leading to the used resources. Credits in the Quest Log would be appreciated too.
  • A detailed changelog in the first post would be helpful to reviewers and notify fans about the newest implementations to your map.
  • Map thread tags are important. Please use those that fit and not more or none.


M A P - C R E A T I O N - G U I D E S

If you're not satisfied with the review and wish another opinion, contact the other reviewers or use the staff contact:
https://www.hiveworkshop.com/forums/staff-contact.692/
This is a dump, I would recommend Rejected

It's getting worse every year, have you noticed that?Lition was a good version, but it hasn't been updated in a while.
This version is slightly better, but it's the worst of all BuuFuu games. Starting with version 8, it's been so badly messed up that it's practically unplayable. What happens there is hardly adequate.
 
Last edited:
This is a dump, I would recommend Rejected

It's getting worse every year, have you noticed that?Liton was a good version, but it hasn't been updated in a while.
Could you elaborate? I think you're getting HLW RoC mixed up with BuuFuu's versions released in recent years called HLW 8.4 right now. Which is Lition with a 5 second income.

HLW RoC is a different version entirely and was last updated in 2010.
 
Could you elaborate? I think you're getting HLW RoC mixed up with BuuFuu's versions released in recent years called HLW 8.4 right now. Which is Lition with a 5 second income.

HLW RoC is a different version entirely and was last updated in 2010.
You look at what they post, here this version is recorded as 6.3, but in the game the card called 6.3 is displayed as 6.0
 
I'm not gonna argue that. I think it's quite terrible.
Infinite gold, constant sending, 100 million in all stats, no items.

Do you have any suggestions on what to improve on HLW RoC?

I know how to make mobs send automatically, send me the source map in a private message
By the way, in ETS Starlight, which I'm currently working on, creeps move automatically. Did you know that's convenient?

Yes, what I don't like most is the constant sending, it's sad
 
Last edited:
I know how to make mobs send automatically, send me the source map in a private message
By the way, in ETS Starlight, which I'm currently working on, creeps move automatically. Did you know that's convenient?

Yes, what I don't like most is the constant sending, it's sad
It sounds like you haven't played HLW RoC yet. Mobs already move automatically when they spawn. And I don't think automatic sending would fit in this game mode.
 
It sounds like you haven't played HLW RoC yet. Mobs already move automatically when they spawn. And I don't think automatic sending would fit in this game mode.
'll be going to 6.3 a little later, I probably downloaded the old version 6.0.

I checked, you still send creeps through the purchase in the house, each click was = 1 sent creep, I can improve this so that they leave automatically when clicked and when clicked again they would stop leaving.
 
Last edited:
I checked, you still send creeps through the purchase in the house, each click was = 1 sent creep, I can improve this so that they leave automatically when clicked and when clicked again they would stop leaving.
I understand. But I don't think that kind of feature would fit this map. You're not supposed to spam mindlessly just to empty your bank for the sake of gaining income. You should send strategically based on the abilities that the creeps have, your opponents heroes and choose carefully. At any rate, even if spamming mindlessly, the amount of button presses you need to empty your bank is relatively low. You'd never reach a point where this feature would be needed.
 
I understand. But I don't think that kind of feature would fit this map. You're not supposed to spam mindlessly just to empty your bank for the sake of gaining income. You should send strategically based on the abilities that the creeps have, your opponents heroes and choose carefully. At any rate, even if spamming mindlessly, the amount of button presses you need to empty your bank is relatively low. You'd never reach a point where this feature would be needed.
I noticed that you fixed the blizzard error in the box task, this is already interesting, could you share how to do this?
 

Attachments

  • bandicam 2026-04-28 22-51-19-847.mp4
    7.3 MB
I noticed that you fixed the blizzard error in the box task, this is already interesting, could you share how to do this?
Mayday fixed it for me.
JASS:
scope QuestTextResize initializer init

    private function main takes nothing returns nothing
    call BlzFrameClick(BlzGetFrameByName("UpperButtonBarQuestsButton", 0))
        call ForceUICancel()
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplay", 0), FRAMEPOINT_TOPLEFT, BlzGetFrameByName("QuestDetailsTitle", 0), FRAMEPOINT_BOTTOMLEFT, 0.003, -0.003)
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplay", 0), FRAMEPOINT_BOTTOMRIGHT, BlzGetFrameByName("QuestDisplayBackdrop", 0), FRAMEPOINT_BOTTOMRIGHT, -0.003, 0.)
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplayBackdrop", 0), FRAMEPOINT_BOTTOM, BlzGetFrameByName("QuestBackdrop", 0), FRAMEPOINT_BOTTOM, 0., 0.017)
        call BlzFrameClearAllPoints(BlzGetFrameByName("QuestAcceptButton", 0))
        call BlzFrameSetPoint(BlzGetFrameByName("QuestAcceptButton", 0), FRAMEPOINT_TOPRIGHT, BlzGetFrameByName("QuestBackdrop", 0), FRAMEPOINT_TOPRIGHT, -0.016, -0.016)
        call BlzFrameSetText(BlzGetFrameByName("QuestAcceptButton", 0), "×")
        call BlzFrameSetSize(BlzGetFrameByName("QuestAcceptButton", 0), 0.03, 0.03)
    endfunction

    private function init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterTimerEventSingle(t, 0.03)
        call TriggerAddAction(t, function main)
        set t = null
    endfunction
endscope

Here is the trigger for -lvl max command.
JASS:
function Trig_lvl_Func007C takes nothing returns boolean
    if ( ( GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD) > 20000 ) ) then
        return true
    endif
    if ( ( GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER) > 0 ) ) then
        return true
    endif
    return false
endfunction

function Trig_lvl_Conditions takes nothing returns boolean
    if ( not Trig_lvl_Func007C() ) then
        return false
    endif
    if ( not ( GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) < 120 ) ) then
        return false
    endif
    return true
endfunction


function Trig_lvl_Actions takes nothing returns nothing
    local integer lvl
    local integer lvl2
    local integer gold = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD)
    local integer lumber = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER)
    local integer input = S2I(SubStringBJ(GetEventPlayerChatString(), 5, 99))
    if (input > 5) then
        if (input/5>lumber) then
                set lvl = ModuloInteger(input, 5)+5              
            else
                set lvl = ModuloInteger(input, 5)
        endif
        set lvl2 = (input - lvl)
    else
        set lvl2=0
        set lvl = input
    endif
    if (GetEventPlayerChatString() == "-lvl max" or input >= gold/20000+lumber*5 ) then
        set lvl = ( gold / 20000 )
        set lvl2 = ( lumber * 5 )
    endif
    if ( ( ( lvl + lvl2 ) + GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) ) > 120 ) then
        set lvl2 = ( ( 120 - lvl ) - GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) )
        call AdjustPlayerStateBJ( ( lvl2 / -5 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER )
        call AdjustPlayerStateBJ( ( lvl * -20000 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD )
    else
        call AdjustPlayerStateBJ( ( lvl2 / -5 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER )
        call AdjustPlayerStateBJ( ( lvl * -20000 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD )
    endif
    set lvl = ( lvl + lvl2 )
    call DisplayTextToPlayer( GetTriggerPlayer(), 0,0,( "|CFF00A99DYour hero gained |CFFED145B" + ( I2S(lvl) + " levels|CFF00A99D!" ) ) )
    call SetHeroLevel( udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())], ( GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) + lvl ), true )
endfunction

//===========================================================================
function InitTrig_lvl takes nothing returns nothing
    local integer i = 2
    set gg_trg_lvl = CreateTrigger(  )
    loop
       exitwhen(i>11)
       call TriggerRegisterPlayerChatEvent( gg_trg_lvl , Player(i), "-lvl ", false )
    set i=i+1
    endloop
    call TriggerAddCondition( gg_trg_lvl, Condition( function Trig_lvl_Conditions ) )
    call TriggerAddAction( gg_trg_lvl, function Trig_lvl_Actions )
endfunction
 
Mayday fixed it for me.
JASS:
scope QuestTextResize initializer init

    private function main takes nothing returns nothing
    call BlzFrameClick(BlzGetFrameByName("UpperButtonBarQuestsButton", 0))
        call ForceUICancel()
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplay", 0), FRAMEPOINT_TOPLEFT, BlzGetFrameByName("QuestDetailsTitle", 0), FRAMEPOINT_BOTTOMLEFT, 0.003, -0.003)
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplay", 0), FRAMEPOINT_BOTTOMRIGHT, BlzGetFrameByName("QuestDisplayBackdrop", 0), FRAMEPOINT_BOTTOMRIGHT, -0.003, 0.)
        call BlzFrameSetPoint(BlzGetFrameByName("QuestDisplayBackdrop", 0), FRAMEPOINT_BOTTOM, BlzGetFrameByName("QuestBackdrop", 0), FRAMEPOINT_BOTTOM, 0., 0.017)
        call BlzFrameClearAllPoints(BlzGetFrameByName("QuestAcceptButton", 0))
        call BlzFrameSetPoint(BlzGetFrameByName("QuestAcceptButton", 0), FRAMEPOINT_TOPRIGHT, BlzGetFrameByName("QuestBackdrop", 0), FRAMEPOINT_TOPRIGHT, -0.016, -0.016)
        call BlzFrameSetText(BlzGetFrameByName("QuestAcceptButton", 0), "×")
        call BlzFrameSetSize(BlzGetFrameByName("QuestAcceptButton", 0), 0.03, 0.03)
    endfunction

    private function init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterTimerEventSingle(t, 0.03)
        call TriggerAddAction(t, function main)
        set t = null
    endfunction
endscope

Here is the trigger for -lvl max command.
JASS:
function Trig_lvl_Func007C takes nothing returns boolean
    if ( ( GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD) > 20000 ) ) then
        return true
    endif
    if ( ( GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER) > 0 ) ) then
        return true
    endif
    return false
endfunction

function Trig_lvl_Conditions takes nothing returns boolean
    if ( not Trig_lvl_Func007C() ) then
        return false
    endif
    if ( not ( GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) < 120 ) ) then
        return false
    endif
    return true
endfunction


function Trig_lvl_Actions takes nothing returns nothing
    local integer lvl
    local integer lvl2
    local integer gold = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD)
    local integer lumber = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER)
    local integer input = S2I(SubStringBJ(GetEventPlayerChatString(), 5, 99))
    if (input > 5) then
        if (input/5>lumber) then
                set lvl = ModuloInteger(input, 5)+5           
            else
                set lvl = ModuloInteger(input, 5)
        endif
        set lvl2 = (input - lvl)
    else
        set lvl2=0
        set lvl = input
    endif
    if (GetEventPlayerChatString() == "-lvl max" or input >= gold/20000+lumber*5 ) then
        set lvl = ( gold / 20000 )
        set lvl2 = ( lumber * 5 )
    endif
    if ( ( ( lvl + lvl2 ) + GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) ) > 120 ) then
        set lvl2 = ( ( 120 - lvl ) - GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) )
        call AdjustPlayerStateBJ( ( lvl2 / -5 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER )
        call AdjustPlayerStateBJ( ( lvl * -20000 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD )
    else
        call AdjustPlayerStateBJ( ( lvl2 / -5 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER )
        call AdjustPlayerStateBJ( ( lvl * -20000 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD )
    endif
    set lvl = ( lvl + lvl2 )
    call DisplayTextToPlayer( GetTriggerPlayer(), 0,0,( "|CFF00A99DYour hero gained |CFFED145B" + ( I2S(lvl) + " levels|CFF00A99D!" ) ) )
    call SetHeroLevel( udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())], ( GetHeroLevel(udg_PlayerHero[GetConvertedPlayerId(GetTriggerPlayer())]) + lvl ), true )
endfunction

//===========================================================================
function InitTrig_lvl takes nothing returns nothing
    local integer i = 2
    set gg_trg_lvl = CreateTrigger(  )
    loop
       exitwhen(i>11)
       call TriggerRegisterPlayerChatEvent( gg_trg_lvl , Player(i), "-lvl ", false )
    set i=i+1
    endloop
    call TriggerAddCondition( gg_trg_lvl, Condition( function Trig_lvl_Conditions ) )
    call TriggerAddAction( gg_trg_lvl, function Trig_lvl_Actions )
endfunction
-lvl max
Thanks, I've seen this code before in HLWROC3, and it opened for me, but it didn't work at first, as the problem was probably with how my hero variable was calculated. After some tinkering, I finally managed to fix it and make a few adjustments, including adding a conditional check to see if a hero is alive or dead in the game.

At first, I also had a problem with QuestTextResize. I imported it as a trigger in the main map code, but it stopped working, and then suddenly it started working again. It's strange. But it could also cause errors with other libraries, for example, if you insert a Custom Script.

I also had a problem: when I switch inventory pages, the GoldOfRobber item (it works on a trigger) stops giving gold for kills. It needs to be registered in the item database, but I haven't been able to do this. Maybe someone can help?
 

Attachments

  • 2026-06-09_161854.webp
    2026-06-09_161854.webp
    114.6 KB · Views: 7
Last edited:
-lvl max
Thanks, I've seen this code before in HLWROC3, and it opened for me, but it didn't work at first, as the problem was probably with how my hero variable was calculated. After some tinkering, I finally managed to fix it and make a few adjustments, including adding a conditional check to see if a hero is alive or dead in the game.

At first, I also had a problem with QuestTextResize. I imported it as a trigger in the main map code, but it stopped working, and then suddenly it started working again. It's strange. But it could also cause errors with other libraries, for example, if you insert a Custom Script.
I don't think I can help with that. It should be a vJass script as its own trigger in your init.
I'd suggest asking in World Editor Help Zone
Describe your problem and provide screenshots.
 
Back
Top