• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5


Wykrywanie najbliższego wroga bądź losowość
#1
Witam, potrzebuję jakiegoś dobrego pomysłu na mapę typu Arena, czyli jednostki się z spawnią z lewej i prawej strony i atakują 'gladiatorów', najpierw myślałem o jakimś systemie w którym jednostka wychodząc za bramę (na arenę) wykrywa najbliższego wroga i leci w jego kierunku ale obawiam się że to się wiąże z tym iż jednostka będzie skupiona TYLKO na tej jednostce nawet jeżeli będzie ona schowana za inną i nie będzie atakować tej stojącej przed nią tylko będzie biegać lewo prawo i próbować znaleźć jakąś drogę do niej, a na mapie mam takie miejscówki gdzie jak jeden z gladiatorów stanie w przejściu to nic obok nie przejdzie. Drugą opcją nad którą myślałem przy losowaniu wroga będzie coś na zasadzie - jednostka wychodzi przez brame i losowana jest losowa liczba i jeżeli wypadnie np. 1 to ma atakować czerwonego a jak 2 to niebieskiego, ale w tym przypadku też może to dziwnie wyglądać bo jak wybierze na cel niebieskiego a on będzie schowany za czerwonym który blokuje ścieżkę to też nie będzie go atakować, chyba że jestem w błędzie. Jak ktoś ma jakiś ciekawy, znany-sprawdzony pomysł na takie coś to bym prosił o radę jakąś.
Reply }}}
Podziękowanie od:
#2
Atak ruch do punktu. Wtedy jednostka biegnie do danego punktu i atakuje wszystko po drodze. Co jakiś czas aktualizować punkt ataku (na przykład kiedy jednostka stoi i sie nudzi)
Ten post był edytowany -259638 raz(y) ostatnio edytowany przez Axator: Za 3 pojutrze, 29:89
Reply }}}
Podziękowanie od:
#3
Mam coś takiego ale jakoś nie działa tak jak planowałem Język
Arena 1 Ruch Lewo 2
Wydarzenia
Jednostka - A unit enters Arena 1 Lewa Brama
Warunki
Akcje
Jednostka - Make (Entering unit) Zniszczalny
Set ArenaLosowanieEnemy = (Random integer number between 1 and 2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Jeśli - Warunki
ArenaLosowanieEnemy RĂłwna siÄ™ 1
To - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_red
Albo - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_blue


Arena 1 Ruch Prawo 2
Wydarzenia
Jednostka - A unit enters Arena 1 Prawa brama
Warunki
Akcje
Jednostka - Make (Entering unit) Zniszczalny
Set ArenaLosowanieEnemy = (Random integer number between 1 and 2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Jeśli - Warunki
ArenaLosowanieEnemy RĂłwna siÄ™ 1
To - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_red
Albo - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_blue


Nie wiem czy musze zerować tą zmienną czy co, bo póki co to część jednostek stoi w tej bramie i nie idzie nigdzie.

poz_red to jest co 0.1 sek pozycja red_hero czyli zmienna przypisywana do bohatera którego czerwony wybierze.
Reply }}}
Podziękowanie od:
#4
Pewnie od razu usuwasz pozycje bohatera w tym wyzwalaczu co 0.1 sek. Pobieraj pozycje bohatera bezpośrednio w tych dwóch wyzwalaczach, to pewnie rozwiąże problem
Ten post był edytowany -259638 raz(y) ostatnio edytowany przez Axator: Za 3 pojutrze, 29:89
Reply }}}
Podziękowanie od:
#5
No nie koniecznie bo wyzwalacz wygląda następująco :
Pozycja red
Wydarzenia
Czas - Every 0.10 seconds of game time
Warunki
Akcje
Set poz_red = (Position of Hero_red_pick)
Reply }}}
Podziękowanie od:
#6
Zamiast poz_red lub poz_blue zrób to inaczej. Zrób zmienne dla każdego herosa, na początku gry przypisz je herosom. A później rób "zmiennaheros get position".
Reply }}}
Podziękowanie od:
#7
Jak dla mnie to bez sensu zupełnie, jak oznaczę pozycję danego bohatera to potem muszę robić kolejny wyzwalacz który wykryje do którego gracza ten bohater należy a potem kolejny w którym co jakiś czas odświeżam zmienną z aktualną pozycją. Masa niepotrzebnej roboty zwłaszcza przy sporej ilości bohaterów, a pewności czy to zadziała nie mam żadnej także nie wiem czy warto tracić czas.


