Eigene Function schreiben?!

    Eigene Function schreiben?!

    Hallo!

    Ich steh mal wieder auf dem Schlauch.
    Also in den Programmiersprachen die ich kenne ist es gang und gäbe eigene Funktionen zu schreiben.
    Also in Ruby beispielsweise (dort heissen sie Methoden)

    Quellcode

    1. def calculator(arg1, arg2, operator)
    2. if operator == plus
    3. var result = arg1 + arg2
    4. return result
    5. end


    ich kann dann irgendwo im code: calculator(1, 2, plus) aufrufen und bekomme das Ergebnis zurück geliefert.

    Sowas suche ich jetzt in GML.. aber bisher fand ich nur, wie man selbst erstellte skripte callen kann jedoch nicht wie ich denen Argumente mitliefer und wie ich einen rückgabewert
    abfange. Sowas muss es doch geben, oder? Könnte mir bitte jemand sagen welches Keyword ich suche?

    Danke schön ;D
    Dann musst du dir am besten gleich noch was zu den Accessors durchlesen, das ist wichtig, denn wenn du zB ein Array mitgibst und im Script veränderst, dann kopiert gm standardmäßig das Array und gibt dann die veränderte Kopie zurück, das ist aber meist nicht gewollt, von daher muss dann ein @ mit in die Eckigen Klammern
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Hab mal flott aus meinem Projekt was rausgesucht wo ich Accessor benutze dann hast du ein Beispiel.

    GML-Quellcode

    1. ///scr_item_add(array 2d,pos,id)
    2. var _array, _pos, _id;
    3. _array = argument0; //NOTE: ARRAY IS COPIED WHEN CHANGED // USE @ FOR DIRECT ACCESS INSTEAD
    4. _pos = argument1;
    5. _id = argument2;
    6. var _list = scr_get_item(_id);
    7. if (_list = -1) {
    8. scr_add_notification_ext("FAILED CATCHING ITEM LIST::ID_" + string(_id),c_red,1);
    9. exit;
    10. }
    11. _array[@ _pos,0] = string(ds_list_find_value(_list,0));
    12. _array[@ _pos,1] = string(ds_list_find_value(_list,1));
    13. _array[@ _pos,2] = real(ds_list_find_value(_list,2));
    14. _array[@ _pos,3] = string(ds_list_find_value(_list,3));
    15. _array[@ _pos,4] = real(ds_list_find_value(_list,4));
    16. ds_list_destroy(_list);

    GML-Quellcode

    1. ///scr_get_item(id)
    2. //returns ds_list
    3. var file = argument0;
    4. file = "itm_" + string(file) + ".dat";
    5. file = file_text_open_read(working_directory + "items\" + string(file));
    6. if (file = -1) {
    7. scr_add_notification_ext("FAILED LOADING::items\" + string(file),c_red,1);
    8. return -1;
    9. }
    10. var _list = ds_list_create();
    11. ds_list_add(_list,file_text_read_string(file));
    12. file_text_readln(file);
    13. ds_list_add(_list,file_text_read_string(file));
    14. file_text_readln(file);
    15. ds_list_add(_list,file_text_read_real(file));
    16. file_text_readln(file);
    17. ds_list_add(_list,file_text_read_string(file));
    18. file_text_readln(file);
    19. ds_list_add(_list,file_text_read_real(file));
    20. file_text_close(file);
    21. return _list;


    Das benutze ich in dem Fall um ItemInformationen aus .dat Dateien auszulesen.
    In der .dat steht dann nur Folgendes (hier itm_3.dat)

    Quellcode

    1. Glock 17
    2. 9x19mm
    3. 3
    4. scr_glock17
    5. 15

    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: