Okay. Mir ist aufgefallen, dass du für den MinigunRespawn SetTimer, und nicht SetTimerEx verwendest. Hat das einen Grund, oder ist das egal?
Beiträge von Manyula
-
-
Okay, es klappt doch nicht. -.- Hier ist, was geprintet wird, wenn 1 Spieler auf dem Server ist.
[07:57:40] World(0) = 7 | 0 != 0
[07:57:40] World(1) = 0 | 1 != 0
[07:57:40] World(2) = 0 | 2 != 0
[07:57:40] World(3) = 0 | 3 != 0
[07:57:40] World(4) = 0 | 4 != 0
[07:57:40] World(5) = 0 | 5 != 0
[07:57:40] World(6) = 0 | 6 != 0
[07:57:40] World(7) = 0 | 7 != 0
[07:57:40] World(8) = 0 | 8 != 0
[07:57:40] World(9) = 0 | 9 != 0
[07:57:40] World(10) = 0 | 10 != 0
[07:57:40] World(11) = 0 | 11 != 0
[07:57:40] World(12) = 0 | 12 != 0
[07:57:40] World(13) = 0 | 13 != 0
[07:57:40] World(14) = 0 | 14 != 0
[07:57:40] World(15) = 0 | 15 != 0
[07:57:40] World(16) = 0 | 16 != 0
[07:57:40] World(17) = 0 | 17 != 0
[07:57:40] World(18) = 0 | 18 != 0
[07:57:40] World(19) = 0 | 19 != 0
[07:57:40] World(20) = 0 | 20 != 0
[07:57:40] World(21) = 0 | 21 != 0
[07:57:40] World(22) = 0 | 22 != 0
[07:57:40] World(23) = 0 | 23 != 0
[07:57:40] World(24) = 0 | 24 != 0
[07:57:40] World(25) = 0 | 25 != 0
[07:57:40] World(26) = 0 | 26 != 0
[07:57:40] World(27) = 0 | 27 != 0
[07:57:40] World(28) = 0 | 28 != 0
[07:57:40] World(29) = 0 | 29 != 0
[07:57:40] World(30) = 0 | 30 != 0
[07:57:40] World(31) = 0 | 31 != 0
[07:57:40] World(32) = 0 | 32 != 0
[07:57:40] World(33) = 0 | 33 != 0
[07:57:40] World(34) = 0 | 34 != 0
[07:57:40] World(35) = 0 | 35 != 0
[07:57:40] World(36) = 0 | 36 != 0
[07:57:40] World(37) = 0 | 37 != 0
[07:57:40] World(38) = 0 | 38 != 0
[07:57:40] World(39) = 0 | 39 != 0
[07:57:40] World(40) = 0 | 40 != 0
[07:57:40] World(41) = 0 | 41 != 0
[07:57:40] World(42) = 0 | 42 != 0
[07:57:40] World(43) = 0 | 43 != 0
[07:57:40] World(44) = 0 | 44 != 0
[07:57:40] World(45) = 0 | 45 != 0
[07:57:40] World(46) = 0 | 46 != 0
[07:57:40] World(47) = 0 | 47 != 0
[07:57:40] World(48) = 0 | 48 != 0
[07:57:40] World(49) = 0 | 49 != 0 -
ich epfehle einen settimerex für jeden Speieler da sich so der gesammte Code vertielt. dann nciht unbedingt glatt 5min nehmen sondern die nächste Primzahl.
Also so in etwa?
1. Positions-Check
2. Nicht bewegt = SetTimerEx (nach 3min AFK), Bewegt = return 1;Im Fall, dass er sich nicht bewegt hat...
3. 3min Timer endet damit, dass der Spieler AFK gesetzt wird.
4. 60min Timer wird direkt im Anschluss gestartet.Ich bin davon ausgegangen, dass ich so viele Timer möglichst vermeiden sollte. Woran muss ich jetzt sparen? SetTimer oder SetTimerEx?
-
Naja, ich habe z.B. einen 5s Timer, in dem ich bisher nur eine AutoAFK Abfrage drin habe. Das funktioniert so:
1. Loop durch alle Spieler.
2. Positionscheck (Hat sich der Spieler bewegt?
3. Wenn der Spieler sich nicht bewegt hat, dann Variable hochzählen.
4. Nach 5min (Variable erreicht einen Wert von 720, da alle 5s der Wert um 1 erhöht wird) wird der Spieler gefreezt und in den AFK Modus gesetzt.
5. Sobald der Spieler AFK ist wird ein Timer (SetTimerEx, 60min) gestartet, der die maximale AFK Zeit eingrenzt. Nach 60min wird der AFK Spieler also gekickt.
6. Meldet sich ein Spieler wieder zurück, wird der Timer gekillt und die Variable resettet.(Mir fällt gerade auf, dass der SetTimerEx vollkommen unnötig ist, da ich die Variable einfach weiter hochzählen kann...)
Das hört sich erstmal etwas viel für mich an.
-
Hallo, liebe Brötchen,
heute nerv ich euch mal nicht mit einem Hilferuf. Es wird theoretisch.
Ich habe mich gefragt, wie viel Code eigentlich unter eine Timer-Funktion "darf", sei es SetTimer oder SetTimerEx, sodass mein keine Performanceeinbuße einfährt, oder gar Lags. Kann man das überhaupt pauschal sagen?MfG, Many
-
Es klappt fehlerfrei! Danke für deine große Mühe!
Nur zum besseren Verständnis: Diese ganzen Umstände nur, weil ich in einer Variable Indexe verwende? Heißt das, dass ich das Ganze hätte umgehen können, wenn ich statt "BF_WEAPON[0], BF_WEAPON[2],..." einfach "Waffe1, Waffe2,..." geschrieben hätte?
-
Es klappt nun, war ein Fehler meinerseits, vielen Dank!
Wenn ich nun die Marker wieder mit der ursprünglichen Farbe färben möchte, muss ich die Farbe davor dann einfach in einer globalen Variable speichern und beim Verlassen CMD mit SetPlayerColor setzen?
-
Jetzt war ja die Rede davon die Index ID abzufragen - wenn dem so ist, dann ist "pickupid" doch der falsche Vergleichsparameter, oder?
Ich habe mal probeweise die Deklarationen durch die eigentlichen pickupid's ersetzt, aber dabei kommt ein noch größerer Quark raus.
-
-
Das sind wohl sich überschneidende IDs.
Das kannst du ganz leicht beheben:DestroyDynamicPickup(pickupid);
zu:
DestroyDynamicPickup(pickupid);
BF_WEAPON[10] = -1;natürlich auch bei den pickups 0-9 so machen.
Außerdem ist der ganze Time falsch, das wird nicht klappen, für beide Timer:
SetTimerEx("MinigunRespawn", 3*60*1000, false, "i", BF_WEAPON[i]);
zu:
SetTimerEx("MinigunRespawn", 3*60*1000, false, "i", i);Und:
Bei den beiden Timern für den Respawn:
if(pickupid == BF_WEAPON[0])
zu:
if(pickupid == 0)Du darfst nicht die pickupid übergeben, sondern die Index ID, weil die Pickup ID sich immer wieder ändert.
------------------------------------------------------------------------------------------------------------SetTimerEx("PickupRespawn", 60000, false, "i", i);
Zu
SetTimerEx("PickupRespawn", 60000, false, "i", BF_WEAPON[i]);Außerdem muss die erneute Erstellung so aussehen:
if(pickupid == BF_WEAPON[0]) BF_WEAPON[0]=Create...
weil sich die ID ja ändern kann wenn du es neu erstellst. Natürlich für alle Nummern, nicht nur 0.Du stehst aber jetzt irgendwie im Widerspruch zu deinem vorigen Post...
Außerdem macht das für mich keinen Sinn. "pickupid == BF_WEAPON[0]" ist doch nicht zwangsweise dasselbe wie "pickupid == 0". Wie übergebe ich denn nun die Index ID? -
Darauf wäre ich nie im Leben gekommen.^^
Es klappt, vielen herzlichen Dank!
-----------------------------------------------------
Ich muss mal den Totengräber spielen.
Mir ist gestern Abend bei einem Test mit einem Kumpel aufgefallen, dass etwas seeehr herumspinnt.
Das Minigun Pickup wurde als dieses komische Konstrukt angezeigt. Die Waffe war unsichtbar.Desweiteren ist es dazu gekommen, dass Pickups plötzlich nicht mehr verschwinden wollten, nachdem man sie aufgenommen hatte.
Hier nochmal der ganze Code im Überblick.
public OnGameModeInit()
{
BF_WEAPON[0] = CreateDynamicPickup(342, 1, 120.5242, 1934.8777, 22.7578, 7, -1, -1, 100.0); //Grenade
BF_WEAPON[1] = CreateDynamicPickup(342, 1, 279.4142, 1829.5718, 21.4766, 7, -1, -1, 100.0); //Grenade
BF_WEAPON[2] = CreateDynamicPickup(342, 1, 116.2530, 1875.0065, 22.4375, 7, -1, -1, 100.0); //Grenade
BF_WEAPON[3] = CreateDynamicPickup(342, 1, 136.4600, 1874.9723, 22.4375, 7, -1, -1, 100.0); //Grenade
BF_WEAPON[4] = CreateDynamicPickup(360, 1, 189.9938, 1940.4785, 17.6406, 7, -1, -1, 100.0); //Heat Seeker
BF_WEAPON[5] = CreateDynamicPickup(360, 1, 206.2279, 1932.8312, 23.2422, 7, -1, -1, 100.0); //Heat Seeker
BF_WEAPON[6] = CreateDynamicPickup(360, 1, 144.0044, 1850.1791, 25.2610, 7, -1, -1, 100.0); //Heat Seeker
BF_WEAPON[7] = CreateDynamicPickup(360, 1, 211.4619, 1809.8109, 25.1172, 7, -1, -1, 100.0); //Heat Seeker
BF_WEAPON[8] = CreateDynamicPickup(360, 1, 146.3869, 1907.3638, 26.3924, 7, -1, -1, 100.0); //Heat Seeker
BF_WEAPON[9] = CreateDynamicPickup(360, 1, 197.3199, 1835.0059, 23.2422, 7, -1, -1, 100.0); //Heat Seeker
new Random = random(sizeof(RandomSpawnsBF_Minigun));
BF_WEAPON[10] = CreateDynamicPickup(362, 1, RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 7, -1, -1, 100.0);
MapIcon_Minigun = CreateDynamicMapIcon(RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 23, C_TURQUOISE, 7, -1, -1, 250.0);
return DM_OnGameModeInit();
}forward DM_OnGameModeInit();
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit DM_OnGameModeInitpublic OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
if(pickupid == BF_WEAPON[0] || pickupid == BF_WEAPON[1] || pickupid == BF_WEAPON[2] || pickupid == BF_WEAPON[3])
{
GivePlayerWeapon(playerid, GRENADE, 3);
DestroyDynamicPickup(pickupid);
printf("%i aufgenommen.", pickupid);
}
else if(pickupid == BF_WEAPON[4] || pickupid == BF_WEAPON[5] || pickupid == BF_WEAPON[6] || pickupid == BF_WEAPON[7] || pickupid == BF_WEAPON[8] || pickupid == BF_WEAPON[9])
{
GivePlayerWeapon(playerid, HEAT_SEEKER, 1);
DestroyDynamicPickup(pickupid);
printf("%i aufgenommen.", pickupid);
}
else if(pickupid == BF_WEAPON[10]) //Minigun Event
{
new stringDE[128],
stringEN[128],
MinigunWielder[MAX_PLAYER_NAME];
GetPlayerName(playerid, MinigunWielder, sizeof(MinigunWielder));
format(stringDE, sizeof(stringDE), "»DEATHMATCH« {%06x}%s "#C_DM_E"hat die Minigun aufgenommen! Nehmt euch in Acht!", GetPlayerColor(playerid) >>> 8, MinigunWielder);
format(stringEN, sizeof(stringEN), "»DEATHMATCH« {%06x}%s "#C_DM_E"has picked up the minigun! Watch out!", GetPlayerColor(playerid) >>> 8, MinigunWielder);
SendLanguageMessage(playerid, C_DM, stringDE, stringEN);
GivePlayerWeapon(playerid, MINIGUN, 250);
DestroyDynamicPickup(pickupid);
DestroyDynamicMapIcon(MapIcon_Minigun);
printf("%i aufgenommen.", pickupid);
}
for(new i = 0; i < 11; i++)
{
switch (i)
{
case 0..9: if(pickupid == BF_WEAPON[i]) SetTimerEx("PickupRespawn", 60*1000, false, "i", BF_WEAPON[i]);
case 10: if(pickupid == BF_WEAPON[i]) SetTimerEx("MinigunRespawn", 3*60*1000, false, "i", BF_WEAPON[i]);
}
}
return _OnPlayerPickUpDynamicPickup(playerid, pickupid);
}forward _OnPlayerPickUpDynamicPickup(playerid, pickupid);
#if defined ALS_OnPlayerPickUpDynamicPickup
#undef OnPlayerPickUpDynamicPickup
#else
#define ALS_OnPlayerPickUpDynamicPickup
#endif
#define OnPlayerPickUpDynamicPickup _OnPlayerPickUpDynamicPickupforward PickupRespawn(pickupid);
public PickupRespawn(pickupid)
{
if(pickupid == BF_WEAPON[0]) return BF_WEAPON[0] = CreateDynamicPickup(342, 1, 120.5242, 1934.8777, 22.7578, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid); //Grenade
if(pickupid == BF_WEAPON[1]) return BF_WEAPON[1] = CreateDynamicPickup(342, 1, 279.4142, 1829.5718, 21.4766, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Grenade
if(pickupid == BF_WEAPON[2]) return BF_WEAPON[2] = CreateDynamicPickup(342, 1, 116.2530, 1875.0065, 22.4375, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Grenade
if(pickupid == BF_WEAPON[3]) return BF_WEAPON[3] = CreateDynamicPickup(342, 1, 136.4600, 1874.9723, 22.4375, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Grenade
if(pickupid == BF_WEAPON[4]) return BF_WEAPON[4] = CreateDynamicPickup(360, 1, 189.9938, 1940.4785, 17.6406, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
if(pickupid == BF_WEAPON[5]) return BF_WEAPON[5] = CreateDynamicPickup(360, 1, 206.2279, 1932.8312, 23.2422, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
if(pickupid == BF_WEAPON[6]) return BF_WEAPON[6] = CreateDynamicPickup(360, 1, 144.0044, 1850.1791, 25.2610, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
if(pickupid == BF_WEAPON[7]) return BF_WEAPON[7] = CreateDynamicPickup(360, 1, 211.4619, 1809.8109, 25.1172, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
if(pickupid == BF_WEAPON[8]) return BF_WEAPON[8] = CreateDynamicPickup(360, 1, 146.3869, 1907.3638, 26.3924, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
if(pickupid == BF_WEAPON[9]) return BF_WEAPON[9] = CreateDynamicPickup(360, 1, 197.3199, 1835.0059, 23.2422, 7, -1, -1, 100.0); printf("%i respawnt.", pickupid);//Heat Seeker
return 1;
}forward MinigunRespawn(pickupid);
public MinigunRespawn(pickupid)
{
DestroyDynamicPickup(BF_WEAPON[10]);
DestroyDynamicMapIcon(MapIcon_Minigun);
if(pickupid == BF_WEAPON[10])
{
new Random = random(sizeof(RandomSpawnsBF_Minigun));
BF_WEAPON[10] = CreateDynamicPickup(362, 1, RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 7, -1, -1, 100.0);
MapIcon_Minigun = CreateDynamicMapIcon(RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 23, C_TURQUOISE, 7, -1, -1, 250.0);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerVirtualWorld(i) == 7)
{
GameTextForPlayer(i, "~r~Minigun Event!", 3000, 4);
SendLanguageMessage(i, C_DM, "»DEATHMATCH« Die Minigun wurde gespawnt! Schnapp sie dir!", "»DEATHMATCH« The minigun has been spawned! Go get it!");
}
}
printf("%i respawnt.", pickupid);
}
return 1;
}-------------------------------------------------------------------
Kleines Update. Ich habe das Ganze mal debuggt (printf's sind im obigen Code drinnen), beim Aufnehmen und beim Respawnen. Folgendes ist dabei herausgekommen.
[18:22:24] 6 aufgenommen.
[18:23:24] 6 respawnt.
[18:23:24] 6 respawnt.
[18:23:24] 6 respawnt.
Es wird 3x respawnt, ich habe aber keinen Schimmer wieso. -
Ich hab SetPlayerColor verwendet, sicherheitshalber mal so, dass alle dieselbe Farbe haben (blau).
Wie gesagt, die Schleife soll ja in den CMD. Mit dem CMD betritt man ein DM (virtuelle Welt 7). Dort sollen von Anfang an keine Marker auf dem Radar sichtbar sein. Nametags sind im Moment irrelevant. Aber wenn zwei Spieler beispielsweise nacheinander die DM Arena betreten, sehen sie sich trotzdem auf dem Radar.
-
Es funktioniert immer noch nicht. Setzt SetPlayerMarkerForPlayer eigentlich ShowPlayerMarkers unter OnGameModeInit voraus?
-
Die Spieler sehen sich immer noch.
Ich hab mal einen Testdurchlauf gemacht, und mir ist aufgefallen, dass wenn ich einen Spieler 1x kille, ihn dann nachm Respawn nicht mehr sehe, er mich aber trotzdem noch sieht. Also, den Marker. Nach weiteren Kills sehen sich beide wieder gegenseitig. -
Hallo,
ich habe ein winziges Logikproblem mit SetPlayerMarkerForPlayer.
Ich möchte, dass Spieler sich in der virtuellen Welt 7 nicht auf dem Radar sehen können.Das hier habe ich in dem CMD eingebaut, in dem der Spieler die virtuelle Welt 7 (DM) betritt.
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerVirtualWorld(i) && GetPlayerVirtualWorld(playerid) == 7) //wenn der gesehene und der "Seher" in vw 7 sind...
{
SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00)); //soll jeder playerid als unsichtbar ansehen
SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(playerid) & 0xFFFFFF00)); //soll playerid alle anderen als unsichtbar ansehen
}
}Wo liegt mein Denkfehler?
-
Es hat sich alles geklärt, hat sich als dummer Leichtsinnsfehler herausgestellt.
Danke für deine Hilfe!
-
Oh, okay. Danke für den Hinweis!
EDIT: Irgendwas scheine ich übersehen zu haben. Wenn ich jmd z.B. mit der Katana angreife, gibt es einen instant kill. Das einzige, was ich noch abgeändert habe ist, dass ich die Getter Funktionen vor den seitch gesetzt habe, um Wdh zu vermeiden.
-
Ich habe wirklich keine Lust mich in da etwas hineinzusteigern. Allgemeines Beispiel, schön und gut, ich habe lediglich darauf hingewiesen, dass "Dummheit" und "Faulheit" nicht zutreffend sind - in meinem Fall war es Unüberlegtheit.
Nun zu dir, Reese.
Annahmen über Annahmen. Du scheinst überlesen zu haben, dass dich niemand dazu zwingt in einem Thread eine Antwort zu hinterlassen. Wenn du meinst Sarkasmus in die Antwort mit einfließen zu lassen, dann ist das diene Sache, aber bitte unterlasse das bei mir in Zukunft. Wenn du dich auf freiwilliger Basis dazu bereit erklärst deine Freizeit zu opfern um jemandem zu helfen, dann kann der Threadersteller doch überhaupt nichts dafür.Wenn ich "Meine Zeit ist aber im Gegensatz zu Deiner (so, wie es sich Deinem Post entnehmen lässt) kostbarer, da ich kein Schüler mehr bin." durchlese, muss ich wieder meine Hand kräftigst auf die Stirn klatschen. Ich bin ebenfalls kein Schüler mehr, und habe auch sehr wenig Zeit um überhaupt einmal zu scripten. Mir ist der Austausch mit anderen sehr wichtig, weil ich dabei einfach viel mehr und vor allem schneller lerne, was in Anbetracht meiner zeitlichen Möglichkeiten sehr vorteilhaft ist, im Gegensatz zum schlichten Durchlesen von irgendwelchen Wiki Seiten, wo genauere Informationen nur dürftig vorhanden sind. Ich habe bereits erklärt, wie mein Gedankengang in Hinsicht auf das Problem des Threads war und ich habe ebenfalls zugegeben, dass ich unüberlegt gehandelt habe. Nichtsdestotrotz sehe ich keinen Grund für so eine notorische Nörgelei.
"Vorkauen" bringt sicher nichts, genauso wenig wie falsche Informationen zu verbreiten. Passt jeder Code wirklich 1 zu 1 in den GM eines jeden Scripters? Selbst, wenn du jemandem eine fertige Vorlage bietest, ist es an dem Scripter das Stück zu integrieren, was zugegebenermaßen nicht wirklich schwer ist. Dennoch lernen viele anhand eines Beispielcodes schneller, einschließlich mir. Die bildhafte Darstellung unterstützt bei mir den Gedankengang. Dann liegt es natürlich am Neuling sich das anzueignen oder einfach nur zu kopieren.
-
Wie schön, dass die notorischen Nörgler sich mal wieder zu Wort melden. Ich würde gerne zu der Sache hier Stellung beziehen, obwohl ich so schön anonym als "Threadersteller" bezeichnet wurde.
Tut mir leid, wenn ich etwas zu direkt bin, aber, Mr.Reese, was bist du eigentlich für eine Diva? Ich lasse mir nicht unterstellen, dass ich nicht lernwillig bin. Lass mich mal erklären, warum ich diesen Thread erstellt habe.
Mit "random" hatte ich zuvor bereits zu tun. Die wiki Seite habe ich mir bereits angeschaut und recherchieren tu ich sowieso immer. Das Ding ist nur, dass ich die Funktion falsch verstanden habe, und das anscheinend für viele in diesem Forum, einschließlich dir, ein Grund ist den zu helfenden zu kritisieren. Ich habe sie verwendet um random verschiedene Spawnpositionen in einem DM auswählen zu lassen - daher kam meine Assoziation, dass random eine vollständige Position auswählt, also in einem Array eine ganze Zeile, was natürlich vollkommener Quark ist. Mir ist erst später aufgefallen, dass random eigentlich nur eine Zahl ausgibt und nicht zwischen Zeilen eines Arrays hin- und herspringt. In dem Sinne war das tatsächlich unüberlegt von mir, was jedoch nicht mit Dummheit oder Faulheit zu verbinden ist, liebster BlackAce.
Außerdem scheint mir, dass du die Fragestellung nicht richtig gelesen hast. Die Frage lautete "Wie stelle ich das am besten an?" - eine sehr offene Frage, nicht wahr? Somit überlasse ich es ganz dem Helfer, auf welche Art und Weise er hilft, sei es mit einem Beispiel-Code, oder einer Step-by-Step Anleitung, beides ist willkommen. Ich habe nie ausdrücklich danach verlangt, dass mir jemand etwas vorscriptet. Insofern kannst du mir nichts von einer "Affinität zum Kopieren" vorwerfen, gemessen an der Frequenz meiner Threads - das hast du dir einfach aus den Fingern gesogen, weil du annimmst, dass alle es eh machen, und da liegst du einfach falsch. Niemand hat dich jemals gezwungen deine notorische Nörgelei in meinem Thread zu hinterlassen. Hier muss ich Jeffry recht geben, dass du dann lieber gar nicht helfen solltest, weil sowas echt den Nutzen dieses Forums verfehlt. Auch ein absichtlicher Fehler im Code ist ebenfalls Unsinn. Zudem muss ich sagen, dass mir der Fehler nicht einmal aufgefallen ist - weil ich deinen Code nicht kopiert habe. Inzwischen bin ich "fortgeschritten" genug um die meisten der Fehlercodes selbst auszumerzen. Falls nicht, ist zunächst Google mein Freund, dann das Englische Forum, dann dieses Forum. Und ja, sobald ich stecken bleibe, dann ersuche ich nun einmal Hilfe, was ist daran denn bitte verwerflich? An mangelnder Eigeninitiative liegt es mit Sicherheit nicht, da ich IMMER zunächst mit meinen bereits erlernten Methoden versuche das Problem zu umgehen - Funktionalität vor Effizienz. Wenn das nicht klappt, oder ich einfach auf dem Schlauch stehe, dann frage ich. Eine direkte Antwort von einem anderen, erfahrenen Scripter ist 1000x mehr wert, als irgendein wiki Eintrag. -