Beiträge von IPrototypeI

    Ob die Objekte auf Häusern Spawnen oder nicht, ist nicht so schlimm - eher gut sogar (Wundert euch nicht). Gegenfrage, was ist MapAndreas? Wenns wirklich nicht anders gehen sollte (jedenfalls für mich nicht) dann muss ich eben alles Saven und einfügen^^


    MfG


    mapandreas ist ein plugin welches von Kalcore geschrieben wurde der lieb Mauzen hat dieses umgeschrieben das es nicht so auf die ressourcen geht und paar möglichkeiten noch hinzugefügt.
    Es gibt noch eine alternative zum plugin das ist eine include welche von Ryder erstellt wurde es gibt viele koordinaten in eine datei dort wird die jeweilige raus gezogen .Ich empfehle persönlich die include
    zu benutzen, ist zwar langsamer als die plugin version dennoch frisst diese nicht so viel memory. und weiter kriterien.

    langeweile ruft :D



    forward Float:GetPlayerFacingAngleInCar(playerid);
    stock Float:GetPlayerFacingAngleInCar(playerid){
    new Float: Pos[9];
    const Float:fScale = 100.0;
    GetVehiclePos(GetPlayerVehicleID(playerid), Pos[0], Pos[1],Pos[2]);
    GetPlayerCameraPos(playerid, Pos[3], Pos[4], Pos[5]);
    GetPlayerCameraFrontVector(playerid, Pos[6], Pos[7], Pos[8]);
    Pos[5] = Pos[3] + floatmul(Pos[6], fScale);
    Pos[8] = Pos[4] + floatmul(Pos[7], fScale);
    return (180 - atan2(Pos[0] - Pos[5], Pos[1] - Pos[8]));
    }


    Dort wo man hinschaut mit der Kamera von dort wird die jeweilige rotation genommen die Idee habe ich mir aus dem einen von Pocket-Jony erstellten Thread genommen
    nur war er ja schon fertig.


    stock SetArrowPos(playerid,vehicleid,objectid,Float:X, Float:Y){
    new Float: Pos[3];
    GetVehiclePos(vehicleid, Pos[0], Pos[1],Pos[2]);
    return AttachPlayerObjectToVehicle(playerid,objectid, vehicleid, 0.0, 0.0, 1.5, 0.0, 90.0, (90 - atan2(Pos[0] - X, Pos[1] - Y)));
    }


    da jemand noch danach gefragt hatte wegen dem Pfeil auf dem Auto habe ich mir eine neue berechnung gemacht die zu dem viel kürzer ist als aus dem orginal
    und ja auch schneller :D


    http://forum.sa-mp.com/showthread.php?t=219539


    Um daten mit MySQL auszulesen benutzt man den Befehl SELECT und um die ganze reihe auszulesen


    format(query,sizeof(query),"SELECT * FROM `accounts` Der Stern steht für alles in der Reihe also alle Spalten.


    1. Objectstreamer sind nur dafür da mehr Objecte für den Spieler zu erstellen als 1000 da diese wie der nahme schon sagt eingestreamt wird das limit liegt bei 1000
    da die Streamer mit CreatePlayerObject arbeiten macht ja auch sinn. Es lohnt sich also einen streamer zu benutzen am besten das streamer plugin von incognito
    2. Das war du da gehört hast ist Falsch Timer sind an sich nicht ressourcenfressend nur der Inhalt den er umfasst und das mehrere Funktionen "auf einmal" aufgerufen werden also eher nicht direkt da PAWN nicht wie C++ oder andere Programmiersprachen multithreaded ist also es kann keine dinge gleichzeitig machen sondern alles
    step bei step. OnPlayerUpdate ist ein Timer für den Spieler dieser ist für die Synchronisation des Spieler verantwortlich es ist ein Timer der sich Mehr als 10 mal in der Sekunde aktuallisiert wird. Bei Fahrzeuge ist es OnUnoccupiedVehicleUpdate. Man sollte es dort nur seinen code rein packen wenn man auch ahnung hat was man tut.
    Wissenswertes ist auch noch das sollte der SPieler auf dem Desktop sein wird OnPlayerUpdate nicht mehr aufgerufen und zu den Timern diese sind nicht präzise sondern haben eine delay die je nach dem größer oder kleiner ist je nach Zeit du kannst bei einem Timer der alle 10 Stunden aufgerufen wird eine delay von 10 - 40 Minuten haben dazu gibt es auch fixxes. Am besten finde ich ist es y_timers zu benutzen da das die Timer auch etwas verzögert startet und ich mein da ist auch der Timerfix enthalten.

    Arbeite am besten mit einem bool.

    new bool:no;
    for(new i;i<MAX_PLAYERS;i++){
    if(PlayerInfo[i][gZahl]==zahl){
    // Wenn Spielervariable gZahl vorhanden b.z.w gleich zahl ist
    no = false;
    break;
    }else no = true;
    }
    if(no)return SendClientMessage(playerid,-1,"Zahl nicht gefunden");


    Hier bitte sollte der wert nicht zu treffen so wird no auf true gesetzt was man auch abfrägt nach dem for-loop.
    sollte es gefunden werden wird no auf alse gesetzt mit break wird die schleife abgebrochen da nun no false ist wird die message nich abgerufen da
    if(no) eine verkürzte form von if(no == 1) ist

    SetTimer("Beispiel",1000,true);
    forward public Beispiel();
    public Beispiel()
    {
    for(new i; i < MAX_PLAYERS; ++i)if(IsPlayerConnected(i))UpdateLabel(i);
    return 1;
    }
    LabelsLoad(playerid)
    {
    for(new i; i < MAX_PLAYERS; ++i) {
    if(!IsPlayerConnected(i))continue;
    if(i == playerid)for(new x; x < MAX_PLAYERS; ++x)if(IsPlayerConnected(x) && x != playerid)WantedText[x][playerid] = CreatePlayer3DTextLabel(x,"Hallo",0x9B0000FF,0.0,0.0,0.0, 20.0, playerid,INVALID_VEHICLE_ID,0);
    WantedText[playerid][i] = CreatePlayer3DTextLabel(playerid,"Hallo",0x9B0000FF,0.0,0.0,0.0, 20.0, i,INVALID_VEHICLE_ID,0);
    }
    return 1;
    }


    UpdateLabel(playerid)
    {
    new Wanteds[50],Float:Pos[3];
    for(new i = 0; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i))continue;
    GetPlayerPos(i,Pos[0],Pos[1],Pos[2]);
    format(Wanteds,50,"Position: %f %f %f",Pos[0],Pos[1],Pos[2]);
    UpdatePlayer3DTextLabelText(playerid,WantedText[playerid][i], 0x9B0000FF, Wanteds);
    }
    return 1;
    }


    Dein code kann an sich schon nicht funktionieren


    es ist auch besser du lässt ihn updaten und attachen duerstellst immer wieder ein neues


    nein tut es nicht ^^ ihrgend was läuft bei dir nicht richtig da bei mir hier nix falsches ausgegeben wird
    du hast oben


    #include<sscanf2> drinne und lässt auch das plugin laden testest du das über deinen homeserver oder direkt über einen gehosteten bei samp4you oder sonst wo , root , vserver

    Das ist dann fraglich wo der fehler sein könnte


    Da es eigentlich klappen müsste siehe testcode
    new v,str[100] = "262|0|565|241.03120|1873.37366|11.12780|173.69389|67|43";
    sscanf(str, "p<|>e<{i}-i{i}iffffii>", FrakCarInfo[v]);
    printf("%d %d %f",FrakCarInfo[v][fcVehid],FrakCarInfo[v][fcModel],FrakCarInfo[v][fcPosX]);


    hast du den alten sscanf code noch drinne ? wenn ja entfernen


    weil ich seh hier auch kein fehler mehr


    //edit du kannst nochmal mein code testen wenn dort nix raus kommt dann liegt es an deinem skirpt das du ihrgend was enthalten hast was den code stört
    um einen vergleich zu ziehen kannst du nochmal ein neues skript öffnen dne ocde rein packen und testen.

    Entweder du erstellst Player Textdraws oder nur eins, aber so etwas geht gar nicht. Sieht ganz gut aus, mich persönlich hat das N(orden) gestört, was man leider nicht weg bekommt. Gute Arbeit!


    Wenn du das so meinst
    new PlayerText:Beispiel;


    dies geht ^^ jedoch sollte man das machen es wird nur eine id drinne gespeichert da ja diese Textdraw art clientseitig eingestreamt wird
    kann es mit der id zur komplikationen kommen.


    daher


    new PlayerText:Beispiel[MAX_PLAYERS];
    oder
    new PlayerText:Beispiel[MAX_PLAYERS char];

    Hallo Bread,
    sobald ich eine dieser TextDraws lösche kommt diesere leere Kasten. (siehe gelb)
    Woran könnte es liegen das aufeinmal dieser Mist erscheint?


    Es kommt drauf an wie erstellst du dieses textdraw, wie "entfernst" du es Zerstören | Ausblenden.
    Vllt ein Timer der den Kasten wieder erstellt und anzeigt oder anzeigt

    1. ja du brauchst das plugin mit dem normalen sscanf code geht das nicht
    2. Es war Query gemeint ich hab was mit dem sscanf code besser gesagt mit der parameter abfolge was getestet

    stock LoadFrakCars()
    {
    new Query[128], v;
    mysql_query("SELECT * FROM `frakcars`");
    mysql_store_result();
    while(mysql_fetch_row_format(Query))
    {
    sscanf(Query, "p<|>e<-i{i}iffffii>", FrakCarInfo[v]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    v++;
    }
    mysql_free_result();
    return print("Fraktionsautos geladen");
    }


    Ich geh mal davon aus das man mit sowas mehr anfangen kann ist aufjedenfall übersichtlicher


    if(!strcmp(cmdtext, "/spawnchange", true))
    {
    switch(SchoolSpawn[playerid]){
    case 0:{
    if(PlayerInfo[playerid][pPhousekey] != 255)return SpawnChange[playerid] = 1,SendClientMessage(playerid, COLOR_GREY, " Du spawnst jetzt in deinem eigenen / gemieteten Haus ! !");
    else if(IsAnInstructor(playerid)){
    if(SchoolSpawn[playerid] == 0)return SchoolSpawn[playerid] = 0,SendClientMessage(playerid, COLOR_GREY, " Du spawnst jetzt an der Fahrschule !");
    }else return SendClientMessage(playerid, COLOR_GREY, " Du besitzt kein Haus / keine Mietwohnug !");
    }
    case 1:{
    if(Spectate[playerid] != 255 && PlayerInfo[playerid][pAdmin] < 1)return SendClientMessage(playerid, COLOR_GREY, " Du bist am zuschauen, Spawn kann jetzt nicht gewechselt werden !");
    else if(IsAnInstructor(playerid)){
    if(SchoolSpawn[playerid] == 0)return SchoolSpawn[playerid] = 0,SendClientMessage(playerid, COLOR_GREY, " Du spawnst jetzt an der Fahrschule !");
    }else return SpawnChange[playerid] = 0,SendClientMessage(playerid, COLOR_GREY, " Ab jetzt spawnst du wieder am gewohnten Platz !");
    }
    }
    return 1;
    }


    Jetzt schaust du dir den Verlauf von SpawnChange[playerid] an abgesehen von den Fahrlehreren und dann sollte das gar nicht so schwer sein das so erweitern