Probleme mit Teamabfrage und Teamcars

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
  • Da mein Post im Sammelthread bisher unbeantwortet geblieben ist hier noch einmal ein Versuch, hilfsbereite User zu erreichen:


    Ich bin dabei mir ein Team-System zu scripten und hab jetzt aber folgendes Problem, dass bei der Teamabfrage mit "/me" bei allen Polizisten angezeigt wird, sie seien Zivilisten. Bei CJ jedoch wird richtig angezeigt, dass er GrooveStreet Member ist.
    Findet jemand den Fehler? :)


    Hier die Defines:


    static gTeam[MAX_PLAYERS];


    #define TEAM_GROOVE 0
    #define TEAM_POLICE 1
    #define TEAM_ZIVIS 2


    Die Spielerklassen:


    AddPlayerClass(0,2185.6685,-1812.9491,13.5569,191.9988,0,0,0,0,0,0);//CJ
    AddPlayerClass(280,1541.0613,-1675.5898,13.5518,87.7057,0,0,0,0,0,0); //Polizei
    AddPlayerClass(288,1541.2834,-1675.6553,13.5522,91.1210,0,0,0,0,0,0); //Polizei
    AddPlayerClass(285,1541.1193,-1675.6711,13.5519,90.8624,0,0,0,0,0,0); //Polizei
    AddPlayerClass(283,1541.5750,-1675.6710,13.5528,92.0829,0,0,0,0,0,0); //Polizei
    AddPlayerClass(282,1541.5105,-1675.5355,13.5527,91.1430,0,0,0,0,0,0); //Polizei
    AddPlayerClass(281,1542.0580,-1675.6300,13.5538,90.5162,0,0,0,0,0,0); //Polizei
    AddPlayerClass(10,2185.6685,-1812.9491,13.5569,191.9988,0,0,0,0,0,0);//Dicke Oma


    Hier die Teamwahl:


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid,2148.1243,-1485.0050,26.6239);
    SetPlayerCameraPos(playerid,2141.0146,-1485.2502,25.5391);
    SetPlayerCameraLookAt(playerid,2148.1243,-1485.0050,26.6239);
    SetPlayerFacingAngle(playerid,90.0);


    switch(classid)
    {
    case 0: gTeam[playerid] = TEAM_GROOVE;// Skin 0 ist GrooveStreetMember
    case 280..283,285,288: gTeam[playerid] = TEAM_POLICE; // Skin 280-283,285,288 sind Cops
    default: gTeam[playerid] = TEAM_ZIVIS;// alle anderen Skins(10) sind Zivilisten
    }


    return 1;
    }


    Und der "/me"-Befehl:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/me", cmdtext, true) == 0) //TEAMTEST
    {
    if(gTeam[playerid] == TEAM_POLICE)
    {
    GameTextForPlayer(playerid,"Du bist Polizist.",3000,3);
    }

    else if(gTeam[playerid] == TEAM_GROOVE)
    {
    GameTextForPlayer(playerid,"Du bist GrooveStreet Member.",3000,3);
    }

    else if(gTeam[playerid] == TEAM_ZIVIS)
    {
    GameTextForPlayer(playerid,"Du bist Zivilist.",3000,3);
    }
    return 1;
    }


    return 1;
    }



    Hier auch das zweite benannte Problem mit den Fraktionsautos, die JEDES andere Team auch benutzen kann, wobei die gescripteten Aktionen wie Spielerrauswurf aus dem Auto und die Nachricht auf dem Spielerbildschirm, nicht eintreten.


    Hier alles Wichtige:
    new copcar;


    copcar = AddStaticVehicle(596,1601.1548,-1700.2468,5.6123,90.4101,0,1); // Policecar 1
    copcar = AddStaticVehicle(596,1601.2417,-1696.1384,5.6109,90.2837,0,1); // Policecar 2


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {


    if(vehicleid == copcar) //COPCAR-FUNKTION


    if (gTeam[playerid] == TEAM_POLICE)
    {
    GameTextForPlayer(playerid, "Du befindest dich nun in deinem Einsatzfahrzeug.", 3000,3);
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    GameTextForPlayer(playerid, "Du bist kein Polizist!", 3000,3);
    }
    return 1;
    }


    Über jegliche Form von Hilfe, wäre ich sehr dankbar.
    Einen schönen Abend wünsch ich euch noch. ;)

  • case 280..283,285,288 du fragst da die Skin-ID ab. Was du brauchst ist aber die classid.

    Zitat

    Note: Class IDs are assigned when AddPlayerClass is used.

    Das erste AddPlayerClass wäre dann also classid 0 (deshalb tut CJ auch).


    AddPlayerClass(0,2185.6685,-1812.9491,13.5569,191.9988,0,0,0,0,0,0);//classid 0
    AddPlayerClass(280,1541.0613,-1675.5898,13.5518,87.7057,0,0,0,0,0,0); //classid 1
    AddPlayerClass(288,1541.2834,-1675.6553,13.5522,91.1210,0,0,0,0,0,0); //classid 2
    AddPlayerClass(285,1541.1193,-1675.6711,13.5519,90.8624,0,0,0,0,0,0); //classid 3 und so weiter...

  • Als erstes muss du aus new copcar; new copcar[2]; //2 = anzahl der Fahrzeuge machen. In der Variable wird die ID gespeichert wenn du aber 2 Fahrzeuge in die gleiche Variable speicherst buggt das.

    copcar = AddStaticVehicle(596,1601.1548,-1700.2468,5.6123,90.4101,0,1); // Policecar 1
    copcar = AddStaticVehicle(596,1601.2417,-1696.1384,5.6109,90.2837,0,1); // Policecar 2
    wird dann also zu
    copcar[0] = AddStaticVehicle(596,1601.1548,-1700.2468,5.6123,90.4101,0,1); // Policecar 1
    copcar[1] = AddStaticVehicle(596,1601.2417,-1696.1384,5.6109,90.2837,0,1); // Policecar 2
    Außerdem würde ich erst bei OnPlayerStateChange abfragen ob der Spieler ein Cop ist und ihn dann rauswerfen.


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    for(new i;i<sizeof(copcar);i++)
    {
    if(GetPlayerVehicleID(playerid) == copcar[i])
    {
    if(gTeam[playerid] != TEAM_POLICE)
    {
    RemovePlayerFromVehicle(playerid);
    return GameTextForPlayer(playerid, "Du bist kein Polizist!", 3000,3);
    }
    }
    }
    }
    return 1;
    }
    habs noch nicht getestet aber so oder ähnlich dürfte es gehen...