Beiträge von Ap0llinaris

    Habe es jetzt so im Script:

    stock LoadPlayerVehicles(playerid){
    for(new i=0;i<MAX_PRIVATE_VEHICLES;i++){
    if(!CarSlotInUse[playerid][i]){
    new sql[128], data[128];
    format(sql, sizeof(sql), "SELECT * FROM `PrivateCars` WHERE `Besitzer` = '%s'", GetName(playerid));
    mysql_query(sql);
    mysql_store_result();
    while(mysql_fetch_row_format(sql, "|")){
    sscanf(data, "p<|>e<iiffffii>", PrivateVehicle[playerid][i]);
    printf("%d", PrivateVehicle[playerid][i][vModelID]);
    }
    }
    }
    return 1;
    }


    In der Datenbank stehen auch 2 Einträge, es erscheint aber nichts in der Console.

    Heißt, so?

    stock LoadPlayerVehicles(playerid){
    for(new i=0;i<MAX_PRIVATE_VEHICLES;i++){
    if(!CarSlotInUse[playerid][i]){
    new sql[128], data[128];
    format(sql, sizeof(sql), "SELECT * FROM `PrivateCars` WHERE `Besitzer` = '%s'", GetName(playerid));
    mysql_query(sql);
    mysql_store_result();
    if(mysql_num_rows() > 0){
    while(mysql_fetch_row(data)){
    sscanf(data, "e<p<|>iiffffii>", PrivateVehicle[playerid][i]);
    }
    mysql_free_result();
    }
    }
    }
    return 1;
    }
    ?^^

    Hallo.
    Ich bin noch nicht so gut in Sachen MySQL, kriege aber ein Login/Registrations-Script locker hin.


    Ich möchte ein Fahrzeug-System erstellen, worin ein Spieler je nach Definierung mehr oder weniger Fahrzeuge haben kann.


    Derzeit soll ein Spieler maximal 5 Private Fahrzeuge besitzen können.
    Das habe ich folgendermaßen erstellt:

    #define MAX_PRIVATE_VEHICLES 5


    enum PrivateVehicles
    {
    vCarID,
    vModelID,
    Float:vPosX,
    Float:vPosY,
    Float:vPosZ,
    Float:vPosRot,
    vColor1,
    vColor2
    }
    new PrivateVehicle[MAX_PRIVATE_VEHICLES][PrivateVehicles];


    Und nun möchte ich die Fahrzeuge beim connecten laden lassen, wo ich aber Probleme mit den MySQL Abfragen habe.
    Ich möchte ja, dass wenn der Spieler z.B. 2/5 Fahrzeuge hat, nur diese erstellt werden und nur diese geladen werden.
    Das habe ich folgendermaßen:

    stock LoadPlayerVehicles(playerid){
    for(new i=0;i<MAX_PRIVATE_VEHICLES;i++){
    if(!CarSlotInUse[playerid][x]){
    new string[128];
    format(string, sizeof(string), "SELECT * FROM `PrivateVehicles` WHERE `Besitzer` = '%s'", GetName(playerid));
    mysql_query(string);
    mysql_store_result();
    if(mysql_num_rows() != 0){
    PrivateVehicle[i][vModelID] = mysql_GetInt("PrivateVehicles", "ModelID", "Besitzer", GetName(playerid));
    }
    }
    }
    return 1;
    }


    Nur ich weiß jetzt nicht, ob es richtig ist, und wie ich ggf. weiter machen soll.


    Ich hoffe ihr könnt helfen. :)


    //Edit
    Habs mal geändert, wäre es so richtig?

    stock LoadPlayerVehicles(playerid){
    for(new i=0;i<MAX_PRIVATE_VEHICLES;i++){
    if(!CarSlotInUse[playerid][i]){
    new sql[128], data[128];
    format(sql, sizeof(sql), "SELECT * FROM `PrivateCars` WHERE `Besitzer` = '%s'", GetName(playerid));
    mysql_query(sql);
    mysql_store_result();
    if(mysql_num_rows() > 0){
    mysql_fetch_field_row(data, "ModelID");
    PrivateVehicle[playerid][i][vModelID] = strval(data);
    }
    }
    }
    return 1;
    }


    Danke.. ._.

    Bald kriegt DayZ seine eigene Engine, heißt aber nicht dass Arma dann nicht mehr benutzt wird.
    Das wird weiterhin online sein.
    Aber eine zweite Version von DayZ wird auch entwickelt, welche 10€ kosten soll. Keine Neben-Kosten o.ä, soll auf dem gleichen Verkaufs-Verfahren wie bei Minecraft laufen.

    Hier, habe mal was für dich gemacht.

    new bool:duty[MAX_PLAYERS];// <- Ein Bool ist immer besser, wenn du nur Werte abspeichern willst, die entweder "0 (false)" oder "1 (true)" enthalten.


    public OnPlayerConnect(playerid){
    duty[playerid] = false;// <- Beim Connecten muss der bool wieder auf "false" gesetzt werden.
    return 1;
    }


    public OnPlayerSpawn(playerid){
    duty[playerid] = false;// <- Hier sollte der bool ebenfalls wieder auf "false" gesetzt werden.
    return 1;
    }


    if(strcmp("/duty", cmdtext, true) == 0){
    new string[128];
    if(IsPlayerInRangeOfPoint(playerid,2.0,217.3575,184.1517,1003.0313)){
    if(isPlayerInFrakt(playerid, 1){
    if(duty[playerid] == false){
    duty[playerid] = true;
    format(string, sizeof(string), "* Officer %s nimmt seine Dienst-Kleidung aus dem Schrank und beginnt den Dienst!", SpielerName(playerid));// <- Eventuell noch anpassen.
    SendClientMessage(playerid, viulet, string);// <- Ich empfehle dir, eine "SendRangeMessage"-Funktion zu erstellen, sodass Spieler in der Nähe es lesen können. Zudem heißt es "Violett" und nicht "viulet".
    SetPlayerColor(playerid, Dunkelblau);
    }else if(duty[playerid] == true){
    duty[playerid] = false;
    format(string, sizeof(string), "* Officer %s legt seine Dienst-Kleidung in den Schrank, und macht Feierabend.", SpielerName(playerid));// <- Eventuell noch anpassen.
    SendClientMessage(playerid, viulet, string);
    SetPlayerColor(playerid, 0xFFFFFF);// Die Farbe von Dunkelblau auf Weiß ändern, kannst du ändern, wenn du willst.
    }
    }
    }else if(IsPlayerInRangeOfPoint(playerid, 2.0, position-X, position-y, position-z)){ // Die Armee-Position, musst du selbst noch eintragen.
    if(isPlayerInFrakt(playerid, armee-ID){ // Hier muss die Fraktions-ID der Armee eingetragen werden
    if(duty[playerid] == false){
    duty[playerid] = true;
    format(string, sizeof(string), "* Soldat %s nimmt seine Ausrüstung aus dem Waffen-Arsenal!", SpielerName(playerid));// <- Eventuell noch anpassen.
    SendClientMessage(playerid, viulet, string);
    SetPlayerColor(playerid, 0x33AA33AA);// <- Ich habe jetzt mal irgendwo einfach ein Grün-Ton hergenommen.
    }else if(duty[playerid] == true){
    duty[playerid] = false;
    format(string, sizeof(string), "* Soldat %s legt seine Ausrüstung zurück, und macht Feierabend.", SpielerName(playerid));// <- Eventuell noch anpassen.
    SendClientMessage(playerid, viulet, string);
    SetPlayerColor(playerid, 0xFFFFFF);// Die Farbe von Grün auf Weiß ändern, kannst du ändern, wenn du willst.
    }
    }
    }else{
    SendClientMessage(playerid, 0xFFFFFF, "Du bist an keinem Dienst-Punkt.");
    return 1;
    }
    return 1;
    }

    Habe es jetzt so:

    SetCameraBehindPlayer(playerid);
    GetPlayerCameraFrontVector(playerid, Store[playerid][0], Store[playerid][1], Store[playerid][2]);


    Wenn ich nun bei meinem SetPlayerToSpawn-Stock folgendes anwende:

    InterpolateCameraPos(playerid, 1730.956542, -1895.548950, 345.042388, Store[playerid][0], Store[playerid][1], Store[playerid][2], 8000);
    InterpolateCameraLookAt(playerid, 1731.450805, -1895.550048, 340.066864, 1763.896972, -1895.619262, 15.272540, 6000);
    SetPlayerPos(playerid,1763.4453,-1895.7362,13.5621);
    SetPlayerFacingAngle(playerid, 269.5315);


    Geht die Kamera nach 0.0, 0.0, 0.0 ._.

    Hallo.


    Ich möchte gerne die Position herausfinden, die bei SetCameraBehindPlayer berechnet wird.
    Ich möchte es nämlich so machen, wenn man spawnt, dass die Kamera im Himmel ist, nach unten fährt, und dann bei der Position von "SetCameraBehindPlayer" ist.
    Weil derzeit ist es so, dass die Camera etwas fail gesetzt wird...


    Danke im voraus. :P

    Ich hab bei OnVehicleSpawn "valueOne[vehicleid] = 0;" stehen, und in meinen stocks (CreateVehicleEx, AddStaticVehicle_V, AddStaticVehicleEx_V) steht "OnVehicleSpawn" drin.

    stock CreateVehicleEx(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay){
    new vID = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
    OnVehicleSpawn(vID);
    return vID;
    }


    ;)


    ocmd:find(playerid, params[]){
    new type, pID;
    if(IsACop(playerid)){
    if(!sscanf(params, "iu", type, pID)){
    switch(type){
    case 1: playerCPTimer[playerid] = SetTimerEx("FindTimer", 1000, true, "ii", playerid, pID);
    case 2: KillTimer(playerCPTimer[playerid]);
    }
    }
    }else{
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist.");
    return 1;
    }
    return 1;
    }


    public FindTimer(playerid, forplayerid){
    new Float:pos[3];
    if(IsPlayerConnected(forplayerid)){
    GetPlayerPos(forplayerid, pos[0], pos[1], pos[2]);
    SetPlayerCheckpoint(playerid, pos[0], pos[1], pos[2], 6.0);
    }else{
    KillTimer(playerCPTimer[playerid]);
    SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nichtmehr online.");
    return 1;
    }
    return 1;
    }