Beiträge von Addickted

    Ich teste es jetzt schonmal danke, kannst du mir noch genau sagen warum += und nicht ++ ? Kenne das gar nicht so :D


    //E: Geht nicht, der Score wird nicht geupdated, trotzdem der Timer auf 1000ms gestellt ist.


    Hier mal die Codes:


    Forward:


    forward Score(playerid);


    Timer unter OnGameModeInit:


    SetTimer("Score",1000,1);


    Public:


    public Score(playerid)
    {
    Spielstunden[playerid] += 1;
    SetPlayerScore(playerid,Spielstunden[playerid]);
    return 1;
    }

    Irgendwie bekomme ich das grad nicht so ganz hin, weil ich mit der Syntax nicht so zurechtkomme gerade.


    Ich habe einen Public und einen Timer. Dieser Timer soll 60 Minuten laufen und danach den Spielerscore um 1 erhöhen (Das was man im Tabmenü sieht), sprich die Spielstunden sollen dort angezeigt werden.


    Kann mir da jemand beim Public helfen?


    //E: Später soll das ganze natürlich auch in Dini gespeichert werden.

    Hey Hoo Bratheringe,


    ich wollte per /allowsavespawn playerid den Leuten das Recht geben ihren Koords zu speichern. Der Wert in der Spielerdatei wird auf 1 geändert (erlaubt)


    Allerdings klappt die Abfrage im /savespawn Befehl nicht, kann mir kurz jemand den Fehler zeigen? Bin irgendwie blind gerade


    ocmd:savespawn(playerid,params[])
    {
    new name[28], save[28];
    new Float:spX,Float:spY,Float:spZ,Float:spA;
    GetPlayerPos(playerid,spX,spY,spZ);
    GetPlayerFacingAngle(playerid, spA);
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(dini_Exists(save))
    {
    sInfo[playerid][spawnallowed] = dini_Int(save,"spawnallowed");
    if(sInfo[playerid][spawnallowed] == 1)
    {
    dini_FloatSet(save,"spX",spX);
    dini_FloatSet(save,"spY",spY);
    dini_FloatSet(save,"spZ",spZ);
    dini_FloatSet(save,"spA",spA);
    CreatePickup(1277,23,spX,spY,spZ,-1);
    SendClientMessage(playerid,COLOR_GREEN,"Info: Dein Spawn wurde gesetzt.");
    dini_IntSet(save,"spawnallowed",0);
    }
    else if(sInfo[playerid][spawnallowed] == 0)
    {
    SendClientMessage(playerid, COLOR_RED, "Ein Supporter muss dir erst die Savespawn Rechte geben!");
    }
    }
    return 1;
    }


    In der Datei ist der Value auf 1, aber es wird das else if ausgegeben.

    Da ich selbst noch Scripting Anfänger bin, kann ich sagen das mir geholfen hat die Funktionen aus dem Wiki(URL: http://wiki.sa-mp.com/wiki/Category:Scripting_Functions) anzuschauen. Die Beispiele habe ich selbst nachgebaut und so mir dann das Verständnis erschaffen.


    Nach wie vor hilft mir Learning by Doing und ab und zu schaue ich mir das SCript nochmals an und mir fallen Dinge ein, wie ich das Script optimieren kann.

    Hab nur kurz drüber geschaut, aber es sieht mir schwer nach einem Abfragefehler beim Speichern aus, weil du fragst ob der Spieler eingeloggt ist, aber nirgendswo sehe ich das du beim Login Dialog die Variable auf den abgfragten Wert (= 1) bringst.

    Ich wollte euch mal fragen wie ich eine wiederkehrende Funktion Global machen kann sozusagen.


    Z.B. die Userlevel Abfrage bei meinen Commands. Und zwar frage ich nunmal die Datei und den Level ab und das verbraucht schon einige Zeilen Code.


    Beispiel:


    ocmd:setweather(playerid,params[])
    {
    new weatherid;
    new pName[MAX_PLAYER_NAME], save[28];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(save,sizeof(save),"/Spieler/%s.ini",pName);
    if(dini_Exists(save))
    {
    sInfo[playerid][level] = dini_Int(save,"Level");
    if(sInfo[playerid][level] > 2)
    {
    if(sscanf(params,"i",weatherid)) return SendClientMessage(playerid,COLOR_YELLOW,"Verwende: /setweather [WetterID]");
    {
    SetWeather(weatherid);
    }
    }
    }
    return 1;
    }


    Jemand eine Idee?

    Wenn du schon sscanf benutzt,dann mach dich doch vorher damit etwas vertraut.
    In meiner Signatur findest du dazu ein sehr ausführliches Tutorial.Hier trotzdem nochmal der Link.
    http://forum.sa-mp.de/wbb/san-…-commands-mit-parametern/


    Die Erklärung lasse ich mal weg zu sscanf.Dazu findest du alles wie gesagt im Tutorial.


    Hab ich mir angeschaut Cheffe, aber ich bin noch nicht so lange bei PAWN dabei und es ist meine erste Scriptsprache. Daher entschuldige mich bitte, meine Devise lautet Learning-by-Doing. Aber vielen Dank für die Hilfe.

    Der Spielername ist 24 Zeichen lang, aber ich bin Schreibfaul, daher will ich eine ID und keinen Spielernamen verwenden.
    Das mit dem Pfad weiss ich, aber wie soll ich dem Script sagen das die ID 21 (Beispielsweise) nicht ICH bin, sondern jemand anderes und diese ID 21 eine Spielerdatei hat und in dieser Datei halt eine Variable "level" ist mit einem Wert, verstehst du?

    Das ist mir klar aber ich weiss nicht wie ich den Script sagen soll, dass das die Spielerid von jemand anderen ist und er in seine Datei gehen soll und die variable level auf den integer stellen soll, den ich als parameter mit angegeben habe.

    Wie der Titel schon sagt, arbeite ich mit Dini und sscanf.


    Ich habe mir ein Levelsystem erstellt, aber ich komme momentan einfach nicht drauf, wie ich den Value eines Spielers ändern kann.


    Momentan sieht es bei mir so aus:


    ocmd:setlevel(playerid,params[])
    {
    // 0 = Gebannt
    // 1 = Spieler
    // 2 = Supporter
    // 3 = Co-Admin
    // 4 = Admin
    new alevel;
    new pName[MAX_PLAYER_NAME], save[28], pID;
    GetPlayerName(playerid, pName, sizeof(pName));
    format(save, sizeof(save), "/Spieler/%s.ini", pName);
    if(dini_Exists(save))
    {
    sInfo[playerid][level] = dini_Int(save,"level");
    if(sInfo[playerid][level] > 2)
    {
    if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,COLOR_YELLOW,"Benutze: /setlevel [Spieler][User-Level]");
    {
    // Hier fehlt der Code zum ändern des Value
    SendClientMessage(playerid,COLOR_GREEN,"Info: Userlevel erfolgreich angepasst!");
    }
    }
    }
    return 1;
    }


    Wäre nett, wenn mir da jemand helfen könnte, hab bisher kein Tutorial für meine Zwecke gefunden.