• 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.

A rather weird problem is occuring when using Jass

Status
Not open for further replies.
Level 2
Joined
Aug 22, 2013
Messages
21
[TRIGGER/JASS] A rather weird problem is occuring when using Jass

Ok, so I switched to custom race system that is based of off Jass and someone instructed me to use JNGP to open the map and further edit it from there. Now initially I got the map to work and was able to play test it, but after opening the map up in Jass again, I can't even save it and I literally changed nothing, the Jass helper says it found errors and please wait. Also, the test just loads the game, but not the map at all, and I cannot even save it in the regular editor or JNGP I have checked the triggers and everything I can think of, but I am still having issues.

Here are the 3 triggers in Jass I am using

The first one is the Custom Race System based on Jass or vJass and the following are triggers of races.
JASS:
[TRIGGER]//==============================================================================
//  Custom Race System by Archmage Owenalacaster
//==============================================================================
//
//  Purpose:
//      - Creates the starting units for custom races and replaces the standard
//        Melee Initialization trigger. Custom races are selected by race and
//        handicap.
//
//  Usage:
//      - Register a new custom race with CustomRace.create(name, RACE, handicap)
//          Handicaps: Valid handicap values are 1.0, 0.9, 0.8, 0.7, 0.6 and 0.5.
//      - Register a new custom race for all handicaps of a single race with
//        CustomRace.createAll(name, RACE)
//      - Extend the registration of a race with c.register(RACE, handicap)
//      - Set the townhall type with c.setTownHall(unitid)
//      - Add a new worker type with c.addWorkerType(unitid, priority, qty)
//          Priorities: c.NEAR_MINE spawns workers near the mine, where workers
//                        typically spawn.
//                      c.NEAR_HALL spawns workers near the town hall, where
//                        Ghouls spawn.
//      - Add a random hero type with c.addHeroType(unitid)
//      - Set the ai script used by computer players with c.setAIScript(stringpath)
//      - Set a callback function with c.setCallback(CustomRaceCall.function)
//          Callbacks: The callback is executed after all the starting units for a
//                     player are created, and its purpose is to provide enhanced
//                     initial behaviour for a race. A good example of this with the
//                     standard races would be the Undead Goldmine Haunting and
//                     Night Elves Goldmine Entangling.
//                     The callback function passes as arguments all the units
//                     generated in addition to the nearest goldmine detected.
//                     Please note that if a random hero is not created, the last
//                     argument will have a null value, so always do a check.
//       - Get a player's custom race name string with GetPlayerCustomRaceName(player)
//
//  Notes:
//      - Supports a maximum of 24 custom races.
//      - Maximum for worker and hero types are configurable.
//
//  Requirements:
//      - JassHelper version 0.9.E.0 or newer (older versions may still work).
//
//  Installation:
//      - Create a new trigger called CustomRaceSystem.
//      - Convert it to custom text and replace all the code with this code.
//
//  Special Thanks:
//      - Alevice:  He practically co-wrote the code.
//      - cosmicat: His formula for circular unit formation.
//                  Co-developing the single-array registry.
//
//==============================================================================

library CustomRaceSystem initializer Init
    
//===========================================================================
//                                CONFIGURATION SECTION
//===========================================================================
    globals
        // Unit Type Constants
        private constant integer MAX_WORKERTYPES = 4
        private constant integer MAX_HEROTYPES = 4
    endglobals
//===========================================================================
//                                END CONFIGURATION SECTION
//===========================================================================

    function interface CustomRaceCall takes player play, group workers, unit goldmine, unit townhall, unit randhero returns nothing
    
    private function r2S takes race r returns string
        if r == RACE_HUMAN then
            return "Human"
        elseif r == RACE_ORC then
            return "Orc"
        elseif r == RACE_UNDEAD then
            return "Undead"
        elseif r == RACE_NIGHTELF then
            return "Night Elf"
        endif
        return "Unknown"
    endfunction
    
    private function r2I takes race r returns integer
        if r == RACE_HUMAN then
            return 1
        elseif r == RACE_ORC then
            return 2
        elseif r == RACE_UNDEAD then
            return 3
        elseif r == RACE_NIGHTELF then
            return 4
        endif
        return 5
    endfunction
    
    globals
        // Victory Defeat Variables
        private string array KEY_STRUCTURE
        private integer KEY_STRUCTURE_COUNT = 0
    endglobals
    
