Beiträge von Andosius

    Eine API (UDF 0.3.7) wird für GetChatLine benötigt, du musst ein Timer erstellen, der diesen Prozess alle X-Millisekunden wiederholen und den String-Inhalt prüfen.


    Wenn du mir mehr Informationen und ChatLogs dazu gibst, kann ich dir helfen.

    Darf ich fragen warum?

    Klar,


    es nimmt zusätzliche Ressourcen für einen Wiedergabewert ein, den man auch über das "kleinere" Verfahren herauskriegen kann.
    Ist in meinen Augen übersichtlicher und kompakter, ist aber im Endeffekt Geschmackssache.


    Es geht ja schließlich um eine X-Zahl. :P

    format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s') ",SpielerName(playerid));


    format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s' ",SpielerName(playerid));

    Das würde ich aber lieber per MySQL-Query und seiner Cache-Funktion machen.
    Da ist ein neues Public dafür in meinen Augen relativ ungeeignet (sofern R33+, keine Ahnung mehr inwiefern sich diese unterscheiden).


    Sprich:

    new Cache:result = mysql_query(verbindungsid,query,true);

    Dann einfach den Inhalt auslesen und mit cache_delete(result); den Speicher bereinigen. :)

    Hey, das liegt daran, dass der Inhalt oben wahrscheinlich in einem Timer steht.
    Wird der Timer mehrfach aufgerufen, wird der Timer auch mehrfach gestartet.
    D.h. du musst dafür Sorge tragen, dass der Timer wirklich nur 1x gestartet wird.


    z.B.

    new Float:bhealth;
    GetPlayerHealth(playerid, bhealth);
    if(bhealth > 6.0)
    {
    TextDrawHideForPlayer(playerid,VERLETZT);
    TextDrawShowForPlayer(playerid,Ts3);
    TextDrawShowForPlayer(playerid,TsIp);
    KillTimer(Verletzttimer[playerid]);
    SetPVarInt(playerid,"verletzt_timer",0);
    }
    else if(bhealth < 6.0 && GetPVarInt(playerid,"verletzt_timer") != 1)
    {
    LoopingAnim(playerid, "SWEET", "Sweet_injuredloop", 2.5, 1, 0, 0, 0, 0); // Dieing of Crac
    RemovePlayerFromVehicle(playerid);
    TextDrawShowForPlayer(playerid,VERLETZT);
    TextDrawHideForPlayer(playerid,Ts3);
    Verletzttimer[playerid] = SetTimerEx("verletztsein",60000,0,"i",playerid);
    TextDrawHideForPlayer(playerid,TsIp);
    SetPVarInt(playerid,"verletzt_timer",1);
    }


    E: Was heißt wahrscheinlich, OnPlayerUpdate kann mehr als 10x pro Sekunde aufgerufen werden. xD



    Gruß.

    @iEnerqie


    Dies habe ich für die Sprunkautomaten auch gemacht.
    Ich habe das ganze so gelöst:


    C
    if(GetPlayerAnimationIndex(playerid)){
            new animlib[32], animname[32];
    	GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
    	if(strcmp(animname,"VEND_USE",true) == 0){
    		TogglePlayerControllable(playerid,0);
    		TogglePlayerControllable(playerid,1);
    		return SendClientMessage(playerid,-1,"Du kannst dir hier kein Getränk kaufen!");
    	}
    }

    Danke, habe es aber etwas anders gelöst. ^^

    if(!strcmp(animlib,"VENDING",true)){
    if((GetPVarFloat(playerid,"health") - health[0]) != 35.0)
    SetPVarFloat(playerid,"health",health[0]+35.0);
    }

    Brauchte das für mein Anti-Cheat. :)
    Empfehle dir aber das ebenfalls mit "animlib" zu machen, da es verschiedene VEND_USE-Arten gibt. ^^

    Naja, wurde es offiziell nicht. Es gab wohl Leute die es ohne Erlaubnis weitergegeben haben, aber das war es auch schon.

    Soweit ich mich erinnere wurde das Script verkauft und dann von Team-Mitgliedern veröffentlicht.
    Schade wenn man beachtet, wie viel Mühe dahinter steckte. ;)

    Ich empfehle dir ohne Kenntnisse umbedingt zu Windows zu wechseln.
    --------
    MySQL installieren (falls nicht) und ggf. Das googlen: Linux MTA Server


    Dann gehst du unter die 64bit Variante.
    Dort wird von den MTA Herstellern eine Variante angeboten, die bei mir bisher immer funktionierte.


    Gruß.