Random Hero [Unsolved]

kallieblakie

New Member
Reaction score
5
I'm using the circle of power + taven system, and the trigger kicks off when the player types "-random".

If a hero (say, hero A) has already been picked or randomed, it must not be able to be randomed by other players, meaning other players cannot get "hero A" anymore.

I've looked through DotA template, and Dota template doesn't prevent this. Dota template itself has lots of problems and bugs. Countless. Unreliable.

So can anyone help me with this?

I know that I can:

Code:
set HERO[1] = BLAH
set HERO[2] = BLEAH
set HERO[3] = BOOH
set HeroCount = 3
set TempInt = Random number between 1 and HeroCount
create 1 HERO[TempInt] for Triggering Player at Triggering Player Start Location. 
Player Group - Pick every player in AllPlayers and do (Actions)
    Loop - Actions
        Player - Make (Unit-type of (Last created unit)) Unavailable for training/construction by (Picked player)
(ignore the leaks)
But how do i make it that a hero that has been chosen/randomed cannot be randomed by another player?

Thanks in advance. Hope you get what i mean.
 
R

runhide

Guest
Ignoring this triggers problems it may do the trick.

PHP:
Pick random hero
    Events
    Conditions
    Actions
        Set HeroNumber[1] = Random Hero
        Set HeroNumber[2] = Random Hero2
        Set TempInteger = (Random integer number between 1 and 2)
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                HeroAlreadyUsed[TempInteger] Equal to 0
            Then - Actions
                Set HeroAlreadyUsed[TempInteger] = 1
                Unit - Create 1 HeroNumber[TempInteger] for (Triggering player) at TempPoint facing Default building facing degrees
            Else - Actions
                Trigger - Run Pick random hero <gen> (checking conditions)
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
Code:
Set RandomInteger = (Random integer number between 1 and (NumberOfHeros)) 
Unit - Create 1 Hero[RandomInteger] for (Triggering player) at TempPoint facing Default building facing degrees ...
Set Hero[RandomInteger] = Hero[NumberOfHeros]
Set NumberOfHeros = NumberOfHeros - 1


When a hero is bought directly from the tavern search the Hero array for the unit type of that bought hero and remove it from the array with the same method as the code above.
 

kallieblakie

New Member
Reaction score
5
Code:
Set RandomInteger = (Random integer number between 1 and (NumberOfHeros)) 
Unit - Create 1 Hero[RandomInteger] for (Triggering player) at TempPoint facing Default building facing degrees ...
Set Hero[RandomInteger] = Hero[NumberOfHeros]
Set NumberOfHeros = NumberOfHeros - 1

Using this code, woudn't it overwrite the last hero? say Numberofheros = 10. I have 10 heros. And RandomInteger = 3. Then I created 3 sucessfully, yet i set the Hero[RandomInteger] as 10. then i set numberofheros = 9. I would have removed Hero[10] from choice of selection, right? since the next random would be between 1 and 9 only.
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
Using this code, woudn't it overwrite the last hero? say Numberofheros = 10. I have 10 heros. And RandomInteger = 3. Then I created 3 sucessfully, yet i set the Hero[RandomInteger] as 10. then i set numberofheros = 9. I would have removed Hero[10] from choice of selection, right? since the next random would be between 1 and 9 only.

Look at the line
Code:
Set Hero[RandomInteger] = Hero[NumberOfHeros]
It's the created hero that is removed and not the last one, the last one just change position.
 
R

runhide

Guest
You would need another trigger for the shops but it should be simple.

event -unit enters map
condition is a hero
action
loop for a 1 to 2
if unit is heronumber(loop for a)

then set heroalreadyused(loop for a) = 1
make unit untrainable

else nothing
 

kallieblakie

New Member
Reaction score
5
Look at the line
Code:
Set Hero[RandomInteger] = Hero[NumberOfHeros]
It's the created hero that is removed and not the last one, the last one just change position.
Set Hero[RandomInteger] = Hero[NumberOfHeros]
hey wait. what about shifting the last position back? If that trigger is going to be used, the last hero will be gone as well since it's being replaced by the chosen one, then getting out of the choice.
 

kallieblakie

New Member
Reaction score
5
Ok i got it working, somehow. So How do i remove the chosen hero from the random list, after the hero has been picked?
 

warroom99

New Member
Reaction score
15
uhm

Code:
Actions
        Unit - Create 1 blah blah
Pick every player in all players and do actions:
   loop
        Player - Make (Unit-type of (Last created unit)) Unavailable for training/construction by (Picked player)
        Player - Limit training of (Unit-type of (Last created unit)) to 0 for (Picked player)
[COLOR="Red"]        Player - Limit training of Heroes to 0 for (Owner of (Last created unit))[/COLOR]

the red one's purpose is for limiting the heroes owned by a player

*BTW

instead of using integer you could use boolean
 

Chocobo

White-Flower
Reaction score
409
when a hero is picked =.=. meaning i must remove it from the Heros[array]. but how can i go about doing that?

If you remove it, the randomer has no hero.

Just check in the map if there is the hero that you want to random. If it is on the map, then run again the loop, else create the randomed hero.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      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