Пытаюсь найти статьи про конвертацию типов данных в строку, но нигде не могу найти, скиньте ссылку, а лучше напишите как мне на JASS(это важно) прописать в сообщении данные переменной Типа integer при попытки просто вставить название переменной пишет, что нельзя вставлять числовые параметры. Я пробовал так String(j), но это тоже не помогло, как это правильно сделать?

Принятый ответ

common.j
-- String Utility API

---@param i integer
---@return real
function I2R(i) end

---@param r real
---@return integer
function R2I(r) end

---@param i integer
---@return string
function I2S(i) end

---@param r real
---@return string
function R2S(r) end

---@param r real
---@param width integer
---@param precision integer
---@return string
function R2SW(r, width, precision) end

---@param s string
---@return integer
function S2I(s) end

---@param s string
---@return real
function S2R(s) end

---@param h handle
---@return integer
function GetHandleId(h) end

---@param source string
---@param start integer
---@param ending integer
---@return string
function SubString(source, start, ending) end

---@param s string
---@return integer
function StringLength(s) end

---@param source string
---@param upper boolean
---@return string
function StringCase(source, upper) end

---@param s string
---@return integer
function StringHash(s) end


---@param source string
---@return string
function GetLocalizedString(source) end

---@param source string
---@return integer
function GetLocalizedHotkey(source) end
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

ответ
1)Нужно ли при создании на джассе в конце обнулять/удалять что-то как при создании на ГУИ типо set u = null и т.д.?
Да нужно, но далеко не все. Чекни статьи, там про это расписано подробно.
2)Как видно на скрине юниту даются способности на 10 сек, можно ли в одной строчке это как то написать, а не писать каждый скилл в новой строке? Попытался сделать через , выдало ошибку.
Нет, только по одному. И TriggerSleepAction я бы использовать не стал, вместо них я бы заюзал таймеры.
3)Слышал про при конвертации в текст остаются пару лишних строк в триггере, абсолютно ненужные я удалил(Которые были при создании на ГУИ, скрин 2), нужно ли еще что-то удалять?
Не совсем понял вопрос, уточни о чем ты?
ответ
S2I принимает строку в качестве параметра и никак её не изменяет
с чего вдруг он должен создавать новые строки?
I2S создаёт временную строку
если в таблице есть строка равная временной по хэшу то он возвращает строку из таблицы
если в таблице строки нету то он добавляет нашу временную строку в таблицу
т.е. обычный алгоритм хэширования
ответ
Потому что у триггеров нет имен.
Создаем массив строк name_array;
Создаем массив триггеров trigger_array;
Создаем инт name_array_index;
Создаем функцию
register_trigger(Trigger trigger, string name) {
    name_array[name_array_index] = name;
    trigger_array[name_array_index] = trigger;
    name_array_index = name_array_index + 1;
}
Создаем функцию
name_to_trigger(string name) {
    for (integer index = 0; index < name_array_index; index++) {
        if name_array[index] == name {
            return trigger_array[index];
        }
    }
}
Затем регистрируем все триггеры через register_trigger.
А после этого думаем, реально ли у нас столько абилок, что простая последовательность if name == "my_ability" then RunTrigger(my_ability) хуже этого решения

0
29
5 лет назад
Отредактирован nazarpunk
0
common.j
-- String Utility API

---@param i integer
---@return real
function I2R(i) end

---@param r real
---@return integer
function R2I(r) end

---@param i integer
---@return string
function I2S(i) end

---@param r real
---@return string
function R2S(r) end

---@param r real
---@param width integer
---@param precision integer
---@return string
function R2SW(r, width, precision) end

---@param s string
---@return integer
function S2I(s) end

---@param s string
---@return real
function S2R(s) end

---@param h handle
---@return integer
function GetHandleId(h) end

---@param source string
---@param start integer
---@param ending integer
---@return string
function SubString(source, start, ending) end

---@param s string
---@return integer
function StringLength(s) end

