Jump to content

Umsetzung eines !Explore Befehls für McCraftbot


Squall
 Share

Recommended Posts

Hallo Liebe leute ich Brauch mal eure hilfe bei etwas 
Mein Logisches Zusamsetzen ist etwas beschränkt und ich suche Ideen und rat.

Ich bin dabei einen Minecraftbot zu Programmieren der einen Minecraftserver verwalten und einstellen lässt über einen Chat (IRC)
Wer nicht weis was IRC ist solle bitte googlen.
Dieser soll gegebenfalls kleine Minecraftbefehle auch beinhalten wie !explore !craft !chop !fish !mine etc...

Momentan habe ich eine Spielerdb die angelegt wird sobal man !neuer Spieler schreibt diese ist wie folgt aufgebaut:

msl = Mirc Scripting Language:
[AccountInfo]
Name=Squall
Leben=20
Hunger=20
LastPos= // Hier stehen dann die Startcords die Zufällig generiert werden..
InventarSlots=9
Passwort=[ausgeblendet]

[InventarSlot1]
Name=WOODEN_AXE
Anzahl=1

[InventarSlot2]
Name=WOODEN_HOE
Anzahl=1

[InventarSlot3]
Name=WOODEN_SHOVEL
Anzahl=1

[InventarSlot4]
Name=WOODEN_PICKAXE
Anzahl=1

[InventarSlot5]
Name=WOODEN_SWORD
Anzahl=1

[InventarSlot6]
Name=APPLE
Anzahl=6

[InventarSlot7]
Name=AIR
Anzahl=0

[InventarSlot8]
Name=AIR
Anzahl=0

[InventarSlot9]
Name=AIR
Anzahl=0


Hier mal ein Einblick in den Code für LastPos:
 

msl = Mirc Scripting Language:
Alias LastPos {
  var %maxcords 3
  var %cordgen 1
  while (%cordgen <= %maxcords)  {
    echo -ag Durchgang %cordgen
    var %x $rand(1,500)
    var %y $rand(1,64)
    var %z $rand(1,500)
    var %negate-x $rand(1,100)
    var %negate-y $rand(1,100)
    var %negate-z $rand(1,100)
    echo -ag Negate Changen x= %negate-x y= %negate-y z= %negate-z
    if (%negate-x <= 50) { var %xpos - $+ %x }
    if (%negate-y <= 50) { var %ypos - $+ %y }
    if (%negate-z <= 50) { var %zpos - $+ %z }
    if (%negate-x >= 50) { var %xpos %x }
    if (%negate-y >= 50) { var %ypos %y }
    if (%negate-z >= 50) { var %zpos %z }
    inc %cordgen
  }
  echo -ag LastPos sind: x= %xpos y= %ypos z= %zpos
  set %mcposition %xpos %ypos %zpos
  echo -ag ->>>> %mcposition
}


Nun zu meiner Denklücke:

Beim !Explore Befehl wird zu Allererst die Letzte Position aus der Spielerdb gelesen und und in einer Variable gespeichert.
Soweit so gut. Nun muss ich ja noch Zahlreiche Biomes Anlegen die eine Bestimmte größe haben diese werden dann in einer Biome.db gespeichert.

Die Biome.db würde dann wahrscheinlich wie folgt aussehen:
 

Code:
[Info]
Biomelist=Biomeid1.biomeid2.biomeid2 // usw etc.

[Bimome1]
Name= // Biomenname
Desc= // Beschreibung der Biome
Trees= // Welche Baumarten findet man dort
Blocks= // Welche Blöcke Beinhaltet dieses Biom
Size= // Die Größe des Bioms (Coordinaten x,y,z) // Hierbei bin ich mir unschlüssig


Jetzt weis ich aber nicht wie ich gegebenfalls die Größe einer Biome definieren könnte abhängig vom LastPos alias

Funktion:
Er muss also irgendwie eine Distanz beinhalten die den Übergang definiert.
Aber wie ? Hierbei hängt es gerade.

Beispiel:

