Beiträge von IPrototypeI

    Ja liegt es auch.
    Aber ich möchte es nicht umschreiben, deswegen ... irgendwie anders möglich?


    -> bin nur kurz da.


    Das liegt daran das -1 zurück geben wird. greift man auf ein array mit einem negativen index zu so crasht der Server.


    ocmd:oparkt(playerid,params[]){
    new veh = GetPlayerVehicleID(playerid),oapreis;
    if(!IsPlayerInRangeOfPoint(playerid,150.0,907.2166,-1235.2578,0.9116)) return SendClientMessage(playerid,-1,"Du bist nicht in der O-Amt Base!");
    if(GetVehicleModel(veh) != 525)return SendClientMessage(playerid,-1," Du musst in einem Abschleppwagen sitzen!");
    new id = getSlotID(GetVehicleTrailer(veh));
    if(id == -1)return SendClientMessage(playerid, -1, "Dieses Fahrzeug ist kein Spielerfahrzeug.");
    if(sscanf(params,"i",oapreis)) return SendClientMessage(playerid,-1,"Verwende: /opark [Preis]");
    if(sCarInfo[id][CarAbgeschleppt] == 0){
    GetVehiclePos(id,sCarInfo[id][pCarPos_X],sCarInfo[id][pCarPos_Y],sCarInfo[id][pCarPos_Z]);
    GetVehicleZAngle(id,sCarInfo[id][pCarPos_A]);
    sCarInfo[id][CarAbgeschleppt] = 1;
    sCarInfo[id][CarAbgeschlepptPreis] = oapreis;
    tuneCar(id,sCarInfo[id][VehID]);
    saveCar(id);
    SendClientMessage(ReturnPlayerid(sCarInfo[id][scName]),-1,"Hinweis: Dein Auto/Bike wurde abgeschleppt! Hole es beim Ordnungsamt ab!");
    }
    return 1;
    }

    Warum nutzt man in Zeiten von SII , y_ini oder DJson noch DINI ?


    Mal nur so nebenbei, wenn ich sowas wieder sehen


    new win[MAX_RACECARS] = -1;


    da könnte ich auf meine Tastatur kotzen.


    Das funktioniert nicht du setzst lediglich den ersten index, daher initalisiert man das arrays auch anders.
    new win[MAX_RACECARS] = {-1,...};

    Ich war selbst 6 lange Jahre auf einer Hauotschule, musste (tut mir Leid, das zu sagen, aber es ist leider Fakt) mich ständig mit solchen Azzlacks abgeben, die meinten, sie wären die Obercoolsten , weil es einfach kaum möglich war, normale Leute zu finden.


    Also meine Werdegang hat mich über die Hauptschule , Realschule bis jetzt zum Gymnasium geführt und ich kann dir versichern, dass es überall Idioten(Azzlacks) gibt, jedoch haben wir eine prozentual Abnahme je höher der Bildungsgrad ist.

    Ich hoffe das einer mir helfen kann..


    enum sData{
    sID,
    gID,
    }
    new SperrZone[MAX_PLAYERS][sData];


    CMD->zone(playerid,params[])
    {
    if(SperrZone[playerid][sID]){
    DestroyDynamicArea(SperrZone[playerid][sID]);
    GangZoneDestroy(SperrZone[playerid][gID]);
    for(new i; i != _:sData; ++i)SperrZone[playerid][sData:i] = 0;
    return 1;
    }
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    SperrZone[playerid][sID] = CreateDynamicRectangle(Pos[0]-60, Pos[1]-60, Pos[0]+60, Pos[1]+60);
    SperrZone[playerid][gID] = GangZoneCreate(Pos[0]-60, Pos[1]-60, Pos[0]+60, Pos[1]+60);
    GangZoneShowForAll(SperrZone[playerid][gID],0xFFFF0096);
    GangZoneFlashForAll(SperrZone[playerid][gID],0xAA333396);
    return 1;
    }
    public OnPlayerEnterDynamicArea(playerid, areaid)
    {
    for(new i; i!= MAX_PLAYERS; ++i)if(areaid == SperrZone[i][sID])return SendClientMessage(playerid,-1,"Das ist eine Sperrzone!");
    }



    Den CMD Prozessor musst du noch anpassen so würde das funktionieren was du dazu benötigst ist das streamer plugin für mehr zonen funktionen des streamer plugin schau einfach mal auf die Seite http://forum.sa-mp.com/showthread.php?t=102865.
    letztendlich musst du halt die id der zonen der vom streamer und der gangzone zwischenspeichern um das auch wieder zu löschen, wenn der Cop das ganze deaktivieren möchte. Das Callback OnPlayerEnterDynamicArea wird automatisch aufgerufen wenn der Spieler die Zone , welche mit CreateDynamicRectangle erstellt wurde
    aufgerufen so sparst du dir einen Timer.

    1680 Objekte bei solch einer Map ist durchaus machbar
    das Problem ist das ihr einfach nicht wisst wie man mit dem streamer richtig umgeht.


    Ich hab meine Stadthalle releast auch diese konnte ich ohne probleme einstreamen vllt an paar punkten nicht ganz, aber der größte Teil schon.


    Die Zauberworte sind drawdistance und streamdistanc.
    Dann benötigst du noch die modelsize include von Y_Less
    und hookst CreateDynamicObject.


    Das Geheimnis daran ist die streamdistance je nach priorität zu setzen sodass stühle und tische etc... (details) erst
    sehr nah eingestreamt werden.

    mehr oder weniger ja, jedoch ist das nur mit Kopfbedeckungen und Brillen möglich , extra kleider gibt es jedoch nicht.


    @ Jeffry


    Er wollte die Skins so anziehen, wie es im Singleplayer mit CJ möglich ist.

    Du könntest auch ein Handysystem schreiben
    Beispiel für ein Handy


    =>

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


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



    Man könnte über die Audiodatei vom Googleübersetzer auch den Namen vorlesen lassen , welcher anruft etc... .
    Falls du dazu lust hast kann ich dir gerne noch paar weitere Ideen, als die in den Video gezeigen Features nennen.

    Aber getSlotID ist doch eigentlich 0, wenn er in keinem Fahrzeug sitzt.
    Er nimmt ja die GetPlayerVehicleID und wenn er in keinen Car sitzt -> 0.


    Natürlich kann man auch GetPlayerVehicleID nutzen macht im gesamten System nicht wirklich sinn da getSlotID dir nur die Slotid ausspuckt
    wenn das Fahrzeug auch dir gehört, nun gut da fehlt in diesem Beispiel nur die Abfrage ob die Slotid -1 ist.


    //edit im grunde muss man nur 2 Sachen ändern ingame den Besitzername und in der Datenbank diesen Ebenfalls ist sogar nichtmal zwingend nötig.
    Wenn du dich frägst woher ich das weiß ich hab mit ihm die Grundlage seines Carsystems geschrieben

    Warum kickst du dein Spieler den überhaupt?


    SetTimerEx("PlayerKick",1000,true,"i",playerid);


    Zitat

    Nico has left the server <0:2>

    Das liegt daran das der Slot nicht frei ist , bei einem kick wird der Spieler temporär gebannt bis der Slot frei ist.
    Manche behaupten das du erst die Positon der Spielers setzen musst bevor du ihn kickst , ich hingegen hatte das Problem noch nicht.

    Sollte normal funktionieren bei dem Fahrzeug mit der Modelid 541



    if(GetVehicleModel(vehicleid)==415&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==445&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==560&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==561&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==482&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==540&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==542&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==507&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==420&&sirenean[vehicleid]==0)
    if(GetVehicleModel(vehicleid)==541&&sirenean[vehicleid]==0)


    Der Code ist überflüssig daher funktioniert das auch nur bei der id 541 weil du in dem fall ein anweisungsblock
    angibst.


    Daher reicht diese Abfrage
    if(sirenean[vehicleid]==0) {


    da du danach die Modelid abfrägst.

    stock ChangeOwner(slotID, const NewOwner[]){
    neq query[128];
    format(query,128,"UPDATE `autos` SET `Name` = '%s' WHERE `CarID` = %d;",NewOwner,sCarInfo[slotID][CarID]);
    mysql_query(query);
    format(sCarInfo[slotID][sName],MAX_PLAYER_NAME,"%s",NewOwner);
    return 1;
    }


    sollte so ganz easy gehen das einzige was du letztendlich übergeben musst ist die slotid, welche du ja über getSlotID ermittelst und den Namen des neuen Besitzers.



    Anwendungsbeispiel: (Ist jetzt nicht aus dem Zusammenhang genommen)

    new veh = GetPlayerVehicleID(playerid);
    new id = getSlotID(veh);
    ChangeOwner(id ,PlayerName(pID));

    Es gibt keinen anderen Weg. Timestamps kommen hier nicht in Betracht, da man ja online sein soll, also ist der Weg, eine Variable immer zu inkrementieren doch eine ganz passable Möglichkeit.


    würde ich so nicht behaupten , du kannst den timestamp beim einloggen in den Account in einer variable zwischenspeichern und die ausgelesene Zeit,
    so kannst du beim abrufen des jetzigen timestamps die Zeit von dem timetsamp beim einloggen abziehen und die gespeicherte zeit hinzurechnen. Beim
    Speichern wird zu der bestehenden zeit einfach die Differenz wie beim anzeigen zwischen dem jetzigen timestamp und dem beim einloggen hinzugerechnet.


    hier mal eine funktion wie man die Zeit anzeigen könnte.


    stock SecToHour(sec) {
    return printf("%02d:%02d:%02d", (sec/3600),(sec/60), sec % 60);
    }

    Du nutzt falsche Farbcodes diese müssen im Format RGBA sein also fehlt dir jeweils noch ein wert.


    Wenn ich meine ganzen Aufträge bearbeitet habe werde ich mal schauen ob ich ein update mach