Beiträge von thacoga308

    Zitat

    damit da keine Nachricht kommt AFK Schnorrer bekommen kein Payday


    Löscht du einfach den else Zweig. Was passiert dann ? ^^


    else
    {
    SendClientMessage(i, COLOR_LIGHTRED, "AFK-Schnorrer bekommen keinen Payday!");
    }

    hey leute,


    ich versuche es hinzukriegen, dass wenn ein Spieler sich in ein Auto hineinsetzt, ein Timer startet der sozusagen einen Mietvertrag laufen lässt.
    Nach Beendigung des Vertrages soll das Auto wieder dort spawnen wo es vorher stand. So ne Art Taxi ^^


    Also man steigt in ein Auto, das bereits erschaffen wurde.
    Dann soll man sozusagen eingefroren werden bis man /mieten eingibt.(Man muss noch austeigen können)
    Wenn man /mieten eingegeben hat beginnt eine Art Mietvertrag für ne gewisse Zeit.
    Dann soll das Auto am alten Standort respawnt werden. (Auch wenns kaputt geht)


    Jetzt würde ich gerne wissen wie ich es schaffe, z.B 10 fahrzeuge(BMX) zu erstellen. Diesen dann eine eindeutige ID o.ä. zu verpassen und die halt jeden spieler einzeln zuordnen.
    Bsp:
    Ich miete jetzt ein BMX mit /rentbike.-> werde intern als mieter eingetragen.
    Fahre zwei Meter, steige ab.
    Laufe zum neuen BMX und gebe erneut /rentbike ein.
    Kriege die Nachricht: Sie mieten bereits ein BMX oder Mieter XY hat das BMX bereits gemietet.



    geschafft:
    - dass mir beim einsteigen in ein BMX z.B, ein Textdraw erscheint und der Spieler gefreezt wird bis er /rentbike oder /exit eingibt.
    - jetzt habe ich mir ein enum erstellt mit dem ich die MietInformationen speichere(s.o), dort hab ich den bool Wert nach eingeben von /rentbike z.b auf true gesetzt.


    nicht hingekriegt:
    - die information Mieter soll den Namen des Mieter's enthalten der das BMX fährt.
    - eindeutigkeit jedes einzelnen BMX.



    #define MAX_BIKES 11
    new bike[MAX_BIKES];
    // GAMEMODEINIT();
    bike[0]=AddStaticVehicleEx(); //BMX
    bike[1]=AddStaticVehicleEx(); //BMX
    bike[2]=AddStaticVehicleEx(); //BMX
    bike[3]=AddStaticVehicleEx(); //BMX
    bike[4]=AddStaticVehicleEx(); //BMX
    bike[5]=AddStaticVehicleEx(); //BMX
    bike[6]=AddStaticVehicleEx(); //BMX
    bike[7]=AddStaticVehicleEx(); //BMX
    bike[8]=AddStaticVehicleEx(); //BMX
    bike[9]=AddStaticVehicleEx(); //BMX
    bike[10]=AddStaticVehicleEx(); //BMX


    enum MietVertragInfo
    {
    Mieter,
    bool:MietVertrag
    }
    new mietInfo[MAX_BIKES][MietVertragInfo];


    else if (strcmp("/rentbike", cmdtext, true, 10) == 0)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new playername[MAX_PLAYER_NAME+1], string[24+MAX_PLAYER_NAME+1];
    for(new i=0;i<MAX_BIKES;i++)
    {
    if(GetVehicleModel(vehicleid) == bike[i])
    {
    new Money = GetPlayerMoney(playerid);
    if(mietInfo[playerid][MietVertrag] == false && Money <= 199)
    {
    SendClientMessage(playerid,GRAU,"Du hast nicht genug Geld.");
    return 1;
    }
    else if(mietInfo[playerid][MietVertrag] == false && Money >= 199)
    {
    mietInfo[i][MietVertrag] = true; // setze mietvertrag
    mietInfo[i][Mieter] = GetPlayerName(playerid,playername,sizeof(playername)); // setze mietername
    SendClientMessage(playerid,GRAU,"Du hast das BMX erfolgreich gemietet.");
    TogglePlayerControllable(playerid,1);
    GivePlayerMoney(playerid,-200);
    return 1;
    }
    else if(!IsPlayerInAnyVehicle(playerid))
    return SendClientMessage(playerid,GRAU,"Sie müssen auf einem BMX sitzen!");
    else if(mietInfo[playerid][MietVertrag] == true || Money >= 199 )
    {
    SendClientMessage(playerid,GRAU,"Du hast bereits ein BMX gemietet, bitte versuch dieses wiederzufinden oder warte bis dein Mietvertrag ausläuft.");
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string, sizeof(string), "%s, hat das BMX bereits gemietet.", playername);
    SendClientMessageToAll(GRAU, string);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Du sitzt auf keinem BMX!");
    return 1;
    }
    }
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) // Player entered a vehicle as a driver
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehicleid) == 481 && mietInfo[playerid][MietVertrag] == false)
    {
    TogglePlayerControllable(playerid,0);
    SetTimerEx("deleteBMXTextDraw", 5000, false, "d", playerid);
    //SendClientMessage(playerid,GRAU,"Ihr Mietvertrag laeuft in 20min aus.");
    }
    else if(GetVehicleModel(vehicleid) == 481 && mietInfo[playerid][MietVertrag] == true)
    {
    TogglePlayerControllable(playerid,1);
    SetTimerEx("deleteBMXTextDraw", 5000, false, "d", playerid);
    //SendClientMessage(playerid,GRAU,"Ihr Mietvertrag laeuft in 20min aus.");
    }

    }
    return 1;
    }




    Irgendwas stimmt mit der Abfrage nicht. bike[i] hat glaube ich keinen Wert oder einen falschen, obwohl AddStaticVehicleEx
    die vehicleid liefert...
    if(GetVehicleModel(vehicleid) == bike[i])


    Mit
    GetVehicleModel(vehicleid) == 481


    würde das ganze klappen. Nur die BMX wären nicht mehr eindeutig. Wenn ihr versteht was ich meine :D


    Komme auf keine Mögliche Lösung, kann mir jemand weiterhelfen oder wisst ihr ob irgendein gamemode soetwas
    ähnliches eingebaut hat, wo ich mir das mal anschauen kann? :D


    Ich würde gerne wissen, wie ich es schaffe den 10BMX die ich da erschaffen habe, eindeutig zuzuordnen jedem Spieler genau 1. Also man darf nur GENAU EIN Mietvertrag haben. ^^
    Was mache ich falsch kann mir jemand helfen ?:D


    danke

    ach lol, fehler meinerseits, ich idiot hab xD


    public OnPlayerLeaveArea(playerid,areaid){}


    statt wie in der *.inc datei angegeben



    public OnPlayerExitArea(playerid,areaid){}

    eingegeben.
    Deshalb lief das auch nich als ich die Zone verlassen hab ^^


    war wohl etwas übermüdet.
    danke trotzdem für deine hilfe ;P

    nein wie gesagt xD. Ich kann in die zone laufen, clientmessage und textdraw kommt. Aber wenn ich rausgehe verschwindet es nicht^^


    Ist meine DeleteMyTextDraw() function falsch?^^


    Naja egal, ich geh jetzt pennen. Schau mir morgen paar gf's an vielleicht find ich was ähnliches

    So nochmal alles in schön: ^^



    //gamemodeinit


    area = CreateArea3(1140.004, 1117.187, -1729.235, -1772.66);



    MyTextDraw(playerid)
    {
    mytext = TextDrawCreate(150.0,360.0,"Das Tor mit /opengate benutzen."); // Create the textdraw
    TextDrawColor(mytext,GRUEN2); // Set the color of the text
    TextDrawSetOutline(mytext,1); // Set the outline (stroke) of the text
    TextDrawSetShadow(mytext,0); // Set the shadow of the text
    TextDrawFont(mytext,3); // Set the Font
    TextDrawLetterSize(mytext,0.7,1.2); // Set the letter size
    TextDrawShowForPlayer(playerid,mytext); // Show the textdraw to a certain player
    }


    DeleteMyTextDraw(playerid)
    {
    TextDrawHideForPlayer(playerid,mytext); // Hide the textdraw
    TextDrawDestroy(mytext); // Destroy the textdraw
    }


    forward OnPlayerEnterArea(playerid,areaid);
    public OnPlayerEnterArea(playerid,areaid)
    {
    if(areaid == area) // erscheint
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "You did just enter Persing Square"); // läuft
    MyTextDraw(playerid); // läuft
    }
    return 1;
    }


    forward OnPlayerLeaveArea(playerid,areaid);
    public OnPlayerLeaveArea(playerid,areaid)
    {
    if(areaid == area) // verschwindet nicht ^^
    {
    DeleteMyTextDraw(playerid); // läuft, denk ich mal aber löscht nix ^^
    SendClientMessage(playerid, 0xFFFFFFFF, "You did just left Persing Square"); //läuft nicht .... why?
    }
    return 1;
    }



    yo, halt nich alle sondern nur der spieler das änder ich noch :P


    mit den zonen is das wieder der selbe mist, wenn ich die zone betrete, erscheint das Textdraw
    wenn ich sie verlasse kommt nix, nichteinmal ein sendclientmessage zu testzwecken:S.


    ich bearbeite das ganze oben auf ein neues :D

    hey leute,


    ich hab angefangen mein eigenes gamemode zu erstellen. Jetzt hab ich ein Problem ich weiß nicht ob das ein Logik- oder ein Syntax-Fehler ist oder was auch immer.


    Ich ein einfaches gate erstellt das ich mit /opengate öffne und sich durch ein timer wieder schliest und das ganze muss halt in einem Radius von 20m eingegeben werden, ansonst öffnet das tor nicht.


    Ich möchte jetzt folgendes:
    Wenn ein Spieler in die range von meinem gate kommt, das er ein Textdraw sieht welches heisst: "Benutze hier /opengate". // hab ich geschafft.
    Wenn der Spieler aus der range entfernt das Textdraw wieder verschwindet bzw. löscht. // k.A bräuchte da hilfe ^^


    Ich hab mir gedacht, ich mach das ganze nochmal mit einem timer der mir nach x-millisecs das Textdraw löscht. Und das ganze pack ich dann
    in das OnPlayerUpdate Callback.


    MyTextDraw()
    {
    mytext = TextDrawCreate(150.0,360.0,"Das Tor mit /opengate benutzen."); // Create the textdraw
    TextDrawColor(mytext,GRUEN2); // Set the color of the text
    TextDrawSetOutline(mytext,1); // Set the outline (stroke) of the text
    TextDrawSetShadow(mytext,0); // Set the shadow of the text
    TextDrawFont(mytext,3); // Set the Font
    TextDrawLetterSize(mytext,0.7,1.2); // Set the letter size
    TextDrawShowForAll(mytext); // Show the textdraw to a certain player
    }


    forward removeOpengate();
    public removeOpengate()
    {
    TextDrawHideForAll(mytext); // Hide the textdraw
    TextDrawDestroy(mytext); // Destroy the textdraw
    }


    public OnPlayerUpdate(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,20.0,1101.59997559, -1755.90002441, 12.39999962))
    {
    MyTextDraw();
    SetTimer("removeOpengate",200,false);

    }
    return 1;
    }


    Wie gesagt, wenn ich in die Nähe komme taucht das TextDraw auf. Wenn ich mich aber wieder davon entferne, verschwindet es nicht.
    kann mir jemand helfen, was mach ich falsch?? ;D


    neuer versuch klappt auch nicht :(

    mit dcallbacks.inc


    forward OnPlayerEnterArea(playerid,areaid);
    public OnPlayerEnterArea(playerid,areaid)
    {
    if(areaid == spawnarea)
    {
    MyTextDraw();
    }
    return 1;
    }


    forward OnPlayerLeaveArea(playerid,areaid);
    public OnPlayerLeaveArea(playerid,areaid)
    {
    if(areaid == spawnarea)
    {
    SetTimer("removeOpengate",20,false);
    }
    return 1;
    }


    spawnarea = CreateArea3(1101.59997559, -1755.90002441, 12.39999962,0); // bestimmt setzen der koord. falsch ;D


    Erscheint nichteinmal das Textdraw...


    danke