undeclared function?

CaptDeath

New Member
Reaction score
103
when i put a jass function
JASS:
function New_FM takes integer X returns nothing
call BJDebugMsg("Introducing"+Strings(4,X)+"the newest "+Strings(0,1))
endfunction

it says that New_FM
is undeclared should i put it into a blank custom text trigger?
like i did with this


JASS:
function Strings takes integer A,integer B returns string

		local string Ret
		local string CO
	if A == 0 then // Classes
		if B == 0 then
			set Ret = "Basic Mage"
			return Ret
		endif
		if B == 1 then
			set Ret = "Fire Mage"
			return Ret
		endif
		if B == 2 then
			set Ret = "Water Mage"
			return Ret
		endif		
		if B == 3 then
			set Ret = "Time Mage"
			return Ret
		endif
		if B == 4 then
			set Ret = "Earth Mage"
			return Ret
		endif		
		if B == 5 then
			set Ret = "Wind Mage"
			return Ret
		endif		
		if B == 6 then
			set Ret = "AnitTime Mage"
			return Ret
		endif		
	// endclasses
	endif 
	
	if A == 1 then // Places
		if B == 0 then
			set Ret =  "Osusia"
			return Ret
		endif
		if B == 1 then
			set Ret = "Anicia"
			return Ret
		endif
		if B == 2 then
			set Ret = "Ardonia"
			return Ret
		endif
		if B == 3 then
			set Ret = "Ageocia"
			return Ret
		endif
		if B == 4 then
			set Ret ="Buralia"
			return Ret
		endif
		if B == 5 then
			set Ret ="Ildicia"
			return Ret
		endif
		if B == 6 then
			set Ret ="Arocia"
			return Ret
		endif
		if B == 7 then
			set Ret ="Warecia"
			return Ret
		endif
		if B == 8 then
			set Ret ="Morycia"
			return Ret
		endif
		if B == 9 then
			set Ret ="Estelia"
			return Ret
		endif
		// endPlaces
	endif
	
	if A == 2 then // citys
		set CO = "Capital of "
			if B == 0 then
			set Ret =CO+Strings(1,0)
			return Ret
		endif
		if B == 1 then
			set Ret =CO+Strings(1,1)
			return Ret
		endif
		if B == 2 then
			set Ret =CO+Strings(1,2)
			return Ret
		endif
		if B == 3 then
			set Ret =CO+Strings(1,3)
			return Ret
		endif
		if B == 4 then
			set Ret =CO+Strings(1,4)
			return Ret
		endif
		if B == 5 then
			set Ret =CO+Strings(1,5)
			return Ret
		endif
		if B == 6 then
			set Ret =CO+Strings(1,6)
			return Ret
		endif
		if B == 7 then
			set Ret =CO+Strings(1,7)
			return Ret
		endif
		if B == 8 then
			set Ret =CO+Strings(1,8)
			return Ret
		endif
		if B == 9 then
			set Ret =CO+Strings(1,9)
			return Ret
		endif	
	
	// endcitys
	endif
	
	if A == 3 then // Names
		if B == 0 then
			set Ret ="Phohoos"
			return Ret
		endif
		if B == 1 then
			set Ret ="Issetia"
			return Ret
		endif
		if B == 2 then
			set Ret ="Paneos"
			return Ret
		endif
		if B == 3 then
			set Ret ="Dusios"
			return Ret
		endif
		if B == 4 then
			set Ret ="Eroitia"
			return Ret
		endif
		if B == 5 then
			set Ret ="Awaytia"
			return Ret
		endif
		if B == 6 then
			set Ret ="Ightios"
			return Ret
		endif
		if B == 7 then
			set Ret ="Aleeaos"
			return Ret
		endif
		if B == 8 then
			set Ret ="Omootia"
			return Ret
		endif
		if B == 9 then
			set Ret ="Fiwyos"
			return Ret
		endif
		
	endif
    if A == 4 then // Player Name
			set Ret =GetPlayerName(ConvertedPlayer(B))
			return Ret
	endif
	return Ret	
endfunction
 

Tom Jones

N/A
Reaction score
437
Jass is read from the top down. This means that a function calling a function below it self will cause a syntax error:
JASS:
function A takes nothing returns nothing
    call B() //This will cause a syntax error "Undeclared function" since the
               //function in question is below the function it self.
endfunction

function B takes nothing returns nothing
    call A() //This wont cause a syntax error, the function in question is above
               //the function it self.