//===========================================================================
//                                STRUCT DATA
//===========================================================================
    private keyword createStartingUnits
    
    struct CustomRace
        string name
        
        // Town Hall Variable
        integer townhallType = 0
      //string  townhallName
        // Town Hall name is not currently supported.
        
        // Worker Variables
        integer totalWorkerTypes = 0
        integer array workerType[MAX_WORKERTYPES]
        integer array workerPriority[MAX_WORKERTYPES]
        integer array workerQty[MAX_WORKERTYPES]
        
        // Random Hero Variables
        integer totalHeroTypes = 0
        integer array heroType[MAX_HEROTYPES]
        
        // AI Script Directory String Variable
        string aiscript = ""
        
        // Callback Variable
        private CustomRaceCall c
        
        // Registry Variable
        static integer array REGISTRY
        
        // Spawn Priority Variables
        static integer NEAR_MINE     = 0
        static integer NEAR_HALL     = 1
        
        static method get takes race r, real h returns CustomRace
            return CustomRace(.REGISTRY[((r2I(r)-1)*6)+(10-R2I(h*10.))])
        endmethod
        
        method register takes race r, real h returns boolean
            local CustomRace c = CustomRace.get(r,h)
            if c != 0 then
                debug call BJDebugMsg("|cffff0000Registration of "+.name+" failed due to conflict with "+c.name+" registered for "+r2S(r)+" race Handicap "+R2S(h))
                return false
            endif
            set .REGISTRY[((r2I(r)-1)*6)+(10-R2I(h*10.))] = integer(this)
            return true
        endmethod
        
        static method create takes string name, race r, real h returns CustomRace
            local CustomRace c = CustomRace.allocate()
            set c.name = name
            if not c.register(r,h) then
                call c.destroy()
                return 0
            endif
            return c
        endmethod
        
        static method createAll takes string name, race r returns CustomRace
            local CustomRace c = CustomRace.allocate()
            set c.name = name
            if not c.register(r,1.0) and not c.register(r,0.9) and not c.register(r,0.8) and not c.register(r,0.7) and not c.register(r,0.6) and not c.register(r,0.5) then
                call c.destroy()
                return 0
            endif
            return c
        endmethod
        
        method setTownHall takes integer hallid returns nothing
            set .townhallType = hallid
            set KEY_STRUCTURE[KEY_STRUCTURE_COUNT] = UnitId2String(hallid)
            set KEY_STRUCTURE_COUNT = KEY_STRUCTURE_COUNT+1
        endmethod
        
        method addWorkerType takes integer workerid, integer priority, integer quantity returns nothing
            set .workerType[.totalWorkerTypes] = workerid
            set .workerPriority[.totalWorkerTypes] = priority
            set .workerQty[.totalWorkerTypes] = quantity
            set .totalWorkerTypes = .totalWorkerTypes+1
        endmethod
        
        method addHeroType takes integer heroid returns nothing
            local integer i = 0
            set .heroType[.totalHeroTypes] = heroid
            set .totalHeroTypes = .totalHeroTypes+1
            loop
                call SetPlayerTechMaxAllowed(Player(i),heroid,1)
                set i = i+1
                exitwhen i == bj_MAX_PLAYERS
            endloop
        endmethod
        
        private method getRandomHeroType takes nothing returns integer
            local integer randomindex = GetRandomInt(0,.totalHeroTypes-1)
            return .heroType[randomindex]
        endmethod
        
        method setAIScript takes string s returns nothing
            set .aiscript = s
        endmethod
        
        method setCallback takes CustomRaceCall callb returns nothing
            set .c = callb
        endmethod
        
        private method createRandomHero takes player p, location loc returns unit
            local unit h = CreateUnitAtLoc(p, .getRandomHeroType(), loc, bj_UNIT_FACING)
            if bj_meleeGrantHeroItems then
                call MeleeGrantItemsToHero(h)
            endif
            return h
        endmethod
        
        method createStartingUnits takes player p returns nothing
            local location   startLoc        = GetPlayerStartLocationLoc(p)
            local location   nearMineLoc     = startLoc
            local location   nearTownLoc     = startLoc
            local location   spawnLoc        = startLoc
            local location   heroLoc         = startLoc
            local unit       nearestMine     = MeleeFindNearestMine(startLoc, bj_MELEE_MINE_SEARCH_RADIUS)
            local unit       myTownhall      = null
            local unit       myRandHero      = null
            local group      workerGroup     = CreateGroup()
            local integer    workertypeindex = 0
            local integer    workerqty       = 0
            local integer    spawnPriority   = 0
            if nearestMine != null then
                set nearMineLoc = MeleeGetProjectedLoc(GetUnitLoc(nearestMine),startLoc,320,0)
                set nearTownLoc = MeleeGetProjectedLoc(startLoc,GetUnitLoc(nearestMine),288,0)
                set heroLoc     = MeleeGetProjectedLoc(GetUnitLoc(nearestMine),startLoc,384,45)
            endif
            set myTownhall = CreateUnitAtLoc(p,.townhallType,startLoc,bj_UNIT_FACING)
            loop
                exitwhen workertypeindex == .totalWorkerTypes
                    set spawnPriority = .workerPriority[workertypeindex]
                    if (spawnPriority==.NEAR_HALL) then
                        set spawnLoc = nearTownLoc
                    elseif(spawnPriority==.NEAR_MINE) then
                        set spawnLoc = nearMineLoc
                    endif
                    loop
                        call GroupAddUnit(workerGroup, CreateUnitAtLoc(p,.workerType[workertypeindex],PolarProjectionBJ(spawnLoc,65,(I2R(workerqty)*(360.00 / I2R(.workerQty[workertypeindex]))) + 90),bj_UNIT_FACING))
                        set workerqty = workerqty + 1
                        exitwhen workerqty >= .workerQty[workertypeindex]
                    endloop
                    call RemoveLocation(spawnLoc)
                    set workerqty = 0
                set workertypeindex = workertypeindex+1
            endloop
            if (IsMapFlagSet(MAP_RANDOM_HERO) and .totalHeroTypes>0 ) then
                set myRandHero = .createRandomHero(p,heroLoc)
            else
                call SetPlayerState(p,PLAYER_STATE_RESOURCE_HERO_TOKENS,bj_MELEE_STARTING_HERO_TOKENS)
            endif
            if(.c!=0) then
                call .c.evaluate(p,workerGroup,nearestMine,myTownhall,myRandHero)
            else
                call DestroyGroup(workerGroup)
            endif
            if nearMineLoc != startLoc then
                call RemoveLocation(nearMineLoc)
                call RemoveLocation(nearTownLoc)
                call RemoveLocation(heroLoc)
            endif
            call RemoveLocation(startLoc)
            set startLoc    = null
            set nearMineLoc = null
            set nearTownLoc = null
            set spawnLoc    = null
            set heroLoc     = null
            set nearestMine = null
            set myTownhall  = null
            set myRandHero  = null
            set workerGroup = null
        endmethod
     endstruct
     
     globals
        private string array PLAYER_RACE
     endglobals
     
     function GetPlayerCustomRaceName takes player p returns string
        return PLAYER_RACE[GetPlayerId(p)]
     endfunction
    
