Teile die Zeile mit dem format in mehrere Zeilen auf, die scheint zu lang zu sein.
Beiträge von Jeffry
-
-
Mit der alten Version klappt das dann wahrscheinlich nicht.
Versuche es so:
ocmd:materials(playerid,params[])
{
if(PlayerInfo[playerid][pLoggedIn]==false) return 1;
new ding[20], anzahl, string[145];
if(sscanf(params, "s", ding)) return SendClientMessage(playerid,COLOR_RED,"Benutze /materials [get/deliver/put/gtake/sell] [opt:Anzahl]");
if(!strcmp(ding, "deliver", true))
{
if(IsPlayerInRangeOfPoint(playerid,2.5,-2027.7643,-40.7760,38.8047))
{
if(PlayerInfo[playerid][pJob] != 2) return SendClientMessage(playerid,COLOR_RED,"Du bist kein Waffendealer");
{
if(PlayerInfo[playerid][pMatskauf] == 0) return SendClientMessage(playerid,COLOR_RED,"Du hast dir keine Mats gekauft");
{
PlayerInfo[playerid][pMats] = PlayerInfo[playerid][pMatskauf]*75;
PlayerInfo[playerid][pMatskauf] = 0;
format(string,sizeof(string),"Du hast %d Mats erhalten.",PlayerInfo[playerid][pMats]);
SendClientMessage(playerid,COLOR_GREEN,string);
format(string, sizeof(string), "%s hat %i Mats abgeholt", PlayerInfo[playerid][pName],PlayerInfo[playerid][pMatskauf]*75);
SaveToLog("Matsabholen", string);
}
}
}
return 1;
}
if(sscanf(params, "sd", ding, anzahl)) return SendClientMessage(playerid,COLOR_RED,"Benutze /materials [get/deliver/put/gtake/sell] [opt:Anzahl]");
format(string,sizeof(string),"Anzahl: %i",anzahl);
SendClientMessage(playerid,COLOR_GREEN,string);
if(!strcmp(ding, "get", true))
{
if(IsPlayerInRangeOfPoint(playerid,2.5,597.3653,-1249.4796,18.3040))
{
if(PlayerInfo[playerid][pJob] != 2) return SendClientMessage(playerid,COLOR_RED,"Du bist kein Waffendealer");
{
if(anzahl*3800 > PlayerInfo[playerid][pMoney]) return SendClientMessage(playerid,COLOR_RED,"Du trägst nicht genug Geld bei dir!");
if(anzahl == 0) return SendClientMessage(playerid,COLOR_RED,"Du hast eine Ungültige Eingabe getätigt.");
if(anzahl > 10) return SendClientMessage(playerid,COLOR_RED,"Du kannst nicht mehr als 10 Mat Pakete kaufen!");
if(PlayerInfo[playerid][pMatskauf]>0) return SendClientMessage(playerid,COLOR_RED,"Hole deine bereits gekauften Mats zuerst ab!");
PlayerInfo[playerid][pMoney]-=anzahl*3800;
GivePlayerMoney(playerid,-anzahl*3800);
PlayerInfo[playerid][pMatskauf] = anzahl;
format(string,sizeof(string),"Du hast dir %d Matspackete für %d$ gekauft. Hole nun deine Mats ab. Der Abholpunkt wurde dir auf der Map markiert.",anzahl,anzahl*5);
SendClientMessage(playerid,COLOR_GREEN,string);
SendClientMessage(playerid,COLOR_RED,"Lass dich nicht erwischen. Dies könnte teuer enden.");
SendClientMessage(playerid,COLOR_GREEN,"Solltest du dich Ausloggen ohne deine Mats zuvor abgeholt zu haben, verfallen diese ohne Ausnahmen!");
SetPlayerCheckpoint(playerid,-2027.7643,-40.7760,38.8047, 3.0);
format(string, sizeof(string), "%s hat sich %i Mats gekauft. Preis: %i",getPlayerName(playerid),anzahl,anzahl*750);
SaveToLog("Matskauflog", string);
}
}
return 1;
}
else if(!strcmp(ding, "put", true))
{
if(anzahl > PlayerInfo[playerid][pMats]) return SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Mats dabei.");
PlayerInfo[playerid][pMats] -= anzahl;
PlayerInfo[playerid][pMatss] += anzahl;
format(string,sizeof(string),"Du hast %d Mats in den Safe gepackt. Gesamt: %d",anzahl,PlayerInfo[playerid][pMatss]);
SendClientMessage(playerid,COLOR_GREEN,string);
SaveUserStats(playerid);
new string2[128];
format(string2,sizeof(string2),"%s hat %d Mats in den Safe gepackt. Gesamt: %d",getPlayerName(playerid),PlayerInfo[playerid][pMatss],anzahl);
SaveToLog("Putmats", string2);
return 1;
}
else if(!strcmp(ding,"gtake",true))
{
if(anzahl > PlayerInfo[playerid][pMatss]) return SendClientMessage(playerid,COLOR_RED,"Du besitzt nicht soviele Mats");
PlayerInfo[playerid][pMats] += anzahl;
PlayerInfo[playerid][pMatss] -= anzahl;
format(string,sizeof(string),"Du hast %d Mats aus den Safe genommen. Gesamt: %d",anzahl,PlayerInfo[playerid][pMatss]);
SendClientMessage(playerid,COLOR_GREEN,string);
SaveUserStats(playerid);
return 1;
}
return 1;
} -
Dies löst leider nicht das Problem. Ein Print gibt Allgemein aus das es immer null ist
Wie sieht denn dein Befehl komplett mit print aus?
Sicher, dass du das Plugin nutzt, und nicht im Code doch noch die Funktion irgendwo definiert hast?
-
Guten Abend,
wie kann ich aus meiner Datenbank auslesen ob der Spieler existiert wenn dieser nicht online ist.
Ich verwende MySQL include R39-3new query[128];
mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", name);
mysql_pquery(handle, query, "RegCheck", "d", playerid);Und:
forward RegCheck(playerid);
public RegCheck(playerid)
{
new rows = cache_get_row_count();
if(rows) SendClientMessage(playerid, 0xFFFFFFFF, "User ist in der Datenbank.");
else SendClientMessage(playerid, 0xFF0000FF, "User ist nicht in der Datenbank.");
return 1;
} -
ich besitze das sscanf plugin version 2
Dann versuche es so:
if(sscanf(params, "s[20]I(-1)", ding, anzahl)) return SendClientMessage(playerid,COLOR_RED,"Benutze /materials [get/deliver/put/gtake/sell] [opt:Anzahl]"); -
Was ich wirklich klasse finde ist, dass ihr euch wirklich jedes Jahr darüber viele Gedanken macht und auch Aufwand da rein steckt, um solche Aktionen zu veranstalten!
Ich finde es immer wieder lustig! -
//Edit: Hat hier jemand eine Lösung für mich?
Sorry, ich bin nicht früher dazu gekommen das zu basteln.
Du kannst dazu folgende Funktion nutzen:
stock GetPlayerLookAtVehicle(playerid, distance, Float:range) //©Jeffry
{
new Float:x, Float:y, Float:z, Float:a, Float:nx, Float:ny, vehicleid = INVALID_VEHICLE_ID;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
for(new i = 1; i < MAX_VEHICLES; i++)
{
if(!GetVehicleModel(i)) continue;
if(GetVehicleDistanceFromPoint(i, x, y, z) <= distance)
{
for(new j = floatround(range); j <= distance; j++)
{
nx = x + (j * floatsin(-a, degrees));
ny = y + (j * floatcos(-a, degrees));
if(GetVehicleDistanceFromPoint(i, nx, ny, z) <= range)
{
vehicleid = i;
distance = floatround(GetVehicleDistanceFromPoint(i, x, y, z));
break;
}
}
}
}
return vehicleid;
}Nutzung:
new vehicleid = GetPlayerLookAtVehicle(playerid, 30, 2.0);
if(vehicleid == INVALID_VEHICLE_ID) printf("Kein Fahrzeug wird angeschaut.");
else printf("Fahrzeug %d wird angeschaut.", vehicleid);
Die 30 steht für die Distanz vom Spieler aus nach vorne, bis zu der hin überprüft werden soll, ob ein Fahrzeug angeschaut werden soll.
Die 2.0 steht für den Umkreis um das eventuell gefundene Fahrzeug. -
mitmacht oder ob es Sinnvoller bzw es reicht nen timer zu nutzen.
Du kannst auch einen Timer machen, der 2-3 mal die Sekunde aufgerufen wird, das geht auch.
OnPlayerUpdate wird halt zum Teil 30 mal die Sekunde aufgerufen, das ist dann doch ziemlich viel für deine Anforderung. -
Jetzt funktionierts! Hab unterm else das EnablePlayerCameraTarget(playerid, false); ausgeklammert, versteh aber nicht wie es daran liegen konnte?!
Super!
Ich kann mir höchstens vorstellen, dass es einfach nicht korrekt updated, wenn man das zu schnell/oft an/aus macht. -
Erhöhe die 3 mal zu 10 oder so. 3 scheint mir etwas wenig.
-
Jedoch weiß ich nicht wie ich abfragen kann ob der Spieler in einem Auto sitzt welches Ihm gehört.
Prüfe die VehicleID ab (Änderungen per Kommentar markiert):
ocmd:parken(playerid,params[])
{
if(IsPlayerInAnyVehicle(playerid))
{
new veh = GetPlayerVehicleID(playerid); //Hinzugefügt
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x]==veh)continue; //Geändert
if(cInfo[i][besitzer]==sInfo[playerid][id])
{
GetVehiclePos(cInfo[i][id_x],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z]);
GetVehicleZAngle(cInfo[i][id_x],cInfo[i][c_r]);
new query[256];
format(query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f' WHERE id='%i'",cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z],cInfo[i][c_r],cInfo[i][db_id]);
mysql_function_query(dbhandle,query,false,"","");
SendClientMessage(playerid, COLOR_RED, "Du hast dein Fahrzeug erfolgreich hier geparkt.");//Wird auch bei anderen Fahrzeugen außer dem eigenen Angezeigt??!
return 1;
}
}
}
return 1;
} -
Hast du mal versucht das EnablePlayerCameraTarget bei OnPlayerConnect einzuschalten, anstatt es hier immer ein und direkt wieder auszuschalten?
Könnte sein, dass das nämlich nicht ausreichend ist für die Erkennung. -
Ich habe hier vor kurzem zwei Funktionen gepostet, mit denen geprüft werden kann, ob man exakt am Kofferraum steht:
[SAMMELTHREAD] Kleine Scripting Fragen -
Hast du den PC dazwischen mal neu gestartet? Eventuell hilft das nach der Installation.
Liegt die mysql.dll Datei im Server Ordner im Ordner plugins?
-
new intHealth = floatround((vHealth - 250.0) / 7.5);
-
Hat nichts gebracht, kommt die gleiche Fehlermeldung nur mit mysql.so
Das .so darf nur bei Linux Systemen verwendet werden.
Bei Windows muss die mysql.dll im Ordner "plugins" liegen und in der server.cfg "mysql" eingetragen werden.(Siehe auch meinen vorherigen Post bezüglich den Runtimes)
-
Kommt drauf an wie er und sein public dazu aktuell aussehen.
-
Bei mir will er das Plugin nicht laden
Aber sonst echt super TutDanke!
Wenn es ein Windows System ist, auf dem es nicht lädt, dann installiere dieses All in One Paket, das enthält alle notwendigen Runtimes:
http://www.chip.de/downloads/A…ne-Runtimes_37449838.html -
Warum überhaupt einen separaten Funktionsaufruf?
format(tcn1, sizeof(tcn), "%d", GetVehicleSpeed(playerid));
Zu:
format(tcn1, sizeof(tcn1), "%d", VehicleSpeed(GetPlayerVehicleID(playerid)));Das public GetVehicleSpeed kann dann gelöscht werden.
Den Code mit dem PlayerTextDrawSetString dann in einen Timer setzen, der jede Sekunde aufgerufen wird und für alle Spieler eine Schleife enthält.
-
if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_NONE)
Zu
if(oldstate == PLAYER_STATE_DRIVER)
Der neue Status muss nämlich nicht zwangsläufig OnFoot sein.Außerdem solltest du eventuell auch PlayetTextDrawHide anstatt PlayerTextDrawDestroy nutzen, sofern du das Textdraw bei OnPlayerConnect erstellst.