Beiträge von Kasakow

    Mir stellt sich die Frage, wie ich das am besten angehe.
    Soll ich nun die Distanz jeweils immer auswerten und demnach handeln oder gibt es eine automatisierte Methode für alle meine Wunsch Werte angepasst auf meine Distanz?

    PlayerVehicle ist ein Makro für GetPlayerVehicleID, richtig, das kürzt es einfach ein bisschen ab.
    Ich hatte gar nicht daran gedacht, das die Funktion, den Wert einen Integer abrundet, jetzt funktioniert das Super!
    Vorher hatte ich ganz normal playerid verwendet, zu mindestens bei "meiner" Funktion.

    Ich habe die Funktion früher nutzen können und habe sie auch aus meinem alten Skript, aber irgendwie wird mir immer 0 ausgegeben, zu Fus und im Fahrzeug, beide Werte betragen 0.
    Die 2 Funktion habe ich aus dem Santos Skript genommen weil ich dachte, dass mit meiner irgendwas nicht mehr passte in dieser Version..leider gibt die auch 0 aus.


    Meine Funktion

    stock GetPlayerSpeed(playerid)
    {
    new Float:pPos[4];
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)GetVehicleVelocity(GetPlayerVehicleID(playerid), pPos[0], pPos[1], pPos[2]);
    else if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)GetPlayerVelocity(playerid, pPos[0], pPos[1], pPos[2]);
    pPos[3] = floatsqroot(pPos[0] * pPos[0] + pPos[1] * pPos[1]);
    return floatround(pPos[3] * 100 * 1.61);
    }



    //Gucci/Jonny

    stock GetVehicleSpeed(vehicleid)
    {
    new Float:SpeedVel[3],Float:Speeddistance,Speed;
    if(!IsValidVehicle(vehicleid))return true;
    GetVehicleVelocity(vehicleid,SpeedVel[0],SpeedVel[1],SpeedVel[2]);
    Speeddistance = floatsqroot(((SpeedVel[0]*SpeedVel[0])+(SpeedVel[1]*SpeedVel[1]))+(SpeedVel[2]*SpeedVel[2]))*144;
    Speed = floatround(Speeddistance,floatround_round);
    return Speed;
    }

    \pawno\include\progress2.inc(73) : error 017: undefined symbol "ITER_NONE"
    Ich hatte den fehler vorher schon habs aber abgeändert in:


    C
    if(!barid) {
       err("MAX_PLAYER_BARS limit reached.");
       return INVALID_PLAYER_BAR_ID;
    }


    Original, jetzt wieder, mit dem Oben beschriebenen Fehler:


    C
    if(barid == ITER_NONE) {
       err("MAX_PLAYER_BARS limit reached.");
       return INVALID_PLAYER_BAR_ID;
    }

    @Kaliber

    Also ich habe mir mal "Progess (2)" herunter geladen und auch die dazugehörigen Editor-Filterskripts, aber irgendwie läuft das nicht.. immer Unknown Command.


    Kann ich mir dann augenscheinlich mit dem Editor (pottus oder emmet) die Balken auch von der Höhe anders gestalten?
    Die Balken auf dem Bild, von ProcessBar (1), die so groß sind wie die Lebens&Rüstungsanzeige selbst.. sind mir zu klein.
    Das wäre für ein Tachometer nicht so schön.

    Für diese Sache brauche ich es.



    ocmd:destroycopcar(playerid, params[])
    {
    if(getAdmin(playerid) <6)return 1;
    new str[64];
    if(!sscanf(params, "s", str))
    {
    if(!strcmp(str, "radius", true))
    {
    new vID = GetClosestCopCar(playerid, 3.5);
    if(vID == INVALID_VEHICLE_ID)return SCM(playerid, COLOR_RED, "Es ist kein Polizei Fahrzeug in deiner Nähe.");
    SetPVarInt(playerid, "delRadCopCar", vID),
    format(str, sizeof str, "Möchtest du wirklich das Polizei Fahrzeug '%s' entfernen?", GetVehicleName(Vehicle[vID][vVehicle])),
    ShowPlayerDialog(playerid, D_DELCOPCAR, DIALOG_STYLE_MSGBOX, "Polizeifahrzeug Entfernen.", str, "Bestätigen", "Abbrechen");
    return 1;
    }
    }
    if(!IsACopCar(PlayerVehicle(playerid)))return SCM(playerid, COLOR_GREY, "Du sitzt in keinem Polizei Fahrzeug!");
    new CarIndex = PlayerVehicle(playerid);
    AdminLog(playerid, "delcopcar", "entfernt ein Polizei Fahrzeug. [VehID: %d, CarIndex: %d, SQL: %d]", Vehicle[CarIndex][vModel], CarIndex, Vehicle[CarIndex][vSQL]);
    DestroyCopCar(CarIndex),
    SCM(playerid, COLOR_LIGHTBLUE, "Du hast das Polizei Fahrzeug erfolgreich entfernt.");
    return 1;
    }


    stock DestroyCopCar(carindex)
    {
    new query[64];
    mysql_format(handle, query, sizeof query, "DELETE FROM copcar WHERE id = %d", Vehicle[carindex][vSQL]),
    mysql_pquery(handle, query);
    DestroyVehicleEx(Vehicle[carindex][vVehicle], true);
    return 1;
    }


    //Ondialogresponse
    case D_DELCOPCAR:
    {
    if(!response)return DeletePVar(playerid, "delRadCopCar");
    new idx = GetPVarInt(playerid, "delRadCopCar");
    AdminLog(playerid, "delcopcar", "entfernt ein Polizei Fahrzeug. [VehID: %d, CarIndex: %d, SQL: %d]", GetVehicleModel(Vehicle[idx][vVehicle]), idx, Vehicle[idx][vSQL]);
    DestroyCopCar(idx),
    SCM(playerid, COLOR_LIGHTBLUE, "Du hast das Polizei Fahrzeug erfolgreich entfernt.");
    }

    Ich stehe nach meinem Umdenken sowie Umbau immer mal wieder vor diesem einem Problem.
    Ich habe das Fahrzeug System unter ein Array verallgemeinert, egal ob es sich um das CopCar System dreht oder um das GlobalCar System.. irgendein Fahrzeug aus der Kette spawnt nicht, das gilt für beide Systeme.
    Ich nutze als Index (der Wert in der Mitte) die VehicleID selbst, ich finde so spare unnötig viele Schleifen.


    Quellcode:

    enum E_VEHICLE
    {
    //Int werde
    vSQL,
    vVehicle,
    vType,
    vModel,
    vColor1,
    vColor2,
    vRDelay,
    vSiren,
    vSkill,

    //Float werte
    Float:vTankvol,
    Float:vX,
    Float:vY,
    Float:vZ,
    Float:vR,

    //boolean werte
    bool:vTanktive,
    vEngine,
    };


    enum
    {
    VTYPE_COP,
    VTYPE_ADMIN,
    VTYPE_GLOBAL,
    };


    public QueryFinish(QUERY)
    {
    switch(QUERY)
    {
    case QUERY_LOADCOPVEH:
    {
    for(new i, cachedVehicle, cachedVehSQL, cachedModel, cachedSkill, Float:chX, Float:chY, Float:chZ, Float:chR;i<rows;i++)
    {
    if(Vehicle[i][vVehicle])continue;
    cache_get_value_name_int(i, "id", cachedVehSQL),
    cache_get_value_name_int(i, "Model", cachedModel),
    cache_get_value_name_int(i, "Skill", cachedSkill),
    cache_get_value_name_float(i, "X", chX),
    cache_get_value_name_float(i, "Y", chY),
    cache_get_value_name_float(i, "Z", chZ),
    cache_get_value_name_float(i, "R", chR),
    cachedVehicle = CreateVehicleEx(cachedModel, chX, chY, chZ, chR, -1, -1, -1, 1);


    Vehicle[cachedVehicle][vVehicle] = cachedVehicle,
    Vehicle[cachedVehicle][vSQL] = cachedVehSQL,
    Vehicle[cachedVehicle][vModel]= cachedModel,
    Vehicle[cachedVehicle][vSkill] = cachedSkill,
    Vehicle[cachedVehicle][vX] = chX,
    Vehicle[cachedVehicle][vY] = chY,
    Vehicle[cachedVehicle][vZ] = chZ,
    Vehicle[cachedVehicle][vR] = chR,
    Vehicle[cachedVehicle][vType] = VTYPE_COP,
    Vehicle[cachedVehicle][vTankvol] = 100.0,
    Vehicle[cachedVehicle][vTanktive] = true,


    printf("LOADCV: Type: %d, SQL: %d, Model: %d, Skill: %d, Pos: %f,%f,%f,%f, IVehID: %d", Vehicle[cachedVehicle][vType], cachedVehSQL, cachedModel, cachedSkill, chX, chY, chZ, chR, cachedVehicle);
    }
    }
    case QUERY_LOADGLOBALVEH:
    {
    for(new i, cachedVehicle, cachedVehSQL, cachedModel, cachedColOne, cachedColSecond, Float:chX, Float:chY, Float:chZ, Float:chR;i<rows;i++)
    {
    if(Vehicle[i][vVehicle])continue;
    cache_get_value_name_int(i, "DatabaseID", cachedVehSQL),
    cache_get_value_name_int(i, "Model", cachedModel),
    cache_get_value_name_int(i, "Color1", cachedColOne),
    cache_get_value_name_int(i, "Color2", cachedColSecond),
    cache_get_value_name_float(i, "X", chX),
    cache_get_value_name_float(i, "Y", chY),
    cache_get_value_name_float(i, "Z", chZ),
    cache_get_value_name_float(i, "R", chR),
    cachedVehicle = CreateVehicleEx(cachedModel, chX, chY, chZ, chR, cachedColOne, cachedColSecond, -1, 0);


    Vehicle[cachedVehicle][vVehicle] = cachedVehicle,
    Vehicle[cachedVehicle][vSQL] = cachedVehSQL,
    Vehicle[cachedVehicle][vModel]= cachedModel,
    Vehicle[cachedVehicle][vX] = chX,
    Vehicle[cachedVehicle][vY] = chY,
    Vehicle[cachedVehicle][vZ] = chZ,
    Vehicle[cachedVehicle][vR] = chR,
    Vehicle[cachedVehicle][vColor1] = cachedColOne,
    Vehicle[cachedVehicle][vColor2] = cachedColSecond,
    Vehicle[cachedVehicle][vType] = VTYPE_GLOBAL,
    Vehicle[cachedVehicle][vTankvol] = 100.0,
    Vehicle[cachedVehicle][vTanktive] = true;


    printf("LOADGLOBALCAR: Type: %d, SQL: %d, Model: %d, Pos: %f,%f,%f,%f, IVehID: %d", Vehicle[cachedVehicle][vType], cachedVehSQL, cachedModel, chX, chY, chZ, chR, cachedVehicle);
    }
    }
    }
    }

    Ich habe aktuell das vorhaben, ein Tacho zu gestalten mit Zustands & Tankbar.
    Leider weiß ich nicht wie ich es umrechnen soll das sich die jeweilige Bar auf jedes Volumen anpasst und automatisch kleiner wird.
    Hat da jemand einen Denkanstoß für mich?

    Weil ich es in der Funktion "Menu" lassen wollte, aber dieses Argument hat mich umgestimmt, ich mach es doch lieber asynchron.


    //EDIT
    Ich habe geschaut aber nicht für mich gefunden, je nach dem, wie konkret ich denn gesucht habe, ..
    Ich benötige für sämtliche Fahrzeuge die passenden Koordinaten für die Sirenen. Diese kleinen teile da, nicht die Sirenen Balken.

    Ich weiß die Anwendung ohne Callback ist gefährlich, deswegen frage ich ob das so in Ordnung ist.
    Ich lasse am Ende den Cache auch löschen.



    if(!strcmp(call, "housecfg_rentlist", true))
    {
    new Cache:RentSQL, rows, idx = GetPVarInt(playerid, "ownHouseIndex"), sstr[480];
    format(string, sizeof string, "SELECT Name, playerid FROM player WHERE Rent = %d", hInfo[idx][hSQL]),
    RentSQL = mysql_query(handle, string);

    cache_get_row_count(rows);
    for(new z, y = rows; y > z; ++z)
    {
    cache_get_value_name(z, "Name", rentTmpName[playerid][z], MAX_PLAYER_NAME+1),
    cache_get_value_name_int(z, "playerid", rentListTmpData[playerid][z]),
    format(sstr, sizeof sstr, "%s\n%s", sstr, rentTmpName[playerid][z], rentListTmpData[playerid][z]);
    }
    ShowPlayerDialog(playerid, 500, DIALOG_STYLE_LIST, "Test", sstr, "Jo", "Okay");
    cache_delete(RentSQL);
    return 1;
    }