//===========================================================================
//                         UNIT CREATION SECTION
//===========================================================================
    private function CreateStartingUnitsForAllPlayers takes nothing returns nothing
        local integer    index = 0
        local player     indexPlayer
        local race       playerRace
        local CustomRace c
        loop
            set indexPlayer = Player(index)
            if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
                set playerRace = GetPlayerRace(indexPlayer)
                set c = CustomRace.get(playerRace,GetPlayerHandicap(indexPlayer)+0.01)
                if (GetPlayerController(indexPlayer) == MAP_CONTROL_USER or (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER and c.aiscript != "" )) and c != 0 then
                    set PLAYER_RACE[index] = c.name
                    call c.createStartingUnits(indexPlayer)
                elseif playerRace == RACE_HUMAN then
                    call MeleeStartingUnitsHuman(indexPlayer,GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)),true,true,true)
                elseif playerRace == RACE_ORC then
                    call MeleeStartingUnitsOrc(indexPlayer,GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)),true,true,true)
                elseif playerRace == RACE_NIGHTELF then
                    call MeleeStartingUnitsNightElf(indexPlayer,GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)),true,true,true)
                elseif playerRace == RACE_UNDEAD then
                    call MeleeStartingUnitsUndead(indexPlayer,GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)),true,true,true)
                else
                    call MeleeStartingUnitsUnknownRace(indexPlayer,GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)),true,true,true)
                endif
            endif
            set index = index + 1
            exitwhen index == bj_MAX_PLAYERS
        endloop
    endfunction
    
