[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Danke es funktioniert - nur der Timer muss man unter OnPlayerConnect einfügen :)


    Nein, in OnGameModeInit...
    Du kannst ihr natürlich auch in OnPlayerConnect einfügen, nur dann startet der Server IMMER, wenn jemand connectet nen neuen Timer...
    Folge: Die Timer laufen ja unterschiedlich, d.h. es kann sein, dass mal 4 von den Timern ihren public in der Minute ausleben (sie werden in Score scwimmen)
    und... irgnedwann laufen da dann 834 Timer aufm Server und der Server wird so viel damit zu tun haben, die Timer auszuführen (und die ganzen for-player-schleifen zu machen), dass es sehr doll laggen wird...

  • hallo, ich hab da was wass ich fragen möchte. also ich bin ein "nichts" in sachen scripting, und möchte es lernen :S ich hab da diese frage:


    kann man ein code machen wo das auto sich selber repair wenn es kurz vorm explodieren ist? wenn ja wie ist der code? und wo muss ich das einfügen damit keine errors kommen?


    hoffe um schnell antwort


    MfG:


    [SNR]Kitarou


  • ja kannst du, hast du denn schon was versucht

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • also wie ihr ja wisst bin ich ein script-nachwuchs^^ und da hatte ich nur noch eine frage: ich habe da s eine adminsiland gemappt, eingefügt, aber muss immer dahin fliegen, da wollte ich fragen, ob es möglich sei (ist es ja xD) ein spawn cmd zu machen, das nur für admins ab lv 1 ist. ich kenn mich überhaupt nicht aus bitte helfen^^


    EDIT: ich hab mal diese orangene Mine ausprobiert: nichts, der stöst nicht zurück! was muss ich da machen? muss ich ein bestimmtest auto haben?

  • Der Cmd für Kitarou:


    Für GF:
    if(strcmp(cmd, "/admininsel", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    SetPlayerPos(playerid, X, Y, Z); //Coords einfügen.
    return 1;
    }
    }


    Für alles andere:
    if(strcmp("/admininsel", cmdtext, true, 10) ==0) {
    SetPlayerPos(playerid, X, Y, Z);
    return 1;
    }

    Help dcmd & sscanf to their way to Pawn domination. Read the tutorial below, and use it.
    dcmd & sscanf

  • thx, bin dir was schuldig^^
    EDIT nach versuch:


    uhm, kanns sein das cih zu blöd bin um etwas einzufügen?


    E:\Games\Rockstar Games\Grand Theft Auto San Andreas\Server SA MP\filterscripts\adminisland.pwn(99) : error 010: invalid function or declaration
    E:\Games\Rockstar Games\Grand Theft Auto San Andreas\Server SA MP\filterscripts\adminisland.pwn(101) : error 010: invalid function or declaration
    E:\Games\Rockstar Games\Grand Theft Auto San Andreas\Server SA MP\filterscripts\adminisland.pwn(104) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    also hier der filterscript:
    #include <a_samp>


    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    public OnGameModeInit()
    {
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerPrivmsg(playerid, recieverid, text[])
    {
    return 1;
    }


    if(strcmp(cmd, "/admininsel", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    SetPlayerPos(playerid, 265,2323.3284,-3106.3767,4.9734,358.7041,0,0,0,0,0,0);
    return 1;
    }
    }


    public OnPlayerInfoChange(playerid)
    {
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }

  • Mit /giveaccess kannst du Spielern erlauben die Insel zu betreten.


    Du solltest Dir nochmal die Syntax von SetPlayerPos(); anschauen und die Callbacks, die Commands gehören in das richtige Callback.


    #include <a_samp>


    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT


    #if defined FILTERSCRIPT
    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    enum enum1
    {
    pAdmin
    }


    new PlayerInfo[MAX_PLAYERS][enum1];




    public OnGameModeInit()
    {
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerPrivmsg(playerid, recieverid, text[])
    {
    return 1;
    }




    public OnPlayerInfoChange(playerid)
    {
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new index, cmd[128];
    cmd = strtok(cmdtext, index);

    if(strcmp(cmdtext, "/admininsel", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    SetPlayerPos(playerid,2323.3284,-3106.3767,4.9734);
    }
    return 1;
    }


    if(strcmp(cmd, "/giveaccess", true) == 0)
    {
    new tmp[128];
    tmp=strtok(cmdtext,index);
    if(!IsPlayerAdmin(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] < 1 )
    {
    return 0;
    }
    }
    if(!strlen(tmp) || strlen(tmp)>6)
    {
    return 0; // /giveaccess [id];
    }
    PlayerInfo[strval(tmp)][pAdmin]++;
    return 1;
    }


    return 0;
    }



    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }


    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }




    ICQ Scripting - Support 495961653
    Montags-Freitags ab 15 Uhr

    2 Mal editiert, zuletzt von TheKekes ()

  • public OnPlayerPickupPickup(playerid,pickupid)
    {
    return 1;
    }
    Ein Callback ist eine Funktion, mit Parametern, die eine besondere Bedingung haben.
    Das ist beispielsweise das Callback, wenn ein Spieler ein Pickup aufnimmt. (Paramter sind hier "playerid" und "pickupid"


    Als Syntax von SetPlayerPos ist das gemeint, dass du nicht einfach alles in eine Funktion hineinschieben kannst, was du willst. Es gibt eine bestimmte Vorschrift:
    SetPlayerPos(playerid,x,y,z);
    Das passt dann also nicht:
    SetPlayerPos(playerid, 265,2323.3284,-3106.3767,4.9734,358.7041,0,0,0,0,0,0);
    sondern:
    SetPlayerPos(playerid, 2323.3284,-3106.3767,4.9734);

    ICQ Scripting - Support 495961653
    Montags-Freitags ab 15 Uhr

  • danke TheKeks^^ probs. jetzt mal aus (@ TheKeks: dein avatar erinnert mich an jemanden, wer soll das sein? :D)


    mach dem ich es versucht habe:


    also, es gibt keine errors, aber wenn ich /admininsel eingebe, passiert nichts! das lustige ist, das er nicht mal sagt das es dieses cmd nicht gibt, d.h., es gibt es zwar, aber ohne richtige funktion, wie kann ich das beheben?

  • danke TheKeks^^ probs. jetzt mal aus (@ TheKeks: dein avatar erinnert mich an jemanden, wer soll das sein? :D)


    mach dem ich es versucht habe:


    also, es gibt keine errors, aber wenn ich /admininsel eingebe, passiert nichts! das lustige ist, das er nicht mal sagt das es dieses cmd nicht gibt, d.h., es gibt es zwar, aber ohne richtige funktion, wie kann ich das beheben?


    Soll auch so sein, du musst ja erstmal Admin sein. Adminstatus bekommst du, indem du dich in rcon einloggst und dir mit /giveaccess [deine id] selbst Zugriff gibst.


    Flo, Wie genau meinst du das? Ich hoffe das ist ungefähr das, was du meinst:
    new bool:bedingung[MAX_PLAYERS];
    forward Timerfunc;
    //gamemodeinit:
    SetTimer("Timerfunc",1000,1);
    //
    public Timerfunc()
    {
    for(new i=0;i<MAX_PLAYERS;i++) {
    if(bedingung[i])
    {
    SendClientMessage.....
    bedingung[i]=false;
    }
    }
    return 0;
    }


    Und dann ein CMD, bei dem bedingung[playerid] auf true gesetzt wird.

    ICQ Scripting - Support 495961653
    Montags-Freitags ab 15 Uhr