Так..
Опять кривожоплю.
var
$SkinArray: array 59 of String
end
s$SkinArray[287] = 'Army'
s$SkinArray[191] = 'ArmyGirl'
if $SkinArray[14@]!=''
then
0AF8: samp add_message_to_chat " %s[%d](%.1f)(%d)" -1 6@ 0@ 5@ $SkinArray[14@]
else
0AF8: samp add_message_to_chat " %s[%d](%.1f)(%d)" -1 6@ 0@ 5@ 14@
end
Условие не выполняется. Как получить значение ключа массива? Что не так делаю?
Нужно так, чтобы если приходящее число было в массиве(т.е ключ) то вывести значение этого ключа. Иначе, вывести сам ключ(т,е приходящее число)
В Cleo есть глобальные $ и локальные @ переменные, глобальные используются очень редко $, массивы те что выше также нежелательны к использованию.
s$SkinArray[287] = 'Army' такие присваивания не поддерживаются
$SkinArray[14@]!='' такие сравнения тоже, нет ничего общего с php, все действия со строками в основном происходят через память
теперь к вопросу о выборе! не стоит влаживать условия один в один. стоит просто записывать их последовательно с прыжками по меткам и.т.д.
а для той задачи которая стоит нужны hex буферы текста одинакового размера
:buf
hex
"123456789" 00 //каждая строка 10 байт
"123456789" 00
"123456789" 00
"123456789" 00
end
:kod
//допустим получили ключ 3 в переменной 1@
0AC6: 0@ = label @buf offset
1@ *= 10 //Смещение
0@ += 1@
//теперь 0@ указывает на 4 строку
//указатель можно юзать в опкодах вывода текста и прочее %s 0@
а вообще дохера способов есть, авот готового map нет :/
крч если нужно неупорядоченно а по id поиметь массив то как вариант составить буфер типа
значение - смещение и перебирать циклом а по нужным смещениям во втором буфере расставить текст
:bufmap
hex //2 байта id ключ, 2 байта смещение
00000000
00000000
end
:buftext
hex
"смещение 0" 00
...
"смещение 40" 00
end
цикл
for 30@ = 0 to 1 //2 итерации
0AC6: 0@ = label @bufmap offset
0A8D: 1@ = read_memory 0@ size 2 virtual_protect 0
if 1@ == 4@
then
0@ += 2
0A8D: 1@ = read_memory 0@ size 2 virtual_protect 0
jump @exit
end
0@ += 4
end
//default
:exit
0AC6: 0@ = label @text offset
0@ += 1@
в 0@ указатель на строку