Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

4g3nt0r4ng3

unregistriert

1

10.01.2013, 12:06

The constructor OnEventTrigger(int, boolean) is undefined

Erstmal vorab ich hab keine ahnung von java.

Importiert wird alles was benötigt ist

Quellcode

1
import com.l2jserver.gameserver.network.serverpackets.OnEventTrigger;


in der OnEventTrigger siehts so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.l2jserver.gameserver.network.serverpackets;

import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
import com.l2jserver.gameserver.util.Util;

/**
 ** @author Gnacik
 */
public class OnEventTrigger extends L2GameServerPacket
{
	private final int _emitterId;
	private final boolean _opened;
	
	private static final int[] REVERSE_DOORS =
	{
		16200023,
		16200024,
		16200025
	};
	
	public OnEventTrigger(L2DoorInstance door, boolean opened)
	{
		_emitterId = door.getEmitter();
		// XXX: Check this out!
		if (Util.contains(REVERSE_DOORS, door.getDoorId()))
		{
			_opened = !opened;
		}
		else
		{
			_opened = opened;
		}
	}
	
	@Override
	protected final void writeImpl()
	{
		writeC(0xCF);
		writeD(_emitterId);
		writeD(_opened ? 0 : 1);
	}
}


ich hoffe mir kann jemand die augen öffnen

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

2

10.01.2013, 16:45

Wahrscheinlich hat die Mutterklasse Klasse selbst einen Konstruktor
Dann musst du
public OnEventTrigger(L2DoorInstance door, boolean opened)
{
super();
}
hinschreiben statt dem anderen gedöns der da steht. Oder du hast falsche Typen im Konstruktur.

Wenn du keine Ahnung von Java hast, wie konntest du dann den Text schreiben?
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

3

10.01.2013, 17:08

psycho, super() wird sowieso automatisch aufgerufen wenn man einen konstruktor überschreibt.

Das Problem ist, dass irgendwo "OnEventTrigger(int, boolean)" aufgerufen wird (anscheinend nicht in dieser datei) und es diesen konstruktor nicht gibt, genau das, was die fehlermeldung sagt. Das heißt entweder änderst du den Datentyp im aufruf oder in deinem kontruktor ;D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

4

10.01.2013, 17:47

psycho, super()
Irgendwie nicht xD

Also mir hat er immer eine Fehlermeldung gezeigt, wenn ich nicht super() geschrieben hab oder den Contructor überschrieben hat.
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

5

10.01.2013, 18:07

doch das ist so... super() also ohne parameter wird automatisch ausgeführt und ruft den konstruktor ohne parameter der superklasse auf (sofern es einen gibt bzw. dieser aufgerufen werden darf). super(...) mit parametern ruft halt einen anderen konstruktor auf, d.h. die super-funktion mit parametern ist nützlich bzw. manchmal nötig. das einzige problem, das es geben kann ist, wenn die superklasse einen nicht öffentlichen konstruktor ohne parameter hat. die subklasse erbt diesen, bekommt also keinen default-konstruktor. wenn diese subklasse den keinen eigenen konstruktor definiert, hat sie quasi keinen, was einen compiler-fehler verursacht...
dieses problem liegt hier allerdings nicht vor...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Johannes S.

Fortgeschrittener

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

6

10.01.2013, 18:12

super() wird automatisch aufgerufen. Wenn es allerdings kein super() gibt und nur Constructoren mit Parametern verfügbar sind, muss man selbst auswählen welchen Constructor man aufrufen will und mit welchen Werten. Dann schreibt man eben super(...) ;) Z.B. in PHP muss man den Consruktor von der Superclass allerdings immer selbst aufrufen oder er wird nicht ausgeführt. Aber das ist hier nicht Thema :D

Außerdem entspricht dieser "Fehler" nicht der angegebenen Fehlermeldung. Normalerweise müsste die angezeigt werden, wo dier Fehler aufgetreten ist. Sowohl Datei als auch Zeile steht in der Regel in der Fehlermeldung.

EDIT: Als ich angefangen habe zu schreiben, existierte Eriks 2. Beitrag noch nicht :D
Signatur ?

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

7

10.01.2013, 18:15

Das ist ja auch keine ganze fehlermeldung :D die im titel wäre potentiell suboptimal :D
aber es stimmt eine angabe wo der fehler ist, müsste es geben, wobei diese nicht unbedingt genau sein muss, da sie nur angibt, wo der fehler eine auswirkung hat, nicht wo er entstanden ist (der compiler weiß ja auch net, was man eigentlich machen wollte ;D)
In einer IDE sollte der Fehler allerdings rot unterstrichen sein ;D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

4g3nt0r4ng3

unregistriert

8