---@param source string
---@param upper boolean
---@return string
function StringCase(source, upper) end

---@param s string
---@return integer
function StringHash(s) end


---@param source string
---@return string
function GetLocalizedString(source) end

---@param source string
---@return integer
function GetLocalizedHotkey(source) end
Принятый ответ
0
26
5 лет назад
0
Если глобальная переменная j, то нужно указывать udg_j.
0
28
5 лет назад
Отредактирован PT153
0
Вот ещё 2 хорошие функции конвертации в строку.
function R2SX takes real r returns string
    return R2SW(r, 0, -1)
endfunction

function B2S takes boolean b returns string
    if b then
        return "true"
    endif
    return "false"
endfunction
0
29
5 лет назад
0
PT153, я целую библиотеку хороших функций накатал)
// Выводим сообщения
MessageTimed(string str, real time)
Message(string str)
MessageForPlayerTimed(player p, string str, real time)
MessageForPlayer(player p, string str)

// Очищаем строку сообщения
ClearTextMessagesForPlayer(player p)

// Получаем имя игрока
GetPlayerColorString(player p) -> string
GetPlayerNameColored(player p)  -> string

// Обрезаем крайние символы
LTrim(string str, string found) -> string
RTrim(string str, string found) -> string
Trim(string str, string found) -> string
// Примеры
LTrim("---T-r-i-m---", "-"); // T-r-i-m---
RTrim("---T-r-i-m---", "-"); // ---T-r-i-m
Trim("---T-r-i-m---", "-"); // T-r-i-m

// Конвертируем boolean в строку
B2S(boolean b) -> string
// Примеры
B2S(true); // true
B2S(!true); // false

// Превращаем строку в равкод
S2RAW(string ObjectId) -> integer
// Пример
S2RAW("hfoo"); // 1751543663
    
// Превращаем равкод в строку
RAW2S(integer ObjectId) -> string
// Пример
RAW2S(1751543663); // hfoo

// Заменяем подстроку
StringReplaceCounted(string str, string found, string replace, integer count) -> string
StringReplace(string str, string found, string replace) -> string
// Примеры
StringReplaceCounted("old old old old old", "new", 2); // new new old old old
StringReplaceCounted("old old old old old", "new", -2); // old old old new new
StringReplace("old old old old old", "new"); // new new new new new

// Склоняем строку в зависимости от числа
Declension(integer number, string dec1, string dec4, string dec5);
/* Описание
number - число, от которого склонять
dec1 - вариант склонения для числа 1, например "предмет"
dec4 - вариант склонения для числа 4, например "предмета"
dec5 - вариант склонения для числа 5, например "предметов"
*/
// Пример
Declension(100500, "предмет", "предмета", "предметов") // предметов

// Склоняем строку в зависимости от числа с заменой подстроки и учётом нуля
Declenser(integer number, string found, string dec0, string dec1, string dec4, string dec5) -> string
/* Описание
number - число, от которого склонять
found - подстрока, которая будет заменена на number
dec0 - вариант строки для number == 0, например "Рюкзак пуст"
dec1 - вариант склонения для числа 1, например "В рюкзаке %count% предмет"
dec4 - вариант склонения для числа 4, например "В рюкзаке %count% предмета"
dec5 - вариант склонения для числа 5, например "В рюкзаке %count% предметов"
*/
// Пример
Declenser(
	100500,
	"%count%",
	"Рюкзак пуст", 
	"В рюкзаке %count% предмет",
	"В рюкзаке %count% предмета",
	"В рюкзаке %count% предметов"
); // В рюкзаке 100500 предметов
0
28
5 лет назад
0
NazarPunk, trim обычно убирает символы отступа вначале и конце.
0
29
5 лет назад
0
trim обычно убирает символы отступа вначале и конце.
Так передайте в found пробел, он и уберёт. Я его для комманд чата писал и посему перевод строки не предусматривал.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.