Hey Danke schonmal für die Hilfe wann brauche ich mysql_pquery und wann mysql_tquery habe lange nicht mehr mit mysql gearbeitet :o xD.@LeonMrBonnie
Dazu kann ich dir diesen Thread empfehlen: https://forum.sa-mp.com/showthread.php?t=647850
Hey Danke schonmal für die Hilfe wann brauche ich mysql_pquery und wann mysql_tquery habe lange nicht mehr mit mysql gearbeitet :o xD.@LeonMrBonnie
Dazu kann ich dir diesen Thread empfehlen: https://forum.sa-mp.com/showthread.php?t=647850
Moin
ich bin langsam am verzweifeln...
Ich möchte gerne abfragen ob der Tank leer ist vom Auto... Der sagt mir die ganze zeit, dass der Tank leer ist obwohl laut DB 5.00 Liter drinne stehen. Der Tank wird auch in die Variable (siehe OnPlayerCarsLoad) geladen...
enum carData{
db_id,
id_x,
owner,
model,
Float:c_x,
Float:c_y,
Float:c_z,
Float:c_r,
c_color1,
c_color2,
Float:tank
}
public OnPlayerCarsLoad(playerid){
new rows;
cache_get_row_count(rows);
if(rows == 0)return 1;
for(new i = 0; i < rows; i++){
new id = getFreeCarID();
cache_get_value_name_int(i, "id", cInfo[id][db_id]);
cache_get_value_name_int(i, "owner", cInfo[id][owner]);
cache_get_value_name_int(i, "model", cInfo[id][model]);
cache_get_value_name_float(i, "posx", cInfo[id][c_x]);
cache_get_value_name_float(i, "posy", cInfo[id][c_y]);
cache_get_value_name_float(i, "posz", cInfo[id][c_z]);
cache_get_value_name_float(i, "posr", cInfo[id][c_r]);
cache_get_value_name_int(i, "color1", cInfo[id][c_color1]);
cache_get_value_name_int(i, "color2", cInfo[id][c_color2]);
cache_get_value_name_float(i, "tank", cInfo[id][tank]);
cInfo[id][id_x] = CreateVehicle(cInfo[id][model], cInfo[id][c_x], cInfo[id][c_y], cInfo[id][c_z], cInfo[id][c_r], cInfo[id][c_color1], cInfo[id][c_color2], -1);
}
return 1;
}
Alles anzeigen
Nun versuche ich mein Motor Befehl wie folgt zu gestalten:
ocmd:motor(playerid, params[]){
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SCM(playerid,COLOR_RED, "[FEHLER] {FFFFFF}Du bist kein Fahrer eines Fahrzeugs");
new vID = GetPlayerVehicleID(playerid), tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective, cID = getCarID(playerid);
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
if(cInfo[cID][tank] == 0) return SCM(playerid, COLOR_RED, "Dieses Fahrzeug hat kein Kraftstoff mehr");
if(tmp_engine == 1){
tmp_engine = 0;
TextDrawHideForPlayer(playerid,Tacho_TD[4]);
TextDrawColor(Tacho_TD[4], COLOR_RED);
TextDrawShowForPlayer(playerid, Tacho_TD[4]);
}else{
tmp_engine = 1;
TextDrawHideForPlayer(playerid,Tacho_TD[4]);
TextDrawColor(Tacho_TD[4], COLOR_GREEN);
TextDrawShowForPlayer(playerid, Tacho_TD[4]);
}
SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
return 1;
}
Alles anzeigen
mein Stock GetVehicleID (für cID):
getCarID(playerid){
new vID = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(cInfo); i++){
if(cInfo[i][id_x] != vID) continue;
return cInfo[i][id_x];
}
return 0;
}
//EDIT habe eine Lösung gefunden, aber muss ich wirklich jedes mal, wenn ich auf die Info von dem Fahrzeug in dem man sitzt, zugreifen will, muss ich dann echt jedes mal die Schleife machen?:
ocmd:motor(playerid, params[]){
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SCM(playerid,COLOR_RED, "[FEHLER] {FFFFFF}Du bist kein Fahrer eines Fahrzeugs");
new vID = GetPlayerVehicleID(playerid), tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective, cID = getCarID(playerid);
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
for(new i = 0; i < sizeof(cInfo); i++){
if(cInfo[i][id_x] != vID) continue;
if(cInfo[i][tank] == 0) return SCM(playerid, COLOR_RED, "Dieses Fahrzeug hat kein Kraftstoff mehr");
if(tmp_engine == 1){
tmp_engine = 0;
TextDrawHideForPlayer(playerid,Tacho_TD[4]);
TextDrawColor(Tacho_TD[4], COLOR_RED);
TextDrawShowForPlayer(playerid, Tacho_TD[4]);
}else{
tmp_engine = 1;
TextDrawHideForPlayer(playerid,Tacho_TD[4]);
TextDrawColor(Tacho_TD[4], COLOR_GREEN);
TextDrawShowForPlayer(playerid, Tacho_TD[4]);
}
}
SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
return 1;
}
Alles anzeigen
muss ich wirklich jedes mal, wenn ich auf die Info von dem Fahrzeug in dem man sitzt, zugreifen will, muss ich dann echt jedes mal die Schleife machen?:
Nein, du müsstest den stock so schreiben:
getCarID(playerid){
new vID = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(cInfo); i++){
if(cInfo[i][id_x] == vID) return i;
}
return INVALID_VEHICLE_ID;
}
Dann wird dir der richtige Index zurück gegeben.
Beachte, dass du dort wo du den stock nutzt auch abfrägst, ob der Wert nicht INVALID_VEHICLE_ID ist, bevor du es in einem Array-Index nutzt, sonst kommt es zu Fehlern, da du das Array dann sprengst.
PS:
Bitte beachte zukünftig, dass dieser Thread für kleine Scriptingfragen gedacht ist, und nicht für solch große Codes.
ocmd:pn(playerid,params[])
{
new pID,text[128];
if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,COLOR_RED, "INFO: /pn [playerid] [text]");
SendClientMessage(pID,COLOR_YELLOW,text);
return 1;
}
Ich möchte jetzt das dort auch der Absender steht.
Kann mir bitte wer sagen wie ich es so schreibe?
Das kannst du mit format machen:
ocmd:pn(playerid,params[])
{
new pID,text[128],string[145],name[MAX_PLAYER_NAME];
if(sscanf(params,"is[128]",pID,text))return SendClientMessage(playerid,COLOR_RED, "INFO: /pn [playerid] [text]");
GetPlayerName(pID, name, MAX_PLAYER_NAME);
format(string, sizeof(string), "%s (%d): %s", name, playerid, text);
SendClientMessage(pID,COLOR_YELLOW,string);
return 1;
}
Hallo,
Ich habe vor ein Navi System zu machen. Es sollte so sein das es Dynamisch im Script oben Erstellt werden kann (Kategorie und dann der Ort). Ich möchte nicht mit etlichen Dialogen Arbeiten.
Nur ich wüsste gerade nicht wie ich das Anfangen soll.
MfG Basti
Das wäre theoretisch nicht viel Dialoge.
Willst du die Navigationspunkte InGame erstellen oder fest im Script?
Fest im Script
Ich habe mir eine Funktion UpdateSpectate gemacht, um den Spectate Status immer zu aktualisieren, wenn sich der Status von einem Spieler ändert, aber sobald dieser stirbt oder ein Interior betritt bewegt sich die Kamera einfach nicht zu der Person hin. Der Gametext, wenn die Person tot ist wird übrigens auch warum auch immer nicht angezeigt. Die Variable pSpecID verändert sich nicht, ist also die richtige.
UpdateSpectate(playerid)
{
new target = pInfo[playerid][pSpecID];
if(pInfo[playerid][pSpecID] == -1) return 0;
if(pInfo[target][pSpecing]) return 0;
if(GetPlayerState(target) == PLAYER_STATE_WASTED) return GameTextForPlayer(playerid, "Warte einen Moment...", 1500, 6);
SetPlayerInterior(playerid, GetPlayerInterior(target));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(target));
TogglePlayerSpectating(playerid, 1);
if(IsPlayerInAnyVehicle(target)) PlayerSpectateVehicle(playerid, GetPlayerVehicleID(target));
else PlayerSpectatePlayer(playerid, target);
return 1;
}
Ich führe die Funktion bei OnPlayerDeath, bei OnPlayerInteriorChange, OnPlayerSpawn, OnPlayerEnterVehicle, OnPlayerExitVehicle und bei OnPlayerStateChange aus.
Überall so:
foreach(new i : Player)
{
if(pInfo[i][pSpecID] == playerid)
{
UpdateSpectate(i);
}
}
Es funktioniert aber einfach nicht, woran liegt das?
Hey, ist glaube ich keine Scripting Frage, aber hat was damit zutun.
Ich will einen Sound auf einer Seite hochladen bekannt ist Kiwi6 aber da wird meine Datei nicht angezeigt, kann man das woanders hochladen?
Oder kann man um einen Sound abzuspielen auch andere Links einfügen nicht unbedingt die direct links?
@LeonMrBonnie
Das Problem gab es schon öfter, habe auf Servern gespielt diese konnten auch nicht im Interior spectaten oder wenn der Spieler tot war
Ich glaube das man dagegen nichts machen kann (?)
Korrigiert mich einer wenn ich falsch liege.
Moin,
ich habe mir das Include https://forum.sa-mp.com/showthread.php?t=404367 nun mal angeschaut. Ich habe auch die Warnings entfernt die man durch dieses Include erhält.
Nun ist es so, dass ich einen Timer Starte, sobald der Motor an geschaltet wird:
ganz oben bei meinen forwards hab ich natürlich auch den Forward:
Die Funktion setKiloMeter sieht wie folgt aus:
public setKiloMeter(playerid, vehicleid){
printf("%d",GetKilometers(GetPlayerVehicleID(playerid)));
ResetMetersTraveled(vehicleid); //ZEILE 738
return 1;
}
Nun bekomme ich allerdings beim Compilen immer folgenden Fehler:
Zeile 738 habe ich Markiert
//EDIT //EDIT ENTFERNT DA DOPPELT
MfG
XonarZ
https://forum.sa-mp.com/showthread.php?t=330879
Habe ein Kamera Editor gefunden
Macht man hiermit Kamera-Fahrten für den Login z.B
und kommt der Code dann hierhin?
public OnPlayerConnect(playerid)
Wo der Code für die Kamerafahrt hinkommt ist natürlich davon abhängig, wofür die Kamerafahrt überhaupt gedacht ist.
Wenn es beim betreten des Servers eine Kamerafahrt geben soll, dann muss diese unter OnPlayerConnect; Ja.
public OnPlayerConnect(playerid)
{
InterpolateCameraPos(playerid, //...);
InterpolateCameraLookAt(playerid, //...);
Irgendwie ist die Kamera immer noch an der selben stelle wie am Anfang irgendwie am Wasser, ist wahrscheinlich Standard so.
Also mir fehlt was habe so etwas nie gemacht, wird auch nicht im Filterscript erklärt
Wie beende ich die Kamera am ende dann nach dem Login z.B einfach
SetCameraBehindPlayer(playerid); ?
Du brauchst erstmal [wiki]SetCameraLookAt[/wiki] damit es funktioniert.
Um die Kamera zurückzusetzen kannst du einfach SetCameraBehindPlayer verwenden, davor musst du aber natürlich den Spieler spawnen.
SetCameraBehindPlayer(playerid);
Ist die Funktion nicht da das sich das dann wiederholt? oder wie kann man sowas wiederholen lassen?
Falls man z.b ein Spieler im Krankenhaus spawnen lässt und dann solle eine Kamarafahrt sein. aber das ding ist die ist ja dann schnell vorbei auch wen man die z.b langsam fahren lassen würde?
Wie du bei [wiki]InterpolateCameraLookAt[/wiki] und [wiki]InterpolateCameraPos[/wiki] bei den Parametern sehen kannst, kannst du dort eine Zeit angeben die es dauert, bis das Ziel erreicht wird, die Geschwindigkeit wird dadurch automatisch berechnet.
SetCameraLookAt gibt es nicht hä, warum geht es nicht
Ich meinte [wiki]SetPlayerCameraLookAt[/wiki], sorry.
public OnPlayerConnect(playerid)
{
InterpolateCameraPos(playerid, //...);
InterpolateCameraLookAt(playerid, //...);
Das ist ja das selbe nur das es eine Kamerafahrt ist.
Also das muss so richtig sein macht ja kein wenn ich SetPlayerCameraLookAt benutze obwohl ich InterpolateCameraLookAt benutze.
Ich stelle mir vor das der Spieler im Specatate-Modus sein muss aber ich hab keine Ahnung, jedenfalls geht es ja so nicht