10.01.2013, 20:44


Wenn du keine Ahnung von Java hast, wie konntest du dann den Text schreiben?

der code is nich von mir, www.l2jserver.com , das was ich versuche zu implementieren sollte kompatibel sein

Z.B. in PHP muss man den Consruktor von der Superclass allerdings immer selbst aufrufen oder er wird nicht ausgeführt. Aber das ist hier nicht Thema :D

erklär es mir in php das versteh ich
in php wird durch "new" auch der constructor ausgeführt

dort wird der fehler produziert:

Quellcode

1
2
3
4
5
for (int emitter : emmiters)
				{
					OnEventTrigger et = new OnEventTrigger(emitter, false);
					Broadcast.toPlayersInInstance(et, world.instanceId);
				}

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

9

10.01.2013, 21:41

Als ersten Parameter brauchst du laut der Definition des Konstruktors ein Objekt vom Typ L2DoorInstance. Du übergibst aber einen int bei deinem Aufruf (int emittier). Wenn emitters nur Objekte vom Typ L2DoorInstance enthält, solltest du schreiben:

Java-Quelltext

1
2
3
4
for(L2DoorInstance emitter : emitters) {
    OnEventTrigger et = new OnEventTrigger(emitter, false);
    Broadcast.toPlayersInInstance(et, world.instanceId);
}


Ansonsten musst du casten bzw. dir so ein Objekt erstellen.
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Johannes S. (11.01.2013)

4g3nt0r4ng3

unregistriert

10

11.01.2013, 10:24

emitters ist ein array aus integern

Quellcode

1
2
3
4
5
6
7
8
9
10
	private static int[] emmiters =
	{
		23140202,
		23140204,
		23140206,
		23140208,
		23140212,
		23140214,
		23140216
	};


daher bekomme ich bei deinem vorschlag auch die passende meldung

Quellcode

1
Type mismatch: cannot convert from element type int to L2DoorInstance


anbei auch mal das gesammte script was ich zu implementieren versuche
»4g3nt0r4ng3« hat folgende Datei angehängt:
  • Freya.java (36,56 kB - 1 698 mal heruntergeladen - zuletzt: Heute, 00:20)

Johannes S.

Fortgeschrittener

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

11

11.01.2013, 11:41

OnEventTrigger(L2DoorInstance door, boolean opened)

Wiso erwartest du den "L2DoorInstance" wenn du nur einen Integer brauchst bzw. wiso übergibst du nur ein Integer wenn du doch ein Objekt von "L2Door"Instance" brauchst?
Signatur ?

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

12

11.01.2013, 16:13

Das ist genau das, was ich als erstes geschrieben habe... entweder änderst du den aufruf des kontruktors oder den konstruktor selbst... da du den aufruf schlecht ändern kannst (dass man int nicht in ein objekt casten kann sollte klar sein ;D), musst du deinen kontruktor so ändern, dass er als argumente einen int und ein boolean nimmt...

Java-Quelltext

1
public OnEventTrigger(int door, boolean opened) {


dann musst du natürlich den konstruktor so anpassen, dass das wieder funktioniert, ich weiß ja nicht, was door und emitter sein sollen...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

13

11.01.2013, 17:03

Die Frage ist ja auch, ob man ein L2DoorInstance mit Hilfe eines Integers erstellen kann ;)
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

14

11.01.2013, 18:41

man kann wahrscheinlich anhand einer int id eine tür indentifizieren... das objekt allerdings sowieso wird nicht verwendet, nur zum holen der id mit door.getDoorId()... und irgendwie für den emitter, der aber eh übergeben wird...
ich check den code net so ganz^^ irgendwie wird nur der emitter übergeben (und dieser bool), wie soll man damit an eine tür kommen ? der aufruf kann eig net stimmen O_o
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

4g3nt0r4ng3

unregistriert

15

11.01.2013, 18:52

unser java coder hat wieder internet :P

die lösung:

ein paar mehr imports

Quellcode

1
2
import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
import com.l2jserver.gameserver.datatables.DoorTable;


und

Quellcode

1
2
3
4
5
6
for (int emitter : emmiters)
	{
	L2DoorInstance test = DoorTable.getInstance().getDoor(emitter);
	OnEventTrigger et = new OnEventTrigger(test, false);
	Broadcast.toPlayersInInstance(et, world.instanceId);
}


:thumbsup:

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

16

11.01.2013, 19:01

ja, so eine lösung war zu erwarten... nur um ne konkrtete lösung zu leifern, muss man halt die klassen kennen ;D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Patrick (12.01.2013)

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

17

12.01.2013, 10:16

Ja xD
Aber wir sind trotzdem froh dir geholfen haben zu können ^^
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Ähnliche Themen