Hast du "eingeloggt" in das enum von sInfo geschrieben? Oder "level", je nach dem welches die Zeile 270 ist?
Poste ggf. mal das enum das zu sInfo gehört.
Beiträge von Jeffry
-
-
Jeffry:
Dann wird mein name 2 mal angezeigt und meine id
Wie sieht denn dein Code aus? Poste ihn nochmal. Vielleicht hast du eine Änderung vergessen. -
So ist es richtig:
ocmd:tote(playerid)
{
if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Notarzt!");
new bool:einerTot, string[145];
if(sInfo[playerid][mduty] == 1)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(sInfo[i][PTot] == 1)
{
if(!einerTot) SendClientMessage(playerid,ROT,".:Tote Spieler:.");
format(string,sizeof(string),"%s || ID %i",getPlayerName(i),i);
SendClientMessage(playerid,GELB,string);
einerTot = true;
}
}
}
if(!einerTot)
{
SendClientMessage(playerid,ROT,"Es gibt zu Zeit keine Toten User");
return 1;
}
}
else
{
SendClientMessage(playerid,ROT,"Du bist nicht als Notarzt Onduty!");
return 1;
}
return 1;
} -
Ok, aber das sieht doch schon wesentlich besser aus.
Poste bitte mal dein enum, das zu PrivateVehicle gehört, sowie einen Screenshot von der Struktur der Tabelle "script_vehicles", damit wir sehen können, welche Spalte was ist (Float, Integer, String...). -
Sorry für die späte Antwort und Danke für den Push. Ich habe deine Antwort völlig übersehen.
Ich sehe grade das Problem im Log. Du hast mysql_query gar nicht umdefiniert, sodass man darin Parameter verwenden kann.
mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot);zu:
new query[256];
format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
mysql_query(query);Wie sieht es dann aus?
-
An deinem Code im ersten Post ist an sich nichts falsch.
Schreibe mal das hier unter die Includes:#pragma dynamic 1000000
Geht die Meldung dann weg?
-
Kann man abfragen, ob ein Objekt (bspw. ein Schild) geschrottet wurde? ( vom Fahrzeug / Schlagen / Schießen )
Nein, das ist leider nicht möglich.Für Schüsse wäre möglicherweise das hier eine Idee: http://forum.sa-mp.com/showthread.php?t=356431
-
Generell einfach dort wo du es abfragen willst.
Sagen wir mal, du hast einen Personalausweis und eine Behörde an der man den Perso verlängern kann, dann kannst du an der Behörde folgendes machen:if(ablaufDatum[playerid] < gettime())
{
//Er kann den Perso für etwas Geld verlängern...
}
else return SendClientMessage(playerid, 0xFF0000FF, "Dein Perso ist nicht abgelaufen!"); -
Das Problem ist die Abfrage in der while Schleife. Die wird beendet, sobald eine Pflanze nicht existiert. Es wurde zwar alles richtig gespeichert, aber nur bis zu einer Pflanze die nicht existiert.
Gut, dass es Logs gibt.Schreibe es so:
new drg=1;
while(drg<MAX_DRUGS)
{
if(DrugInfo[drg][drgfraktid] != 0)
{
format(string, sizeof(string), "SELECT * FROM `drogenpflanzen` WHERE `pflanze` = '%d'", drg);
self_mysql_queryEx(string);
mysql_store_result(MySQLConnection);
if(mysql_num_rows(MySQLConnection) == 0)
{
format(string, sizeof(string), "INSERT INTO `drogenpflanzen` (`pflanze`) VALUES ('%d')", drg);
self_mysql_queryEx(string);
}
mysql_free_result(MySQLConnection);
new var[526];
format(var, sizeof var, "UPDATE `drogenpflanzen` SET `drgfraktid`='%d', `drgArt`='%d' , `drgXpos`='%f', `drgYpos`='%f', `drgZpos`='%f', `drginterior`='%d', `drgvirtualworld`='%d', `drgProduceDrugs`='%d', `drgNextDrugsIn`='%d', `drgWasserzustand`='%d' WHERE `pflanze`='%d'",
DrugInfo[drg][drgfraktid],DrugInfo[drg][drgArt],DrugInfo[drg][drgXpos],DrugInfo[drg][drgYpos],DrugInfo[drg][drgZpos],DrugInfo[drg][drginterior],DrugInfo[drg][drgvirtualworld],DrugInfo[drg][drgProduceDrugs],DrugInfo[drg][drgNextDrugsIn],DrugInfo[drg][drgWasserzustand],drg);
self_mysql_queryEx(var);
}
drg++;
} -
Arbeite mit dem Timestamp. Beispiel für ein Ablaufdatum:
new ablaufDatum[MAX_PLAYERS];
Beim Kauf:
ablaufDatum[playerid] = gettime() + 86400*ANZAHL_TAGE;Bei der Abfrage ob abgelaufen:
if(ablaufDatum[playerid] < gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Abgelaufen!");Den Wert von ablaufDatum[playerid] speicherst du als Integer (Ganze Zahl) in deine Datenbank/Spielerdatei.
-
Es ist besser, wenn du hier mit PlayerTextDraws arbeitest:
new PlayerText:PayDayTD[MAX_PLAYERS];public OnGameModeInit()
{
SetTimer("PayDayTDTimer",1000,true);
return 1;
}
forward PayDayTDTimer();
public PayDayTDTimer()
{
new string[32];
format(string,sizeof(string),"%02d/60",SpielerInfo[playerid][pPayDay]+1);
PlayerTextDrawSetString(PayDayTi[playerid],string);
//Ich weiß nicht ob du das woanders machst, aber du kannst es hier so machen:
SpielerInfo[playerid][pPayDay]++;
if(SpielerInfo[playerid][pPayDay] == 60)
{
//PayDay geben
SpielerInfo[playerid][pPayDay] = 0;
}
return 1;
}
public OnPlayerSpawn(playerid)
{
PlayerTextDrawShow(playerid, PayDayTi[playerid]);
return 1;
}public OnPlayerConnect(playerid)
{
PayDayTi[playerid] = CreatePlayerTextDraw(playerid, 556.000000, 425.000000, "--/--");
PlayerTextDrawBackgroundColor(playerid, PayDayTi[playerid], 255);
PlayerTextDrawFont(playerid, PayDayTi[playerid], 1);
PlayerTextDrawLetterSize(playerid, PayDayTi[playerid], 0.360000, 1.100000);
PlayerTextDrawColor(playerid, PayDayTi[playerid], -1);
PlayerTextDrawSetOutline(playerid, PayDayTi[playerid], 0);
PlayerTextDrawSetProportional(playerid, PayDayTi[playerid], 1);
PlayerTextDrawSetShadow(playerid, PayDayTi[playerid], 1);
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
PlayerTextDrawDestroy(playerid, PayDayTi[playerid]);
return 1;
} -
new bool:onDuty[MAX_PLAYERS];
new oldName[MAX_PLAYERS][MAX_PLAYER_NAME];
new oldColor[MAX_PLAYERS];ocmd:aduty(playerid,params)
{
if(IsPlayerAdmin(playerid))
{
new str[145];
if(!onDuty[playerid])
{
format(oldName[playerid], MAX_PLAYER_NAME, SpielerName(playerid));
oldColor[playerid] = GetPlayerColor(playerid);
format(str,sizeof(str),"[XYZ]%s",SpielerName(playerid));
SetPlayerName(playerid,str);
format(str,sizeof(str),"%s ist jetzt Aduty.", oldName[playerid]);
SendClientMessageToAll(0xFFFFFFFF,str);
SetPlayerColor(playerid,0xFF00FFFF);
onDuty[playerid] = true;
}
else
{
SetPlayerName(playerid,oldName[playerid]);
format(str,sizeof(str),"%s ist nicht mehr Aduty.", oldName[playerid]);
SendClientMessageToAll(0xFFFFFFFF,str);
SetPlayerColor(playerid,oldColor[playerid]);
onDuty[playerid] = false;
}
}
else SendClientMessage(playerid,0xFFFFFFFF,"Du bist Kein Admin!");
return 1;
}stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}EDIT:
Slash™: Es bringt nur nichts wen der Code im Ansatz schon falsch aufgebaut ist, das hilft keinem.Prepaid: Code hinzugefügt. Willkommen auf Breadfish!
EDIT2:
Hab eine Zeile vergessen zu kopieren. Jetzt passt es. -
Kannst du den Code bitte richtig posten, damit man auch was lesen kann?
Nutze den Reiter Quellcode, nicht Editor. -
Steht etwas bei anderen Menus im Log, bzw. klappt es da?
Hast du zufällig eine mehrzeilige Meldung mit vielen Zahlen im Compiler?Wenn weder noch, dann poste bitte mal dein OnPlayerSelectedMenuRow, das Ganze.
-
Kannst du mal den MySQL Debug Modus einschalten (sodass alles geprintet wird)?
Dann gehst du genau dein Beispiel durch und postest dazu den Log, darin markierst du, wann du was gemacht hast.An dem Code den du gepostet hast ist eigentlich nichts falsch, möglicherweise liegt es am Löschen, aber ich denke anhand der Logs kommen wir dem Problem sicherlich näher.
-
Kommt der print, wenn du ENTER drückst? Wenn nicht, dann wird das callback gar nicht aufgerufen, sprich es liegt an etwas anderem, möglicherweise an einem Filterscript, der auch Menus beinhaltet?
Hast du noch andere Menus in anderen Codes?
-
Naja, ich merk mir nicht jeden Code an dem ich mal was gemacht habe, das wäre viel.
new query[256];
format(query, sizeof(query), "SELECT banID FROM spielertimebanned WHERE Name = '%s'", name);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows())
{
format(query, sizeof(query), "DELETE FROM spielertimebanned WHERE banID = %d", mysql_fetch_int());
mysql_query(query);
SendClientMessage(playerid, 0xFFFFFFFF, "Spieler entbannt.");
}
mysql_free_result();"name" wird im Befehls-Parameter eingelesen.
-
Vor die beiden
TogglePlayerControllable(playerid,true);
Also direkt drüber. -
Poste bitte den dazugehörigen Code und am besten Beispieldaten zu dem was du beschrieben hast (Logs?).
Ohne Code können wir dir auf jeden Fall nicht helfen. -
Lade dir das MySQL Plugin nochmal herunter, dort findest du dann im Ordner eine mysql_static.so. Nimm das, da dort diese Library bereits eingebaut ist.