bau script

  • GM 8
  • [video]www.youtube.com/watch?v=ASb9l7WUVso&feature=youtube_gdata_player[/video]
    Hallo.

    Wie kann ich am besten so nen Bauarbeiter script (code)machen wie in prison archtect.
    Punkte . 1 - holen von material
    2- verbauen von material
    3- ruhefase

    Hab schon probiert move towards avoiding objects und mp grid path.... haut nicht aber wirklich hin.

    Mfg. Codecrusher
  • Auf einem Grid zu rennen ist schonmal gut :) Dann hast du begehbare Zonen und nicht begehbare. Du brauchst aber 3 "Routinen", die von Variablen gesteuert werden. Oder einer variable.
    bauen = 0 > er idled rum und fragt ab ob es eine offene baustelle gibt
    bauen = 1 > geh zum nächsten Materiallager und hole benötigtes material (zB material1) definiert durch die Art der nächsten baustelle
    bauen = 2 > geh zur nächsten Baustelle bei der material1 = 0 und bauen = 0

    wie gesagt am besten der bauarbeiter hat ein array/grid oder dummyobjekte die ihm anzeigen wo er sich bewegen kann, du kannst ihn den Bewegungscode in allen 3 Schritten solange ausführen lassen, solange er sich im nächsten Schritt immer noch auf dem Objekt Boden befindet. Am intelligentesten wird er sich bewegen wenn er Kreuzungen und Raumeingängen auf ein unsichtbares Objekt stößt das ihm anzeigt ob er sich auf den Weg zum Materiallager bzw Baustelle befindet oder ob das eine Sackgasse ist, so kannst du ihn in einem Korridor halten den er nicht verlassen kann.

    Aber wende dich mal an Husi, der beschäftigt sich mit dem Thema anscheinend gerade.

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • Kommt ganz draufan, wie dein Spiel ausgelegt ist.

    Hier ein Beispiel:

    GML-Quellcode

    1. if phase = 0
    2. {
    3. move_to("lager");
    4. if position_meeting(x,y,obj_lager)
    5. {
    6. phase = 1
    7. }
    8. }
    9. if phase = 1
    10. {
    11. //und so weiter.
    12. //wenn du ein genaueres beispiel haben willst, mach ich heut abend einen kleinen code für dich
    13. }
    Alles anzeigen
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Ja wäre sehr nett von dir wenn du mir nen beispiel code zeigen könntest.
    Mfg.codecrusher

    Ich mache es eher so:

    Mit maus platziere ich dummy Blöcke
    Game objekt kontroliert ob sich dummy Blöcke auf dem spielfeld befinden.
    Falls ja
    Global. Bau =1
    Ansonsten 0

    Arbeiter script :

    Localvariable beladen=0

    If global.bau=1 & beladen=0 goto materiallager
    If global. Bau=1 & beladen=1 goto nearest dummy block

    Usw. Mehr geht mir ums umsetzung mit mp grid

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CodeCrusher ()

  • bau script ki

    so gleichzeitig ist nächstes problem aufgetaucht...

    mein script

    variable
    Bau=0
    load=0

    wenn ich mit maus dumy block platziere bau=1

    Quellcode

    1. if bau=1 && load=0
    2. {
    3. mp_grid_add_instances(grid, obj_wall, true);
    4. path = path_add();
    5. mp_grid_path(grid, path, x, y, obj_material.x, obj_material.y, 1)
    6. path_start(path, 2,0,1);
    7. }


    bei kollision mit material setze ich load(also beladen) auf 1

    Quellcode

    1. if bau=1 && load=1
    2. {
    3. mp_grid_add_instances(grid, obj_wall, true);
    4. path = path_add();
    5. bauinst=instance_nearest(x,y,dummyblock)
    6. mp_grid_path(grid, path, x, y, bauinst.x, bauinst.y, 1)
    7. path_start(path, 1,0,1);
    8. }

    video mit fehler ( BUG )

    bitte euch um hilfe




    [video]http://www.youtube.com/watch?v=jwGo7G_AeCI[/video]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CodeCrusher ()

  • @ Larsi
    es ist zwar nobel von dir das du ihm helfen willst, aber wirklich hilfreich sind deine Antworten bis jetzt aufjeden fall net!!! Nicht umsonst gibts den Spruch "Wenn man keine Ahnung hat einfach mal die Klappe halten"
    Denn es artet hier doch sehr in gespamme aus!

    @CodeCrusher

    Ich an deiner Stelle würde nur 1mal einen Pfad erstellen und diesen dann dynamisch immer anpassen
    wie das funktioniert zeige ich dir jetzt

    :event_create: CREATE

    GML-Quellcode

    1. Random_path = path_add() // erstellt einen leeren Pfad
    2. Random_way = mp_grid_create(0,0,room_height,room_width,32,32) // Erstellt ein Zellmuster auf dem sich der Spieler bewegt
    3. mp_grid_add_instances(Random_way,Hinderniss,true) // Alle Hindernisse werden so angegeben


    :event_step: STEP

    GML-Quellcode

    1. mp_grid_path(Random_way,Random_path,self.x,self.y,Objekt.x,Objekt.y,true) // Erstellt einen Pfad der Hindernisse umgeht
    2. // Objekt muss halt ständig geändert werden damit er ein neues Ziel hat !!!
    3. path_start(Random_path,5,0,1) // Startet den erstellten Pfad


    Mit diesem Code wird der bereits vorhandene Pfad ständig aktualisiert
    Ich würde dir noch empfehlen falls des noch net hast, ne Bedinung einzufügen das der Player nur dann en Block baut wenn er auch das Ende des pfades erreicht hat,...

    Ich hoffe ich konnte dir helfen,....


    Grüßle Blayde
  • @ blayde - danke es ist schon besser......

    bleibt aber noch immer buggy.... naja

    [video]http://www.youtube.com/watch?v=VbipMuYYI-w[/video]

    Quellcode

    1. // script weg zum material lager
    2. mp_grid_path(Random_way,Random_path,self.x,self.y,obj_barrel.x,obj_barrel.y,true) // Erstellt einen Pfad der Hindernisse umgeht
    3. // Objekt muss halt ständig geändert werden damit er ein neues Ziel hat !!!
    4. path_start(Random_path,2,0,1) // Startet den erstellten Pfad




    Quellcode

    1. // script weg zur baustelle
    2. bauinst=instance_nearest(self.x,self.y,dummyblock)
    3. mp_grid_path(Random_way,Random_path,self.x,self.y,bauinst.x, bauinst.y,true) // Erstellt einen Pfad der Hindernisse umgeht
    4. // Objekt muss halt ständig geändert werden damit er ein neues Ziel hat !!!
    5. path_start(Random_path,1,0,1) // Startet den erstellten Pfad

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CodeCrusher ()

  • Lizard771 hat recht,

    ich würde an deiner stelle mal schauen ob auch alles so funktioniert wie du es dir gedacht hast, codemässig

    Also für mich sieht es so aus als wenn du da wo sie rumbuggen statt dem pfad ihnen ne position zuweist, weil normal sollten die net springen...
    Zudem scheint ja auch deine Wegfindung zum nächsten Objekt noch net so zu passen,...

    entweder du postest deinen Code damit wir ihn mal anschauen können, oder du versuchst folgendes

    erstelle ein Objekt Control

    im Draw Event schreibst dann folgendes


    draw_path(x,y,1) // draw_ path musst aber glaub in dem jeweiligen Objekt machen, sonst gehts net....
    draw_text(10,10,"Variable 1" + string(Objekt.variable1))
    draw_text(10,20,"Variable 2" + string(Objekt.variable2))



    damit kannst du dir die Variablen drawen und sie im spielverlauf beobachten, ob sie auch richtig gesetzt sind....

    Zudem würd mich mal interessieren was deine FPS so machen, sind die konstant oder brechen die ein?


    mach ich immer so wenns net klappt wie ich mir des gedacht hab

    Grüßle
    Blayde
  • Hmm, das es an Studio liegt glaub ich kaum, würde mich doch stark wundern, vorallem was genau soll an Studio liegen? das er springt`?

    Wenn du willst kannst mir mal dein Projekt zuschiken, dann schau ichs mir an und guck mal ob ich den fehler find,...

    oft sind man den Wald vor lauter Bäumen nämlich net

    Grüßle Blayde
  • Hmm, schwer zu sagen, warum des ganze net so funktioniert,

    ohne denn Code zu kennen :(

    hast du mal probiert ob die auch rumspinnen wenn nur 1 Player da ist, sprich sich die Baumeister gegenseitig behindern,

    Ich könnt mal probieren ob ich en Exampel hinbekomm, das du verwenden kannst um deinem Problem beizukommen

    Aber anhand von nehm Video allein ist ne fehleranalyse nur schwer möglich :(
    Grüßle Blayde