Du könntest, mit OnPlayerUpdate abfragen, ob der Spieler in der Luft ist und in einem Fahrzeug (MapAndreas Plugin). Wenn das der Fall ist, dann setzt du eine Spieler Variable auf 1,und wenn sich dann innerhalb der nächsten 5 Sekunden sein Geld ändert (sagen wir bis maximal 100.000) dann gibst du dem Spieler die Differenz die er vor dem Update und nach dem Update hatte, via Server Geld.
Das wäre auch relativ sicher gegen Money Hacker.
Beiträge von Jeffry
-
-
Muss in einem Enum normal nicht der letzte Wert ohne Komma da stehen?
Nur wenn man kein Semikolon am Ende des enums hat. -
if(mysql_errno() != 0) print("Keine Verbindung zur Datenbank.");
mysql_errno gibt 0 zurück, wenn alles OK ist. Wenn nicht, dann besteht keine Verbindung mehr.
-
SCMTAEx(-1,"[Server] %s %s hat die Zeit auf %d:00 Uhr gestellt.",AdminNamen[GetLevelIndex(pAdmin[playerid][pAdmin])],name,zeit);
stock GetLevelIndex(level)
{
switch(level)
{
case 0..5: return level;
case 1337: return 6;
case 1338: return 7;
case 1449: return 8;
case 1450: return 9;
}
return 10;
}Um falsche Levels abzufangen und kein Array zu sprengen:
#define MAX_ADMINS 11
new AdminNamen[MAX_ADMINS][20]={
"Zivilist", //Admin Lvl 0
"Supporter", //Admin Lvl 1
"Admin(2)", //Admin Lvl 2
"Admin(3)", //Admin Lvl 3
"Admin(4)", //Admin Lvl 4
"Admin(5)", //Admin Lvl 5
"Head Admin", //Admin Lvl 1337
"Server Manager", //Admin Lvl 1338
"Scripter", //Admin Lvl 1449
"Server Leitung" //Admin Lvl 1450
"Invalid Level" //Fehler?
}; -
Nach
WIDx[id] = menge;fehlt das:
WID[id] = playerid;Du weist die ID des Spielers der Variable nirgends zu.
-
format(str, sizeof(str), "X: %0.3f, Y: %0.3f, Z: %0.3f Interior: %d, Virtual World: %d", xPos[0], xPos[1], xPos[2], xInterior, xVirtualWorld);
-
Könntest du mir da weiter helfen?
Müsste so passen:
Spoiler anzeigen //
// Admin vehicle spawner using previews. For SA-MP 0.3x and above.
// - Kye 2012
//Spoiler anzeigen #include <a_samp>
#include "../include/gl_common.inc"Spoiler anzeigen #define TOTAL_ITEMS 207
#define SELECTION_ITEMS 21
#define ITEMS_PER_LINE 7Spoiler anzeigen #define HEADER_TEXT "Vehicles"
#define NEXT_TEXT "Next"
#define PREV_TEXT "Prev"Spoiler anzeigen #define DIALOG_BASE_X 75.0
#define DIALOG_BASE_Y 130.0
#define DIALOG_WIDTH 550.0
#define DIALOG_HEIGHT 180.0
#define SPRITE_DIM_X 60.0
#define SPRITE_DIM_Y 70.0Spoiler anzeigen new gTotalItems = TOTAL_ITEMS;
new PlayerText:gCurrentPageTextDrawId[MAX_PLAYERS];
new PlayerText:gHeaderTextDrawId[MAX_PLAYERS];
new PlayerText:gBackgroundTextDrawId[MAX_PLAYERS];
new PlayerText:gNextButtonTextDrawId[MAX_PLAYERS];
new PlayerText:gPrevButtonTextDrawId[MAX_PLAYERS];
new PlayerText:gSelectionItems[MAX_PLAYERS][SELECTION_ITEMS];
new gSelectionItemsTag[MAX_PLAYERS][SELECTION_ITEMS];
new gItemAt[MAX_PLAYERS];Spoiler anzeigen new adminCar[MAX_VEHICLES];Spoiler anzeigen new gItemList[TOTAL_ITEMS] = {
400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,
431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,453,454,455,456,457,458,459,460,461,
462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,
493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,
524,525,526,527,528,529,530,531,532,533,534,535,536,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,
555,556,557,558,559,560,561,562,563,564,565,566,567,568,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,
586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611
};Spoiler anzeigen //------------------------------------------------Spoiler anzeigen GetNumberOfPages()
{
if((gTotalItems >= SELECTION_ITEMS) && (gTotalItems % SELECTION_ITEMS) == 0)
{
return (gTotalItems / SELECTION_ITEMS);
}
else return (gTotalItems / SELECTION_ITEMS) + 1;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen PlayerText:CreateCurrentPageTextDraw(playerid, Float:Xpos, Float:Ypos)
{
new PlayerText:txtInit;
txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, "0/0");
PlayerTextDrawUseBox(playerid, txtInit, 0);
PlayerTextDrawLetterSize(playerid, txtInit, 0.4, 1.1);
PlayerTextDrawFont(playerid, txtInit, 1);
PlayerTextDrawSetShadow(playerid, txtInit, 0);
PlayerTextDrawSetOutline(playerid, txtInit, 1);
PlayerTextDrawColor(playerid, txtInit, 0xACCBF1FF);
PlayerTextDrawShow(playerid, txtInit);
return txtInit;
}Spoiler anzeigen //------------------------------------------------
// Creates a button textdraw and returns the textdraw ID.Spoiler anzeigen PlayerText:CreatePlayerDialogButton(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height, button_text[])
{
new PlayerText:txtInit;
txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, button_text);
PlayerTextDrawUseBox(playerid, txtInit, 1);
PlayerTextDrawBoxColor(playerid, txtInit, 0x000000FF);
PlayerTextDrawBackgroundColor(playerid, txtInit, 0x000000FF);
PlayerTextDrawLetterSize(playerid, txtInit, 0.4, 1.1);
PlayerTextDrawFont(playerid, txtInit, 1);
PlayerTextDrawSetShadow(playerid, txtInit, 0); // no shadow
PlayerTextDrawSetOutline(playerid, txtInit, 0);
PlayerTextDrawColor(playerid, txtInit, 0x4A5A6BFF);
PlayerTextDrawSetSelectable(playerid, txtInit, 1);
PlayerTextDrawAlignment(playerid, txtInit, 2);
PlayerTextDrawTextSize(playerid, txtInit, Height, Width); // The width and height are reversed for centering.. something the game does <g>
PlayerTextDrawShow(playerid, txtInit);
return txtInit;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen PlayerText:CreatePlayerHeaderTextDraw(playerid, Float:Xpos, Float:Ypos, header_text[])
{
new PlayerText:txtInit;
txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, header_text);
PlayerTextDrawUseBox(playerid, txtInit, 0);
PlayerTextDrawLetterSize(playerid, txtInit, 1.25, 3.0);
PlayerTextDrawFont(playerid, txtInit, 0);
PlayerTextDrawSetShadow(playerid, txtInit, 0);
PlayerTextDrawSetOutline(playerid, txtInit, 1);
PlayerTextDrawColor(playerid, txtInit, 0xACCBF1FF);
PlayerTextDrawShow(playerid, txtInit);
return txtInit;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen PlayerText:CreatePlayerBackgroundTextDraw(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height)
{
new PlayerText:txtBackground = CreatePlayerTextDraw(playerid, Xpos, Ypos,
" ~n~"); // enough space for everyone
PlayerTextDrawUseBox(playerid, txtBackground, 1);
PlayerTextDrawBoxColor(playerid, txtBackground, 0x00000099);
PlayerTextDrawLetterSize(playerid, txtBackground, 5.0, 5.0);
PlayerTextDrawFont(playerid, txtBackground, 0);
PlayerTextDrawSetShadow(playerid, txtBackground, 0);
PlayerTextDrawSetOutline(playerid, txtBackground, 0);
PlayerTextDrawColor(playerid, txtBackground,0x000000FF);
PlayerTextDrawTextSize(playerid, txtBackground, Width, Height);
PlayerTextDrawBackgroundColor(playerid, txtBackground, 0x00000099);
PlayerTextDrawShow(playerid, txtBackground);
return txtBackground;
}Spoiler anzeigen //------------------------------------------------
// Creates a model preview spriteSpoiler anzeigen PlayerText:CreateModelPreviewTextDraw(playerid, modelindex, Float:Xpos, Float:Ypos, Float:width, Float:height)
{
new PlayerText:txtPlayerSprite = CreatePlayerTextDraw(playerid, Xpos, Ypos, ""); // it has to be set with SetText later
PlayerTextDrawFont(playerid, txtPlayerSprite, TEXT_DRAW_FONT_MODEL_PREVIEW);
PlayerTextDrawColor(playerid, txtPlayerSprite, 0xFFFFFFFF);
PlayerTextDrawBackgroundColor(playerid, txtPlayerSprite, 0x000000EE);
PlayerTextDrawTextSize(playerid, txtPlayerSprite, width, height); // Text size is the Width:Height
PlayerTextDrawSetPreviewModel(playerid, txtPlayerSprite, modelindex);
PlayerTextDrawSetPreviewRot(playerid,txtPlayerSprite, -16.0, 0.0, -55.0);
PlayerTextDrawSetSelectable(playerid, txtPlayerSprite, 1);
PlayerTextDrawShow(playerid,txtPlayerSprite);
return txtPlayerSprite;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen DestroyPlayerModelPreviews(playerid)
{
new x=0;
while(x != SELECTION_ITEMS) {
if(gSelectionItems[playerid][x] != PlayerText:INVALID_TEXT_DRAW) {
PlayerTextDrawDestroy(playerid, gSelectionItems[playerid][x]);
gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
}
x++;
}
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen ShowPlayerModelPreviews(playerid)
{
new x=0;
new Float:BaseX = DIALOG_BASE_X;
new Float:BaseY = DIALOG_BASE_Y - (SPRITE_DIM_Y * 0.33); // down a bit
new linetracker = 0;Spoiler anzeigen new itemat = GetPVarInt(playerid, "vspawner_page") * SELECTION_ITEMS;Spoiler anzeigen // Destroy any previous ones created
DestroyPlayerModelPreviews(playerid);Spoiler anzeigen while(x != SELECTION_ITEMS && itemat < gTotalItems) {
if(linetracker == 0) {
BaseX = DIALOG_BASE_X + 25.0; // in a bit from the box
BaseY += SPRITE_DIM_Y + 1.0; // move on the Y for the next line
}
gSelectionItems[playerid][x] = CreateModelPreviewTextDraw(playerid, gItemList[itemat], BaseX, BaseY, SPRITE_DIM_X, SPRITE_DIM_Y);
gSelectionItemsTag[playerid][x] = gItemList[itemat];
BaseX += SPRITE_DIM_X + 1.0; // move on the X for the next sprite
linetracker++;
if(linetracker == ITEMS_PER_LINE) linetracker = 0;
itemat++;
x++;
}
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen UpdatePageTextDraw(playerid)
{
new PageText[64+1];
format(PageText, 64, "%d/%d", GetPVarInt(playerid,"vspawner_page") + 1, GetNumberOfPages());
PlayerTextDrawSetString(playerid, gCurrentPageTextDrawId[playerid], PageText);
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen CreateSelectionMenu(playerid)
{
gBackgroundTextDrawId[playerid] = CreatePlayerBackgroundTextDraw(playerid, DIALOG_BASE_X, DIALOG_BASE_Y + 20.0, DIALOG_WIDTH, DIALOG_HEIGHT);
gHeaderTextDrawId[playerid] = CreatePlayerHeaderTextDraw(playerid, DIALOG_BASE_X, DIALOG_BASE_Y, HEADER_TEXT);
gCurrentPageTextDrawId[playerid] = CreateCurrentPageTextDraw(playerid, DIALOG_WIDTH - 30.0, DIALOG_BASE_Y + 15.0);
gNextButtonTextDrawId[playerid] = CreatePlayerDialogButton(playerid, DIALOG_WIDTH - 30.0, DIALOG_BASE_Y+DIALOG_HEIGHT+100.0, 50.0, 16.0, NEXT_TEXT);
gPrevButtonTextDrawId[playerid] = CreatePlayerDialogButton(playerid, DIALOG_WIDTH - 90.0, DIALOG_BASE_Y+DIALOG_HEIGHT+100.0, 50.0, 16.0, PREV_TEXT);Spoiler anzeigen ShowPlayerModelPreviews(playerid);
UpdatePageTextDraw(playerid);
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen DestroySelectionMenu(playerid)
{
DestroyPlayerModelPreviews(playerid);Spoiler anzeigen PlayerTextDrawDestroy(playerid, gHeaderTextDrawId[playerid]);
PlayerTextDrawDestroy(playerid, gBackgroundTextDrawId[playerid]);
PlayerTextDrawDestroy(playerid, gCurrentPageTextDrawId[playerid]);
PlayerTextDrawDestroy(playerid, gNextButtonTextDrawId[playerid]);
PlayerTextDrawDestroy(playerid, gPrevButtonTextDrawId[playerid]);Spoiler anzeigen gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen SpawnVehicle_InfrontOfPlayer(playerid, vehiclemodel, color1, color2)
{
new Float:x,Float:y,Float:z;
new Float:facing;
new Float:distance;Spoiler anzeigen GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, facing);Spoiler anzeigen new Float:size_x,Float:size_y,Float:size_z;
GetVehicleModelInfo(vehiclemodel, VEHICLE_MODEL_INFO_SIZE, size_x, size_y, size_z);Spoiler anzeigen distance = size_x + 0.5;Spoiler anzeigen x += (distance * floatsin(-facing, degrees));
y += (distance * floatcos(-facing, degrees));Spoiler anzeigen facing += 90.0;
if(facing > 360.0) facing -= 360.0;Spoiler anzeigen return CreateVehicle(vehiclemodel, x, y, z + (size_z * 0.25), facing, color1, color2, -1);
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen HandlePlayerItemSelection(playerid, selecteditem)
{
// In this case we're spawning a vehicle for them
new vehicleid = SpawnVehicle_InfrontOfPlayer(playerid, gSelectionItemsTag[playerid][selecteditem], -1, -1);
adminCar[vehicleid] = 1;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen public OnPlayerConnect(playerid)
{
// Init all of the textdraw related globals
gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;Spoiler anzeigen for(new x=0; x < SELECTION_ITEMS; x++) {
gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
}Spoiler anzeigen gItemAt[playerid] = 0;Spoiler anzeigen return 1; // Allow other scripts to keep processing OnPlayerConnect
}Spoiler anzeigen //-------------------------------------------
// Even though only Player* textdraws are used in this script,
// OnPlayerClickTextDraw is still required to handle ESCSpoiler anzeigen public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(GetPVarInt(playerid, "vspawner_active") == 0) return 0;Spoiler anzeigen // Handle: They cancelled (with ESC)
if(clickedid == Text:INVALID_TEXT_DRAW) {
DestroySelectionMenu(playerid);
SetPVarInt(playerid, "vspawner_active", 0);
PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
return 1;
}Spoiler anzeigen return 0;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
if(GetPVarInt(playerid, "vspawner_active") == 0) return 0;Spoiler anzeigen new curpage = GetPVarInt(playerid, "vspawner_page");Spoiler anzeigen // Handle: next button
if(playertextid == gNextButtonTextDrawId[playerid]) {
if(curpage < (GetNumberOfPages() - 1)) {
SetPVarInt(playerid, "vspawner_page", curpage + 1);
ShowPlayerModelPreviews(playerid);
UpdatePageTextDraw(playerid);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
} else {
PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
}
return 1;
}Spoiler anzeigen // Handle: previous button
if(playertextid == gPrevButtonTextDrawId[playerid]) {
if(curpage > 0) {
SetPVarInt(playerid, "vspawner_page", curpage - 1);
ShowPlayerModelPreviews(playerid);
UpdatePageTextDraw(playerid);
PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);
} else {
PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
}
return 1;
}Spoiler anzeigen // Search in the array of textdraws used for the items
new x=0;
while(x != SELECTION_ITEMS) {
if(playertextid == gSelectionItems[playerid][x]) {
HandlePlayerItemSelection(playerid, x);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
DestroySelectionMenu(playerid);
CancelSelectTextDraw(playerid);
SetPVarInt(playerid, "vspawner_active", 0);
return 1;
}
x++;
}Spoiler anzeigen return 0;
}Spoiler anzeigen //------------------------------------------------Spoiler anzeigen public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256+1];
new idx;Spoiler anzeigen if(!IsPlayerAdmin(playerid)) return 0;Spoiler anzeigen cmd = strtok(cmdtext, idx);Spoiler anzeigen if(strcmp("/vspawner", cmd, true) == 0)
{
// If there was a previously created selection menu, destroy it
DestroySelectionMenu(playerid);Spoiler anzeigen SetPVarInt(playerid, "vspawner_active", 1);
//SetPVarInt(playerid, "vspawner_page", 0); // will reset the page back to the firstSpoiler anzeigen CreateSelectionMenu(playerid);
SelectTextDraw(playerid, 0xACCBF1FF);
return 1;
}Spoiler anzeigen return 0;
}
//------------------------------------------------Spoiler anzeigen public OnVehicleSpawn(vehicleid)
{
if(adminCar[vehicleid]) DestroyVehicle(vehicleid);
adminCar[vehicleid] = 0;
return 1;
}
//------------------------------------------------ -
Da du jetzt ein anderes Plugin hast, ist die connect Funktion etwas anders.
Die Reihenfolge der Parameter findest du hier:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_connectWenn du die richtige Reihenfolge hast, kann er sich auch wieder zur Datenbank verbinden.
-
Hier die Erklärungen:
strfind = Sucht einen string in einem string. (z.B. In "Hallo Welt" wird "Welt" gesucht.) Es wird die Stelle des Texts zurückgegeben (in dem Fall 6).
strlen = Länge eines strings. (strlen("Hallo") ist 5, da Hallo 5 Buchstaben hat.)
strval = Wert eines strings. (strval("123") ist 123, als Integer, damit kannst du dann rechnen, mit "123" geht das nicht.)
strcmp = Vergleicht zwei strings mit einander. ("Hallo" und "Hallo" zum Beispiel) Sind beide strings gleich, wird 0 zurückgegeben.
strtok = Splittet einen string am Leerzeichen.
tmp & idx" = Gehört zu strtok. idx Speichert die letzte Position um Ressourcen zu schonen (irrelevant für dich, Hauptsache es ist da). tmp bekommt den Rückgabewert reingeschrieben.
string = "Hallo Welt";
tmp = strtok(string, idx); //Hier steht "Hallo" drin
tmp2 = strtok(string, idx); //Hier steht "Welt" drin-----------------------------------
So, und zu deinem Befehl. Poste doch bitte mal den Code wie du ihn grade hast.
Füge aber noch als erste Zeile im Befehl ein "print("Test");" ein, und schau, ob das überhaupt geprintet wird, wenn du den Befehl eingibst. -
Schau mal, das ist das Query aus dem ReadUser-Public:
format(q, 256, "SELECT * FROM user WHERE name = '%s'", mres);
mysql_query(q);Laut crashdetect stürzt der Server zwei Zeilen weiter unten ab, also würde ich mal behaupten, dass dieses Query ausgeführt wird und somit geloggt werden muss, ist es aber nicht. Dort würden auch genaue Details zum Fehlergrund stehen.
Also entweder du hast nicht alles kopiert, oder es ist sonst irgendwas daneben gegangen. Kannst du es nochmal probieren, und gleich die Zeit vergleichen, ob der letzte Eintrag in dem MySQL Log mit dem des Absturzes übereinstimmt?Ich hab grade noch mal die Wiki angeschaut, zu dem:
mysql_fetch_row(buffer, "|");ändere das mal zu:
mysql_fetch_row_format(buffer, "|");
oder zu:
mysql_fetch_row_format(buffer);Kannste beides probieren.Kannst vergessen, danke an IPrototypeI für den Hinweis, da hab ich gar nicht drauf geachtet. Die meisten hier verwenden das von BlueG, eigentlich alle.
Meep.Update das Plugin erst mal.
-
Das ist aber nicht alles, oder?
Zumindest nicht das, was direkt vor dem Absturz geloggt wurde.Die Log-Zeilen vor den Absturz müssten diese Abfrage beinhalten
SELECT * FROM user WHERE name = 'IRGENDWASHIER'Die Zeilen, die genau vor dem Absturz geprintet werden sind wichtig, du hast, so wie das aussieht, die Dinge beim Server-Start gepostet.
-
Welches Plugin verwendest du denn?
Das von BlueG? Dann nutze das:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_log
mysql_log mit LOG_ALL -
Warum hast du die ersten 10 Zeilen der ReadUser Funktion nicht debuggt? In denen ist der Fehler, da der erste print nicht aufgerufen wird in der Funktion.
Mach das noch.Schalte zudem noch den Debug des MySQL Plugins das du benutzt an, bzw. ändere den Log Modus des Plugins, so dass alles was das Plugin macht geprintet wird.
Dann poste nochmal Log und Funktion.
-
Debuggen = prints zwischen die Zeilen, wie vorhin auch.
Wir müssen ja wissen, vor welcher Zeile der Server abstürzt.Mach das mal, poste dann den Code mit den Prints und das was im Server_log steht.
Debuggen der ReadUser Funktion.
-
In der Funktion ReadUser stimmt was bei mysql_fetch_row nicht. Poste mal die die Funktion ReadUser, bzw. debugge sie vorher erst mal.
Es liegt also nicht an OnPlayerConnect.
-
Jetzt haste erst nicht geschrieben wie du es haben willst, nur was du nicht weißt.
Jetzt ist es ja so, mit dem Code den ich dir gegeben habe, dass die Kamera grade nach hinten oben geht, wenn man die Türe anstarrt. Wie soll es deinem Wunsch nach sein, wie soll sich die Kamera bewegen, wenn das Ergebnis schonmal stimmt?
-
Wie willst du es denn?
-
format(string3,sizeof(string3),"Bargeld: %s%0.0f€",sMoney(floatround(sInfo[playerid][Money],floatround_floor)), (sInfo[playerid][Money]-Float:floatround(sInfo[playerid][Money],floatround_floor))*100.0 );
Versuch es mal so, das müsste dann die Cents anzeigen.
-
Hast du vielleicht Timer laufen, die das verursachen könnten?
Bevor wie lange raten, nimm mal das crashdetect Plugin und poste dann was im Log steht wenn der Server abstürzt.
-
So oder nicht?
Du kannst keinen String runden.format(string3,sizeof(string3),"Bargeld: %s€",sMoney(floatround(sInfo[playerid][Money],floatround_ceil)));