Mehrere #Includes funktionieren nicht

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
  • Hey Leute,


    ich wollte heute Mal die Strukturierung von meinem Server aufbessern, damit ich leichter die gesuchte Stelle im Quelltext finde. Bislang habe ich OnPlayerCommandText Importiert mit #include, aber weil es jetzt mehr Befehle als erwartet geworden sind, wird es in der Datei bisschen unübersichtlich. Deshalb habe ich mir überlegt, dass ich die einzelnen Gruppen der Befehle aufteile und alle unter OnPlayerCommandText importiere. Ich hatte es so probiert:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    #include "../include/OnPlayerCommandText/TeleportCMD.inc"
    #include "../include/OnPlayerCommandText/TestCMD.inc"
    #include "../include/OnPlayerCommandText/AdminCMD.inc"
    #include "../include/OnPlayerCommandText/FahrzeugCMD.inc"
    #include "../include/OnPlayerCommandText/AllgemeinCMD.inc"
    return 1;
    }


    Aber so wie es aussieht übernimmt er nur die erste Datei, die Importiert wird, also die TeleportCMD.inc und die anderen fallen weg. Kann mir jemand sagen, wie ich soetwas hinbekomme, wenn es mit #include nicht funktioniert? 7


    mfG,
    TS

  • ^^, ein Include kann nur fpr ein gesamtes Script vorgenommen werden, aber nicht für CodeZeilen. Wenn du aber wirklich es so umständlich unternehmen willst, dann mache die Include-Beifügungen oberhalb vom Callback und im Include selber würde es dann so aussehen:


    forward IncludeOnPlayerCommandText(playerid,cmdtext[]);


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    if(!strcmp(cmdtext,"/portBefehl",false)) return SetPlayerPos(playerid,0,0,0);
    return CallLocalFunction("IncludeOnPlayerCommandText","ds",playerid,cmdtext);
    }


    #if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
    #else
    #define _ALS_OnPlayerCommandText
    #endif
    #define OnPlayerCommandText IncludeOnPlayerCommandText

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Mein Gott.
    Also sowas hab ich schon lange nicht mehr gesehen.


    Includes sind global und werden nur mit dem Dateinamen angegeben, da der Compiler die Includes immer aus dem pawno/include Ordner holt.
    Also einfach #include <datei.inc>


    26 Fehler sind zu 99% ein Klammerfehler.
    Du hast bei OnGameModeInit die "}" vergessen.


    Und merk dir einfach:
    Alles was mit '#' beginnt, ist global, also außerhalb von irgendwelchen publics oder stocks zu deklarieren.

    Consultant of LulzSec

  • Edit:
    Ich ahbe das eine problem gelöst, ich habe nur eine Klammer vergessen^^ Aber trotzdem gibt es noch ein Problem:


    Code
    ../include/OnGameModeInit/Allgemein.inc(1) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/Allgemein.inc(1) : error 017: undefined symbol "IncludeOnGameModeInit"
    ../include/OnGameModeInit/Allgemein.inc(3) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/Allgemein.inc(4) : error 001: expected token: ";", but found "{"
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    4 Errors.


    Kommt bei jeder Datei, aber weil die Allgemein.inc in der Gamemode Datei als erstes aufgeführt wird, kommen nur Fehler der Datei. Wenn ich jetzt AdPlayerClass.inc nach oben setzen würde, kommt das gleiche mit AdPlayerClass.inc. Ideen?

  • Nette Idee wie du es dort machst.Hab es selber noch nie ausprobiert so wie du es machst, mache es aber ähnlich:


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    Vehicle_OnPlayerStateChange(playerid, newstate, oldstate);
    if(Race_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    if(VehicleExp_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    if(Stunting_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    if(Tram_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    if(LieferS_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    if(Derby_OnPlayerStateChange(playerid, newstate, oldstate)) return 1;
    return 1;
    }
    *_OnPlayerState liegt immer in der jeweiligen Include. Ist ebenfalls sehr übersichtlich, funktioniert auch reibungslos.


    Du musst irgendwas total falsch machen.Hab es ebend ausprobiert:
    public OnGameModeInit()
    {
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    #include <test/test>
    #include <test/shoutout>
    var--;
    return 1;
    }
    Und die Datei ".../includes/Test/Test.inc":
    printf("Hallo aus Test/Test.inc");
    Und die Datei ".../includes/Test/Shoutout.inc":
    printf("Und noch ein Shoutout");
    new var;
    var++;
    var = 20;

    Auch versteh Ich nicht wirklich deine Problembeschreibung.

  • Okay, ich gebe zu, dass das Problem doof beschrieben worden ist, deswegen Mal bisschen besser erklärt:


    In der Gamemode Datei sieht es wie folgt aus, wenn ich einzelne Dateien in die OnGameModeInit importieren möchte:


    public OnGameModeInit()
    {
    #include "../include/OnGameModeInit/Allgemein.inc"
    #include "../include/OnGameModeInit/AddPlayerClass.inc"
    #include "../include/OnGameModeInit/AdminBase.inc"
    #include "../include/OnGameModeInit/AndromJump.inc"
    #include "../include/OnGameModeInit/Menus.inc"
    #include "../include/OnGameModeInit/Pickup.inc"
    #include "../include/OnGameModeInit/SchiffDM.inc"
    return 1;
    }


    Wenn ich jetzt aber komplieren möchte, kommt folgende Fehlermeldung:


    ../include/OnGameModeInit/Allgemein.inc(1) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/Allgemein.inc(1) : error 017: undefined symbol "IncludeOnGameModeInit"
    ../include/OnGameModeInit/Allgemein.inc(3) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/Allgemein.inc(4) : error 001: expected token: ";", but found "{"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Da die Datei "Allgemein.inc" unter OnGameModeInit als erstes importiert wird, zeigt er komischerweise die anderen Fehler nicht an. Aber wenn ich jetzt das #include für "Allgemein.inc" nach unten setze, dann steht das #include für "AdPlayerCLass.inc" ganz oben, wo vorher "Allgemein.inc" stand. Wenn ich dann jetzt kompliere, kommt folgendes:


    ../include/OnGameModeInit/AddPlayerClass.inc(1) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/AddPlayerClass.inc(1) : error 017: undefined symbol "IncludeOnGameModeInit"
    ../include/OnGameModeInit/AddPlayerClass.inc(3) : error 029: invalid expression, assumed zero
    ../include/OnGameModeInit/AddPlayerClass.inc(4) : error 001: expected token: ";", but found "{"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Es werden immer die Fehler der ersten Datei angezeigt, die imprtiert werden soll, deswegen denke ich, dass ich irgendeinen Fehler gemacht habe. Ich habe Mal hier den Inhalt der AddPlayerClass.inc kopiert, damit Mir jemand sagen kann, was ich falsch mache...


    forward IncludeOnGameModeInit();


    public OnGameModeInit()
    {
    AddPlayerClass(0,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(14,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(20,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(26,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(33,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(35,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(45,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(49,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(70,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(73,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(78,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(79,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(80,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(81,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(82,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(83,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(84,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(113,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(123,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(137,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(167,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(178,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(264,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(272,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(287,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    AddPlayerClass(299,2047.4270,1336.5569,10.6719,188.9284,0,0,0,0,0,0);
    }


    #if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
    #else
    #define _ALS_OnGameModeInit
    #endif
    #define OnGameModeInit IncludeOnGameModeInit

  • Ok, korrektur entschuldigung. Es geht tatsächlich. Also lies zu und lern aus deinen Fehler ^^


    Nehmen wir an, dein GM heißt gm.pwn und beinhaltet folgendes:


    #include <a_samp>


    main() { }


    public OnGameModeInit()
    {
    #include <fahrzeuge.inc>
    #include <objekte.inc>
    #include <pickups.inc>
    }


    und die Includes oben haben dann folgenden Inhalt:


    Bei fahrzeuge.inc

    CreateVehicle(560,4,3,1,0,1,1,-1);
    CreateVehicle(560,4,3,1,0,1,1,-1);
    CreateVehicle(560,4,3,1,0,1,1,-1);
    CreateVehicle(560,4,3,1,0,1,1,-1);
    //usw ^^


    Bei objekte.inc

    CreateObject(2342,0,0,20,0,0,90);
    CreateObject(2342,0,0,20,0,0,90);
    CreateObject(2342,0,0,20,0,0,90);
    CreateObject(2342,0,0,20,0,0,90);
    CreateObject(2342,0,0,20,0,0,90);
    //usw ^^


    Bei pickups.inc



    CreatePickup(231,1,0,0,0);
    CreatePickup(231,1,0,0,0);
    CreatePickup(231,1,0,0,0);
    CreatePickup(231,1,0,0,0);
    //usw ^^


    Also wie du erkennen kannst wären bei den Includes keine Funktion oder Callbacks mehr, sondern es wird der Inhalt in das GM kompiliert.


    Jedoch rate ich dir davon ab so zu programmieren, denn dadurch verlierst du stark an überblick. So wie Goldkiller dir seine Variante gezeigt hat wäre auch nicht zu empfehlen, denn es kann zu Fehler führen, also zum Callback-Ausfall. Natürlich kann der Code hier oben auch zu einem Codeausfall führen und letztendlich ist entweder meine Variante (von Y_Less) gut, oder du die Variante von Goldkiller verwendest, aber per CallLocalFunction, damit nicht der ganze Callback oder Funktion für den Spieler abbricht, wenn ein Array- oder Zeigerfehler aufretet.


    Und zu deinem Problem derzeit, bitte schau dir meinen Code oben genauer an und vergleiche ihn mit deinem.


    //EDIT: Sry für das komische Deutsch in meinem Text, aber es ist bei mir sehr heiß und ich aus Faulheit nicht korrigieren möchte ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ich ahbe es jetzt Mal so gemacht, wie du gesagt hast, aber es klappt immer noch nicht. Liegt vielleicht daran, dass ich den Text nicht verstanden habe xD So wie du den Pawn Quelltext gepostet hast, hatte ich es ja ganz zu anfang.


    ISt soetwas überhaupt möglich und benutzt jemand soetwas überhaupt? Weil irgendwie kommt es mir vor, dass die Codes alle ungetestet sind.^^ (Wahrscheinlich ist auch, dass ich das falsch mache^^)

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

  • Jedoch rate ich dir davon ab so zu programmieren, denn dadurch verlierst du stark an überblick. So wie Goldkiller dir seine Variante gezeigt hat wäre auch nicht zu empfehlen, denn es kann zu Fehler führen, also zum Callback-Ausfall. Natürlich kann der Code hier oben auch zu einem Codeausfall führen ...


    So wie jeder Andere Code ebenfalls "ausfallen" kann.Das Argument ist jetzt nicht so der Hit :p


    Wie auch immer,zu TS.

    Zitat

    (Wahrscheinlich ist auch, dass ich das falsch mache^^)


    Du machst was falsch.Den unteren Teil aus dem Post hab Ich extra getestet.Es gibt auch keinen Grund,wieso es nicht funktionieren sollte.Denn an die Stelle wo du #include <irgendwas> einfügst, wird einfach der Inhalt der Datei hin kopiert.Templer hat es nochmal sehr ausführlich erklärt und es funktioniert ja auch so wie er es gezeigt hat.

  • gamemode.pwn
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    #include <OnPlayerCommandText/TeleportCMD>
    #include <OnPlayerCommandText/TestCMD>
    #include <OnPlayerCommandText/AdminCMD>
    #include <OnPlayerCommandText/FahrzeugCMD>
    #include <OnPlayerCommandText/AllgemeinCMD>
    return 1;
    }


    include/OnPlayerCommandText/TeleportCMD.inc
    // Teleport Befehle


    if (strcmp("/lvairport", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,1473.91, 1458.16, 10.8092);
    SetPlayerPos(playerid,1473.91, 1458.16, 10.8092);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if(strcmp("/sfairport", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,-1679.69, -176.05, 15.9006);
    SetPlayerPos(playerid,-1679.69, -176.05, 15.9006);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/lsairport", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,1955.08, -2288.41, 16.3564);
    SetPlayerPos(playerid,1955.08, -2288.41, 16.3564);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/desertairport", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,394.623, 2514.81, 18.2236);
    SetPlayerPos(playerid,394.623, 2514.81, 18.2236);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/area69", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,213.79, 1906.13, 17.1583);
    SetPlayerPos(playerid,213.79, 1906.13, 17.1583);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/gatebridge", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,-2662.24, 1595.02, 225.632);
    SetPlayerPos(playerid,-2662.24, 1595.02, 225.632);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/basejumptower", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,1541.09, -1365.2, 330.046);
    SetPlayerPos(playerid,1541.09, -1365.2, 330.046);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    if (strcmp("/mtchillad", cmdtext, true,7) == 0)
    {
    new VEHICLE = GetPlayerVehicleID(playerid);
    SetVehiclePos(VEHICLE,-2334.01, -1637.55, 483.931);
    SetPlayerPos(playerid,-2334.01, -1637.55, 483.931);
    PutPlayerInVehicle(playerid,VEHICLE,0);
    }


    Fehlermeldung

    Code
    F:\Dokumente\gta sa Daten\samp Server\gamemodes\sample.pwn(29) : fatal error 100: cannot read from file: "OnPlayerCommandText/TeleportCMD"
    
    
    Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.


    Ich habe doch alles richtig gemacht, aber wieso bekomme ich die Fehlermeldung, dass er die Datei nicht lesen kann?

  • @ Goldkiller, deine Aussage mim Abbruch stimmt nur teilweise. Zwar bricht er deinen Code in der Funktion ab, aber damit er nicht den Fehler übergreifend macht kannst du mal anhand folgendem Beispiel sehen:


    new Array[]={3,2,1};
    forward Test();
    public Test()
    {
    new number = -1;
    Array[number]=2;
    }


    main()
    {
    #include <OnPlayerCommandText/test>
    Test();
    print("Lol");
    }


    Dieser bricht in sich total zusammen und zeigt auch nichtmehr das "Lol" in der Console, jedoch mithilfe von CallLocalFunction:


    new Array[]={3,2,1};
    forward Test();
    public Test()
    {
    new number = -1;
    Array[number]=2;
    }


    main()
    {
    #include <OnPlayerCommandText/test>
    CallLocalFunction("Test","");
    print("Lol");
    }


    Wird zwar der Code in der public "Test" abgebrochen, aber in main läuft er ohne probleme weiter und zeigt auch die Meldung "Lol" in der Console an.


    @Topic:


    Also bei mir funktioniert es mit Pfadangabe und alles, sind die Dateien auch wirklich unter pawno/includes/... ? Also in diesen Unterordner hier:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    #include <OnPlayerCommandText/TeleportCMD.inc>
    #include <OnPlayerCommandText/TestCMD.inc>
    #include <OnPlayerCommandText/AdminCMD.inc>
    #include <OnPlayerCommandText/FahrzeugCMD.inc>
    #include <OnPlayerCommandText/AllgemeinCMD.inc>
    return 1;
    }


    bzw. startest du das Pawno wirklich von dort, wo die Includs sind oder benützt du unabsichtlich ein anderes?


    Ansonsten probiere den obigen Code, wo überall die Endung *.inc steht.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • samp server
    ->gamemodes
    -sample.pwn
    -sample.amx
    ->include
    -OnPlayerCommandText
    >TeleportCMD.inc
    >TestCMD.inc
    > usw


    wenn ich die Gamemode Datei bearbeiten möchte, gehe ich in den Ordner "gamemodes" und öffne es dort mit Pawno....
    Es klappt immer noch nicht, auch wenn ich *.inc schreibe. :(

  • Dann weiß ich auch nicht bescheid, denn bei mir klappt es mit diesem Beispiel


    #include <a_samp>


    main()
    {
    #include <OnPlayerCommandText/test>
    }


    und in der Datei (unter includes/OnPlayerCommandText/test.inc) steht nur


    print("Hallo");


    und das wird angezeigt.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Dann können wir auch gleich damit aufhören,eigene Funktionen direkt aufzurufen,anstatt über CallLocal/RemoteFunction. Denn so verhindert wir ja das stoppen des Codes. Den Fehler zu beheben wäre aber leichter :P.



    Vielleicht sind die Includes auch nicht im richtigen PAWNO Ordner. Kommt schon mal vor dass man das Server-Paket mehrmals installiert hat. Schau mal nach,dass auch wirklich die Datein auch wirklich im include Ordner liegen, von wo du auch pawno startest ( Oder halt wo pawncc.exe ist ).
    http://goldkiller.kilu.de/SAMP/TS_7622.rar