Warcraft III resources & community, 2003–2006 · archived

New to map-making and needing some help

48 posts
#1

New to map-making and needing some help

Hi, i'm somehow new to this forum and new into the map-making world. Till now i've been able to make-do with my little knowlege of programming, but yesterday i've seen a limit : i was checking the multiboard trigger by launching the game and some problems arose.

First, the multiboard is somwhat like this :

- 5 columns : N° of player; Player Name; Kill count; Death count and Hero level.

- 16 rows :
* 1st containing names of columns
* 2nd containing name of the team (column 2)
* 3rd - 8th containing player data (players from team 1)
* 9th containing nothing to separate the 2 teams
* 10th containing name of the other team (column 2)
* 11th - 16th containing player data (players from team 2)

So far the multiboard is like that ingame, even though i had a probleme with column width which i solved fast. But now i found another problem : when loading values, it doesn't display all the names of the players.
Also, since this is the 2nd map i'm doing, and in the first one (never released) i used a leaderboard system, multiboard system is totally new to me so i don't know if the updating the multiboard is the same as with the leader board : when data changes in a trigger you make a command updating the leaderboard on the screen, is it same with multiboards?

Hmmm, hope i didn't forget anything. Also, i bought Warcraft 3 when it was released here in france and played a lot and saw lots of kinds of map, so i am almost sure that the kind of map i'm making is a rare one, well at least not seen everyday. So, if i somehow make it the end be sure to at least try it :D
#2
so whats your question? and which map's multiboard were you looking at?
#3
It's my map, currently under heavy construction :D
I'm trying not to copy features from other maps, which is kinda difficult beacause already all kinds of mps were done.

The question, or, rather, the problem is that when hte multiboard appears in the game it doesn't have all the names of the players and, even though i couldn't check it yet, it may have problems with diplaying the variables. That is why i was asking how to proceed with a multiboard.
#4
Player names not appearing? I never encountered this problem when I was new to multiboard. By the way, if the player is NOT playing, they have no names.
#5
Duh, thanks for the info. Actually, i encountered some cases when my name wasn't on the board. That's when i tested it a bit and found it wasn't dispalying names properly....err...i'll write down the srcipt i'm using after testing Nature's Call - Return of the Dragon :D (downloaded it today) so maybe someone can see clearier than me...
#6
Ok, sorry for the wait.

The Nature's Call - The Return of the Dragons bugged at first map :? : when i try to enter the cave to get at another place it doesn't work. So i played the Joe's Chronicles Trilogy :o . Anyway, here's the code as i use it for now :

Actions


+ Group player - Pick every player in (All allies of Player 11 (Dark Green)) and do (Actions)

Loop - Actions
- Set plnbh[8] = (Name of Player 11 (Dark green))
- If (All Conditions are True) then do (Then Actions) else do (Else Actions)

* If - Conditions
((Picked player) slot status) Equal to Play

* Then - Actions
Set plnbh[((Player number of (Picked player)) + plnbi)] = (Name of (Picked player))

* Else - Actions
Do nothing


+ Group player - Pick every player in (All allies of Player 12 (Brown)) and do (Actions)

Loop - Actions
- Set plnbh[16] = (Name of Player 12 (Brown))
- If (All Conditions are True) then do (Then Actions) else do (Else Actions)

* If - Conditions
((Picked player) slot status) Equal to Play

* Then - Actions
Set plnbc[((Player number of (Picked player)) + plnbi3)] = (Name of (Picked player))

* Else - Actions
Do nothing


