Beiträge von #save

    Ich kann dir nicht wirklich weiterhelfen da ich mich mit Dini nicht auskenne. Versuch aber mal den String in der Konsole auszugeben, ob du in der Konsole wenigstens die Ausgabe siehst. Dann als kleiner Hinweis. Es ist sinnvoll bei sscanf wenn man einen String benötigt die Länge auch mit an zu geben.


    Vorher:

    if (sscanf(params, "is", pID, reason))


    Nachher:

    if (sscanf(params, "is[256]", pID, reason))

    Guten Abend,


    ich verwende ocmd und habe mit ocmd einen Befehl Namens /jobstart erstellt. Das ist nicht mein erster Befehl.


    Der Befehl ist wie folgt aufgebaut:

    ocmd:jobstart (playerid, params[])
    {
    new jobname[30];

    GetPVarString(playerid, "jobname", jobname, sizeof(jobname));

    if (!strcmp("pizzaboy", jobname, false))
    {
    if (GetPVarInt(playerid, "JobStarted") == 1)
    {
    SetPVarInt(playerid, "JobStarted", 0);
    DisablePlayerCheckpoint(playerid);

    SendClientMessage(playerid, lightblue, "* Du hast gerade das Pizza austragen beendet. Du bekommst nun kein Geld.");
    }
    else
    {
    if (!IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid, grey, "Du musst auf einem Pizzaroller sitzen!");
    }
    else
    {
    if (!IsVehicleJobVehicle(GetPlayerVehicleID(playerid)))
    {
    SendClientMessage(playerid, grey, "Du musst auf einem Pizzaroller sitzen!");
    }
    else
    {
    ShowPlayerDialog(playerid, PIZZA_JOBSTART_DIALOG, DIALOG_STYLE_LIST, "Linie auswählen", ""white_i"Linie 1 (Los Santos)\nLinie 2 (Los Santos)", "Starten", "Abbrechen");
    }
    }
    }
    }
    else if (!strcmp("pilot", jobname, false))
    {
    if (GetPVarInt(playerid, "JobStarted") == 1)
    {
    SetPVarInt(playerid, "JobStarted", 0);
    DisablePlayerCheckpoint(playerid);


    SendClientMessage(playerid, lightblue, "* Du hast gerade dich als Pilot abgemeldet. Du bekommst nun kein Geld für diesen Flug.");
    }
    else
    {
    if (!IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid, grey, "Du musst in einem Job-Flugzeug sitzen!");
    }
    else
    {
    if (IsVehicleJobVehicle(GetPlayerVehicleID(playerid)))
    {
    SendClientMessage(playerid, lightblue, "* Du hast den Job Pilot nun begonnen. Bitte fliege die Checkpoints ab (auf jedem Airport sind 2).");
    }
    else
    {
    SendClientMessage(playerid, grey, "Du musst in einem Job-Flugzeug sitzen!");
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid, grey, "Diesen Befehl kannst du nicht benutzen!");
    }

    return 1;
    }


    Das Problem ist das wenn ich IsVehicleJobVehicle(GetPlayerVehicleID(playerid)) weglasse, funktioniert der Befehl ohne Probleme. Ist aber IsVehicleJobVehicle(GetPlayerVehicleID(playerid)) dabei, so wird der Befehl nicht ausgeführt und es kommt die Meldung "SERVER: Unknown Command".


    Warum ist das so ?


    Befehl: IsVehicleJobVehicle

    stock IsVehicleJobVehicle(vehicleid)
    {
    new find = 0;

    for (new i = 0; i <= MAX_VEHICLES; i++)
    {
    if (PizzaBoyCars1[i] == vehicleid)
    {
    find = 1;
    }


    if (PizzaBoyCars2[i] == vehicleid)
    {
    find = 1;
    }


    if (PizzaBoyCars3[i] == vehicleid)
    {
    find = 1;
    }


    if (PilotJobCars1[i] == vehicleid)
    {
    find = 1;
    }


    if (PilotJobCars2[i] == vehicleid)
    {
    find = 1;
    }


    if (PilotJobCars3[i] == vehicleid)
    {
    find = 1;
    }


    if (PilotJobCars4[i] == vehicleid)
    {
    find = 1;
    }


    if (TaxiJobVehicles1[i] == vehicleid)
    {
    find = 1;
    }


    if (TaxiJobVehicles2[i] == vehicleid)
    {
    find = 1;
    }


    if (TaxiJobVehicles3[i] == vehicleid)
    {
    find = 1;
    }
    }

    return find;
    }


    Habe das ganze was in IsVehicleJobVehicle steht auch direkt im Befehl eingebunden, was aber keinen Unterschied machte. Immer wenn ich die Überprüfung rausnehme, funktioniert es...


    Kennt jemand das Problem ?

    Dankeschön :) Die Meldung verschwindet nun endlich, jedoch bekomme ich wenn ich einen mysql_query(); Befehl noch in die while- Schleife reinpacke folgende Meldung:

    Code
    [MySQL] Error (0): Function: mysql_store_result called when no result stored.


    Derzeitiger Code:

    public HouseInfosUpdate()
    {
    new houseID[20], owner[MAX_PLAYER_NAME+1], houseLevel[20], housePrice[30], description[256], pickupPosX[20], pickupPosY[20], pickupPosZ[20], rentable[2], rentprice[20], data[256], field[17][2], string[256];


    mysql_query("SELECT * FROM houses");
    mysql_store_result();


    while (mysql_fetch_row(data))
    {
    mysql_fetch_field("houseID", houseID);
    mysql_fetch_field("owner", owner);
    mysql_fetch_field("level", houseLevel);
    mysql_fetch_field("price", housePrice);
    mysql_fetch_field("description", description);
    mysql_fetch_field("pickupPosX", pickupPosX);
    mysql_fetch_field("pickupPosY", pickupPosY);
    mysql_fetch_field("pickupPosZ", pickupPosZ);
    mysql_fetch_field("rentable", rentable);
    mysql_fetch_field("rentprice", rentprice);


    Delete3DTextLabel(HouseInfosText[strval(houseID)]);


    if (!strcmp("Niemand", owner, true))
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: Niemand\nLevel: %d\nPreis: $%d Dollar\nHaus mit /buyhouse kaufen", strval(houseID), description, strval(houseLevel), strval(housePrice));
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1273, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    else
    {
    if (strval(rentable) == 1)
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: %s\nLevel: %d\nMiet-Preis: $%d Dollar\nMit /renthouse einmieten", strval(houseID), description, owner, strval(houseLevel), strval(rentprice));
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1239, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    else
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: %s", strval(houseID), description, owner);
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1239, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    }


    mysql_query("UPDATE houses SET price = price + 1 WHERE houseID = 2");
    }


    mysql_free_result();
    }

    Habe ich jetzt alle Errors damit gelöst ? Da standen doch mehr in der Konsole drinnen :huh: Oder lag es daran das die eine Zeile so viel ausgelöst hat ?
    Aufjedenfall, kein Problem ;)

    Eher so:

    CMD:cmds(playerid, params[])
    {
    ShowPlayerDialog(playerid, DIALOG_CMDS1, DIALOG_STYLE_LIST,
    "Die Liste der Befehle", "{0000FF} um jemandem geld zugeben: /givecash <playerid> <anzahl>\n{0000FF}um ein getuntes auto zubekommen: /tcar [1/10]\n{0000FF}um schnell ein auto zubekommen: /car <Id oder Name> <color1> <color2>\n{E76D00}/rjoin um an einem Rennen teilzunehmen\n{FFFF00}um das auto zu drehen: /flip\n{FF00FF}Reparieren: H\n{00FF00}Um die Klasse zu welchseln: /reclass\n{E76D00}Um ein Radio zu hören: /radio\n{FF0000}Für eine Liste aller Autos: /v", "OK", "Abbrechen");


    return 1;
    }

    Nach einem Monat melde ich mich hier wieder. Ich habe jetzt herausgefunden das ich nicht nur ein Problem mit einem zweiten Query habe, ich habe auch ein Problem wenn ich nur die while- Schleife ohne Quelltext zwischen der while- Schleife habe.


    Ich bekomme immer folgende Meldung in der Konsole:

    Code
    [MySQL] Error (0): Function: mysql_fetch_row_data failed, no field data.


    Hier ist mal ein Code aus einer public- Function die jede Sekunde ausgeführt wird:

    public HouseInfosUpdate()
    {
    new houseID[20], owner[MAX_PLAYER_NAME+1], houseLevel[20], housePrice[30], description[256], pickupPosX[20], pickupPosY[20], pickupPosZ[20], rentable[2], rentprice[20], string[256];


    mysql_query("SELECT * FROM houses");
    mysql_store_result();


    while (mysql_fetch_row_data())
    {
    }


    mysql_free_result();
    }


    Wenn ich das nur so ausführe, kommt genau die selbe Meldung als würde ich das ausführen:

    public HouseInfosUpdate()
    {
    new houseID[20], owner[MAX_PLAYER_NAME+1], houseLevel[20], housePrice[30], description[256], pickupPosX[20], pickupPosY[20], pickupPosZ[20], rentable[2], rentprice[20], string[256];


    mysql_query("SELECT * FROM houses");
    mysql_store_result();


    while (mysql_fetch_row_data())
    {
    mysql_fetch_field("houseID", houseID);
    mysql_fetch_field("owner", owner);
    mysql_fetch_field("level", houseLevel);
    mysql_fetch_field("price", housePrice);
    mysql_fetch_field("description", description);
    mysql_fetch_field("pickupPosX", pickupPosX);
    mysql_fetch_field("pickupPosY", pickupPosY);
    mysql_fetch_field("pickupPosZ", pickupPosZ);
    mysql_fetch_field("rentable", rentable);
    mysql_fetch_field("rentprice", rentprice);


    Delete3DTextLabel(HouseInfosText[strval(houseID)]);


    if (!strcmp("Niemand", owner, true))
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: Niemand\nLevel: %d\nPreis: $%d Dollar\nHaus mit /buyhouse kaufen", strval(houseID), description, strval(houseLevel), strval(housePrice));
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1273, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    else
    {
    if (strval(rentable) == 1)
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: %s\nLevel: %d\nMiet-Preis: $%d Dollar\nMit /renthouse einmieten", strval(houseID), description, owner, strval(houseLevel), strval(rentprice));
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1239, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    else
    {
    format(string, sizeof(string), "[Haus: %d]\n%s\nBesitzer: %s", strval(houseID), description, owner);
    HouseInfosText[strval(houseID)] = Create3DTextLabel(string, grey, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), 15.0, 0, 0);


    DestroyPickup(HouseInfosPickup[strval(houseID)]);
    HouseInfosPickup[strval(houseID)] = CreatePickup(1239, 1, floatstr(pickupPosX), floatstr(pickupPosY), floatstr(pickupPosZ), -1);
    }
    }
    }


    mysql_free_result();
    }


    Ich frage mich derzeit echt, warum ich der einzigste Mensch hier bin der genau DIESES Problem hat. Könnte mal bitte einer so freundlich sein und mir einfach (Voraussetzung: Er hat das Stickenkid-MySQL Plugin) eine stink normale while- Schleife senden die einen MySQL SELECT Befehl ausführt. Lasst euch nicht von meinem Beispiel in die Irre führen. Ihr habt denke ich schon einmal so etwas in euren Scripts gebraucht und könnt mir ja ggf. ein Beispiel senden.


    Danke schonmal im Voraus.

    Sorry, ich muss hier ein kleines Missverständnis aufklären. Es ging nicht um die Pickups sondern um die 3DTextLabels. Entschuldigung das ich mich falsch ausgedrückt habe. Also hier ist das OnPlayerDeath.



    public OnPlayerDeath(playerid, killerid, reason)
    {
    // Objekte
    new playername[MAX_PLAYER_NAME+1], pname[MAX_PLAYER_NAME+1], killername[MAX_PLAYER_NAME+1], pkiller[MAX_PLAYER_NAME+1], pFrac[20], wanteds, moneytocop, DeathPickupID, DeathSkullPickup, Text3D:Death3DTextLabel, killerfracTitle[30], killerfrac[30], message[256], query[180];
    new Float:x, Float:y, Float:z;


    GetPlayerName(playerid, playername, sizeof(playername));
    GetPlayerName(killerid, killername, sizeof(killername));


    mysql_real_escape_string(playername, pname);
    mysql_real_escape_string(killername, pkiller);


    GetPVarString(killerid, "fracTitle", killerfracTitle, sizeof(killerfracTitle));
    GetPVarString(killerid, "fracname", killerfrac, sizeof(killerfrac));


    GetPlayerPos(playerid, x, y, z);


    if (killerid != INVALID_PLAYER_ID)
    {
    if (!strcmp("army", killerfrac, false) || !strcmp("fbi", killerfrac, false) || !strcmp("sapd", killerfrac, false))
    {
    if (GetPVarInt(playerid, "wanteds") != 0)
    {
    moneytocop = GetPVarInt(playerid, "wanteds") * COP_KILL_WANTED_PLAYER_MONEY;
    format(message, sizeof(message), "~w~Gesuchter umgebracht~n~Bonus: ~g~$%d Dollar", moneytocop);
    GameTextForPlayer(killerid, message, 5000, 1);
    GivePayDayMoney(killerid, moneytocop);


    format(message, sizeof(message), "<< %s %s hat den Verbrecher %s getötet! >>", killerfracTitle, killername, playername);
    SendClientMessageToAll(red, message);
    }
    else
    {
    if (IsPlayerInPrison(playerid) == 1)
    {
    PlayerSpawn(playerid);
    }
    else
    {
    PutPlayerInHospital(playerid, killerid);
    }
    }
    }
    else
    {
    if (IsPlayerInPrison(killerid) != 1)
    {
    wanteds = GetPVarInt(killerid, "wanteds") + WANTED_PER_KILL;
    GivePlayerWanteds(killerid, wanteds);

    for (new i = 0; i <= MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    GetPVarString(i, "fracname", pFrac, sizeof(pFrac));
    if (!strcmp("army", pFrac, false) || !strcmp("fbi", pFrac, false) || !strcmp("sapd", pFrac, false))
    {
    format(message, sizeof(message), "* HQ: %s[ID:%d] wird gesucht, Grund: Vorsätzlicher Mord - Zeuge: Unbekannt", killername, killerid);
    SendClientMessage(i, blue2, message);

    format(message, sizeof(message), "* HQ: Er hat derzeit %d Wanteds und muss verhaftet werden!", GetPVarInt(i, "wanteds"));
    SendClientMessage(i, blue2, message);
    }
    }
    }

    format(message, sizeof(message), "Du hast ein Verbrechen begangen (Vorsätzlicher Mord). Wanted-Sterne bekommen: %d, Zeuge: Unbekannt", WANTED_PER_KILL);
    SendClientMessage(killerid, darkred, message);

    format(message, sizeof(message), "Derzeitiges Wanted-Level: %d", GetPVarInt(killerid, "wanteds"));
    SendClientMessage(killerid, darkred, message);
    }

    if (IsPlayerInPrison(playerid) == 1)
    {
    PlayerSpawn(playerid);
    }
    else
    {
    PutPlayerInHospital(playerid, killerid);
    }
    }

    format(query, sizeof(query), "UPDATE users SET kills = kills + 1 WHERE userID = %d", strval(getUserID(pkiller)));
    mysql_query(query);
    }

    format(query, sizeof(query), "UPDATE users SET deaths = deaths + 1 WHERE userID = %d", strval(getUserID(pname)));
    mysql_query(query);


    /* DEATH SKULL PICKUP FOR MEDICS */
    SetPVarFloat(playerid, "DeathPointX", x);
    SetPVarFloat(playerid, "DeathPointY", y);
    SetPVarFloat(playerid, "DeathPointZ", z);


    DeathSkullPickup = CreatePickup(1254, 1, x, y, z, -1);


    format(message, sizeof(message), "†\n\n%s", playername);
    Death3DTextLabel = Create3DTextLabel(message, grey, x, y, z, 15.0, 0, 0);


    SetPVarInt(playerid, "DeathPickupID", DeathSkullPickup);
    SetPVarInt(playerid, "Death3DTextLabel", Death3DTextLabel);
    SetPVarInt(playerid, "DeathPickupTimer", 1);
    SetPVarInt(playerid, "PlayerDeath", 1);


    /* PLAYER SPAWNED */
    SetPVarInt(playerid, "spawned", 0);


    return 1;
    }


    Ich bekomme in SetPVarInt(playerid, "Death3DTextLabel", Death3DTextLabel); folgende Meldung:

    Code
    warning 213: tag mismatch

    Guten Tag,


    ich habe immer ein Problem, dass wenn ich z.B. ein Medic-System programmieren will das wenn ein Spieler stirbt ein Pickup für 3 Minuten erstellt wird und danach das Pickup wieder gelöscht wird. Dazu muss ich die dementsprechende PickupID des erstellten Pickups ja speichern.


    Es mag zwar simpel klingen, bloß ich stoße hier an meine Grenzen. Ich möchte auch nicht nur in PVars abspeichern, sondern auch noch in einer MySQL Datenbank. Mit MySQL kenne ich mich schon aus, (programmiere mein Selfmade nur auf MySQL) trotzdem bekomme ich immer wenn ich versuche das z.B. so abzuspeichern:
    SetPVarInt(playerid, "DeathPickup", pickupid);


    Bekomme ich immer einen Warn: tag mismatch


    Ich verstehe nicht wie ich das falsch mache. Gibt es da etwas was ich hier anders machen muss ?


    Danke schonmal im Voraus :)

    Ich gebe dir schonmal einen Tipp: Programmiere sauber


    Ich kenne die GodFather Skripts und ich finde das GodFather sehr viel in eine Zeile klatscht. Sieht irgendwie hässlich aus. Ich tuhe mich gerade sehr schwer das zu entziffern. Geb mal bitte mit printf(); CallRemoteFunction("Script_GetPlayerMoney","i",playerid) aus. Ich arbeite nicht mit GodFather, aber war das nicht pInfo[money] oder irgendwie so etwas um den Geldstand auszulesen ?