You are not logged in.

  • Login

[Bukkit-Plugin] Map begrenzen

Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

1

Friday, April 25th 2014, 12:58am

Map begrenzen

Hallo,

ich mache gerade ein minigame und da muss ich die map begrenzen
die is dynamisch generiert
wie kann ich die begrenzen?
so wie zum beispiel bei endergames von gomme

also so ein runder kreis von x blöcken

danke

Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

2

Friday, April 25th 2014, 2:27am

Distance zur Spawnlocation getten -> Velocity adden
lädt

Stuppsman

User / Kunde

Posts: 2,766

Thanks: 25

  • Send private message

3

Friday, April 25th 2014, 2:31am

Such dir nen Mittelpunkt aus und prüfe im PlayerMoveEvent die Distance vom Player zu diesem Punkt.. wenn die nen bestimmten Wert überschreitet, cancelst du das Event und gibst ne Meldung aus.

edit, weil geninjat..: Stimmt, Velocity adden ist natürlich um einiges eleganter ;)
Nein, ich hab kein Skype.. bei Interesse an einer privaten Unterrichtsstunde, wende dich bitte direkt an mein Team! 8)

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

4

Friday, April 25th 2014, 1:08pm

@Abgegrieft @Stuppsman

Okay danke. Hab die Map jetzt begrenzt. Ich verstehe nur nicht was ich für x y und z Werte bei nem Vektor angeben muss...

pl.setVelocity(new Vector(?, ?, ?));

eddit:
Hab da mal jeweils 1 eingetragen. funktioniert zur hälfte. man fliegt am ende der map weg aber an zwei map enden ist das so dass man ausserhalb der map geschleudert wird. so geht das dann immer weiter. bis man wegen flying gekickt wird.
wie kann ich die richtung beeinflussen?? soll ja immer zur mitte gehen (die ist immer 0, 0)

This post has been edited 4 times, last edit by "nunagain" (Apr 25th 2014, 1:50pm)


Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

5

Friday, April 25th 2014, 1:58pm

Kannst doch einfach nachschauen ob der Spieler in Richtung +x -x +z o. -z die Map verlässt
lädt

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

6

Friday, April 25th 2014, 2:21pm

Sorry aber wie mach ich das? :/

eddit:

ich möchte ja nur das man so wie bei gommes endergames von der "wand" weg geprallt wird.

hab mir den vektor beim map verlassen mal ausgegeben:

[14:53:59] [Server thread/INFO]: -0.1319559983219717,0.24813599859094576,0.14691030154947446

This post has been edited 2 times, last edit by "nunagain" (Apr 25th 2014, 3:10pm)


Stuppsman

User / Kunde

Posts: 2,766

Thanks: 25

  • Send private message

7

Saturday, April 26th 2014, 1:56am

Müsstest den Gegenvektor nehmen. Ich weiss grad nur nicht, wie der Compiler die Multiplikation von (-1) mit nem Vektor zulässt.. wahrscheinlich gibts ne Methode wie multiply oder so. Probiers mal aus..

Oder cancel das Event einfach mal und schau dir an, wie es dann aussieht... :) Also komplett ohne an der Velocity rumzubasteln...
Nein, ich hab kein Skype.. bei Interesse an einer privaten Unterrichtsstunde, wende dich bitte direkt an mein Team! 8)

PixelCrafter1000

User / Kunde

Posts: 79

  • Send private message

8

Saturday, April 26th 2014, 2:05am

sonst hol doch die Position an der der Spieler die map verlässt und hol dir dazu noch den x oder y wert der Blickrichtung (ich weiss nicht genau wie das geht aber glaub mi getEyePos() oder so) ode rhol dir die Lauftichtung und erzeuge einen Block vor dem spieler eine explosion ohne sound und ohne partikel und ohne schaden, sodass der spieler nur zurück gefedert wird :)
------------------------------------------------------------------------------------

Ich konnte euch helfen ? ich würde mich sehr über eine kleine Spende freuen ;)

-----------------------------------------------------------------------------------

Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

9

Saturday, April 26th 2014, 10:37am

@PixelCrafter1000

Und was ist wenn der Spiel rückwärts die Map verlässt, dann kannste die Blickrichtung vergessen
lädt

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

10

Saturday, April 26th 2014, 10:44am

Location hat eine toVector-Methode.
Multiplizier den Vektor der daraus entsteht mit -1, setz Y auf 0 und multiplizier ihn dann noch mit 0.1 oder wie immer es dir am liebsten ist, damit der Spieler nicht zu stark weg geschleudert wird. Einfach mal ein bissel rum probieren was der beste Wert wäre.
Standard Standart eines Flamingos ist einbeinig.

PixelCrafter1000

User / Kunde

Posts: 79

  • Send private message

11

Saturday, April 26th 2014, 11:13am

@Abgegrieft

man kann dann ja Laufrichtung benutzen und wenn er die map verlässt mit nem Scheduler die Position holen die er 1 sek später hat oder halbe sek und dann vergleichen, und ihn in die andere Richtung "sprengen"
------------------------------------------------------------------------------------

Ich konnte euch helfen ? ich würde mich sehr über eine kleine Spende freuen ;)

-----------------------------------------------------------------------------------

Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

12

