Das sieht mir eher nach einem Klammerfehler aus. Zähle da mal nach.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
-
Jeffry:
Funktioniert schon mal!Habe jetzt versucht, dass Objekte gelöscht werden falls diese in der nähe sich befinden.
Klappt leider nicht ganz^SetTimer("IsPlayerNearObject", 800, true);
forward IsPlayerNearObject(playerid, objectid, Float:range);
public IsPlayerNearObject(playerid, objectid, Float:range)
{
new Float:X, Float:Y, Float:Z;
GetObjectPos(objectid, X, Y, Z);
if(IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z)) return DestroyObject(objectid);
return false;
} -
Das müsste dann so aussehen:
forward IsPlayerNearObject();
public IsPlayerNearObject()
{
new Float:X, Float:Y, Float:Z;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
for(new o=0; o<50; o++)
{
if(treeObj[o] == -1) continue;
GetObjectPos(treeObj[o], X, Y, Z);
if(IsPlayerInRangeOfPoint(i, 3.0, X, Y, Z))
{
DestroyObject(treeObj[o]);
treeObj[o] = -1;
}
}
}
return false;
} -
Label wird nach 60 sek nicht gelöscht?
logoutlabel[playerid] = Create3DTextLabel(string, COLOR_WHITE, x, y, z, 40.0, 0, 0);public Logout(playerid)
{Delete3DTextLabel(logoutlabel[playerid]);
return 1;
} -
SetTimerEx("Logout", 60000, 0, "d", playerid);
gemacht? -
forward IsPlayerNearObject();
public IsPlayerNearObject()
{
new Float:X, Float:Y, Float:Z;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
for(new o=0; o<50; o++)
{
if(689[o] == -1) continue; // Fehler
GetObjectPos(689[o], X, Y, Z);
if(IsPlayerInRangeOfPoint(i, 3.0, X, Y, Z))
{
DestroyObject(689[o]);
689[o] = -1;
}
}
}
return false;
}Fehler:
error 029: invalid expression, assumed zero
error 029: invalid expression, assumed zero
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
fatal error 107: too many error messages on one line -
689[o]
Nein.Unter den Includes:
new treeObj[50] = {-1,...};Und beim Erstellen der Bäume:
treeObj[i] = CreateObject(... -
Danke, ich hab jetzt noch eine abfrage vorm einloggen gemacht. Das wenn die 60 sek noch nicht um sind das man sich nicht einloggen kannst. Nur steht das jetzt bei jedem Spieler der sich einloggen möchte, das er sich nicht einloggen kann weil die 60 sek noch nicht um sind obwohl sie sich davor nicht ausgeloggt haben.
public Logout(playerid)
{
SpielerInfo[playerid][sLogout] = 0;
DestroyPickup(logpickup[playerid]);
Delete3DTextLabel(logoutlabel[playerid]);
SavePlayer(playerid);
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
new Float:x, Float:y, Float:z, string[80], hour, mins, sec;
SetTimerEx("Logout", 60000, 0, "d", playerid);
SpielerInfo[playerid][sLogout] = 1;
GetPlayerPos(playerid, x, y, z);
gettime(hour, mins, sec);
logpickup[playerid] = CreatePickup(1272, 2, x, y, z, -1);
format(string, sizeof(string), "*%s*\n**%d.%d.%d", SpielerInfo[playerid][sName], hour, mins, sec);
logoutlabel[playerid] = Create3DTextLabel(string, COLOR_WHITE, x, y, z, 40.0, 0, 0);
SavePlayer(playerid);
return 1;
}if(SpielerInfo[playerid][sLogout] == 1) return SendClientMessage(playerid, COLOR_WHITE, "Dein Logout Pickup ist noch nicht verschwunden!");
-
Das was du da vor hast klappt so nicht, weil die playerid nach OnPlayerDisconnect ja nicht mehr online ist, sprich nach den 60 Sekunden SavePlayer aufzurufen klappt nicht.
Wie genau willst du es denn haben?Spieler geht offline -> Pickup wird erstellt (wird nach 60 Sekunden entfernt) -> Spieler kommt online -> Falls 60 Sekunden rum kann er spawnen, ansonsten muss er warten. Ist das richtig so?
-
genau
-
Ok, dann musst du mit dem Timestamp den gettime zurück gibt arbeiten.
public Logout(label, pickup)
{
DestroyPickup(pickup);
Delete3DTextLabel(Text3D:label);
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
new Float:x, Float:y, Float:z, string[80], hour, mins, sec;
SpielerInfo[playerid][sLogout] = gettime()+60;
GetPlayerPos(playerid, x, y, z);
gettime(hour, mins, sec);
new pickup = CreatePickup(1272, 2, x, y, z, -1);
format(string, sizeof(string), "*%s*\n**%d.%d.%d", SpielerInfo[playerid][sName], hour, mins, sec);
new Text3D:label = Create3DTextLabel(string, COLOR_WHITE, x, y, z, 40.0, 0, 0);
SetTimerEx("Logout", 60000, 0, "dd", _:label, pickup);
SavePlayer(playerid);
return 1;
}if(SpielerInfo[playerid][sLogout] > gettime()) return SendClientMessage(playerid, COLOR_WHITE, "Dein Logout Pickup ist noch nicht verschwunden!");
-
C:\Users\Eddy\Desktop\GTA\GTA - Selfmade\gamemodes\NLG.pwn(390) : warning 213: tag mismatch
C:\Users\Eddy\Desktop\GTA\GTA - Selfmade\gamemodes\NLG.pwn(1171) : error 017: undefined symbol "pickup"
C:\Users\Eddy\Desktop\GTA\GTA - Selfmade\gamemodes\NLG.pwn(1172) : error 017: undefined symbol "label"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase2 Errors.
-
Zeile 390 war mein Fehler, die muss so aussehen:
SetTimerEx("Logout", 60000, 0, "dd", _:label, pickup);Was steht in Zeile 1171 und 1172 bei dir?
-
DestroyPickup(pickup);
Delete3DTextLabel(Text3D:label);_:label was hat _: das zu bedeuten?
-
-
Hast du den Kopf von "Logout" dazu geändert?
public Logout(label, pickup)
ebenso beim forward.Das _: entfernt den Tag (also das Text3D:) und macht daraus eine Zahl.
@[LnD]JustMe.77: Oh, sorry. Hab ich nicht gesehen.
MySQL oder Dini? -
was hat _: das zu bedeuten?
damit kannst du den Tag einer Variable entfernenbsp:
new Text3D:Label;SendClientMessage(Label,...);
würde einen warning ausspucken.entfernst du den Tag mit _:
SendClientMessage(_:Label,...);
gibt es keinen WarningDie Tags sind dafür da, das sowas, wie es jetzt getan habe, nicht passiert.
-
-
Es funktioniert immer noch nicht. Wenn ich mit Grapefruit disconnecte und mit Klaus connecte kann Klaus sich nicht einloggen, weil die 60 sek noch nicht rum sind.
-