LastPos hat folgende Cords= 239, 46, -173 (Spawnpunkt und gegebenfalls Startbiome zb (Plains) aus der Biomendb nur wie könnte man das Umsetzen?
Beim !Explore werden nun Neue Coordinaten mit dem LastPos Alias generiert.. Aber wie kann man eine Entfernung von Biome1 zu Biome2 umsetzen
Hoffe ihr versteht meine denklück.

Vielen Dank!
Bin für Tipps und Rat gerne dankbar

Link to comment
Share on other sites

https://minecraft.fandom.com/de/wiki/Biom#:~:text=Die Biomgröße ist standardmäßig auf,dieser Wert auf 6 gesetzt.

 

Auch hier finde ich nur folgende aussage:

Die Biomgröße ist standardmäßig auf 4 gesetzt. In dem Welttyp Große Biome ist dieser Wert auf 6 gesetzt.

 

??? Ja aber was ist mit 4 bzw 6 Gemeint? Gibt es denn keine Genaueren Angaben was mir weiterhelfen könnte ?

Link to comment
Share on other sites

Die Biomgrößen hängen mehr oder weniger vom Seed ab - es gibt keine einheitliche Größe bzw. Form

Die Biomegröße bei der Custom World Generation ist einfach nur eine Variable - wobei 4 der Standardwert ist

Mit dem Erhöhen/Senken des Wertes wird das Biom von der Fläche her immer verdoppelt bzw. halbiert

 

Also du hast den Seed X, wo am Spawn ein Plains Biom ist - das hat eine Fläche von etwa 20 Chunks

Änderst du den Wert von 4 auf 5, ist das Biom mit diesem Seed dann etwa 40 Chunks groß - änderst du den Wert von 4 auf 6, dann sind es etwa 80 Chunks usw.

 

Also bei deinem Script/bei deinem Umsetzungsplan sollte der Seed der Ansatzpunkt sein, nicht die Biomegröße, da die je nach Seed variiert

Der Seed ist quasi die Konstante

 

Link to comment
Share on other sites

vor 2 Stunden schrieb Bedrock:

Die Biomgrößen hängen mehr oder weniger vom Seed ab - es gibt keine einheitliche Größe bzw. Form

Die Biomegröße bei der Custom World Generation ist einfach nur eine Variable - wobei 4 der Standardwert ist

Mit dem Erhöhen/Senken des Wertes wird das Biom von der Fläche her immer verdoppelt bzw. halbiert

 

Also du hast den Seed X, wo am Spawn ein Plains Biom ist - das hat eine Fläche von etwa 20 Chunks

Änderst du den Wert von 4 auf 5, ist das Biom mit diesem Seed dann etwa 40 Chunks groß - änderst du den Wert von 4 auf 6, dann sind es etwa 80 Chunks usw.

 

Also bei deinem Script/bei deinem Umsetzungsplan sollte der Seed der Ansatzpunkt sein, nicht die Biomegröße, da die je nach Seed variiert

Der Seed ist quasi die Konstante

 

Der ansatz mit den 20 Chunks ist keine Schlechte idee kann ich gegebenfalls verwenden das andere mit dem Seed wird kompliziert da ich denke das jeder seed eine Komplette Welt neu generiert.
Vielleicht hab ich mein Beispiel falsch erklärt ich versuche es gerne nochmal um ungewissheit auszuschliesen.

Ein erneuter Versuch:

Im Ersten Post hatte ich erwähnt das ich Folgende Daten bzw Dateien habe:

  • Spieler.db - Infos über Account LastPos Inventar Hunger und Leben etc
  • Biome.db - Datenbank mit allen Biomen

Momentan passiert bei der eingabe !Neuer Spieler folgendes:

  1. Die Spielerdb wird aus einem Vorgegeben Template geschrieben
  2. Das Passwort wird generiert und als Sha1 bzw Hashwert in der DB abgespeichert
  3. Wird die Anfangsposition durch das Alias LastPos generiert
  4. Die Generierung der Inventarslots und befüllung mit den FirstTools

Diese Prozedur funktioniert schonmal ohne Probleme

Bei dem !explore befehl kann man nun mittels !explore N/E/S/W/NE/SE/SW/NW Sich jeweils in die Angegebene Himmelsrichtung anhand der Hungerleiste in Blöcken fortbewegen.
(z.b Ist der Hunger auf 20 so und man gibt ein !explore N - So bewegt sich der Spieler 20 Blöcke nach Norden. In der Spieler,db steht zb als LastPos 283 32 -492)
Hierbei muss jetzt überlegt werden welche Zahl wird um 20 blöcke erhöht. die 1 ist die x cord 2. ist y 3 ist z

Es wird also geprüft ob die Neuerstellten Coords irgendwo in der Biome DB zufinden sind.
Falls die Neuen Cooords noch nicht einen Gewissen bereich abdecken so Bleibt es noch beim Anfangsbiome

Nun zu der BiomeDB aufbau ist wie gesagt oben.
Was hier fehlt ist eine Distanzfunktion die Bestimmt ab wann das Nächste Biome beginnt.

Beispiel 

LastPos=283, 49, -194
NewCords durch LastPos alias 283, 49, -294

In der BiomeDB haben wir folgendes:

[Info]
Biomelist=plains.desert.forest // usw etc.

[plains]
Name=plains
Desc=Die Ebenen mit kleinen Hügeln und Blumenwiesen
Trees=oak_tree.spruce_tree.birch_tree
Blocks=grass_block.dirt.stone.iron_ore.coal_ore.etc
Size= // Die Größe des Bioms (Coordinaten x,y,z) // Hierbei bin ich mir unschlüssig

[desert]
Name=desert
Desc=Eine Karge Wüste aus sand und Toten Büschen sowie Kakteen
Trees=cactus
Blocks=sandblock,sandstone,
Size= // Die Größe des Bioms (Coordinaten x,y,z) // Hierbei bin ich mir unschlüssig

Ich brauche hier also ein Entfernungsmesser der besagt ab coord xyz beginnt desert
Es fehlt also die Übergangserkennung.

Versteht ihr?

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B