Ein paar Fragen bezüglich Fehlern

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
  • Hi Community,


    Ich habe ein paar fragen...


    1. Ich wollte jetzt die Copcars nur für die Cops zugänglich machen, und überhaupt alle Cars. Nun geht dies über die Carids. Bei mir geht dies aber nicht, was mach ich falsch? :
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new model = GetVehicleModel(vehicleid);
    if(newstate == 2)
    {
    if(fahrschein[playerid] == 0)
    {
    RemovePlayerFromVehicle(playerid);
    GameTextForPlayer(playerid, "~r~Kein Führerschein!", 2000, 1);
    RemovePlayerFromVehicle(playerid);
    return 1;
    }
    if(model == 408)
    {
    if(gTeam[playerid] == TEAM_MULL)
    {
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, COLOR_RED, "Du bist kein Müllmann!");
    RemovePlayerFromVehicle(playerid);


    if(model == 427 || 497 || 523 || 596 || 597 || 598 || 599)
    {
    if(gTeam[playerid] == TEAM_COPS)
    {
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, COLOR_RED, "Du bist kein Polizist!");
    RemovePlayerFromVehicle(playerid); }
    }
    }
    }
    }
    return 1;
    (Er removet den Player nich, und der Code wird auch ganz schön lang wenn ich das für alle berufe mach, gibts diesbezüglich eine bessere Lösung).


    2. Zu diesem Code und auch anderen, wollte ich hinzufügen das wenn der Spieler ein Admin ist, den Fahren trotzdem fahren kann. Also z.B
    ifpublic OnPlayerStateChange(playerid, newstate, oldstate)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new model = GetVehicleModel(vehicleid);
    if(gTeam[playerid] == TEAM_COPS oder IfPlayerAdmin[playerid]);


    3.


    Ich hab mir die AutoGates inc geladen ---> Topic
    Nun, bei einem Spielernamen --> "Name" klappt das sehr gut, aber wie mach ich das wenn ich z.B das TEAM_COPS berechtigen will?


    4.


    Ich wollte einen /auf und /zu Command für das Carsystem von Black_FoX machen, ich hab in diesem Falle nur ein Beispielcode von hier genommen, muss ja nicht in einer Inc gespeichert werden, leider lässt sicher das auto nicht mehr aufmachen, kann man irgendein Command machen , um das auto von aussen zuschliessen und zu öffnen?


    5. Ich wollte ein Pickup machen, das wenn man durch dieses läuft man onDuty is und man den Skin seines Jobs bekommt, wie geht das?

  • http://pastebin.com/m5915c242


    Es wäre um eines einfacher diesen Code zu lesen, wenn du ihn richtig einrücken würdest. Mit deiner "Einrückung" übersieht man schnell,
    dass man z.B. einige Klammern falsch gesetzt oder vergessen hat bzw. eine zu viel hat.
    1.) siehe oben. Sollte eigentlich funktionieren. Les es dir aber noch einmal durch, nicht grad kopieren und einfügen


    2.) Damit Admins mit einzelnen Autos fahren können, kannst du z.B. "&& !IsPlayerAdmin(playerid)" (sprich: "... und der Spieler kein Admin ist") hinzufügen.


    3.) Dazu müsstest du den Code ein wenig umschreiben. Füge z.B. beim enum eine weitere Variable (z.B. "Team" - natürlich musst du diese dann auch "AddAutoGate(...)" entsprechend anders benutzen) hinzu und überprüfe dann beim public GateEnter unterhalb der Namesüberprüfung, ob das Team übereinstimmt.
    Am besten machst dus selber. Konnte meine Veränderung auf die Schnelle nicht testen:
    http://pastebin.com/m31bc0517


    4.) Kenn das Autosystem nicht und hab auch keinen Code


    5.) Sachen, die du hierfür brauchst sind: (les unter wiki.sa-mp.com die genauen Befehle aus bzw. Pickup ids oder ähnliches)


    new pickuponduty = AddStaticPickup(...)




    public OnPlayerPickUpPickup(playerid,pickup
    {
    if(pickupid == pickuponduty)
    {
    //Was soll passieren?
    }
    }


    Wo das hin muss, solltest du selber wissen...

  • Wenn die einfach als fahrer nicht einsteigen sollen, also bei onplayerentervehicle musst du "nur" entfreezen quasi.. also TooglePlayerControable auf true setzen vom player ;)


    Wenn ich die frage richtig verstanden habe... -> RemovePlayerFromVehicle klappt da nicht so richtig ;)

  • Geht jetzt schon...


    Nun hab ich aber Probleme mit den Pickups, wenn ich das Pickup normal als Variable vor den Script (am anfang nach den includes) setze, hat der Compilier ein Problem. Wenn ich aber das Pickup bei "OnGameModeInit" setze, findet er die PickupId nich.

  • wenn du eine Variable innerhalb eines publics (z.B. OnGameModeInit) erstellst, kannst du auch diese nur innerhalb dieses publics darauf zugreifen (lokale Variable). Deshalb musst du zuerst eine globale Variable erstellen, dieser dann die PickupID zuweisen und erst dann kannst du überall auf diese Variable zugreifen:


    Am Anfang des Scriptes (am Besten dort wo du andere gloable Variablen erstellst):

    SQL
    new ondutypickup; /* globale Variable "ondutypickup" erstellen */


    In OnGameModeInit:
    ondutypickup = AddStaticPickup(...) /* Variable eine PickupID zuweisen */


    So nun kannst du überall im Script auf diese variable zugreifen - auch unter OnPlayerPickupPickup

  • Danke, nochmal zu den Toren. Ich hab sie jetzt so angepasst wie du, wenn ich aber dann bei den playernamen "-1" mach und beim Team das entsprechende Team, gehen sie trotzdem für jeden auf, soll ich beim playernamen etwas anderes einsetzen?

  • 97? bei mir ist es 99?=


    Errorcode:
    C:\server\pawno\include\t-Auto Gates.inc(95) : error 033: array must be indexed (variable "PlayerToPoint")
    C:\server\pawno\include\t-Auto Gates.inc(99) : error 029: invalid expression, assumed zero
    C:\server\pawno\include\t-Auto Gates.inc(99) : warning 215: expression has no effect
    C:\server\pawno\include\t-Auto Gates.inc(99) : error 001: expected token: ";", but found ")"
    C:\server\pawno\include\t-Auto Gates.inc(99) : error 029: invalid expression, assumed zero
    C:\server\pawno\include\t-Auto Gates.inc(99) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    5 Errors.


    Source:
    #include <a_samp>
    #define MAX_GATES 200
    new GateCount = 0, GateTimer = -1,SomeoneNearGate[MAX_GATES];
    enum gatesinfo
    {
    Created,
    Model,
    Float:closeX,
    Float:closeY,
    Float:closeZ,
    Float:rotX,
    Float:rotY,
    Float:rotZ,
    Float:openX,
    Float:openY,
    Float:openZ,
    NameOpen,
    NameEnter[24],
    Team,
    Distance,
    GateObject
    }
    new Gate[MAX_GATES][gatesinfo];


    static gTeam[MAX_PLAYERS];


    /*
    native AddAutoGate(modelid,Float:cX,Float:cY,Float:cZ,Float:rX,Float:rY,Float:rZ,Float:oX,Float:oY,Float:oZ,namecanenter[24],team,open_distance)
    */
    //put "-1" at namecanenter so that everyone can enter it


    stock AddAutoGate(modelid,Float:cX,Float:cY,Float:cZ,Float:rX,Float:rY,Float:rZ,Float:oX,Float:oY,Float:oZ,namecanenter[24],team,open_distance)
    {
    GateCount++;
    new ID = GateCount;
    Gate[ID][Created] = 1;
    Gate[ID][Model] = modelid;
    Gate[ID][closeX] = cX;
    Gate[ID][closeY] = cY;
    Gate[ID][closeZ] = cZ;
    Gate[ID][rotX] = rX;
    Gate[ID][rotY] = rY;
    Gate[ID][rotZ] = rZ;
    Gate[ID][openX] = oX;
    Gate[ID][openY] = oY;
    Gate[ID][openZ] = oZ;
    Gate[ID][Team] = team;
    if(!strcmp(namecanenter,"-1",true)) Gate[ID][NameOpen] = 0;
    else
    {
    Gate[ID][NameOpen] = 1;
    format(Gate[ID][NameEnter],24,"%s",namecanenter);
    }
    Gate[ID][Distance] = open_distance;
    Gate[ID][GateObject] = CreateObject(modelid,cX,cY,cZ,rX,rY,rZ);
    if(GateTimer == -1) GateTimer = SetTimer("CheckGates",100,1);
    return 1;
    }


    forward CheckGates();
    public CheckGates()
    {
    for(new ID = 0; ID < MAX_GATES; ID++)
    {
    if(Gate[ID][Created] == 1)
    {
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GateEnter(i,ID))
    {
    SomeoneNearGate[ID] = 1;
    }else
    {
    if(SomeoneNearGate[ID] == 0)
    {
    MoveObject(Gate[ID][GateObject],Gate[ID][closeX],Gate[ID][closeY],Gate[ID][closeZ],5);
    }
    }
    }
    }
    if(SomeoneNearGate[ID] == 1)
    {
    MoveObject(Gate[ID][GateObject],Gate[ID][openX],Gate[ID][openY],Gate[ID][openZ],5);
    }
    SomeoneNearGate[ID] = 0;
    }
    }
    return 1;
    }


    stock GateEnter(playerid, gateid)
    {
    if(PlayerToPoint(Gate[gateid][Distance],playerid,Gate[gateid][closeX],Gate[gateid][closeY],Gate[gateid][closeZ]))
    {
    new PlNa[24];
    GetPlayerName(playerid,PlNa,24);
    if(Gate[gateid][Team] !== gTeam[playerid]) return 1; /* richtiges Team? */
    if(Gate[gateid][NameOpen] == 1 && !strfind(PlNa,Gate[gateid][NameEnter],true)) return 1;
    if(Gate[gateid][NameOpen] == 0) return 1;
    }
    return 0;
    }


    stock PlayerToPoint(Float:radi,playerid,Float:x,Float:y,Float:z)
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) return 1;
    return 0;

  • Geht immernochnich,


    AddAutoGate(980, 1245.434937, -767.297241, 93.500000, 0.0000, 0.0000, 0.0000, 1245.434937, -767.297241, 85.500000,"-1",0, 25);


    Wenn ich nich -1 mach macht es nur für ein bestimmen Spieler auf..