endfunction
This means that you should make sure that your New_FM is above any calls to it that you may have.
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
put it in a library
JASS:
library String
function Strings takes integer A,integer B returns string

                local string Ret
                local string CO
        if A == 0 then // Classes
                if B == 0 then
                        set Ret = "Basic Mage"
                        return Ret
                endif
                if B == 1 then
                        set Ret = "Fire Mage"
                        return Ret
                endif
                if B == 2 then
                        set Ret = "Water Mage"
                        return Ret
                endif           
                if B == 3 then
                        set Ret = "Time Mage"
                        return Ret
                endif
                if B == 4 then
                        set Ret = "Earth Mage"
                        return Ret
                endif           
                if B == 5 then
                        set Ret = "Wind Mage"
                        return Ret
                endif           
                if B == 6 then
                        set Ret = "AnitTime Mage"
                        return Ret
                endif           
        // endclasses
        endif 
        
        if A == 1 then // Places
                if B == 0 then
                        set Ret =  "Osusia"
                        return Ret
                endif
                if B == 1 then
                        set Ret = "Anicia"
                        return Ret
                endif
                if B == 2 then
                        set Ret = "Ardonia"
                        return Ret
                endif
                if B == 3 then
                        set Ret = "Ageocia"
                        return Ret
                endif
                if B == 4 then
                        set Ret ="Buralia"
                        return Ret
                endif
                if B == 5 then
                        set Ret ="Ildicia"
                        return Ret
                endif
                if B == 6 then
                        set Ret ="Arocia"
                        return Ret
                endif
                if B == 7 then
                        set Ret ="Warecia"
                        return Ret
                endif
                if B == 8 then
                        set Ret ="Morycia"
                        return Ret
                endif
                if B == 9 then
                        set Ret ="Estelia"
                        return Ret
                endif
                // endPlaces
        endif
        
        if A == 2 then // citys
                set CO = "Capital of "
                        if B == 0 then
                        set Ret =CO+Strings(1,0)
                        return Ret
                endif
                if B == 1 then
                        set Ret =CO+Strings(1,1)
                        return Ret
                endif
                if B == 2 then
                        set Ret =CO+Strings(1,2)
                        return Ret
                endif
                if B == 3 then
                        set Ret =CO+Strings(1,3)
                        return Ret
                endif
                if B == 4 then
                        set Ret =CO+Strings(1,4)
                        return Ret
                endif
                if B == 5 then
                        set Ret =CO+Strings(1,5)
                        return Ret
                endif
                if B == 6 then
                        set Ret =CO+Strings(1,6)
                        return Ret
                endif
                if B == 7 then
                        set Ret =CO+Strings(1,7)
                        return Ret
                endif
                if B == 8 then
                        set Ret =CO+Strings(1,8)
                        return Ret
                endif
                if B == 9 then
                        set Ret =CO+Strings(1,9)
                        return Ret
                endif   
        
        // endcitys
        endif
        
        if A == 3 then // Names
                if B == 0 then
                        set Ret ="Phohoos"
                        return Ret
                endif
                if B == 1 then
                        set Ret ="Issetia"
                        return Ret
                endif
                if B == 2 then
                        set Ret ="Paneos"
                        return Ret
                endif
                if B == 3 then
                        set Ret ="Dusios"
                        return Ret
                endif
                if B == 4 then
                        set Ret ="Eroitia"
                        return Ret
                endif
                if B == 5 then
                        set Ret ="Awaytia"
                        return Ret
                endif
                if B == 6 then
                        set Ret ="Ightios"
                        return Ret
                endif
                if B == 7 then
                        set Ret ="Aleeaos"
                        return Ret
                endif
                if B == 8 then
                        set Ret ="Omootia"
                        return Ret
                endif
                if B == 9 then
                        set Ret ="Fiwyos"
                        return Ret
                endif
                
        endif
    if A == 4 then // Player Name
                        set Ret =GetPlayerName(ConvertedPlayer(B))
                        return Ret
        endif
        return Ret      
endfunction
endlibrary
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
it says that New_FM is undeclared

If you call a function, the called function must be located above the function calling it.

For example:

JASS:
function A takes nothing returns nothing
    call B()
endfunction

function B takes nothing returns nothing
    return 
endfunction


Would result in an error that function B was undeclared. Instead, your functions should look like this:

JASS:
function B takes nothing returns nothing
    return 
endfunction

function A takes nothing returns nothing
    call B()
endfunction
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
Good job copy and pasting Tom Jones post, maybe someone is rep whoring too much.


Anywys, you can also paste your code in the map header if you do not have newgen installed
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
Good job copy and pasting Tom Jones post, maybe someone is rep whoring too much.

Sorry, I had opened a bunch of tabs I was going to look at, got side-tracked and came back to it. I forgot it had been that long since I opened it.

I wrote it myself, but forgot to refresh it before posting. :eek:
 

Viikuna

No Marlo no game.
Reaction score
265
Please, dont PM these questions to me anymore. I check Jass forums every time I visit in this site, so sending PM is kinda useless.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    New recipe is another summer dessert Berry and Peach Cheesecake - https://www.thehelper.net/threads/recipe-berry-and-peach-cheesecake.194169/

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top