Beliebige Instanzen eines Beliebigen Objektes nach einer Variable abfragen?

  • GM 8

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

  • Beliebige Instanzen eines Beliebigen Objektes nach einer Variable abfragen?

    Ich brauch mal wieder Hilfe von euch,
    Wie kann ich beliebige Instanzen eines Beliebigen Objektes nach einer Variable abfragen.

    Es geht darum das ich mich mit AI Programmierung beschäftige und ich will abfragen ob die Instanze eines Objektes in der nähe eine variable
    names: "team" existiert und ob die der variable team_enemy übereinstimmt. Das ganze geht über ein Skript und ich will darin abfragen ob

    GML-Quellcode

    1. if other.team == team_enemy
    2. {
    3. object_enemy = instance_nearest(x,y,other);
    4. }


    oder so ähnlich aber wie bekomme ich das ganze zum laufen?
    Ich will das abgefragt wird ob die Variable einer Instanz 'team' existiert und ob sie der anderen Variable 'team_enemy' übereinstimmt und das davon die näheste Instanz wiederum
    ausgesucht wird um sie zu verfolgen, zu erschießen etc.

    Ich dachte vll an parents aber bin mir nicht sicher weil ich das in mehreren Skripten unterteilen will und da brauch ich dafür ein klein wenig hilfe. Wie ich das
    leistunngschonend mache und richtig und fehlerfrei zum laufen bringe. Falls dafür Erweiterungen, DLLs oder ähnliches gebraucht werden wäre ich bereit sie zu verwenden aber ich denke
    dafür werde ich bestimmt keine brauchen.. :whistling:

    Vielen dank an euch alle im Voraus ;)

    MFG: Mar96K
  • ich glaube danach suchst du:

    GML-Quellcode

    1. /*
    2. ** Usage:
    3. ** inst = instance_find_enemy(object);
    4. **
    5. ** Arguments:
    6. ** object an object to look for
    7. **
    8. ** Returns:
    9. ** inst nearest instance of given (object) where
    10. ** local variable "team" is different than the
    11. ** calling instance, or keyword (noone)
    12. **
    13. ** GMLscripts.com
    14. */
    15. {
    16. var ds,selected;
    17. ds = ds_priority_create();
    18. ds_priority_add(ds,noone,100000000);
    19. with (argument0) {
    20. if (team != other.team) {
    21. ds_priority_add(ds,id,point_distance(x,y,other.x,other.y));
    22. }
    23. }
    24. selected = ds_priority_find_min(ds);
    25. ds_priority_destroy(ds);
    26. return selected;
    27. }
    Alles anzeigen


    mfg
    G
  • Ne das suche ich nicht glaube ich oder kriegs nicht hin..

    Also es soll so funktionieren:

    GML-Quellcode

    1. //Skript bei Mar96K - Germany - www.gm-d.de - 2012 28 Februar func_ai_typ
    2. /* Argumentübergabe: */
    3. typ = argument0; // Typ der AI
    4. /* String* Man kann beliebig viele Typen erzeugen, seien es Zombies, Aliens oder Terroristen etc. */
    5. team = argument1; // Team der AI
    6. /* String* Man kann beliebige Teams erzeugen, sie müssen aber im gleichen Team sein wenn sie Kooperieren wollen */
    7. hp_diff = argument2; // Differenz der HP von 0-100
    8. /* int* Man kann so das Leben von 0-100 Prozent bestimmen wobei 100 sehr schwer und 0 sehr leicht ist */
    9. team_enemy = argument3; // Team die die AI angreifen soll
    10. /* String* Team muss existieren sonst bleibt diese AI neutral */
    11. /*****************************************************************************************************************************************************************************************************/
    12. /* Variablen: */
    13. have_enemys = false; // Boolean ob es Feinde gibt oder nicht
    14. object_enemy = 0; // das verfolgte object später
    15. /*****************************************************************************************************************************************************************************************************/
    16. /* Fehlerbehebung bei Argumenten: */
    17. if typ == "" || typ == 0 then instance_destroy(); // Falls der Typ nicht angeben wird so löscht er die Instance
    18. if team == "" || team == 0 then team = "neutral"; // Falls Team nicht angeben ist so wird es als "neutral" eingestellt.
    19. if hp_diff > 100 then hp_diff = 100; // Falls die hp_diff höher ist als 100 so wird sie auf 100 gestellt.
    20. if hp_diff < 0 then hp_diff = 0; // Falls die hp_diff kleiner ist als 9 so wird sie auf 0 gestellt.
    21. if team_enemy == "" || team_enemy == 0 then have_enemys = false; // Falls es keine Feinde geben soll wird have_enemys auf false gestellt.
    22. else {have_enemys = true;} // Falls es Feinde gibt wird have_enemys auf true gestellt.
    23. /*****************************************************************************************************************************************************************************************************/
    24. /* Object enemy: */
    25. Abfragen welche näheste Instanz eines beliebigen Objektes das eine
    26. variable 'team' in der Instanz besitzt,
    27. bei dem soll die Variable 'team' wert auf 'team_enemy' überprüft werden,
    28. damit ich diesen verfolgen etc. kann
    29. Ich will sozusagen Gruppen erstellen und deren Gruppen eine feindekiche
    30. Gruppe zuwweisen kann es gibt auch Neutrale AI s
    31. Seien es Zombies die einen verfolgen, AI die einen angreifen/verteidigen/helfen
    32. oder einfach nur Rumlaufen...
    33. Es sollen zususagen alle Objekte die den Wert 'team' haben im
    34. Raum abgefragt werden und auf Gleich mit 'team_enemy' überprüft werden
    35. und davon die nächste in eine Variable gespeichert werden.
    36. /*****************************************************************************************************************************************************************************************************/
    Alles anzeigen


    Ich weis es ist nicht so einfach aber ich werde nicht schlau wie ich das anstellen soll. Ich hoffe jeder konnte mich verstehen Danke für die bes jetzige hilfe vll ist das oben auch eine halbe lösung nur das ich nicht weis wie ich sie richtig verwenden soll und im Game Maker Handbuch werden sie nur beschrieben vielen dank im Voraus ;)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von mar96k ()

  • wenn du den nächsten Gegner in einer Variable speichern willst geht das zB so:
    das oben gepostete script speichern (hier zB als scr_choose_enemy())

    Natürlich musst du das Script vorher an deine Variablen anpassen:
    Anstatt:

    GML-Quellcode

    1. if (team != other.team)

    so zB

    GML-Quellcode

    1. if (team == other.team_enemy)


    wenn du nun folgenden Code ausführst wird in var_enemy die ID des nächstgelegenen Gegners gespeichert und du kannst damit anstellen was immer du willst:

    GML-Quellcode

    1. var_enemy = scr_choose_enemy(obj_einheiten); // obj_einheiten durch deinen Objektnamen ersetzen