Fraktionsautos ohne id verschiebung (dynamisch, schnell, übersichtlich)

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
  • hallo, da es in diesem forum zwar schon tutorials über die id verschiebung bei fraktionen gibt, diese mich aber nicht überzeugt haben, hab ich ein eigenes geschrieben.


    declaration der variable in der die fraktionsids gespeichert werden:
    new VehicleOwner[MAXNUMVEHICLE];


    MAXNUMVEHICLE steht für die maximale anzahl der fahrzeuge auf dem server.


    das spawnen der fahrzeuge funktioniert so:


    new tmp;

    // FBI-Base
    tmp = AddStaticVehicle(490,984.9623,1070.4612,10.9476,1.1011,0,0); VehicleOwner[tmp] = FBI; // Ranger
    tmp = AddStaticVehicle(490,988.3912,1070.5381,10.9483,0.7716,0,0); VehicleOwner[tmp] = FBI; // Ranger


    ihr habt bestimmt ne lange liste an fahrzeugen also nutzt die replace funktion(strg+h)


    FBI ist nen makro für die fraktionsid steht. wie jetzt??


    und darf der spieler einsteigen?
    public isPlayerFraction(playerid, vehicleid)
    {
    if(PlayerInfo[playerid][pMember] == VehicleOwner[vehicleid] || PlayerInfo[playerid][pLeader] == VehicleOwner[vehicleid]) // ist die id des spielers gleich der id des fahrzeugs? wenn ja, dann einsteigen. wenn das fahrzeug die ownerid 0 hat kann man imm einsteigen wegem dem oder ( das: "||" ).
    {
    return 1;
    }


    if(PlayerInfo[playerid][pMember] == SFPD || PlayerInfo[playerid][pLeader] == SFPD ||
    PlayerInfo[playerid][pMember] == LSPD || PlayerInfo[playerid][pLeader] == LSPD ||
    PlayerInfo[playerid][pMember] == FBI || PlayerInfo[playerid][pLeader] == FBI ||
    PlayerInfo[playerid][pMember] == ARMY || PlayerInfo[playerid][pLeader] == ARMY) // FBI/Army/Polizei Mitglied
    {
    if(VehicleOwner[vehicleid] == SFPD || VehicleOwner[vehicleid] == LSPD ||
    VehicleOwner[vehicleid] == MEDIC || VehicleOwner[vehicleid] == NEWS ||
    VehicleOwner[vehicleid] == TAXI || VehicleOwner[vehicleid] == PRESIDENT ||
    VehicleOwner[vehicleid] == ORDNUNGSAMT || VehicleOwner[vehicleid] == FAHRLEHRER) //darf hier auch einsteigen
    {
    return 1;
    }
    }
    if(VehicleOwner[vehicleid] == FBI || VehicleOwner[vehicleid] == ARMY) // in FBI und ARMY fahrzeuge darf jeweils die andere fraktion auch einsteigen.
    {
    if( PlayerInfo[playerid][pMember] == FBI || PlayerInfo[playerid][pLeader] == FBI ||
    PlayerInfo[playerid][pMember] == ARMY || PlayerInfo[playerid][pLeader] == ARMY)//FBI/Army Mitglied
    {
    return 1;
    }
    }

    SendClientMessage(playerid,COLOR_GREY," Du gehörst dieser Fraktion nicht an!");
    return 0;
    }


    die abfrage wird z.b. so benutzt:


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger == 0){
    if(isPlayerFraction(playerid, vehicleid) == 0){ // wenn er nicht zur fraktion gehört, dann rauswerfen/slapen
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    SetPlayerPos(playerid, pX, pY, pZ+3);
    }
    }
    return 1;
    }


    ich hoffe ihr habt alles verstanden.
    ich freue mich über kritik und verbesserungsvorschläge

    Mein erstes eigenes Spiel


    meine Tutorials:
    Nachos Torsystem


    scripten ist kein spiel, es ist arbeit(die sehr viel spass machen kann).
    gewöhn dich an den gedanken arbeiten zu müssen oder lass es sein.

    2 Mal editiert, zuletzt von NachoMan ()

  • Ich verstehs nicht wirklich, warscheinlich weil ichs anderst mach :D Naja wems hilft
    8/10

  • ich sollte es vielleicht mal erklären...
    ich versuchs mitn schachbrett das 2 dimensionen hat... 1-8 und A-H
    die schachfiguren stellen jetzt mal die autos da und die koordinaten (1-8 und A-H) die fraktionAutos.


    bei der anderen möglichkeit(die die meisten von euch nutzen) geht ihr jede reihe durch und überprüft ob dort z.b. die dame steht(das auto in das ihr gerade einsteigt) ihr müsst also 64 felder durchsuchen... wenn die dame da steht überprüft ihr ob der spieler die figur setzen darf(einsteigen und fahren)


    ich merk mir wo die dame steht und spreche sie direkt an. überprüfe ob die dame der farbe(fraktion) des spielers entspricht und lass ihn den zug machen oder nicht.


    ich mach mir einfach die tatsache zu nutzen das jedes fahrzeug eine id hat und der server dort, genau wie in einem array auch, von 0 anfängt zu zählen.


    wenn man ins auto einsteigt, wird die id abgefragt ( z.b. 23), dann spricht man den speicherbereich des arrays(23) an, in dem seine fraktion gespeichert wurde und vergleicht diesen direkt.


    man brauch ein nur array, keine schleifen, es ist übersichtlicher(weniger quelltext) und schneller.