• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Den Status mehrere Personen abfragen, wie geht das am besten

Secundus

Geocacher
Folgende Situation:
Der Spieler kommt an ein Haus und soll dort die Nachbarn befragen. Es sind 4 Nachbarn. Erst wenn alle befragt sind soll der Task erledigt sein und es weiter gehen.
Momentan habe ich bei jedem Nachbarn eine bool variable definiert (nachbar1_befragt). Nach der Befragung wird diese auf true gesetzt. direkt anschließend kommt eine abfrage if nachbar1_befragt = true und nachbar2_befragt = true und nachbar3_befragt = true und nachbar4_befragt = true dann....
Und das bei jeder Person! Das kommt mir doch etwas umständlich vor. Kann man das nicht etwas globalisieren?

PS: Ich arbeite mit urwigo
 

docfred

Geocacher
Secundus schrieb:
Folgende Situation:
Der Spieler kommt an ein Haus und soll dort die Nachbarn befragen. Es sind 4 Nachbarn. Erst wenn alle befragt sind soll der Task erledigt sein und es weiter gehen.
Momentan habe ich bei jedem Nachbarn eine bool variable definiert (nachbar1_befragt). Nach der Befragung wird diese auf true gesetzt. direkt anschließend kommt eine abfrage if nachbar1_befragt = true und nachbar2_befragt = true und nachbar3_befragt = true und nachbar4_befragt = true dann....
Und das bei jeder Person! Das kommt mir doch etwas umständlich vor. Kann man das nicht etwas globalisieren?

PS: Ich arbeite mit urwigo

Man könnte diese Abfrage in eine Funktion auslagern und diese nach jeder Befragungung aufrufen.
Man könnte z.B. nach der Befragung den Command (Frage) bei den Personen deaktivieren und diese Flags in der Funktion abfragen und ggf. den Task auf completed setzen (oder deaktivieren, da completed auf Garmin "nicht geht") .

docfred
 

jonny65