//===========================================================================
//                         CUSTOM MELEE AI SECTION
//===========================================================================
    private function CustomMeleeStartingAI takes nothing returns nothing
        local integer index = 0
        local player  indexPlayer
        local race    indexRace
        local CustomRace c
        loop
            set indexPlayer = Player(index)
            if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
                set indexRace = GetPlayerRace(indexPlayer)
                set c = CustomRace.get(indexRace,GetPlayerHandicap(indexPlayer)+0.01)
                call SetPlayerHandicap(indexPlayer,1.0)
                if (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER) then
                    // Run a race-specific melee AI script.
                    if c != 0 and c.aiscript != "" then
                        call StartMeleeAI(indexPlayer, c.aiscript)
                    elseif (indexRace == RACE_HUMAN) then
                        call PickMeleeAI(indexPlayer, "human.ai", null, null)
                    elseif (indexRace == RACE_ORC) then
                        call PickMeleeAI(indexPlayer, "orc.ai", null, null)
                    elseif (indexRace == RACE_UNDEAD) then
                        call PickMeleeAI(indexPlayer, "undead.ai", null, null)
                        call RecycleGuardPosition(bj_ghoul[index])
                    elseif (indexRace == RACE_NIGHTELF) then
                        call PickMeleeAI(indexPlayer, "elf.ai", null, null)
                    else
                        // Unrecognized race.
                    endif
                    call ShareEverythingWithTeamAI(indexPlayer)
                endif
            endif

            set index = index + 1
            exitwhen index == bj_MAX_PLAYERS
        endloop
    endfunction    

