komische fehler

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • hey @ all...


    hab n scriptschnipsel gefunden, welcher die cars automatisch repaired wenn die health unter 250 fällt..


    jetzt bekomm ich 1 error:


    Code
    C:\DOKUME~1\Erik\Desktop\GODFAT~1\GAMEMO~1\ex.pwn(871) : error 076: syntax error in the expression, or invalid function call


    also oben bei onplayerconnect:


    SetTimerEx("Autorepair",500,true,"d",playerid);


    dann bei onplayerdisconnect:


    KillTimer(Autorepair); // hier liegt der error


    und dann der eigentliche code:


    forward Autorepair(playerid);
    public Autorepair(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:health,vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    GetVehicleHealth(vehicleid,health);
    if(health <250)
    {
    SetVehicleHealth(vehicleid,1000);
    }
    }
    }

    Pessimisten sind Optimisten mit Erfahrung!

  • Würd ich nicht machen, man will ja nur für einen bestimmen User den Timer ausführen.
    Das Problem ist, dass du dir das nicht richtig angeschaut hast:
    http://wiki.sa-mp.com/wiki/KillTimer


    Also daher musst du es so machen:
    new timer = SetTimerEx("Autorepair",500,true,"d",playerid);

    Und dann
    KillTimer(timer);

    Der Grund liegt darin, dass du nicht dem Funktionsnamen killst, sondern ja den Timer, und da du die Nummer speichern willst, musst du diese auf eine Variable speichern.

  • Ok:
    Das kannst du oben in´s Script machen:
    forward Autohealer(); 
    Das kommt unter OnGameModeInit:
    SetTimer("Autohealer",2000,1);
    Wenn du im Script schon einen ähnlichen Timer hast, solltest du das bei dem einfügen ;)
    Dann kommt das hier nach ganz unten in´s Script

    public Autohealer()
    {
    for(new i = 0; i < MAX_VEHICLES; i++)
    {
    new Float:carhealth;
    GetVehicleHealth(i,carhealth);
    if(carhealth<250)
    {
    SetVehicleHealth(i,1000);
    }


    }
    }


    Das sollte so gehen ;)


    Gruß Hauke

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Das ist doch Unfug, er will doch nur das Auto von einem Spieler reparieren, und das nur, wenn die Funktion aufgerufen wird. Wie er den Timer gemacht hat, passt das doch. Ansonst würde von jedem das Auto repariert.

  • Achsooo...
    Ich dachte es geht darum alle zu reparieren :S


    Edit: Aber wozu soll das denn unter OnPlayerConnect?
    Dann ist es doch das selbe wie meins. Außer, wenn er keine Fraktionsautos (oder was auch immer) heilen will...

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • @ grex


    jetzt kommen die errors:


    Code
    C:\DOKUME~1\Erik\Desktop\GODFAT~1\GAMEMO~1\ex.pwn(856) : warning 204: symbol is assigned a value that is never used: "timer"
    C:\DOKUME~1\Erik\Desktop\GODFAT~1\GAMEMO~1\ex.pwn(872) : error 017: undefined symbol "timer"


    bei onplayerconnect:


    new timer = SetTimerEx("Autorepair",500,true,"d",playerid);


    bei onplayerdisconnect:


    KillTimer(timer);


    ...


    1. error zu connect...


    2. error zu disconnect

    Pessimisten sind Optimisten mit Erfahrung!

  • Wäre ganz gut, wenn du uns sagst, was du genau damit vor hast.
    Dann können wir dir sagen, was besser dazu ist ;)
    Wenn du allerdings alle Autos heilen möchtest, kannst du meine Variante nehmen.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Ich würds so machen, wie oben bei OnGameModeInit() den Timer einfügen, (der mit 2 Sekunden) und das hier als Funktion nehmen:


    public Autohealer()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new Float:carhealth;
    GetVehicleHealth(GetPlayerVehicleID(i),carhealth);
    if(carhealth<250)
    {
    SetVehicleHealth(GetPlayerVehicleID(i),1000);
    }


    }
    }

    EDIT: Anstatt carhealth < 250 sollte man carhealth <= 250 machen.

  • habs ma grad getestet funktioniert auch klasse^^


    aber mir gefällt des irgendwie net das die karosserie kaputt geht...


    also...


    wie kann ich machen das am besten die car health immer 1000 bleibt und der zustand der karosserie sich nicht verändert...


    wenn das mit der karosserie nicht geht...


    kann ich ja die carhealth von 250 auf 999 wechseln, damit repaired wird wenn die health auf unter 100 sinkt

    Pessimisten sind Optimisten mit Erfahrung!

  • Dann machst du:
    public Autohealer()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    SetVehicleHealth(GetPlayerVehicleID(i),1000);
    }
    }


    EDIT:
    Noch besser wäre:



    public Autohealer()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    IsPlayerInAnyVehicle(i)
    {
    SetVehicleHealth(GetPlayerVehicleID(i),1000);
    }
    }
    }


    EDIT 2: Schöner formatiert und Funktionsnamen richtig geschrieben.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen