Sicher, dass das der richtige Code ist?
Da steht nichts von:
Zitatmysql_fetch_field
Sicher, dass das der richtige Code ist?
Da steht nichts von:
Zitatmysql_fetch_field
Ja. Schreibe es so:
if(strcmp(cmd, "/friedhof", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pFriedhof] >= 1)
{
new chat[128];
new secs = PlayerInfo[playerid][pFriedhofTime]-gettime();
format(chat, sizeof(chat), "Du bist noch für ca %d Sekunden auf dem Friedhof",secs);
SendClientMessage(playerid, COLOR_LIGHTBLUE, chat);
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht auf dem Friedhof.");
}
}
return 1;
}
Ok, dann ändere das:
new Hour,Minute,Sec,String[12];
gettime(Hour,Minute,Sec);
format(String,sizeof(String),"%02d:%02d",Hour,Minute);
TextDrawSetString(Uhrzeit,String);
zu:
new Hour,Minute,Sec,Day,Month,Year;
TimestampToDate(gettime() + (3600 * STUNDEN_DIFFERENZ), Day, Month, Year, Hour, Minute, Sec, 0);
format(String,sizeof(String),"%02d:%02d",Hour,Minute);
TextDrawSetString(Uhrzeit,String);
PS: Variablen-Namen schreibt man eigentlich klein am Anfang, da ich nicht weiß, wie dein weiterer Code aussieht habe ich das nicht geändert.
Nein, nicht das. Suche mal nach "TextDrawSetString(Uhrzeit".
Den Teil brauchen wir.
Poste bitte mal den Code, wie du ihn jetzt hast, wenn du den Spieler nach der Skin-Auswahl spawnen lässt (also nach deiner eigenen Auswahl).
Möglicherweise ist da was durcheinander gekommen.
Poste bitte den Code mit dem du zur Zeit die falsche Uhrzeit anzeigen lässt.
wo gehört das denn rein unter onplayerconnect richtig ?
Das gehört dort rein wo du die Uhrzeit aktualisierst, sprich das Textdraw (?) aktualisierst, mit TextDrawSetString.
Lässt du den Spieler nicht vor der Class Selection einloggen? Dann hättest du das Problem mit dem Kick nicht.
Wie setzt du den Wert bei "PlayerInfo[playerid][pFriedhof]" ? Poste den Code mal.
Ahh, du hast den Code nicht richtig übernommen. Da habe ich natürlich nicht explizit darauf geachtet.
for(new i = 0; i<sizeof(pCar); i++)
{
new Float:vPos[4];
GetVehiclePos(pCar[i], vPos[0], vPos[1], vPos[2]);
GetVehicleZAngle(pCar[i], vPos[3]);
if(IsPlayerInRangeOfPoint(playerid, 15.0, vPos[0], vPos[1], vPos[2]))
{
vPos[0] += (-8.0 * floatsin(-vPos[3], degrees));
vPos[1] += (-8.0 * floatcos(-vPos[3], degrees));
Object[b][ra_x] = vPos[0],Object[b][ra_y] = vPos[1],Object[b][ra_z] = vPos[2],Object[b][ra_a] = vPos[3];
ObjectID[playerid] = CreateObject(1632,Object[b][ra_x], Object[b][ra_y], Object[b][ra_z]-3.0, 0, 0, Object[b][ra_a]+0);
MoveObject(ObjectID[playerid], Object[b][ra_x], Object[b][ra_y], Object[b][ra_z]-1.0, 0.06, 0, 0, Object[b][ra_a]+0);
SetTimer("BuildObj", 30000, false);
ObjOwner[playerid] = playerid;
return 1;
}
}
return SendClientMessage(playerid, COLOR_ERRORTEXT, "Du bist nicht nah genug am Laster!");
Du musst die Model ID vom Einkaufswagen natürlich angeben. Hast du das gemacht?
Schreib es mal so, geht es dann?
Function SetPlayerSpawn(playerid)
{
SetSpawnInfo(playerid, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, 0);
SpawnPlayer(playerid);
StopAudioStreamForPlayer(playerid);
return 1;
}
Übrigens bringt 40000 im Streamer nichts, da nur maximal 1000 Objekte angezeigt werden können.
Poste mal dein "SetPlayerSpawn".
Hast du eine eigene Class Selection, oder nutzt du die Standard-Buttons von SA-MP (Links / Rechts / Spawn)?
Da ich nicht weiß, in welcher Zeitzone dein Server steht hätte ich es dir so vorgeschlagen:
new date[6];
TimestampToDate(gettime() + (3600 * STUNDEN_DIFFERENZ), date[0], date[1], date[2], date[3], date[4], date[5], 0);
printf("Uhrzeit: %02d:%02d", date[3], date[4]);
Wobei date[0] = Jahr ... bis date[5] = Sekunde.
Das STUNDEN_DIFFERENZ ersetzt du mit der Differenz der Stunden zwischen der Zeitzone des Servers und unserer Zeitzone, also zum Beispiel 7 (-6 -> +1).
Nutze http://wiki.sa-mp.com/wiki/SelectTextDraw um die Maus anzuzeigen.
Nutze vor dem Spawn:
http://wiki.sa-mp.com/wiki/SetSpawnInfo
Sowie:
TogglePlayerSpectating(playerid, 0);
Nutze einen dieser Editor, um Objekte an Spieler zu hängen:
http://forum.sa-mp.com/showthread.php?t=209234
http://forum.sa-mp.com/showthread.php?t=416138
Das gibt dir den Code dann aus.
Poste bitte den Code.
Nur bin ich der Meinung, das sie etwas langsamer zu gehen, als sie sollten.
Kannst es ja etwas schneller machen, mit 0.0051. Das kannst du ja so lange probieren, bis es so ist wie du es willst.
Du kannst dann entweder den Range erhöhen, oder du berechnest die Position erst nach der Range Abfrage. Eigentlich hatte ich gedacht 15 reicht als Range.
for(new i = 0; i<sizeof(pCar); i++)
{
new Float:vPos[4];
GetVehiclePos(pCar[i], vPos[0], vPos[1], vPos[2]);
GetVehicleZAngle(pCar[i], vPos[3]);
if(IsPlayerInRangeOfPoint(playerid, 15.0, vPos[0], vPos[1], vPos[2]))
{
vPos[0] = (-8.0 * floatsin(-vPos[3], degrees));
vPos[1] = (-8.0 * floatcos(-vPos[3], degrees));
Object[b][ra_x] = vPos[0],Object[b][ra_y] = vPos[1],Object[b][ra_z] = vPos[2],Object[b][ra_a] = vPos[3];
ObjectID[playerid] = CreateObject(1632,Object[b][ra_x], Object[b][ra_y], Object[b][ra_z]-3.0, 0, 0, Object[b][ra_a]+0);
MoveObject(ObjectID[playerid], Object[b][ra_x], Object[b][ra_y], Object[b][ra_z]-1.0, 0.06, 0, 0, Object[b][ra_a]+0);
SetTimer("BuildObj", 30000, false);
ObjOwner[playerid] = playerid;
return 1;
}
}
return SendClientMessage(playerid, COLOR_ERRORTEXT, "Du bist nicht nah genug am Laster!");
EDIT: Ich habe den Fehler gerade entdeckt, das return war in der Schleife, somit hat es beim ersten Fahrzeug aufgehört. Die Berechnung lasse ich trotzdem mal so, ist ressourcenschonender. Code ist abgeändert, sollte jetzt klappen.