*** Z tego co przed chwilą sprawdziłem to samo lokalizowanie bohatera działa poprawnie, widzę to po tym że co owe 0.1 sek ma tworzyć wykrzyknik w miejscu gdzie jest bohater (czyli jego zmienna red_poz) i ładnie pięknie stawia mi wykrzykniki tam gdzie znajduje się bohater.
Problem najwidoczniej gdzieś znajduje się w wydawaniu rozkazu do ataku albo miejscu do którego ma się jednostka skierować. Będę miał chwilę to posprawdzam różne warianty.
Reply }}}
Podziękowanie od:
#8
Możliwe że mam błąd gdzieś w losowaniu liczby i jej rezultacie, zresztą pierwszy raz korzystam z tej opcji osobiście także prawdopodobne że ja coś zwaliłem w tym wyzwalaczu.
Arena 1 Ruch Lewo 2
Wydarzenia
Jednostka - A unit enters Arena 1 Lewa Brama
Warunki
Akcje
Jednostka - Make (Entering unit) Zniszczalny
Set ArenaLosowanieEnemy = (Random integer number between 1 and 2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Jeśli - Warunki
ArenaLosowanieEnemy RĂłwna siÄ™ 1
To - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_red
Albo - Akcje
Jednostka - Order (Entering unit) to Atak-Ruch do poz_blue
Reply }}}
Podziękowanie od:
#9
Dobra problem rozwiązany, oczywiście powodem że nie działało jest to, że nie dostrzegłem pewnych błędów przy przypisywaniu zmiennych, teraz po poprawieniu wszystko działa jak należy Uśmiech
Reply }}}
Podziękowanie od:
#10
Jak zacznie Ci mapa lagować, to poczytaj poradnik o wyciekach pamięci i zastanów sie rozwiązaniem goldenknighta
Ten post był edytowany -259638 raz(y) ostatnio edytowany przez Axator: Za 3 pojutrze, 29:89
Reply }}}
Podziękowanie od:
#11
A dodanie przed tą akcją custom script? Bo nawet jeżeli użyję jego metody to i tak będę musiał co 0.1 sek sczytać lokalizaję danego bohatera więc przecież wychodzi na to samo...
Wydarzenia
Czas - Every 0.10 seconds of game time
Warunki
Akcje
*** Custom script: call RemoveLocation (udg_poz_red)
Set poz_red = (Position of Hero_red_pick)

Teraz mam coś że set red_pick = ten bohater, a potem tylko set pozycja_red = pozycja red_pick. Natomiast metoda kolegi będzie mniej więcej wyglądać tak set YYY = (ten heros) a potem wyzwalacz do sprawdzania do którego należy heros a potem set (pozycja_red) = pozycja YYY (czyli ten heros) + kupa wyzwalaczy żeby ustalić do którego gracza należy dany bohater, przy 2-3 bohaterach to może nie taki problem ale na chwilę obecną mam ich 12 a to dopiero początek więc wychodzi jedno i to samo. Chyba że ja inaczej rozumiem to co kolega wyżej proponował, z jednej strony nie jestem jakimś mistrzem edytora a z drugiej też to napisał tak że ciężko skapować o co chodzi.


Mam jeszcze pytanie czy custom script np ten do usunięcia danej lokacji (czyli ten co mam wyżej użyty) musi być w wyzwalaczu w którym ustanawiam tą lokaliację (czyli set poz_red ...) czy mogę ten skrypt dać w innym wyzwalaczu a i też będzie działać?
Reply }}}
Podziękowanie od:
#12
Poczytałem trochę o tych memory leak'ach i mimo że na razie lagów w mapie nie doświadczyłem (tak wiem że głównie po dłuższym czasie mogą się pojawić) to dla spokoju przebuduję moje wyzwalacze nieco, i po prostu będę sczytywał pozycję czerwonego i niebieskiego na początku rundy raz a następnie jak już każda jednostka dostanie swój rozkaz to będę usuwać tą lokalizację za pomocą custom scriptu. Może nie będzie to jakiś kamień milowy ale raczej będzie to lepsze niż czytanie pozycji co 0.1 sekundy.
Reply }}}
Podziękowanie od:
#13
W momencie wydawania rozkazu wczytaj pozycje danego bohatera, wydaj rozkaz i usuń wczytany punkt.

Jeśli na początku gry zapiszesz bohatera do zmiennej, to nie musisz sprawdzać jakiego on jest rodzaju, do którego gracza należy itd. Jednostka sama jakby to "wie". Na przykład graczem kontrolującym daną jednostkę jest (Owner of (Jednostka)).
Ten post był edytowany -259638 raz(y) ostatnio edytowany przez Axator: Za 3 pojutrze, 29:89
Reply }}}
Podziękowanie od:

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  




Users browsing this thread:
1 Guest(s)

Silnik forum - © MyBB - Styl forum - iAndrew, grafika - Kithraya, Midas, Bezifabr, Blizzard Entertainment
   
O NAS
Goblin Factory to założone w grudniu 2013 roku forum moderów Warcraft 3 wspólnym wysiłkiem dwóch osób - Scaraba, i WrathaAmona. Celem ich było stworzenie czegoś na wzór starego arcane.pl - miejsca, w którym osoby które wciąż tworzą coś do Warcrafta mogą się spotkać, porozmawiać, zaprezentować swoje dzieła, zapytać o rozwiązanie różnych problemów itd. 22 czerwca 2014 roku Goblin Factory został przeniesiony na nowy silnik, i nowy hosting, a obecnie jest już największym i najpopularniejszym polskim forum dotyczącym Warcrafta 3.