Geomaster
Ich hab so was ähnliches, paar Items aus dem Keller mitnehmen. Bei jedem "Nehmen" wird ein Flag des Items auf True gesetzt und natürlich "Nehmen" deaktiviert.
Also z.b TagebuchGenommen=true und Tagebuch.Nehmen=disable
Nach diesen 2 Kommandos wird eine Funktion aufgerufen (wie docfred angedeuted hat) in der steht :
if TagebuchGenommen=true and LampeGenommen=true and .... then AllesMitgenommen=true (hier können dann Messages aufpoppen wie "Du hast in dieser Zone alles erledigt, suche nun ..."
Ins ZoneExit Event kommt dann noch ein Check auf AllesMitgenommen=true.
Wenn false, dann "Du hast was vergessen...." Wenn true dann Cratridge speichern.
Vorteil ist klar, du brauchst das "if TagebuchGenommen=true and LampeGenommen=true and ...." nur einmal, eben in der Funktion, die du nach jedem "Nehmen" Kommando des entsprechenden Items aufrufst.

Edit : Statt einer Variablen "AllesMitgenommen" kann man auch einen Task auf complete setzen und diesen Zustand abfragen. Der Task hat den Vorteil, daß ihn der Spieler auch sieht bei seinen "Aufgaben", hier steht dann z.b "Gehe in den Keller und schau dich hier etwas um, ob du was findest, was dir weiterhelfen könnte"
 
Zähle doch einfach jedes mal wenn du eine Person befragt hast eine Variable hoch und frage dann noch ab.

Oder lagere das Abfragen in eine Funktion aus,.....

Es gibt wirklich gute Tutorials die hier im Forum vorgestellt wurden. Lies dich dort mal ein.
 

jonny65

Geomaster
BachgassenBande schrieb:
Zähle doch einfach jedes mal wenn du eine Person befragt hast eine Variable hoch und frage dann noch ab.

Geht nicht ohne Zusatzbehandlungen...du befrägst den Polizisten 2 mal und den Hausmeister kein mal, die Variable steht auf 2, was falsch ist.Den Polizisten disablen, daß man ihn nicht noch mal fragen kann ist eine schlechte Lösung
 
Wenn es nur um Items geht die von den Personen genommen werden müssen, dann zähle doch erst hoch wenn das Item im Inventar des Spielers ist.

Hier sind viele Lösungsmöglichkeiten vorhanden,...
Aufgaben; Variable hochzählen; überprüfen ob Item im Inventar vom Spieler liegt; Funktion einfügen; ect,....
 

WhitePawn

Geocacher
Jonny65 schrieb:
BachgassenBande schrieb:
Zähle doch einfach jedes mal wenn du eine Person befragt hast eine Variable hoch und frage dann noch ab.

Geht nicht ohne Zusatzbehandlungen...du befrägst den Polizisten 2 mal und den Hausmeister kein mal, die Variable steht auf 2, was falsch ist.Den Polizisten disablen, daß man ihn nicht noch mal fragen kann ist eine schlechte Lösung

Ich finde das zählen auch die einfachste Möglichkeit. Warum soll man es sich unnötig schwer machen. Man könnte ja die Frage anschließend disablen.
 

jonny65

Geomaster
Wenn man es sich nicht schwer machen will, dann macht man gar keinen Wherigo. :/ Es kommt ziemlich schlampig rüber, wenn entweder ein 2. Dialog gar nicht mehr kommt oder der gleiche nochmal. Der 2. kann dann so bleiben, sonst wird es natürlich umständlich und der Spieler klickt öfters noch ein 2.mal auf "Ansprechen", ein 3. mal wohl eher nicht. Und eine Abfrage nach "MitPolizistGesprochen true/false" ist ja nun wirklich keine nächtelange Programmierung, dafür sauber und v.a realistischer.
 

WhitePawn

Geocacher
Jonny65 schrieb:
Wenn man es sich nicht schwer machen will, dann macht man gar keinen Wherigo. :/
Was hat ein Wherigo mit "sich schwer machen" zu tun? Es geht darum, ob man umständlich programmiert oder nicht. Und unnötig Variablen anzulegen ist umständlich und reduziert die Übersichtlichkeit.

Jonny65 schrieb:
Es kommt ziemlich schlampig rüber, wenn entweder ein 2. Dialog gar nicht mehr kommt oder der gleiche nochmal.
Was jetzt? Nix erfinden, wovon keiner gesprochen hat. Man spricht die Person an, die Info wird angezeigt und im Anschluß des Dialogs wird die entsprechende Funktion (nennen wir sie "ansprechen") bei der Person disabled und ein Zähler erhöht.

Jonny65 schrieb:
Der 2. kann dann so bleiben, sonst wird es natürlich umständlich und der Spieler klickt öfters noch ein 2.mal auf "Ansprechen", ein 3. mal wohl eher nicht. Und eine Abfrage nach "MitPolizistGesprochen true/false" ist ja nun wirklich keine nächtelange Programmierung, dafür sauber und v.a realistischer.
Sauber und realistisch??? :kopfwand:
Wir haben für die eine Zone schon 4 booleans. Wenn das in anderen Zonen auch nochmal kommt, wird's langsam unübersichtlich. Außerdem ist ein Abfrage ob ein Zähler einen bestimmten Wert hat sicherlich sauberer und übersichtlicher als 4 booleans über ein logisches und zu verknüpfen.

Warum sollte man nicht einfach die Frage disablen und einen Zähler hoch setzen? Nach einmal fragen, sollten alle Infos übergeben sein. Zur Not könnte man dem Spieler noch ein Notizbuch einstecken und die Infos da nochmal reinschreiben, fall er es nicht schafft, sich das alles zu merken.
Von mehr als einmal fragen hat der TO übrigens auch nichts erwähnt.

Jonny65 schrieb:
Also z.b TagebuchGenommen=true und Tagebuch.Nehmen=disable
Nach diesen 2 Kommandos wird eine Funktion aufgerufen (wie docfred angedeuted hat) in der steht :
if TagebuchGenommen=true and LampeGenommen=true and .... then AllesMitgenommen=true (hier können dann Messages aufpoppen wie "Du hast in dieser Zone alles erledigt, suche nun ..."
Dafür gibt's den Befehl "enthält". Damit kann man abfragen, ob der Spieler etwas im Inventar hat und spart sich schon wieder einen boolean. In dem Beispiel sogar mehr als einen.
Je weniger Variablen, desto übersichtlicher.
 

jonny65

Geomaster
Gut disable die Frage oder schieb den Charakter to none, ist dann sicher übersichtlicher, 100 Wherigos, 100 Programmierer, 100 Meinungen ;)
 
Oben