Kralle[GetVehicleModel(id)] = 1;
Zu
Kralle[id] = 1;
[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
-
-
Hallo, habe eine kleine Funktion erstellt womit ein Report zu den Admins gesendet wird, nur scheint sie leider nicht zu funktionieren.
Jemand ne Idee woran es liegt?if(SobeitReports == true)
{
SobeitAutoBan = false;
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
new string[144];
format(string, sizeof(string), "{FF0000}Report: {FFFFFF}%s {FF0000}(Sobeit)",name);
SendSobeitReportToAdmins(-1, string);
return 1;
}SendSobeitReportToAdmins(color, message[])
{
LOOP_PLAYERS(i)
{
if(IsPlayerAdmin(i) || CheckAdminName(i))
{
SendClientMessage(i, color, message);
}
}
return 1;
} -
Wie sieht denn dein LOOP_PLAYERS aus?
Und, bist du auch sicher admin?

und wird das auch aufgerufen?

-
Hai,
also mein Stock wird ausgeführt und auch in der Tabelle eingetragen, aber ich erhalter komischerweiße immer diesen "Fehler" in der mysql_log,Die Log:
[03:50:23] [WARNING] cache_get_row_count - no active cache
[03:50:23] [WARNING] cache_get_query_exec_time - no active cache
[03:50:23] [WARNING] cache_get_row_count - no active cache
[03:50:23] [WARNING] cache_get_row_count - no active cache
[03:50:23] [WARNING] cache_get_query_exec_time - no active cache
[03:50:23] [WARNING] cache_get_row_count - no active cacheDer Stock der ausgeführt wird:
stock CreateATM(playerid, name[])
{
new query[512];
for(new i; i < MAX_ATMS; i++)
{
if(ATMInfo[i][set] == false)
{
GetPlayerPos(playerid, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ]);
GetPlayerFacingAngle(playerid, ATMInfo[i][aA]);
format(ATMInfo[i][aName], 40, "%s", name);
TeleInfo[i][set] = true;
format(query, 512, "INSERT INTO `atms` (`aX`, `aY`, `aZ`, `aA`, `aName`) VALUES ('%f', '%f', '%f', '%f', '%s')", ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ], ATMInfo[i][aA], name);
mysql_tquery(Handle, query);
SendClientMessage(playerid, FARBE_WEISS, "[{00FF00}INFO{FFFFFF}]: Du hast ein ATM erstellt.");
CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
break;
}
}
return 1;
} -
Im Zusammenhang mit dem was du an Code gepostet hast werden die Funktion dort nicht aufgerufen. Dort scheint der Fehler also nicht zu liegen.
Grundsätzlich kommt der Fehler auf, da du versuchst einen Cache auszulesen, wo es keinen gibt. An welcher Stelle das ist, ist aus dem Log nicht erkennbar.
-
Wie sieht denn dein LOOP_PLAYERS aus?
Und, bist du auch sicher admin?

und wird das auch aufgerufen?

So sieht LOOP_PLAYERS aus#define LOOP_PLAYERS(%0) \
for(new %0 = 0, _%0 = GetPlayerPoolSize(); %0 <= _%0, IsPlayerConnected(%0); %0++)Ja, bin Admin

Habe eben einige Prints eingesetzt und gemerkt das nur dieser Block nicht aufgerufen wird. Ich schaue mal weiter und versuche den Fehler zu finden.
-
Deine Schleife ist falsch

Sobald ein Spieler nicht connected ist, bricht die ab...
Entwender du nutzt einfach foreach oder du machst es so:
#define LOOP_PLAYERS(%0) for(new %0=GetPlayerPoolSize(); %0!=-1; %0--) if(IsPlayerConnected(%0))
-
@Jeffry Ich habe schon einmal herraus gefunden, das es an dem Public hier liegen muss,
sobald ich den Sever Starte, kommt die Meldung wie oben Geschrieben,
und es wird nur dieser Public ausgeführt.
public LoadATMs()
{
for(new i = 0; i < cache_num_rows(); i++)
{
ATMInfo[i][dbid] = cache_get_field_content_int(i, "ID");
ATMInfo[i][aX] = cache_get_field_content_float(i, "aX");
ATMInfo[i][aY] = cache_get_field_content_float(i, "aY");
ATMInfo[i][aZ] = cache_get_field_content_float(i, "aZ");
ATMInfo[i][aA] = cache_get_field_content_float(i, "aA");
ATMInfo[i][set] = true;
cache_get_field_content(i, "aName", ATMInfo[i][aName], 1, 40);
CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
}
printf("Aktuelle Bankautomaten: %i/%i in %dms geladen.", cache_num_rows(), MAX_ATMS, cache_get_query_exec_time());
return 1;
} -
Wie rufst du das public auf?
-
Bei OnGameModeInit.
Direkt beim Server Start also. -
-
Kannst du den Code und das Query dazu bitte posten?
-
public LoadATMs()
{
for(new i = 0; i < cache_num_rows(); i++)
{
ATMInfo[i][dbid] = cache_get_field_content_int(i, "ID");
ATMInfo[i][aX] = cache_get_field_content_float(i, "aX");
ATMInfo[i][aY] = cache_get_field_content_float(i, "aY");
ATMInfo[i][aZ] = cache_get_field_content_float(i, "aZ");
ATMInfo[i][aA] = cache_get_field_content_float(i, "aA");
ATMInfo[i][set] = true;
cache_get_field_content(i, "aName", ATMInfo[i][aName], 1, 40);
CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
}
printf("Aktuelle Bankautomaten: %i/%i in %dms geladen.", cache_num_rows(), MAX_ATMS, cache_get_query_exec_time());
return 1;
}enum ATMEnum
{
dbid,
Float:aX,
Float:aY,
Float:aZ,
Float:aA,
bool:set,
aName[40]
};
new ATMInfo[MAX_ATMS][ATMEnum];LoadATMs(); //<- So stehts bei OnGameModeInit
query? Wie meinst?