//===========================================================================
//                         VICTORY DEFEAT SECTION
//===========================================================================
    private function CustomGetAllyKeyStructureCount takes player whichPlayer returns integer
        local integer    i           = 0
        local integer    keyStructs  = 0
        local integer    playerIndex = 0
        local player     indexPlayer
        loop
            set indexPlayer = Player(playerIndex)
            if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
                set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "townhall", true, true)
                set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "greathall", true, true)
                set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "necropolis", true, true)
                set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "treeoflife", true, true)
                loop
                    set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, KEY_STRUCTURE[i], true, true)
                    set i = i+1
                    exitwhen i == KEY_STRUCTURE_COUNT
                endloop
            endif
            set playerIndex = playerIndex + 1
            exitwhen playerIndex == bj_MAX_PLAYERS
        endloop
        return keyStructs
    endfunction

    private function CustomPlayerIsCrippled takes player whichPlayer returns boolean
        local integer allyStructures    = MeleeGetAllyStructureCount(whichPlayer)
        local integer allyKeyStructures = CustomGetAllyKeyStructureCount(whichPlayer)
        return (allyStructures > 0) and (allyKeyStructures <= 0)
    endfunction

    private function CustomCheckForCrippledPlayers takes nothing returns nothing
        local integer    playerIndex
        local player     indexPlayer
        local boolean    isNowCrippled
        call MeleeCheckForLosersAndVictors()
        if bj_finishSoonAllExposed then
            return
        endif
        set playerIndex = 0
        loop
            set indexPlayer = Player(playerIndex)
            set isNowCrippled = CustomPlayerIsCrippled(indexPlayer)
            if (not bj_playerIsCrippled[playerIndex] and isNowCrippled) then
                set bj_playerIsCrippled[playerIndex] = true
                call TimerStart(bj_crippledTimer[playerIndex], bj_MELEE_CRIPPLE_TIMEOUT, false, function MeleeCrippledPlayerTimeout)
                if (GetLocalPlayer() == indexPlayer) then
                    call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], true)
                    call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_WARNING_HUMAN"))
                endif
            elseif (bj_playerIsCrippled[playerIndex] and not isNowCrippled) then
                set bj_playerIsCrippled[playerIndex] = false
                call PauseTimer(bj_crippledTimer[playerIndex])
                if (GetLocalPlayer() == indexPlayer) then
                    call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], false)
                    if (MeleeGetAllyStructureCount(indexPlayer) > 0) then
                        if (bj_playerIsExposed[playerIndex]) then
                            call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNREVEALED"))
                        else
                            call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNCRIPPLED"))
                        endif
                    endif
                endif
                call MeleeExposePlayer(indexPlayer, false)
            endif
            set playerIndex = playerIndex + 1
            exitwhen playerIndex == bj_MAX_PLAYERS
        endloop
    endfunction

    private function CustomInitVictoryDefeat takes nothing returns nothing
        local trigger    checker = CreateTrigger()
        local trigger    trig
        local integer    index
        local player     indexPlayer
        set bj_finishSoonTimerDialog = CreateTimerDialog(null)
        call TriggerAddAction(checker, function CustomCheckForCrippledPlayers)
        set trig = CreateTrigger()
        call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
        call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
        set trig = CreateTrigger()
        call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
        call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
        set index = 0
        loop
            set indexPlayer = Player(index)
            if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
                set bj_meleeDefeated[index] = false
                set bj_meleeVictoried[index] = false
                set bj_playerIsCrippled[index] = false
                set bj_playerIsExposed[index] = false
                set bj_crippledTimer[index] = CreateTimer()
                set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
                call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))
                call TriggerRegisterPlayerUnitEvent(checker, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
                call TriggerRegisterPlayerUnitEvent(checker, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
                call TriggerRegisterPlayerUnitEvent(checker, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
                call TriggerRegisterPlayerAllianceChange(checker, indexPlayer, ALLIANCE_PASSIVE)
                call TriggerRegisterPlayerStateEvent(checker, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
             else
                set bj_meleeDefeated[index] = true
                set bj_meleeVictoried[index] = false
                if (IsPlayerObserver(indexPlayer)) then
                    set trig = CreateTrigger()
                    call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                    call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
                endif
            endif
            set index = index + 1
            exitwhen index == bj_MAX_PLAYERS
        endloop
        call TimerStart(CreateTimer(), 2.0, false, function CustomCheckForCrippledPlayers)
    endfunction
    
    private function TimerAction takes nothing returns nothing
        call SetFloatGameState(GAME_STATE_TIME_OF_DAY, bj_MELEE_STARTING_TOD)
        call MeleeStartingHeroLimit()
        call MeleeGrantHeroItems()
        call MeleeStartingResources()
        call MeleeClearExcessUnits()
        call CreateStartingUnitsForAllPlayers()
        call CustomMeleeStartingAI()
        call CustomInitVictoryDefeat()
        call DestroyTimer(GetExpiredTimer())
    endfunction
    
    private function Init takes nothing returns nothing
        call TimerStart(CreateTimer(),0,false,function TimerAction)
    endfunction
    
endlibrary [/TRIGGER]

JASS:
[TRIGGER]library BloodElfSetup initializer Init requires CustomRaceSystem
    
    private function Init takes nothing returns nothing
        local CustomRace c = CustomRace.create("Blood Elf",RACE_HUMAN,0.9)
        call c.setTownHall('htow')                  // Town Hall
        call c.addWorkerType('hpea',c.NEAR_MINE,5)  // Peasant
        call c.addHeroType('Hpal')                  // Paladin
        call c.addHeroType('Hamg')                  // Archmage
        call c.addHeroType('Hmkg')                  // Mountain King
        call c.addHeroType('Hblm')                  // Blood Mage
    endfunction
    
endlibrary[/TRIGGER]

JASS:
[TRIGGER]library HumanSetup initializer Init requires CustomRaceSystem
    
    private function Init takes nothing returns nothing
        local CustomRace c = CustomRace.create("Human",RACE_HUMAN,1.0)
        call c.setTownHall('htow')                  // Town Hall
        call c.addWorkerType('hpea',c.NEAR_MINE,5)  // Peasant
        call c.addHeroType('Hpal')                  // Paladin
        call c.addHeroType('Hamg')                  // Archmage
        call c.addHeroType('Hmkg')                  // Mountain King
        call c.addHeroType('Hblm')                  // Blood Mage
        call c.setAIScript("human.ai")
    endfunction
    
endlibrary
[/TRIGGER]
 
Last edited:
Level 2
Joined
Aug 22, 2013
Messages
21
The jasshelper freezes upon attempting to save, but I will try it and see what happens.

The jasshelper freezes upon attempting to save, but I will try it and see what happens. Ok, upon loading it it says "Warning: This map has been saved by a more recent version of this editor. It may contain data which are not supported in this version. Continue anyway? Yes or No." I hit "Yes" and continued It saved without any known issues, but when I tried to test it, by using the test feature in the Updated JNGP, I get the same problem, it loads up the game, but I am at the main menu and not loading the current map I am editing. Nor can I even load that map in the game itself, even if I put it in the Maps folder. Jasshelper did not find any syntax errors when it was last called, but I did find this in Get JNGP Settings

Code:
Warcraft III Current Settings:
 - WC3 Path: 
 - War3.exe location: No file found!!! Please Check your WC3 installation...
 - JNGP WC3 Path: c:\program files (x86)\warcraft iii\
                 (Warning: JNGP has not detected properly WC3 Path)

Ok, I am sorry for the triple post, but I just want to keep you updated, so you can help me. Upon reading your entire post and several comments found through google search, I came across the idea that maybe the Jasshelper was the wrong one, hence it couldn't compile it properly as described in the post that had the updated version of JNGP that you provided. I switched it to Vexorian's and it worked, but it seems when I open the map with JNGP It resets the Jasshelper back to the top one, and not Vexorian's every time, ugh, lol.


Also, I was wondering if someone would look over these triggers and let me know if they good? I am more than positive that they are hence, why I was wondering why this was occurring in the first place, but it is nice to make sure by more experienced Jass modders.


EDIT: It seems when I import my object data for my blood elf race, I get errors all of a sudden, and before I switched, I would not get errors like this. When I added all the object data for my blood elf race and saved the map, it brought up JassHelper found errors, please wait... And it freezes up JNGP and the Jasshelper thing doesn't do anything.
 
Last edited by a moderator:
Level 20
Joined
Jul 14, 2011
Messages
3,213
Yeah, that's the last Jasshelper.

1- Update the Stuff (You already did)
2- Use Vexorian's JassHelper (I'm not sure how to set it by default)
3- You have to save EVERY TIME before pressing the "Test" button and, of course, have no script errors (JassHelper should warn)
4- Use the Edit Button, forget about doble or triple posting. You can only post again "within the laws" after 48 hours of your last post without response (afaik)
 
Level 2
Joined
Aug 22, 2013
Messages
21
Gah, that is not something I wanted to hear, lol. Darn... I would of thought the issue to be fixable.... *Cries*
 
Level 2
Joined
Aug 22, 2013
Messages
21
Isn't that the same exact one that Spartipilo told me to try and use? o.0 I am pretty sure it is. I have tried all the current ones around and still have the same issues. I also have posted everything I know to provide to get help from someone, unless more is needed and I will do what I can to provide it.
 
Level 2
Joined
Aug 22, 2013
Messages
21
Oh, well, I assumed he meant the JGNP + Jass Helper, and that did not help me with whatever this issue is. I have downloaded 5d, 5e, and the 204 ones. That is the names that show up on the folder when extracted. So, I am honestly at a lost at why this is occurring my only triggers are listed above.
 
Level 20
Joined
Jul 14, 2011
Messages
3,213
Let me get this... Are you saying that when you save before testing the map JASSHELPER throws no errors at all, but still only Wc3 opens without loading the map, having Vexorian's mode active, and you're 100% sure these triggers are the reason?
 
Last edited:
Level 2
Joined
Aug 22, 2013
Messages
21
Let me get this... Are you saying that when you save before testing the map JASSHELPER throws no errors at all, but still only Wc3 opens without loading the map, having Vexorian's mode active, and you're 100% sure these triggers are the reason?

Nope, if you read my original post, my issue is that when I save the map I get errors in Jasshelper when it compiles the jass triggers that I have posted. I followed all the instructions from people replying here and in other places through resources and Google searching. I just ended up redoing everything. I assume that maybe the map got corrupted, I tried Vexorian's mode before saving, and I tried switching it, I even deleted all the custom stuff, I think that the map broke, it would get errors when saving the map and when I tried to test it, the map wouldn't load, it would just show the main menu of warcraft 3:TFT. As far as I know I assume this problem isn't solved, but I am impatient about resolving issues, lol, so I decided to just redo the work. Maybe it was the importing of all object data that messed something up.
 
Level 2
Joined
Aug 22, 2013
Messages
21
You just might have stumbled on something, lol. Umm, not to sure how to change the object ids, I assume you are referring to any custom units that were created or? If that is the case I automatically assumed it kept those values that were previously set, unless you have to set them each time you export and import.
 
Status
Not open for further replies.
Top