Полезные скрипты для GMS

Мелкие скрипты, написанные для себя и используемые в проектах.

 

Заполнение разрядов перед числом нулями

Пример:
zero(123, 5) -> 00123

/// zero(value, bits)

var t = string(floor(argument0)); // убрать округление, если необходимы дроби
repeat (argument1 - string_length(t))
{
    t = "0" + t;
}

return t

 

Вывод числа с интерактивным отображением дробной части

Если число меньше 10, то отображается один символ после запятой. Если же число больше или равно 10, то отображается только целая часть.
При отображении дробной части, она округляется корректно, а при отображении целого числа, дробная часть просто отбрасывается, без округления.

5.73 -> «5.7»
5.76 -> «5.8»
10.73 -> «10»

/// rounding_string(val)

if argument0<10
{
    if frac(argument0) == 0
    {
        return string_format(argument0, 1, 0);
    }
    else
    {
        return string_format(argument0, 1, 1);
    }
}
else
{
    return string(floor(argument0));
}

 

Перевод строки в массив.

Тут всё очень просто.
a = string_to_array(«12,10,15,18,19,20,50,51,40,38,32,16,19,3,17,0,11,1,6,31,2») // и так далее
a[0] -> 12
a[1] -> 10
и так далее…

/// string_to_array(string)

var i, val;

var len = string_length(argument0);
var data = argument0;
var result = 0;

for (i=1; i<100; i++)
{
    val = get_part(data, i, ",");
    if val="" break;
    result[i-1] = real(val);
}

return result;

 

Получение элемента строки.

В предыдущем скрипте используется скрипт get_part, который позволяет взять определённый элемент из строки.
Задаётся строка, номер элемента и разделитель.
Например:
get_part(«Новичок|Бывалый|Мастер|Гуру», 2, «|») -> «Бывалый»
При ошибке возвращает пустую строку.

/// get_part(string, section, separator)

var s1, s2, res, _string, _section, _separator;
_string = argument0
_section = max(argument1, 1)
_separator = argument2

_string = _separator+_string+_separator

s1 = find_char(_string, _section, _separator)
s2 = find_char(_string, _section+1, _separator)

if s1<0 or s2<0
{
    return ""
}

res = string_copy(_string, s1+1, s2-s1-1)
return res

 

Поиск символа в строке

Используется предыдущим скриптом.
Задаём строку, номер символа, и сам символ.

Например, в строке нужно найти положение второго символа «a»:
find_char(«abcabcabc», 2, «a») -> 4
Возвращает -1 при отсутствии символа.

/// find_char(string,no,symbol)

var sz, n, i;

sz = string_length(argument0) + 1

n=0
for(i=1; i<sz; i++)
{
    if string_char_at(argument0, i)=argument2
    {
        n++
        if n=argument1 return i
    }
}
return -1

 

Сортировка массива

Передаём в скрипт одномерный массив, на выходе получаем его же, но в сортированном виде.

/// array_sort(array)

var lst = ds_list_create()

for (i=0; i<array_length_1d(argument0); i++)
{
    ds_list_add(lst, argument0[i])
}

ds_list_sort(lst, true)

var res;

for (i=0; i<ds_list_size(lst); i++)
{
    res[i] = ds_list_find_value(lst, i)
}

ds_list_destroy(lst)

return res

Добавить комментарий