Beiträge von UncleSub
-
-
Wie werden denn die Fahrzeuge erstellt? Auch unter OnGameModeInit, oder werden sie extern erst geladen und dann erstellt?
Könnte nämlich sein, dass wenn du die Fahrzeuge in einer Datenbank/Datei hast und dann lädst und erstellst, dass der eine Sultan noch nicht erstellt wurde.Mfg,
UncleSubEdit: Das es bei OnVehicleSpawn nicht geht, liegt daran, dass dieses Callback erst aufgerufen wird, wenn ein Fahrzeug REspawnt.
-
Füge das oben in dein Script ein:
#define HOLDING(%0) \
((newkeys & (%0)) == (%0))
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))Dann musst du machen:
if(RELEASED(KEY_SECONDARY_ATTACK)
Weil mit PRESSED wird das irgendwie 2x ausgeführt. (Wahrscheinlich weil das Tasten Anschlagen und Loslassen als zwei Aktionen gewertet werden.)
Warum du das machen musst? Lies das hier.
Mfg,
UncleSub -
Frage: Warum mit Timer arbeiten? Nutzt unnötige Ressourcen.
Mach, wenn der Spieler sich einloggt eine Abfrage, ob er Wanteds hat, dann erstellst du das Label. Wenn er ein Wanted bekommt änderst du den String des 3dTextLabels mit dieser Funktion. Analog dazu musst du das natürlich auch machen, wenn der Spieler Wanteds verliert (Durch /clear, normaler Wantedverlust durch Timer,...).
Mfg,
UncleSub -
Die Variable D_TAXI hat genauso, wie D_NONE den Wert 0. Am besten du schreibst in dein Spieler Informations Enum noch "JobDuty" oder ähnliches. Dann setzt du, wenn der Spieler Job Duty geht die Variable auf einen entsprechenden Wert.
Außerdem solltest du in der for Schleife noch IsPlayerConnected(i) abfragen, weil der Wert in den Spieler Variablen nach dem Logout erhalten bleiben (Außer du setzt alle Variablen auf 0).Mfg,
UncleSub -
stock GetVehicleInfo(vehicleid, infotype, &Float:x, &Float:y, &Float:z, &Float:angle)
{
if(vehicleid == INVALID_VEHICLE_ID) return 0;new Float:mX, Float:mY, Float:mZ;
GetVehicleModelInfo(GetVehicleModel(vehicleid), infotype, mX, mY, mZ);
z += mZ;
x += (mY * floatsin(-angle, degrees));
y += (mY * floatcos(-angle, degrees));angle += 270.0;
x += (mX * floatsin(-angle, degrees));
y += (mX * floatcos(-angle, degrees));
angle -= 270.0;
return 1;
}Bei Infotype einfach das gewünschte eingeben. (z.B. VEHICLE_MODEL_INFO_WHEELSREAR )
Mfg,
UncleSub -
Hast schon ne Abfrage, nur dahinter return 1; heißt, dass er normal weitermacht.
if(PlayerInfo[playerid][pLevel] < 3)
{
SendClientMessage(playerid, COLOR_GRAD1, "Du mußt mindestens Level 3 haben um einen Vertrag zu erstellen.");
return 1;
}Richtig wäre es so:
if(PlayerInfo[playerid][pLevel] < 3)
{
return SendClientMessage(playerid, COLOR_GRAD1, "Du mußt mindestens Level 3 haben um einen Vertrag zu erstellen.");}
-
EDIT:
ZitatDa das Auslesen mit einer while schleife funktioniert (while(mysql_fetch_row(data)), wird leider das Auslesen unterbrochen, sobald man mit dem Einlesen beginnt (neue Query).
Einfach nach der while Schleife eine neue Schleife erstellen, die alle Werte updated.
z.B. In der while Schleife eine Variable hochzählen lassen und dann eine for Schleife basteln:
for(new i; i < count; i++)
Darin dann halt immer UPDATE Bla SET Var WHERE bla.
Mfg
-
Du kannst dir auch einen Algorithmus ausdenken, der das "Levelwachstum" beschreibt. Ansonsten müsstest du für jedes Xte Level aufschreiben, wie viele Respektpunkte er braucht.
Als Beispiel:
Würde z.B. für Level 1 = 4 sein und für Level 2 = 6 usw. Denk dir was aus
Mfg,
UncleSub -
Dialog Style DIALOG_STYLE_LIST sollts tun.
Ein kleines Beispiel:
#define DIALOG_IPOD
if (!strcmp(cmdtext, "/ipodan", true))
{
ShowPlayerDialog(playerid, DIALOG_IPOD, DIALOG_STYLE_LIST, "iPod - Wähle deinen Sender", "Technobase \n....\n.....", "Auswählen", "Abrrechen");
}//Ondialogresponse
if(dialogid == DIALOG_IPOD)
{
if(response)
{
if(listitem == 0)
{
/* Dein Code */
}
if(listitem == 1)
{
/* Dein Code */
}
//Und weitere nach belieben
}
}Mfg,
UncleSub -
Das sollte dir Helfen.
Sprich du musstfor(new i=0; i < sizeof(Spieler); i++)
{
Spieler[playerid][_Spieler:i] = 0;
}machen.
Mfg,
UncleSub -
EDIT: Kann sein, dass du in einem Interior offline gegangen bist. Dann musst du die Interior ID zusätzlich abspeichern, damit du den Spieler auch in den richtigen Interior setzen kannst.
Mfg,
UncleSub -
Beantwortet immer noch nicht, ob du vor dem Spawn den Spieler laden lässt. Also hast du bei z.B. OnPlayerConnect die Funktion SpielerLaden(playerid) ausgeführt? Ansonsten ist die Variable leer und es kommt zu Problemen (denke ich).
Mfg
-
Das einzige, was ich mir vorstellen könnte ist, dass du vor dem Spawn nicht die Spieler Daten geladen hast. Sonst könnte es nur mit deiner Spieler Laden Funktion zusammenhängen.
Guck am besten, ob du auch vor dem Spawn die Daten geladen hast. Ansonsten musst du halt bei deiner Spieler Laden Funktion mal schaun und ggf. hier posten.
Mfg
-
if(vehhealth < 1000 && vehhealth >= 950)
Mfg
P.S.: Am besten bastelst du ein Stock (z.B. GetPnSPrice(Float:health)). Dann musst du nicht dort immer abfragen "if(vehhealth <...>...)...." aber musste selber wissen
-
new Float:facing = GetPlayerFacingAngle(playerid);
Schau nochmal hier rein.
new Float:facing;
GetPlayerFacingAngle(playerid, facing);Mfg
-
Ein Fahrzeug kann nicht gleichzeitig zwei Schadenswerte haben. Du willst bei dir jetzt haben, dass das Fahrzeug ein Schaden KLEINER als 950 hat, aber GLEICHZEITG auch über 999 ist!
Mfg
-
Eher +180 (Kreis hat 360 °, Halbkreis demnach 180°, willst den Spieler um 180° drehen = +180°)
Mfg
-
if(vehhealth <= 950 && vehhealth >= 999)
Auf Duetsch: Wenn vehhealth kleiner oder gleich 950 ist UND vehhealth größer oder gleich 999 ist.
Ist einfach nie erfüllt. Wann hat ein Auto ein Leben von kleiner 950 und gleichzeitig größer 999?
Mfg,
UncleSub -
SpielerSpeichern(playerid);
new Float:X,Float:Y,Float:Z,Float:A;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,A);
PlayerInfo[playerid][pX] = X;
PlayerInfo[playerid][pY] = Y;
PlayerInfo[playerid][pZ] = Z;
PlayerInfo[playerid][pA] = A;Wenn du es so hast, wird zuerst die alte Position, die in der Variable pX gespeichert ist in deine Datenbank geschrieben. Danach updatest du aber erst die Werte in pX,...
Du machst es am besten so:
GetPlayerPos(playerid,PlayerInfo[playerid][pX],PlayerInfo[playerid][pY],PlayerInfo[playerid][pZ]);
GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pA]);
SpielerSpeichern(playerid);Sparst sogar noch ein paar Zeilen
Mfg,
UncleSub