[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
  • Das wird nicht ganz funktionieren (Glaube ich)
    Wenn du eine Zeile ließt,wird dir die meistens falsch zurück gegeben (Bei windoof anders als Linux soweit ich weiss)
    zB:
    In der whitelist steht:
    [KAQ]Noob
    Brot


    Beim lesen bekommst du aber:
    '[KAQ]Noob ' zurück.Mit 1 oder 2 Leerzeichen am Ende.
    StripNewLine(string[]) fixt das.



    #include <a_samp>


    #define RED 0xAA3333AA
    #define YELLOW 0xFFFF00AA


    forward Whitelist(playerid);


    new gdebug = 0;


    public Whitelist(playerid)
    {
    if (gdebug==1){printf("DEBUG Whitelist Check(%d) (%s)", playerid);}
    new playername2[MAX_PLAYER_NAME];
    new storedcopname[64];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    new File: file = fopen("Whitelist.cfg", io_read);
    if (file)
    {
    new valtmp[MAX_PLAYER_NAME];
    while (fread(file, valtmp)) {
    StripNewLine(valtmp);
    if (!strcmp(valtmp, playername2, true, strlen(playername2))) {
    fclose(file);
    return 1;
    }
    }
    }
    fclose(file);
    return 0;
    }


    public OnPlayerConnect(playerid)
    {
    if (Whitelist(playerid)) {
    } else {
    SendClientMessage(playerid, RED, "Du stehst nicht auf der Whitelist");
    }
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new cmd[256];
    new idx;
    cmd = strtok(cmdtext, idx);


    if(strcmp(cmd, "/whitelist", true) == 0)
    {
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[64];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(!strlen(result))
    {
    return SendClientMessage(playerid, YELLOW, "Benutze: /whitelist [spielername]");
    }
    if ((IsPlayerAdmin(playerid)))
    {
    new File:hFile,coordsstring[128];
    format(coordsstring,128, "%s\r\n",result);
    hFile = fopen("Whitelist.cfg", io_append);
    fwrite(hFile, coordsstring);
    fclose(hFile);
    SendClientMessage(playerid, RED,"Der Spieler wurde zur Whitelist geaddet!");
    }
    return 1;
    }
    return 1;
    }
    //-----------------------strtok-----------------------------
    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;
    }
    //----------------------------------------------------
    /**
    * Strips Newline from the end of a string.
    * Idea: Y_Less, Bugfixing (when length=1) by DracoBlue
    * @param string
    */
    stock StripNewLine(string[])
    {
    new len = strlen(string);
    if (string[0]==0) return ;
    if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
    string[len - 1] = 0;
    if (string[0]==0) return ;
    if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
    }
    }



    Hab eine Whitelist Funktion in meinem Adminscript.Falls du noch kein Adminscript hast und Whitelist/Blacklist brauchst dürfte das wohl was für dich sein.gAdmin aus meiner Sig :X

  • Mann könnte auch anders machen.
    stock GetStringEnd(string[])
    {
    for(new i = 0; i < sizeof(string); i++)
    {
    if(string[i] == '\0')
    strdel(string, i, strlen(string));
    }
    }


    Ich habs einfach mal geschrieben und nicht getestet.
    Mann muss nähmlich wissen:
    Ein String besteht aus vielen kleinen char's.
    z.b. char* test = "Hallo"
    Hallo <- 0-5 Hallo und 6 = \0
    Ein String ist ja auch nur eine Zahlenfolge und der Computer muss ja auch irgendwann wissen wann es zuende ist ;)
    Vllt erspart man sich damit ein paar Zeilen code.


    Einmal editiert, zuletzt von DMA ()

  • Hi ich will das wenn man /spawning (odaso)
    macht dann will ich das wenn man das 1ste mal /spawning macht das dann ein Auto kommt
    und wenn man das 2te mal /spawning macht das dann ein NRG kommt!



    case 0:
    {
    AddStaticVehicle(XXXX);
    }
    case 1:
    {
    AddStaticVehicle(XXXXX);
    }

    So ungefähr oda wie?



    ah goldkiller guckt :D

    Einmal editiert, zuletzt von Exlac ()


  • new CarCount[MAX_PLAYERS];


    public OnPlayerConnected(playerid) {
    //....
    CarCount[playerid]=0;
    return 1;
    }
    //---------
    if(!strcmp("/deincommand",cmdtext,true)) {
    if(CarCount[playerid]==0) {
    CreateVehicle(....);
    }
    else if(CarCount[playerid]==1) {
    CreateVehicle(....);
    }
    else if(CarCount[playerid]==2) {
    CreateVehicle(....);
    }
    CarCount[playerid]++;
    return 1;
    }
    Kannst es auch mit 'case' machen ,aber nicht "switch" davor vergessen.Außerdem kannst du AddStaticVehicle nur in OnGameModeInit() oder OnFilterscriptInit() benutzten.CreateVehicle(...) dagegen überall.

  • bei menü? musst nochmal üba ICQ oda jmd anders klären


    483-699-899

  • Davon haste vorher aber nix gesagt...Versteh auch nicht so recht wie du es meinst mit einem Menu
    Ich gehe mal davon aus du hast bereits ein Menu.
    Case (ZAHL) steht für den X-ten Eintrag im Menu.
    default wird dann aufgerufen wenn keines der Fälle (case) zutrifft

    public OnPlayerSelectedMenuRow(playerid, row)
    {
    new Menu:Current;
    Current=GetPlayerMenu(playerid);
    if(Current==MeinMenu) {
    switch(row) {
    case 0:{
    // Hier immer neues Car Spawnen???
    /*
    if(CarCount[playerid]==0) {
    CreateVehicle(....);
    }
    else if(CarCount[playerid]==1) {
    CreateVehicle(....);
    }
    else if(CarCount[playerid]==2) {
    CreateVehicle(....);
    }
    CarCount[playerid]++;
    */
    }
    case 1: {
    }
    case 2: {
    }
    case 3: {
    }
    case 4: {
    }
    case 5: {
    }
    default: {
    print("Fail");
    }
    }
    }
    else if(Current==EINANDERESMENU) { ...
    }
    return 1;
    }

    Noch ein nützlicher Link:
    Simple Menu Tutorial

  • Hi erstma,


    als erstes muss ich sagen dass diese ganzen script geschichten für mich noch neuland sind.


    also dann zur frage: wie kann man die hauscars umschreiben bzw. andern da ich das standard GF script drauf hab kann man nur bestimmte autos hauscars machen


    wie kann ich das machen das ich zb. n monstertruck oder zb. Nrg-500

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • kann zaw net gut scripten.. aba man muss dann doch einfach mit DCMD dann z.b. /clanchatallow PLAYERID machen dann kommt bei dudb bei dem playa dann bei: GPM 1 und dann wird gecheckt wenn man /clan XXX schreibt wer GPM 1 in userdatei hat...^^

  • new bool:GPMMember[MAX_PLAYERS];
    //**********
    stock GangChat(playerid, msg[]) {//Goldkiller
    new mystring[128];
    format(mystring,128,"# %s:%s",PlayerName(playerid),msg);
    for(new i;i<GetMaxPlayers();i++) {
    if(GPMMember[playerid]) {
    SendClientMessage(i,COLOR_LIGHTBLUE,mystring);
    }
    }
    return 1;
    }


    public OnPlayerConnected(playerid) {
    GPMMember[playerid]=false;
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
    if (strfind(Name,"[GPM]",true,0)!=-1) GPMMember[playerid]=true;
    return 1;
    }
    public OnPlayerText(playerid, text[]){
    if(text[0]=='#') { //adminchat mit "# TEXT"
    GangChat(playerid, text[1]);
    return 0;
    }
    return 1;
    }



    Sollte wieder passen 8o8o8o

    Einmal editiert, zuletzt von Goldkiller ()

  • new bool:GPMMember[MAX_PLAYERS];
    //**********
    stock GangChat(playerid, msg[]) {//Goldkiller
    new mystring[128];
    format(mystring,128,"# %s:%s",PlayerName(playerid),msg);
    for(new i;i<GetMaxPlayers();i++) {
    if(GPMMember[i] == true)
    SendClientMessage(i,COLOR_LIGHTBLUE,mystring);
    }
    return 1;
    }


    public OnPlayerConnected(playerid) {
    GPMMember[playerid]=false;
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
    if (strfind(Name,"[GPM]",true,0)!=-1) GPMMember[playerid]=true;
    return 1;
    }
    public OnPlayerText(playerid, text[]){
    if(text[0]=='#') { //adminchat mit "# TEXT"
    GangChat(playerid, text[1]);
    return 0;
    }
    return 1;
    }


    Mein kleiner Fix ;)

    //Gold:Huch,glatt das falsche gepostet :O


    Einmal editiert, zuletzt von Goldkiller ()

  • hiii,
    thx aba das geht i-wie nich so wirklich ^^


    C:\Users\DBH\sa-mp Script\Testserver\filterscripts\mafia.pwn(58) : error 017: undefined symbol "PlayerName"
    C:\Users\DBH\sa-mp Script\Testserver\filterscripts\mafia.pwn(67) : warning 235: public function lacks forward declaration (symbol "OnPlayerConnected")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


  • Sorry Prototyp habe dich übersehen!


    also


    um Kooridinaten zukriegen musst du /save KOMMENTAR machen...
    um Cars zuspawnen einfach DEBUG mode runterladen und dann /v NRG oda /v monster machen!


    dann rein gehen.. positionieren und dann /save NRG 1
    odaso :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen