Fragen für Td

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • vielen dank.

      nächstes Problem:
      wenn ich beim objekteditor eine einheit kopiere oder einige werte, wie z.B. den tooltip eines gebäudes ändere kommt es zu längeren ladezeiten/standbildern von ca. 5-10 sekunden, was beim erstellen von einheiten sehr nervig ist...
      was kann man dagegen tun?
    • so nächstes problem:

      ich wollte für die td das lina ulti nachbaun^^
      welche grafikteile muss ich dafür benutzen und welcher spell ist am besten als grund-spell?

      alternativ würde ich auch diesen phönix aoe zauber von lina nehmen, glaube aber der ist noch schwieriger nachzumachen.

      edit: außerdem noch ein problem: wollte einen tower mit skin vom phönix ei erstellen, er hat aber den skin vom phönix (nicht vom ei), wie änder ich das?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von P@u1 ()

    • 1. nimm kettenblitz: ziele auf 1 stellen, blitzgrafik nach belieben^^ und dmg auch^^
      2. den phönix aoe zauber machst du aus schockwelle--->geschossgrafik in einheit-Phönix ändern ;)
      3. entweder baust du ein gebäude dass auf dem ei basiert oder du musst die graphik "alternative" aktivieren (weis aber leider au ned genau wie des geht :/ schau mal wies beim ei gemacht is ;)

      mfg Quirryll


      "Folgt mir oder sterbt!"
      Ich hatte mal nen Pudge, der mit seinem Haken die Bäume fällen wollte um so an das Holz für die Rezepte zukommen...

    • Ich hab ne Idee: Poste sämtliche Tower-Ideen mitsamt Kartenlayout und Mechanik und einer macht dir die Karte schon :P

      Ehrlich, das Zeug nach dem du da fragst hatte ich damals nach 10 Minuten rumprobieren raus ;)

      Immerhin kannst du nichts kaputt machen, also schraub mal ein bissl an den Einstellungen rum und guck ob das Ergebnis irgendwie brauchbar ist, anstatt hier für jeden Fitzel ne Frage zu stellen ^^
      (Nicht, dass der Sammelthread noch keine Verbesserung darstellen würde)

      Für wirkliche Probleme ist das hier natürlich eine hervorragende Stelle um Hilfe zu bekommen.
      [dementedshaman_64] [ophelia_64] [accursed_64] [succubus_64] [jeraziah_64]

      [dementedshaman2_64] [ophelia4_64] [accursed2_64] [succubus3_64] [jeraziah1_64]

      Supporter for Life

    • so hab ma wieder ein problem:
      hab einen tower erstellt mit skin eines drachen.
      das prob ist: der tower bzw. drache hängt halb im boden drin^^
      wolltes eig durch ändern der werte
      bewegung - höhe -> hochsetzen
      bewegung - minimale höhe -> hochsetzen
      und bewegung-typ -> schweben
      beheben, aber er hängt immer noch im boden.
      dann hab ich die sachen die in diesem guide stehen versucht: hiveworkshop.com/forums/f278/tower-turning-tutorial-33448/
      also dabei macht man verwurzeln auf den tower damit er sich drehen kann und unten steht auch was zur flughöhe.
      nur das prob ist, das der tower trotz allem noch immer im boden hängt... was kann ich da tun?
      edit: komischerweise wird der tower im editor in der luft angezeigt, im game hängt er aber im boden.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von P@u1 ()

    • so das prob is gelöst, hab jetzt aber noch eins

      hab gerade ne unit erstellt mit nem runtergeladenen skin und wenn ich dann mache, dass das gebäude eine vorraussetzung hat wird im baumenü nur ne grüne box angezeigt, bis ich die vorraussetzung erfüllt habe, wie kann ich das beheben?
      hab irgendwo gelesen das ich ne zweite datei mit DISBTN davor brauch oder so.

      der pfad der richtigen datei ist: "Lightning_Ball_01.blp"
      wenn ich dann die gleiche datei nochma mit dem pfad "DISBTNLightning_Ball_01.blp" importiere klappts nicht.
      irgendwo stand, dass da ReplaceableTextures\CommandButtonsDisabled oder so davor muss, aber irgendwie klappts immer noch nicht so richtig. also der pfad vom richtigen ist "Lightning_Ball_01.blp", wie muss ich dann den pfad der DISBTN machen? oder muss ich den pfad der richtigen datei auch ändern mit irgendwas mit replaceable textures?
    • soooo hab ma wieder nen neues problem....

      also nachm spawn werden die creeps immer geordert sich zum nächste checkpoint zu bewegen, wenn man dann zubaut greifen sie also an.
      aber obwohl die kollisionsgröße der einheiten glech 0 ist kommt es manchma dazu das sie sich ein bischen blocken, was oft auch dazu führt, dass tower angegriffen werden, obwohl eigentlich gar nicht zugebaut ist. wie kann ich das am bestn verhindern und warum blocken sich die units trotz kollisionsgröße 0 manchmal?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von P@u1 ()

    • Vielleicht hast du es ja noch nicht gelöst. Bezüglich deines Problems mit dem Blocken kannst du folgenden Befehl anwenden:

      Quellcode

      1. Einheit - Turn collision for (Triggering unit) Aus


      Bei dem Verwurzeln, dass die Units im Boden gehangen haben, im Editor aber geflogen sind: Wo war denn da der Fehler?
    • ich hab statt nem gebäude ne einheit ohne movespeed verwendet^^

      aber irgendwie macht das auch paar probleme, weil die gegner wenn ich so nen drachen richtig platziere nur noch hin und herrennen, weil die aus irgendeinem grund nicht an dem drachen vorbei wollen und dann weiterrennen und kurz danach zurückrennen, aber ich versuch erstmal die kollisiongröße auf 0 zu setzen von der einheit, die war nämlich auf 72 wies bei allen anderen towern auch war, hoffe nur mal das die gegner dann nicht durch den "tower" bzw die unit durchgehen können.


      achja mit trigger turn collision off sorgt auch dafür, dass die einheiten durch gebäude durchrennen können was nicht so gut ist, habs jetzt aber so gelöst das ich den creeps die fähigkeit geist(sichtbar) adde, was sxehr gut funktioniert, weil die kollision wirklich ganz weggeht, die einheiten aber trotzdem noch von towern geblockt werden.

      hab jetzt das problem, das besonders wenn das spiel schon länger läuft (also es kann auch sein das das nur daran liegt das man dann mehr tower hat) das spiel nur noch mit SEHR wenigen frames (teilweise gehts unter 1 frame(!!!!)) läuft, weiß aber nicht so genau woran das liegt.
      bisher hab ich die memory leaks noch net weggemacht, ist das sehr wichtig? ich hab ma nachgeguckt im task manager und da wurde angezeigt, dass nur ca 300 mb speicher gebraucht werden, aber habn die leaks sonst nochn nachteil, weils vll auch cpu kostet den speicher zu verwalten oder so? und das mit den leaks hab ich noch nicht so ganz verstanden, wenn ich z.B. mache


      create 1 unit at Checkpoint[1]...

      (Checkpoint ist ein array), verursacht das dann auch ein leak?
    • Das mit den Memory Leaks kannst du dir so vorstellen. Dein Arbeitsspeicher ist eine Lagerhalle. In dieser hast du Kisten. Wenn du jetzt sagst "Create 1 Soldat at Position of Schütze" dann nimmt Warcraft die Position vom Schützen, packt sie in eine Kiste rein und lässt diese unbeschriftet. Das heißt nachdem dieser Befehl aufgerufen wurde, kannst du die Kiste nicht mehr verwenden, sie nimmt aber Platz weg. Dafür gibt es dann Variablen, sozusagen beschriftete Kisten, die du immer wieder verwenden kannst. Also anstelle das du immer neuen Platz mit neuen Kisten zustellst, kannst du immer die gleiche verwenden. Du musst dir also einfach bei deinen Triggern überlegen, ob du einen Wert benutzt, welchen du niergends speicherst, dann verursachst du einen Memory Leak. (Hoffe die bildliche Darstellung hilft weiter anstelle zu verwirren ^^)

      Dein Beispiel würde also keinen Memory Leak verursachen, da ja Checkpoint eine Variable ist. Das aber trotzdem manchmal die Framerate so stark sinkt kann entweder an fehlerhaften Triggern oder einer übertriebenen Benutzung von Effekten liegen. Wenn man in deiner Map noch was erkennen kann, dann wird es wohl eher an einem Trigger liegen. Beispielsweise Endlosschleifen, andauernde Aufrufe eines Triggers (Ein Trigger mit einem oft auftretenden Ereignis z.B. "Zeit - Every 0.02 seconds of game time") oder einfach zu umfangreiche Prozeduren (Map mit 10'000 Units und du packst sie in eine Einheitengruppe und lässt was mit ihnen machen).
    • aber wenn ich z.B. folgendes mache:

      set temp_point = center of (playable map area)
      create 1 soldat at temp point facing ...

      wieso muss ich dann noch

      call removeLocation(udg_temp_point) oder so ähnlich machen?

      das ist ja jetzt kein wert den ich nirgends speicher, er wird ja in temp_point gespeichert.
      beim nächsten mal wird temp_point einfach überschrieben.

      und ich hab ja im task manager geguckt wieviel speicher verbraucht wird, er zeigte ca an:
      Commit Charge 350M/3942M , also noch SEHR viel frei, also sollten die memleaks doch eig nich interessieren außer wenn man nen crap pc hat, oder braucht die verwaltung des speichers soviel CPU, dass sich das auch noch darauf auswirkt?

      und integer und last created unit können keine memleaks verursachen oder?
    • Das löschen der Variable ist nur nötig, wenn du sie Lokal erstellst. Lokal heißt, dass du praktisch eine Kopie der Variable machst, welche nur in dem einen Trigger verwendet werden kann (falls du noch normale Programmiersprachen o.Ä. kennst, solltest du das ja kennen). Beispiel aus meiner TD:

      Quellcode

      1. Aktionen
      2. -------- Initialisierung --------
      3. Custom script: local effect udg_tmp_effect_1
      4. -------- Effekt --------
      5. Spezialeffekt - Create a special effect attached to the chest of (Triggering unit) using Abilities\Spells\Human\Avatar\AvatarCaster.mdl
      6. Set tmp_effect_1 = (Last created special effect)
      7. -------- Entfernung --------
      8. Wait 1.50 seconds
      9. Spezialeffekt - Destroy tmp_effect_1

      Ich habe also eine Variable für Spezialeffekte noch einmal Lokal erstellt, weil es ja sein kann, dass innerhalb der 1.5 Sekunden der Trigger nochmal ausgelöst wird und tmp_effect_1 überschrieben wird. Somit würde der Spezialeffekt vom ersten Auslösen nicht zerstört werden und der vom zweiten Triggerstart durch das erste Auslösen frühzeitig gelöscht werden.
      Deswegen erstellst du eine lokale Variable, welche nur in dem Triggerdurchlauf vorhanden ist. Sollte der Trigger nochmal gestartet werden, wird eine neue lokale Variable erzeugt und die alte bleibt unberührt.
      Wenn ein Trigger kein "Wait" hat oder einen anderen selten auftretenden Umstand mit sich bringt, dann ist das erzeugen lokaler Variablen an sich unnötig und es muss auch nichts entfernt werden. Beispielsweise:

      Quellcode

      1. Aktionen
      2. -------- Initialisierung --------
      3. Set tmp_point_1 = (Position of (Target unit of ability being cast))
      4. -------- Zaubern von Berserker --------
      5. Einheit - Create 1 Dummy (CadP) for (Owner of (Triggering unit)) at tmp_point_1 facing Vorgabe für Gebäude-Ausrichtung degrees
      6. Einheit - Add Gravitation (Dummy-Spell) to (Last created unit)
      7. Einheit - Order (Last created unit) to Menschen-Zauberin - 'Langsam' (Target unit of ability being cast)
      8. Einheit - Remove (Last created unit) from the game


      Hier muss man den Punkt nicht löschen, da (um wieder auf meine Metapher zurückzukommen) die Kiste ja immer wieder verwendet werden kann. Bei lokalen Variablen wäre das nicht der Fall, sie würden nur leer im Lagerraum rumstehen :fine:

      Memory Leaks sind auch wie gesagt wahrscheinlich nicht dein Problem, sondern ein fehlerhafter Trigger.

      Edit: Wenn du dir noch unsicher mit Leaks bist, kannst du "Leak Check" verwenden. Es handelt sich um ein Programm von Im_On_56k.
      Dateien
      • Leak Check.zip

        (190,07 kB, 1 mal heruntergeladen, zuletzt: )
    • k, vielen dank

      fehlerhafter trigger? hm wüsste nicht an welchem trigger es liegen soll

      achja und hab das prog gerade ma getestet, scheint zu klappen, aber den lösungsvorschlag des programms kapier ich nicht
      das prog hat ausgegeben:

      Quellcode

      1. (Line: 18 ) (Word: 7 ) Unit Group Leak
      2. Einheitengruppe - Pick every unit in (Units in Area[(Integer A)]) and do (If ((Owner of (Picked unit)) Gleich (Player((Integer A)))) then do (Einheit - Order (Picked unit) to Orc-Klingenmeister - 'Windlauf') else do (Do nothing))
      3. Einheitengruppe - Pick every unit in ^Leak
      4. (Suggested fix) Custom Script: bj_wantDestroyGroup = true
      5. (Suggested fix) Einheitengruppe - Pick every unit in (Units in Area[(Integer A)]) and do (If ((Owner of (Picked unit)) Gleich (Player((Integer A)))) then do (Einheit - Order (Picked unit) to Orc-Klingenmeister - 'Windlauf') else do (Do nothing))


      was macht Custom Script: bj_wantDestroyGroup = true ? ist das ne alternative möglichkeit die leaks zu fixen oder drückt sich das programm nur komisch aus? ^^




      achja und noch nen prob:
      ich hab nen tower, der die gegner sheepen kann, was aber manchmal dazu führt, dass die gegner angreifen.
      hab das mit den triggern hier versucht zu fixen:

      zunächst der erste trigger, der dafür sorgt das der 2te überhaupt aufgerufen wird:

      Quellcode

      1. Leshrac add
      2. Ereignisse
      3. Einheit - A unit Vollendet den Bau
      4. Bedingungen
      5. (Unit-type of (Triggering unit)) Gleich Leshrac
      6. Aktionen
      7. Auslöser - Add to Leshrac order <gen> the event (Einheit - (Triggering unit) Bemerkt ein Ziel in Reichweite)


      jetzt der zweite trigger, der dem tower sagt das er hexen soll und das angreifen der gegner durch erneutes befehlen zum nächsten checkpoint zu laufen verhindern soll

      Quellcode

      1. Leshrac order
      2. Ereignisse
      3. Bedingungen
      4. Aktionen
      5. Einheit - Order (Triggering unit) to Orc-Schattenjäger - 'Hexerei' (Targeted unit)
      6. Wait 0.99 seconds
      7. Einheit - Order (Targeted unit) to Bewegen nach (Center of Checkpoint[(Custom value of (Targeted unit))])
      8. For each (Integer x) from 1 to 5, do (Actions)
      9. Schleifen - Aktionen
      10. Wait 0.01 seconds
      11. Einheit - Order (Targeted unit) to Bewegen nach (Center of Checkpoint[(Custom value of (Targeted unit))])
      12. Wait 2.17 seconds
      13. Einheit - Order (Targeted unit) to Bewegen nach (Center of Checkpoint[(Custom value of (Targeted unit))])
      Alles anzeigen


      (hex hat auf helden eine dauer von 1 sekunde und auf normale einheiten 3,2 sek)
      bei normalen einheiten funktioniert der fix^^
      für helden irgendwie nich
      das mit for for each integer hab ich gemacht, um auf nummer sicher zu gehen, nachdem die helden wieder angegriffen hatten, aber irgendwie hilfts bei helden immer noch nich
    • Zum Leak Check. Das Problem ist, dass du eine Einheitengruppe ansprichst, die in keiner Variable gespeichert ist. Das hießt Warcraft 3 macht wieder folgendes. Du sagst: Nimm alle Einheiten in Area[X] -> Warcraft 3 nimmt jetzt alle Einheiten in Area[X] und packt sie in einen unbeschrifteten Karton. Er macht die Schleife durch und der verbrauchte Platz für die Einheitengruppe bleibt verbraucht.
      Der Lösungsvorschlag von Leak Check ist eine Lösung. Ich persönlich mache es aber mit einer (globalen) Variable, was dann eher so aussieht:

      Quellcode

      1. Set tmp_unitgroup = (Units in (Playable map area))
      2. Einheitengruppe - Pick every unit in tmp_unitgroup and do (Actions)
      3. Schleifen - Aktionen


      Dein anderes Problem kann ich mir erst morgen anschauen, dafür hab ich gerade keine Zeit / Lust :fine:
    • P@u1 schrieb:

      k, trotzdem vielen dank, lass dir zeit ;)
      Um das Sheep-Problem zu lösen, müsstest du mal ein paar Abfragen einbauen. Anregungen wären: Erhält die Einheit wirklich die Befehle nach dem Sheep? Werden der Einheit wirklich die Befehle (ob nun während oder nach dem Sheep) überhaupt gegeben? Erhält der Gegner, wenn er ein Held ist, auch den Befehl nach dem Wait 2.17 seconds und wenn ja, wie reagiert er darauf?
      Solche Abfragen kannst du durch Ereignisse ("Einheit - A unit Erhält einen auf einen Punkt zielenden Befehl") oder auch einfach durch Textausgaben mit If-Then-Else Abfragen durchführen.

      Wenn du aus den Tests nicht schlau wirst, kannst du hier ja mal schreiben, was du getestet hast, wie du dafür deinen Trigger angepasst hast und was für Ergebnisse rauskamen.
    • ok, um das sheep problem werde ich mich später kümmern, mir ist gerade beim testen aufgefallen, dass der trigger der wenn wer leavt das leavergold aufteilt nen fehler hat, kann ihn aber nach mehrfachem durchlesen immer noch nicht finden. der trigger wird erstmal durch diesen trigger ausgelöst:

      Quellcode

      1. Leave
      2. Ereignisse
      3. Spieler - Spieler 1 (Rot) leaves the game
      4. Spieler - Spieler 2 (Blau) leaves the game
      5. Spieler - Spieler 3 (Blaugrau) leaves the game
      6. Spieler - Spieler 4 (Lila) leaves the game
      7. Spieler - Spieler 5 (Gelb) leaves the game
      8. Spieler - Spieler 6 (Orange) leaves the game
      9. Spieler - Spieler 7 (Grün) leaves the game
      10. Spieler - Spieler 8 (Rosa) leaves the game
      11. Spieler - Spieler 9 (Grau) leaves the game
      12. Spieler - Spieler 10 (Hellblau) leaves the game
      13. Bedingungen
      14. Lives[(Player number of (Triggering player))] Größer als 0
      15. Aktionen
      16. Set Defeated[(Player number of (Triggering player))] = True
      17. Auslöser - Run Share Gold <gen> (checking conditions)
      18. Spiel - Display to (All players) the text: ((Name of (Triggering player)) + has left the game.)
      Alles anzeigen


      dann hier der eigentliche trigger (sehr lang xD)

      Quellcode

      1. Share Gold
      2. Ereignisse
      3. Bedingungen
      4. Teammode Gleich True
      5. Aktionen
      6. Set write = False
      7. Set Team1_Leaver_Gold = 0
      8. Set Team2_Leaver_Gold = 0
      9. Set Team1_Player_Amount = 0
      10. Set Team2_Player_Amount = 0
      11. -------- calculate leaver gold --------
      12. For each (Integer A) from 1 to 10, do (Actions)
      13. Schleifen - Aktionen
      14. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      15. 'IF'-Bedingungen
      16. Defeated[(Integer A)] Gleich True
      17. 'THEN'-Aktionen
      18. Einheitengruppe - Pick every unit in (Units in Area[(Integer A)]) and do (If ((Owner of (Picked unit)) Gleich (Player((Integer A)))) then do (Einheit - Order (Picked unit) to Orc-Klingenmeister - 'Windlauf') else do (Do nothing))
      19. Wait 0.01 seconds
      20. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      21. 'IF'-Bedingungen
      22. (Integer A) Kleiner als 6
      23. 'THEN'-Aktionen
      24. Set Team1_Leaver_Gold = (Team1_Leaver_Gold + ((Player((Integer A))) Aktuelles Gold))
      25. Spieler - Set (Player((Integer A))) Aktuelles Gold to 0
      26. 'ELSE'-Aktionen
      27. Set Team2_Leaver_Gold = (Team2_Leaver_Gold + ((Player((Integer A))) Aktuelles Gold))
      28. Spieler - Set (Player((Integer A))) Aktuelles Gold to 0
      29. 'ELSE'-Aktionen
      30. Do nothing
      31. -------- calculate player amount --------
      32. For each (Integer A) from 1 to 5, do (Actions)
      33. Schleifen - Aktionen
      34. If (Defeated[(Integer A)] Gleich False) then do (Set Team1_Player_Amount = (Team1_Player_Amount + 1)) else do (Do nothing)
      35. For each (Integer B) from 6 to 10, do (Actions)
      36. Schleifen - Aktionen
      37. If (Defeated[(Integer B)] Gleich False) then do (Set Team2_Player_Amount = (Team2_Player_Amount + 1)) else do (Do nothing)
      38. -------- add gold --------
      39. For each (Integer B) from 1 to 5, do (Actions)
      40. Schleifen - Aktionen
      41. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      42. 'IF'-Bedingungen
      43. Team1_Leaver_Gold Ungleich 0
      44. Defeated[(Integer B)] Gleich False
      45. 'THEN'-Aktionen
      46. Spieler - Add (Team1_Leaver_Gold / Team1_Player_Amount) to (Player((Integer B))) Aktuelles Gold
      47. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      48. 'IF'-Bedingungen
      49. write Gleich False
      50. 'THEN'-Aktionen
      51. Spiel - Display to (All players) the text: ((String(Team1_Leaver_Gold)) + gold has been shared among team1.)
      52. Set write = True
      53. 'ELSE'-Aktionen
      54. 'ELSE'-Aktionen
      55. Do nothing
      56. For each (Integer B) from 6 to 10, do (Actions)
      57. Schleifen - Aktionen
      58. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      59. 'IF'-Bedingungen
      60. Team2_Leaver_Gold Ungleich 0
      61. Defeated[(Integer B)] Gleich False
      62. 'THEN'-Aktionen
      63. Spieler - Add (Team2_Leaver_Gold / Team2_Player_Amount) to (Player((Integer B))) Aktuelles Gold
      64. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      65. 'IF'-Bedingungen
      66. write Gleich False
      67. 'THEN'-Aktionen
      68. Spiel - Display to (All players) the text: ((String(Team2_Leaver_Gold)) + gold has been shared among team2.)
      69. Set write = True
      70. 'ELSE'-Aktionen
      71. 'ELSE'-Aktionen
      72. Do nothing
      Alles anzeigen


      achja das mit windwalk das sorgt dafür das alle tower verkauft werden.
      also manchmal klappt es, manchmal werden die tower nicht verkauft, einmal hat das falsche team das gold gekriegt, einmal kam keine meldung ,dass das gold aufgeteilt wurde (aber die leavermeldung kam, also wurde der share gold trigger auch gecallt) und der spieler hatte auch sicher mehr als 0 gold^^ , irgendwie komisch, aber ich habs ziemlich oft durchgelesen und kann einfach keinen fehler finden...
      wenns euch zuviel arbeit ist dann is auch kein prob dann werd ich nochma selber versuchen da was zu ändern, aber ich find halt den fehler nicht^^