Saturday, April 26th 2014, 11:22am

wie willst du denn an die Laufrichtung kommen, du siehst doch eh schon an welche koord er die map verlässt gibts ihn ne velocity in die entgegengesetzte Richtung und fertig..

@nunagain
Wenn du es noch nicht hast poste ich mal meinen Code, wenn ich am PC bin
lädt

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

13

Saturday, April 26th 2014, 6:54pm

@Abgegrieft

wäre nett. hab schon voll viele werte getestet aber keine gehen! :)

Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

14

Saturday, April 26th 2014, 7:17pm

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	public static void checkWand() {
    	for (Player p1 : Bukkit.getOnlinePlayers()) {
    		if (p1.getLocation().getX() > getMaxEntfernung()) {
    			p1.getWorld().playEffect(p1.getLocation(), Effect.ENDER_SIGNAL, 10);
    			p1.setVelocity(new Vector(-2,0.5,0));
    			p1.sendMessage(getPrefix() + ChatColor.RED + "Du hast das Ende der Map erreicht.");
    		}
    		if (p1.getLocation().getX() < -getMaxEntfernung()) {
    			p1.getWorld().playEffect(p1.getLocation(), Effect.ENDER_SIGNAL, 10);
    			p1.setVelocity(new Vector(2,0.5,0));
    			p1.sendMessage(getPrefix() + ChatColor.RED + "Du hast das Ende der Map erreicht.");
    		}
    		if (p1.getLocation().getZ() > getMaxEntfernung()) {
    			p1.getWorld().playEffect(p1.getLocation(), Effect.ENDER_SIGNAL, 10);
    			p1.setVelocity(new Vector(0,0.5,-2));
    			p1.sendMessage(getPrefix() + ChatColor.RED + "Du hast das Ende der Map erreicht.");
    		}
    		if (p1.getLocation().getZ() < -getMaxEntfernung()) {
    			p1.getWorld().playEffect(p1.getLocation(), Effect.ENDER_SIGNAL, 10);
    			p1.setVelocity(new Vector(0,0.5,2));
    			p1.sendMessage(getPrefix() + ChatColor.RED + "Du hast das Ende der Map erreicht.");
    		}
    	}
	}



Hab dazu diese Methode, begrenzt die Map dann allerdings nicht auf einen Kreis, sondenr viereckig..
lädt

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

15

Saturday, April 26th 2014, 7:20pm

Danke, aber ich würde das schon gerne in nem Kreis :3

Abgegrieft

User / Kunde

  • "Abgegrieft" is male

Posts: 674

Location: Waschraum

  • Send private message

16

Saturday, April 26th 2014, 7:25pm

Kannst den Vektor ja tdem in Richtung Spawnpunkt setzen, ich brauchte es bei mir halt in einem Viereck
lädt

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

17

Saturday, April 26th 2014, 7:26pm

Java source code

1
2
3
4
5
6
7
8
public void check(Player p) {
  if (p.getLocation().distance(new Location(p.getWorld(), 0, 0, 0)) > 500) {
    Vector v = p.getLocation().toVector();
    v.setY(0);
    v.multiply(-0.01);
    p.setVelocity(v);
  }
}


Die 500 sind der Abstand vom Welt Mittelpunkt, -0.01 die Stärke mit der er zurück geschleudert wird. Da wirste vermutlich noch ein bissel rumprobieren müssen.
Standard Standart eines Flamingos ist einbeinig.

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

18

Saturday, April 26th 2014, 10:59pm

Probier mal das hier:

Source code

1
2
3
4
			Vector v1 = e.getPlayer().getLocation().toVector();
			Vector v2 = e.getTo().toVector();
			Vector v3 = v1.clone().subtract(v2).multiply(1.5/v2.distance(v1)).setY(0);
player.setVelocity(v3);

Klappt denke ich ganz gut bei dem 1.5 kann man rumprobieren.

nunagain

User / Kunde

  • "nunagain" started this thread

Posts: 44

  • Send private message

19

Sunday, April 27th 2014, 7:36pm


Probier mal das hier:








Quellcode




1
2
3
4



Vector v1 = e.getPlayer().getLocation().toVector();
Vector v2 = e.getTo().toVector();
Vector v3 = v1.clone().subtract(v2).multiply(1.5/v2.distance(v1)).setY(0);
player.setVelocity(v3);





Klappt denke ich ganz gut bei dem 1.5 kann man rumprobieren.
Danke, klappt.. fast... Also man wird schon richtig zurückgeworfen. Aber es passiert auch - oft - das man dann inder "wand" fest buggt und nicht mehr raus kommt.

kann man das irgendwie so machen dass man nen vektor macht in die richtung zur location x und dann 7 blöcke in diese richtung geschleudert wird?

Master_Timpa

User / Kunde

  • "Master_Timpa" is male

Posts: 437

Location: mCyber-Lounge - an der Bar

Occupation: Arbeitslos durch den Tag ... bekomme eh HartzIV vom Staat...

  • Send private message

20

Friday, May 2nd 2014, 6:57am

Wenn du da nicht weiterkommst mach halt einfach leere Blöcke mit sendBlockChange(...)
Nur mal so ne Idee ^^
MfG
Timpa

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net

Similar threads