[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
-
-
(error #2006) MySQL server has gone away
Damit holst du ihn wieder -
Damit holst du ihn wieder
waaaasss ? -
waaaasss ?
Hast du eine Shell, mit der du auf deinen Linux Server zugreifen kannst?Damit restartest du ihn...
-
Hay, warum wird die letzte posi nicht in meine Datenbank eingetragen?
new query[256],Float:x,Float:y,Float:z;
GetPlayerPos(playerid, x,y,z);
format(query,sizeof(query),"UPDATE user SET p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z],SpielerInfo[playerid][db_id]);
mysql_function_query(dbhandle,query,false,"",""); -
Weil du die falschen Variablen im Format hast.
format(query,sizeof(query),"UPDATE user SET p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",x, y, z ,SpielerInfo[playerid][db_id]); -
format(query,sizeof(query),"UPDATE user SET p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",x, y, z ,SpielerInfo[playerid][db_id]);
danke,
aber jetzt wird der Spieler nicht mehr an der letzten Posi gespawnt?
SpielerInfo[playerid][p_x] = cache_get_field_content_float(0,"p_x",dbhandle);
SpielerInfo[playerid][p_y] = cache_get_field_content_float(0,"p_y",dbhandle);
SpielerInfo[playerid][p_z] = cache_get_field_content_float(0,"p_z",dbhandle);
SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]); -
Du hast das bestimmt beim Login stehen, vor SpawnPlayer. Falls ja, dort muss SetPlayerPos weg, das gehört dann zu OnPlayerSpawn.
-
Du hast das bestimmt beim Login stehen, vor SpawnPlayer. Falls ja, dort muss SetPlayerPos weg, das gehört dann zu OnPlayerSpawn.
ich habe das bei OnPlayerSpawn stehen o.0?
-
Wenn da alles steht dann hast du keinen aktiven Cache, wie jedes mal.
Schreibe die ersten drei Zeilen zu dem Callback mit dem du die Spielerstatistiken lädst, und die vierte Zeile, also das SetPlayerPos lässt du bei OnPlayerSpawn. -
alles klar danke es geht nun, aber
jetzt kommen wir zu den Tank system.. BUG: Der Motor geht nicht mehr richtig an, immer wenn ich numpade 4 drücke(Motor an/aus) wird immer bei den Prozents -1 hinzugefügt. hier der Code:
//unter public OnPlayerStateChange(playerid, newstate, oldstate)
new vModel=GetVehicleModel(vID);
for(new i=0; i<sizeof(autosOhneMotor); i++)
{
if(autosOhneMotor[i]!=vModel)continue;
//Motor an/ausschalten
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
SetVehicleParamsEx(vID, 1, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
}//Mein Timer
public autotankanzeige(playerid)
{
new string[128];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
if(!IsPlayerInAnyVehicle(i))continue;
new vID = GetPlayerVehicleID(i);
format(string, sizeof(string), "Tankinhalt: %i%%", tank[vID]);
PlayerTextDrawSetString(i,Textdraw18[i] ,string);
}
tanktimer++;
if(tanktimer == 1)
{
tanktimer = 0;
//Tanks reduzieren
for(new i=1; i<sizeof(tank); i++)
{
if(!hatAutoMotor(i))continue;
if(!isMotorOn(i))continue;
tank[i]--;
if(tank[i]>0)continue;
stopMotor(i);
}
}
return 1;
}//Unter OnGameModeInIT
//Tank system
for(new i=0; i<sizeof(tank); i++)
{
tank[i]=100;
} -
-1 wird hinzugefügt? Heißt 1 wird abgezogen, oder was?
Poste bitte den Code mit dem du den Motor startest, wenn es da passiert.Wenn nur eins abgezogen wird, kannst du ja auch einfach einen Prozentpunkt für das Fahrzeug hinzufügen, wenn der Motor gestartet wird.
-
t
hier
ocmd:motor(playerid,params[])
{
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return 1;
new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
vID = GetPlayerVehicleID(playerid);
//Motor an/ausschalten
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
if(tmp_engine == 1)
{
tmp_engine = 0;
format(string, sizeof(string), "Motor: ~r~Aus");
}
else
{
tmp_engine = 1;
format(string, sizeof(string), "Motor: ~g~An");
}
SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
PlayerTextDrawSetString(playerid,Textdraw15[playerid] ,string);
return 1;
}//EDIT: Ja es wird immer -1 abgezogen wenn ich Numpade 4 drücke... auch wenn es sogar unter 0 ist wird immer -1 , -2 , -3 und so weiter...
-
Nein, nicht den Befehl, den Code den du unter "Numpad 4" stehen hast, um den Motor zu starten.
Wenn du den Befehl eingibst klappt es doch, oder? -
Nein, nicht den Befehl, den Code den du unter "Numpad 4" stehen hast, um den Motor zu starten.
Wenn du den Befehl eingibst klappt es doch, oder?also es geht beides nicht. selbst über Numpade 4 sowohl auch über /motor...
Hier nochmal eine Erklärung:
Wenn man in einen Auto einsteigt und dann /motor oder Numepade 4 drückt, wird SOFORT von 100 % auf 0 % der Tankinhalt gerechnet! Und dann wenn ich noch versuche den Motor zu starten wird immer von 0 immer -1 gerechnet . also -1 -2 -3 -4 -5 .....
Hier nochmal der ganze Code:
forward autotankanzeige(playerid);
//OnGameModeInit
SetTimerEx("autotankanzeige",1,true,"i",playerid);
//Irgendwo im Skript
new tanktimer = 0;
public autotankanzeige(playerid)
{
new string[128];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
if(!IsPlayerInAnyVehicle(i))continue;
new vID = GetPlayerVehicleID(i);
format(string, sizeof(string), "Tankinhalt: %i%%", tank[vID]);
PlayerTextDrawSetString(i,Textdraw18[i] ,string);
}
tanktimer++;
if(tanktimer == 1)
{
tanktimer = 0;
//Tanks reduzieren
for(new i=1; i<sizeof(tank); i++)
{
if(!hatAutoMotor(i))continue;
if(!isMotorOn(i))continue;
tank[i]--;
if(tank[i]>0)continue;
stopMotor(i);
}
}
return 1;
}//unter OnPlayerKeyStateChange
if(newkeys & KEY_ANALOG_LEFT)
{
//Motor AN
ocmd_motor(playerid, "");
return 1;
}
if(newkeys & KEY_ANALOG_LEFT)
{
//Motor AUS
ocmd_motor(playerid, "");
return 1;
}//und der Befehl:
ocmd:motor(playerid,params[])
{
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return 1;
new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
vID = GetPlayerVehicleID(playerid);
//Motor an/ausschalten
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
if(tmp_engine == 1)
{
tmp_engine = 0;
format(string, sizeof(string), "Motor: ~r~Aus");
}
else
{
tmp_engine = 1;
format(string, sizeof(string), "Motor: ~g~An");
}
SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
PlayerTextDrawSetString(playerid,Textdraw15[playerid] ,string);
return 1;
} -
SetTimerEx("autotankanzeige",1,true,"i",playerid);
Du führst den Timer jede Millisekunde aus deshalb wird es sehr schnell auf null gesetzt.
Versuchs mal mit 3 sekunden sprich 3000ms.
SetTimerEx("autotankanzeige",3000,true,"i",playerid);
lg
-
SetTimerEx("autotankanzeige",1,true,"i",playerid);
Du führst den Timer jede Millisekunde aus deshalb wird es sehr schnell auf null gesetzt.
Versuchs mal mit 3 sekunden sprich 3000ms.
SetTimerEx("autotankanzeige",3000,true,"i",playerid);
lg
danke! Es geht nun, aber wenn ich aufn Motorrad steige, muss ich 3 Sekunden oder so warten , bis überhaupt da eine Zahl angezeigt wird.
-
Dann brauchst du 2 Timer.
Im ersten Timer (Mit zB Intervall 1000) kommt die Anzeige hinein. Vielleicht hast du schon einen für die Geschwindkeit.
Im zweiten Timer kommt dann der Abzug vom Benzin hinein und den Intervall setzt du so, wie schnell der Tank leer werden soll zB alle 10sekunden -1.
lg
-
Warum werden nicht mehr bei mir Maps geladen? Bin zwar schon über den Limit, aber es gibt doch bestimmt ein weg wie man mehr Objekte einfügen kann oder nicht?
-
@[GeD]Max:
Benutze doch einen Streamer.
Limits sind nicht umsonst da.
http://forum.sa-mp.com/showthread.php?t=102865