+ Set nbrow = 16
+ Set nbcolumn = 5
+ Multitable - Create a multiboard with nbcolumn columns and nbrow rows, titled Leaderboard for Leaderboard for Birth of the Eternals v0.1alpha
+ Set mtbl = (Last created multiboard)
+ Multitable - Set the display style for mtbl item in column 0, row 0 to Show text and Hide icons
+ For each (Integer A) from 1 to nbrow, do (Multitable - Set the width for mtbl item in column 2, row (Integer A) to 7.00% of the total screen width)
+ For each (Integer A) from 1 to nbrow, do (Multitable - Set the width for mtbl item in column 4, row (Integer A) to 5.00% of the total screen width)
+ For each (Integer A) from 1 to nbcolumn, do (Multitable - Set the color for mtbl item in column (Integer A), row 1 to (100.00%, 100.00%, 15.00%) with 0.00% transparency)
+ Multitable - Set the text for mtbl item in column 1, row 1 to N°
+ Multitable - Set the text for mtbl item in column 2, row 1 to Player
+ Multitable - Set the text for mtbl item in column 3, row 1 to Kills
+ Multitable - Set the text for mtbl item in column 4, row 1 to Deaths
+ Multitable - Set the text for mtbl item in column 5, row 1 to Level
+ Multitable - Set the text for mtbl item in column 2, row 2 to Heroes
+ Multitable - Set the text for mtbl item in column 2, row 10 to Creeps
+ For each (Integer A) from 3 to 8, do (Actions)

Loop - Actions
- Multitable - Set the text for mtbl item in column 1, row (Integer A) to (String(((Integer A) - plnbi)))
- Multitable - Set the color for mtbl item in column 2, row (Integer A) to (0.00%, 100.00%, 0.00%) with 50.00% transparency
- Multitable - Set the text for mtbl item in column 2, row (Integer A) to plnbh[(Integer A)]
- Multitable - Set the text for mtbl item in column 3, row (Integer A) to (String(nbkills[((Integer A) - plnbi)]))
- Multitable - Set the text for mtbl item in column 4, row (Integer A) to (String(nbdeaths[((Integer A) - plnbi)]))
- Multitable - Set the text for mtbl item in column 5, row (Integer A) to (String(herolvl[((Integer A) - plnbi)]))

+ For each (Integer A) from 11 to 16, do (Actions)

Loop - Actions
- Multitable - Set the text for mtbl item in column 1, row (Integer A) to (String(((Integer A) - plnbi3)))
- Multitable - Set the color for mtbl item in column 2, row (Integer A) to (50.00%, 25.00%, 12.50%) with 50.00% transparency
- Multitable - Set the text for mtbl item in column 2, row (Integer A) to plnbc[(Integer A)]
- Multitable - Set the text for mtbl item in column 3, row (Integer A) to (String(nbkills[((Integer A) - plnbi3)]))
- Multitable - Set the text for mtbl item in column 4, row (Integer A) to (String(nbdeaths[((Integer A) - plnbi3)]))
- Multitable - Set the text for mtbl item in column 5, row (Integer A) to (String(herolvl[((Integer A) - plnbi3)]))


- plnbi = 2; plnbi = 10; plnbi3 = 4 (all integers)

- nbdeaths[index] = 0 (default); nbkills[index] = 0 (default); herolvl[index] = 0 (default) (integers)

- plnbc[index] "PLayer NumBer Creeps team" = null (default); plnbh[index] "PLayer NumBer Heroes team" = null (default) (strings)

- mtbl = null (default) (multitable)


Ok, this may be a little heavy for the kind of multiboard i want into my map but, remember i'm a newbie at this, so i may make mistakes. Also, since i don't know what kind of additional information people put with the triggers i may have detailed it a bit too much, please don't mind it if it is the case.

So here's the question : can anyone tell me why it doesn't diplay player names properly (more like diplaying them randomly
:cry: ).

One last thing : because i live in france and, obviously, got the french version, i tried to translate the french parts of the triggers text so it may not look exactly like what you're used to see.
#7
That looks way too complicated, try setting ur brain usage to 0.1% and u might come up with a solution that is more simple, and working. The multiboard u wanna make isnt that complicated. (im too lazy to explain how i would do it :P) I suggest u redo the multiboard
#8
well, for now i haven't thought of another way to do it. but, since the leaderboard (or multiboard) isn't the most important part of the game i left that for later. but now even the most simple trigger won't work. as the following :

