Beiträge von Templer

    Doch das hatte ich gemeint. Nein ich hab das Problem falsch geschildert, habe es nun hinbekommen. Den Aus irgendeinem Grund mag CallLocalFunction keine Array definitionen haben, sondern die Zahl muss direkt wiedergegeben werden. Aber nunja mein nächstes Problem wäre noch schlimmer und nicht zu beheben ^^.


    Beispiel zu meiner Aussage:
    new TestArray[5];
    TestArray[3] = 2;
    CallLocalFunction("TestPublic", "d", TestArray[3]); //Das mag er nicht und crasht bei Ausführung den Server ^^.


    Lösung:
    new TestArray[5];
    stock GetIntegerFromTestArray(id)
    {
    return TestArray[id];
    }
    CallLocalFunction("TestPublic", "d", GetIntegerFromTestArray(3));
    Das wäre somit gelöst. Keine Ahnung warum er mit dem Array Angabe crasht...

    Hallo Leute,
    Ich hoffe es hat jemand Rat.. Wie kann ich zum Beispiel beim Array:
    enum testenum
    {
    b,
    }
    new Test[testenum];


    den Wert b auslesen?
    Auslagern geht ja durch
    Test[b] = 5;
    aber wie nun den Wert 5 auslesen? ^^

    Also das SetCameraBehindPlayer ist unnötig, aber wie du meinst.


    Nehme den Code nun so:
    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }
    //SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerVehicleSeat(playerid);
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);}
    return 1;
    }


    Füge nun im public PutInCar vor dem PutPlayerInVehicle das ClearAnimations(playerid, 1); davor.

    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos (playerid, 2137.6060,1449.6055,10.8203);
    SetPlayerFacingAngle (playerid,178.6118);
    SetPlayerCameraPos (playerid, 2137.6060,1449.6055,10.8203); //Diese Position ist falsch.
    //Da sie gleich wie SetPlayerCameraLookAt ist ^^.
    //Du solltest also die Koordinaten von wo die Kamera auf den Spieler schaut, neu machen.
    SetPlayerCameraLookAt (playerid, 2137.6060,1449.6055,10.8203);
    return 1;
    }

    Hier bitte, ich habe nun den Code gründlich durchgenommen und dir alles kommentiert. Viel Spaß.


    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    //Ok, der brutalste Fehler überhaupt und ich selber nicht weiß was bei dem Passiert.
    //Jedoch wird bei Verwendung der Float´s das Float später weggelassen.
    //Auch wenn es richtig sein könnte, bei manchen Verwendungen kann es zu Fehlern entstehen.
    //Also nur bei Definitionen der Float, ansonsten weg damit!
    //Ich will auch dir nicht hier in einem Roman schreiben, wie diese "Tags" verwendet werden. Ist nur mein Rat ^^.
    SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else
    {
    //Dieser folgende Code bedeutet also, wenn Spieler Passagier ist, wird er nur zur Position geportet, aber das Auto nicht?
    //Du kannst also das GANZE else weglöschen und die Abfrage PLAYER_STATE_DRIVER. Das halt nur der obige Code, wo ich das
    //mit dem Float: angemerkt habe unter "else if(withcar)" steht, ansonsten keine Abfrage.
    //Natürlich kannst du es auch so lassen, wird aber Konseqzenzen erzeugen später.
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }


    //SetCameraBehindPlayer(playerid); //Das Gehört weg, sinnlos und blockiert nur.

    //Es kann auch sein, dass dieses Problem durch dieses SetCameraBehindPlayer entstand.
    //Habe es jedoch noch nie selber probiert.

    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerVehicleSeat(playerid);
    ClearAnimations(playerid, 1); //Erzeugt das gleiche wie SetPlayerPos, jedoch erspart es sich die Zeilen ^^.
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);}
    return 1;
    }

    Hier bitte, sollte gehen.


    if(!strcmp(cmd, "/allowwhisper", true))
    {
    if (PlayerInfo[playerid][pAdmin] < 6) return 1;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Verwendung: /allowwhisper [spielerid/teildesnamens]");
    new target = ReturnUser(tmp);
    if(!IsPlayerConnected(target) || target == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler ist offline.");
    GetPlayerName(target, sendername, sizeof(sendername));
    switch(allowwhisper[target])
    {
    case 0:
    {
    SendClientMessage(target, COLOR_GRAD1, " Dir wurde das flüstern erlaubt, missbrauche dies nicht ! (nutze flüstern mit /w [id] [text] ) ");
    format(string, sizeof(string), "Du hast %s(%d) das Whispern erlaubt!", sendername);
    allowwhisper[target] = 1;
    }
    case 1:
    {
    SendClientMessage(target, COLOR_GRAD1, " Dir wurde das flüstern verboten! ");
    format(string, sizeof(string), "Du hast %s(%d) das Whispern verboten!", sendername);
    allowwhisper[target] = 0;
    }
    }
    return SendClientMessage(playerid, COLOR_GRAD1, string);
    }

    Ahja genau ^^. Nein eigentlich nicht, denn wenn der Scripter diese Definitionen nicht kennt und der Kompiler ihm auch sagt, dass Sie nicht benützt werden, dann kann man diese mit ruhigem Gewissen löschen. Ansonsten, wenn man weiß worum es ging bei diesen Sachen, kann der Scripter dort fortsetzen, aber in dem Fall klang FrankieYAY nicht gerade danach, dass er die Definitionen kennen würde ^^.

    @ [XGF]Cedii wenn in einer Schleife der Wert angegeben wird, dass er bis 500 Zählen soll, dann ist die Zahl 500 inkludiert. Beim Array ist es eine Außnahme, weil 0 auch als Zahl gezählt wird, was dem Array eigentlich egal ist und einfach zu einer Zahl zählt.


    Nun zur Lösung. Die Sachen was mir nicht gefallen haben bzw. gefehlt haben wurden mit // kommentiert ^^.


    if(dialogid == VehDiag)
    {
    new name[24];
    if(response == 1)
    {
    for(new i = 1; i<MAX_AUTOS; i++)
    {
    format(path, sizeof(path), "/Fahrzeuge/car_%d.ini", i);
    if(!fexist(path))
    {
    GetPlayerName(playerid, name, sizeof name);
    dini_Create(path);
    dini_IntSet(path,"model", Car[i][model]);
    dini_FloatSet(path,"x", Car[i][x]);
    dini_FloatSet(path,"y", Car[i][y]);
    dini_FloatSet(path,"z", Car[i][z]);
    dini_FloatSet(path,"a", Car[i][a]);
    dini_Set(path, "key", Car[i][key]);
    GivePlayerMoney(playerid, -preis);
    CreateVehicle(modell, 1143.2175,-930.6667,43.1487,182.9721, -1,-1,-1);
    SendClientMessage(playerid, 0x00F20FF0, "Herzlichen Glückwunsch zu deinem neuen Fahrzeug!");
    RemovePlayerFromVehicle(playerid);
    return 1; //Das return fehlt hier in diesem Fall, damit der Code beendet / abgebrochen wird.
    }

    }
    //Hier sollte noch was gescriptet werden, was geschieht, wenn alle FahrzeugSlots verbraucht sind ^^.
    //Bedeutet halt soviel wie, wennn die Schleife durchgegangen ist und jeder Slot ein Auto besitzt,
    //arbeitet der Computer hier weiter, weil das return nur in Frage kommt, wenn ein Freier Slot verfügbar war.
    }
    if(response == 0) RemovePlayerFromVehicle(playerid); //Eine Zeile ist hübscher ^^
    }

    Im Include a_objects nach native CreateObject und CreatePlayerObject suchen und durch folgendes ersetzen:


    native CreateObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ, Float:DrawDistance = 300.0);


    native CreatePlayerObject(playerid, modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ, Float:DrawDistance = 300.0);

    Am besten nach gzaehler, maxadmins, maxtickets suchen in deinem GM und diese rauslöschen.


    Und die Zeile mit Streamer_VisibleObjects ersetzen durch


    //Streamer_VisibleObjects


    Also mit // auskommentieren ^^