-
Du darfst das public nicht direkt aufrufen, sondern musst es über ein SELECT Query mittels mysql_function_query oder mysql_pquery aufrufen.
-
Weshalb nicht? Ich habe so aber schon ein Dynamic Teleport System geschrieben was komischerweiße Problemlos funktionieren tut.
Könntest du mir zeigen, wie du es meinst?
-
Du musst ja die Datenbank ansprechen, sonst können ja die Daten nirgends her kommen.
mysql_pquery(dbhandle, "SELECT * FROM atms;", "LoadATMs", ""); -
Perfekt! Ich danke dir.

Habe es nun Umgeschrieben und es klappt Problemlos.Kannst du mir zeigen wie es eine Funktion schreibe, womit ich meine ATM's aufrufen kann? Sprich,
ob Spieler X in der Nähe vom Bankautomaten Y ist? -
Dazu kannst du folgende Funktion nutzen:
stock GetClosestATM(playerid, Float:dist = 10000.0)
{
new Float:tmp, Float:x, Float:y, Float:z, id = -1;
for(new i = 0; i < sizeof(ATMInfo); i++)
{
if(ATMInfo[i][set])
{
tmp = GetPlayerDistanceFromPoint(playerid, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ]);
if(tmp <= dist)
{
dist = tmp;
id = i;
}
}
}
return id;
} -
Mein Problem besteht darin, dass mein Arrest-timer immer nur von 60 auf 59 runterzählt und dann "aufhört".
public CheckEntlassung(){for(new i=0;i<GetMaxPlayers();i++){if(pInfo[i][pJail]!=0){pInfo[i][pJail]--;printf("Noch %i Sekunden.",pInfo[i][pJail]/1000); //geprinted wird immer jede Sekunde dass selbe: Noch 59 Sekunden.if(pInfo[i][pJail]==0){pInfo[i][pJail]=0;SendClientMessage(i,CLR_RED,"Du hast deine Strafe abgesessen, hoffentlich hast du dazu gelernt!");SetPlayerArmour(i,0);ResetPlayerWeapons(i);SetPlayerPos(i,1555.0754,-1675.6427,16.1953);SetPlayerFacingAngle(i,90.0);SetPlayerInterior(i,0);SetPlayerVirtualWorld(i,0);SetPlayerHealth(i,100);GameTextForPlayer(i,"~p~Unjailed",10000,6);}}}return 1;}//im arrest befehl.pInfo[pID][pJail]=jminuten*1000*60;//ongamemodeinitSetTimer("CheckEntlassung",1000,true);mfg
Meine Frage scheint wohl untergegangen zu sein, deswegen frage ich einfach nochmal.

public CheckEntlassung()
{
for(new i=0;i<GetMaxPlayers();i++)
{
if(pInfo[i][pJail]!=0)
{
pInfo[i][pJail]--;
printf("Noch %i Sekunden.",pInfo[i][pJail]/1000);
if(pInfo[i][pJail]==0)
{
pInfo[i][pJail]=0;
SendClientMessage(i,CLR_RED,"Du hast deine Strafe abgesessen, hoffentlich hast du dazu gelernt!");
SetPlayerArmour(i,0);
ResetPlayerWeapons(i);
SetPlayerPos(i,1555.0754,-1675.6427,16.1953);
SetPlayerFacingAngle(i,90.0);
SetPlayerInterior(i,0);
SetPlayerVirtualWorld(i,0);
SetPlayerHealth(i,100);
GameTextForPlayer(i,"~p~Unjailed",10000,6);
}
}
}
return 1;
}pInfo[pID][pJail]=jminuten*1000*60;
SetTimer("CheckEntlassung",1000,true);
-
pInfo[pID][pJail]=jminuten*1000*60;
zu:
pInfo[pID][pJail]=jminuten*60;Und
printf("Noch %i Sekunden.",pInfo[i][pJail]/1000);
zu:
printf("Noch %i Sekunden.",pInfo[i][pJail]); -
Kennt jemand Lücken im pRP Script?
Ich hab jemand der kann sich dauerhaft sich in andere Account hacken oder sich selber zum Admin machen. -