Actions



For each (Integer A) from 0 to 18, do
(Group unit - Pick every unit in (Units of type Spawn Base) and do
(If ((Owner of (Picked unit)) Equal to Player 11 (Dark green))
then do (Cinematic - Ping minimap for (All players) at (Position of (Picked unit)) for 5.00 seconds, using a Simple ping of color (0.00%, 0.00%, 100.00%))
else do ( Cinematic - Ping minimap for (All Players) at (Position of (Picked Unit)) for 5.00 seconds, using a Alert ping of color (100.00%, 0.00%, 0.00%))


For each (Integer A) from 0 to 17, do
(If ((Owner of sp[(Integer A)]) Equal to Player 11 (Dark green))
then do (Cinematic - Ping minimap for (All players) at (Position of sp[(Integer A)]) for 5.00 seconds, using a Simple ping of color (0.00%, 0.00%, 100.00%))
else do (Cinematic - Ping minimap for (All Players) at (Position of sp[(Integer A)]) for 5.00 seconds, using


i put a unique-type of building in the map, i want to check and show on the minimap the location and the owner of each building. so far here are the two triggers i thought of but both aren't working properly : each one somehow "forgots" or "skips" 2 buildings of player 11.

Why does it skip buildings?
#9
ks13

For each (Integer A) from 0 to 18, do
(Group unit - Pick every unit in (Units of type Spawn Base) and do 
(If ((Owner of (Picked unit)) Equal to  Player 11 (Dark green)) 
then do (Cinematic - Ping minimap for (All players) at (Position of (Picked unit)) for 5.00 seconds, using a Simple ping of color (0.00%, 0.00%, 100.00%)) 
else do ( Cinematic - Ping minimap for (All Players) at (Position of (Picked Unit)) for 5.00 seconds, using a Alert ping of color (100.00%, 0.00%, 0.00%))


hm... first thing i saw that the 'for integer a' is completely useless if that is your whole trigger Secondly - so if you want ping units in a rect wouldnt be that better? :

Unit Group - Pick every unit in (Units in (Playable map area) owned by Player 1 (Red)) and do (Actions)
    Loop - Actions
        Cinematic - Ping minimap for (All players) at (Position of (Picked unit)) for 10.00 seconds, using a Simple ping of color (100.00%, 100.00%, 100.00%)


with your custom area and you do the same for the other player? So it should show all buildings. btw what is your condition and event? >>whole trigger<<

For each (Integer A) from 0 to 17, do
(If ((Owner of sp[(Integer A)]) Equal to Player 11 (Dark green))
then do (Cinematic - Ping minimap for (All players) at (Position of sp[(Integer A)]) for 5.00 seconds, using a Simple ping of color (0.00%, 0.00%, 100.00%))
else do (Cinematic - Ping minimap for (All Players) at (Position of sp[(Integer A)]) for 5.00 seconds, using


i cant get what is this trigger for... what is the variable sp[(integer A)] for? Always its the best to offer the whole trigger ^^.
#10
ah, sorry, i knew i forgot to explain something...so, sp[index] is a unit variable, i stored the unique buildings in it...that is why on the irst action trigger u saw the for each integer A function...i simply forgot to remove it...but, the example you gave me doesn't contains a unit-type check, because all the unique buildings belong to computers, and since it's an aos(?)-type map there will obviously be other units for computer than the unique ones. that is why i used those triggers. but, i tried something like :
- pick every unit owned by computer 1 and if unique ping it
- pick every unit owned by computer 2 and if unique ping it

but it does the same thing : 2 of the building owned by computer 1 won't ping on minimap. but if i change the ownership to computer 2 they will ping :?

ah, forgot to ask : where do i have to search for a hero/objects/property save system, i mean, like the ones in rpg kind of games?
#11
1) the ping problem

hm... if i didnt missunderstood you the var sp(etc)
stores ALL buildings that should be pinged?

so then try kinda that:

-- so what u did first should work, with a little improvement --

For each (Integer A) from 1 to 10, do (Actions)

    Loop - Actions

        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Owner of sp[(Integer A)]) Equal to Player 1 (Red)
            Then - Actions
                Cinematic - Ping minimap for (All players) at (Position of sp[(Integer A)]) for 10.00 seconds, using a Simple ping of color (100.00%, 0.00%, 0.00%)
            Else - Actions

        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Owner of sp[(Integer A)]) Equal to Player 2 (Blue)
            Then - Actions
                Cinematic - Ping minimap for (All players) at (Position of sp[(Integer A)]) for 10.00 seconds, using a Simple ping of color (100.00%, 0.00%, 0.00%)
            Else - Actions


i think that should work then ...

2) the save system problem

hm... i cant really help you because im not finished with my own. I could send you the ready trigger then but i dont think it will fit for you as you said you need more things to be saved. But if you have WEU-Unlimited (Have you???) go to weu-enhancer and look information/documentation/how to implement save....
perhaps this might help you.

Anyway i hope i helped a bit.
#12
:cry:

it won't work....but, there is something strange : there are actually 4 buildings causing problems, but they only cause problems per 2...i mean, when the two that didn't work work, it's the other two that stop working, and when those two work the other two won't.... maybe it's a variable storing problem..... just to be sure, when i make a var st[index] expandable up to 18, that means it begins at 0 and ends at 17, right?

concernign we-u, errr, i got it but i'm not really using it, actually not at all....i'm a beginner map maker so i dun see any differencies between the 2...but maybe i'll try it now that you said it can help me with the saving system.

Edit : Ok, i tested a bit the triggers and it seems it's the ping trigger at fault. i used create floating text with count units of type, counts units owned by cpu 1 of type adn count units owned by cpu 2 of type, and it worked...so i suppose it's the ping trigger at fault, or even....when i think about it, i have 18 buildings, maybe there's a max ping on minimap restriction....have to try that....

edit 2 : :shock: can't believe this, there actually IS a ping restrictor : when i tried to ping the 2 sides separately it worked....i got 18 building, only 16 showed on trigger use, that's a max of 16 ping on minimap at once u_u;;;;
i'm really sorry to have bothered you with what in the end proved to be nothing much....

edit 3 : just added "triggering player is an ally of cpu 1" to first "if" function and "triggering player is an ally of cpu 2" to the second "if" trigger of your example...now it works fine....well it won't show ennemy bases but it's good this way too XD
#13
To the usage of WEU:
Just remember to create a backup of your map before messing with WEU, could spare some pain :wink:
#14
since i don't like changing editors i'll kep on doing the map on the WE given with the game. if i really need some functions of WEU i'll switch to it. thank for the warning though :)
#15
Hmmmm....i got to a new problem...well, it's not malfuncion at least...i want to make a dynamic capture building trigger :

- a hero enters range of a building
- timer starts
- when timer expires if the hero is still there the building changes owner

so i thought of a way (sry but since it's not finished i'll give the general idea):

two triggers : capture and check

capture activates when a unit enters a range of the capture-type building, with conditions unit = hero & owner of unit = ennemy of owner of building

the trigger starts a timer and runs check, after timer expires if var herocheck = true it changes ownership of building to another player

check has a periodic event of 1second, it selects all units of type hero to under a range of 300 with center the building and if count of heroes ennemies of owner of building = 0 sets herocheck = false
else it sets herocheck = true.

now here is the problem : for now all i can do i make 18 triggers like this one for each of 18 buildings...but i wondered if i couldn't alter them to be able to have only 2 triggers, or at least have only one of the 2 dynamic