-
Постов
1 681 -
Зарегистрирован
-
Посещение
-
Победитель дней
40
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные ReWanet
-
-
4 минуты назад, Submarina сказал:
Я там таблицу выложил, в ней не много не правильный код, там выбора из пяти CELabel я попросил их подправить, потому что мой код не работает, цвет при выборе не меняет.
A то что ты предложил, если в писать ViborColor = get то какое значения не выбирай 1,2 или 3 она всё делает красным.
Так у тебя в коде только один цвет У тебя код не работает потому что ты пишешь ViborHP = getProperty(...) if ViborColor == ...
Я не пойму чего ты желаешь. Ты написал что код не меняет цвет я тебе его поправил и он теперь меняет цвет? Меняет.- 1
-
4 минуты назад, Submarina сказал:
Я так уже делал, а если я захочу несколько цветов поставить на выбор, как мене быть.
Так я не понял что ты хочешь ты сказал поправить я поправил. Что ты хочешь? Не легче .colorPicker прописать?
- 1
-
48 минуты назад, Submarina сказал:
Пожалуйста подправьте меня, где я ошибся.
Скрытый текстViborHP = getProperty(UDF1.CEComboBox1,'ItemIndex') if ViborColor == 0 then
ViborColor* = get..
- 1
-
7 минут назад, MasterGH сказал:
Спасибо.
-
7 часов назад, MasterGH сказал:
Я пользуюсь этой программой.
Скачать можно из файлового каталога
Пишет что нет такой страницы.
Код ошибки: 2D161/2 -
20 минуты назад, partoftheworlD сказал:
вернуть кнопке её первоначальное состояние.
Ну по коду да там смысла в нем нет. Это я понял только сейчас
Спасибо всем за ответы. -
14 минуты назад, partoftheworlD сказал:
За ссылку спасибо. Почитаю как будет время. На счет Sleep(1000) не знаю почему не додумался до него но в голову ударил таймер и пошло поехало а время на часах позднее голова просто не варит
3 минуты назад, srg91 сказал:Sleep предоставляется CE (из main.lua):
sleep(milliseconds): pauses for the number of specified milliseconds (1000= 1 sec...)
Да спасибо это более удобней будет. Но все еще буду смотреть то как правильно реализовать таймер.
И вопрос - смысл от таймера вообще есть? Просто на CE форуме его в основном пихают в скрипты из таблицы CE ( Правильно написал?). Так же на этом форуме в одном из видео или в посте прочитал что таймер может вызывать проблемы если его пихать в LUA скрипт. -
16 минуту назад, partoftheworlD сказал:
В идеале дебажить надо и предоставлять больше информации, но мне кажется тут проблема в том, что после телепорта, игра выделяет память для того чтобы подгрузить новую локацию и всякую инфу о ботах, карте и т.д, и затирает твои переменные используемые в скрипте, из-за этого ошибка не стабильна. У меня примерно такое было в watch dogs 2, когда дампил оружие, игра просто затирала поток для текстового файла..
Проблема в таймере Без него скрипт работает нормально но приходится жать пару раз на кнопку. Я просто понять не могу как таймер впихнуть в скрипт чтоб он был адекватен :).
-
5 минут назад, MasterGH сказал:
Все устают. Все читают твою тему, все кто может отвечает. Иди ко всем на встречу. К администрации, к тем, кто тебе пишет. Ищи пути общих интересов.
Просто в самом посте написано что ошибка вылетает местами при чем тут ссылки на "Запусти от админа, русские символы" если ошибка вылетает только в одной функции в которой таймер
-
57 минут назад, MasterGH сказал:
Для того чтобы узнать в чем ошибка в CE есть пошаговая отладка Lua скриптов.
Для того чтобы писать на CE Lua желательно знать знать Delphi (именно работа VCL (визуальные компоненты)), ассемблер, Lua и самое важное main.lua. Без работы с main.lua особого не напишешь.
Он привел цитаты на описание ошибки, которое есть у тебя на видео (видео он посмотрел). Связь с темой форума есть. Я не увидел нарушения правил форума.
Про нарушение ни кто не говорил. Я устал повторять уже често.. В видео видно что ошибки либо есть либо ее нет. Ошибка вылетает из-за таймера. Но ни как не из-за русских символов или из-за того что не от админа..
Спасибо за ответ. Попробую твой совет. -
8 часов назад, Garik66 сказал:
Вот сейчас я с тобой полностью согласен. Но своё взыскание всё же не сниму - у тебя в тех предыдущих сообщениях было оскорбление.
Не отрицаю. Трудно общаться с тем человеком который не читает топик а сразу пишет.
-
7 минут назад, lizzmack сказал:
Да-да, нашел канал Guided hacks, он именно на этой игре и показывает :). Правда сегодня уже умственно исчерпал себя, поэтому только теорию смотрю. завтра уже буду пытаться реализовывать практику
Удачи
-
3 часа назад, lizzmack сказал:
да, все верно, из указателя на хп он вышел на структуру. В начале темы я точно так же это сделал.( ты еще спросил, зачем указатели)
насчет каждые 18 байт - это я понял. Сейчас думаю уже как реализовывается аим(все необходимые адреса нашел), и пошел исследовать англоязычные уроки.Если что-то не получится советую пробовать в игре Assault Cube
-
36 минуты назад, lizzmack сказал:
Если я правильно понял скрипт - это сохранение-загрузка позиций?
У меня он не сработал( видать из-за фильтра ) когда ставил на сейвер 1 а потом на лоадер 1 - ничего не произошло
но в целом кажется понятно как это работает( если я правильно понял, это для игрока). Не совсем то, что я хотел узнать, наверное уже от круглосуточного лазанья в этой игре не смог правильно сформулировать вопрос. Мне свои координаты не очень нужны-то были, скорее коорды мобов, но кажется я почти понял как их записать теперь правильно в с++. За исключением адреса библиотеки - все еще не понял откуда он взялся.Скрытый текст[sl_Saver] - Сохранить координаты
[sl_Loader] - Загрузить
[sl_X] - Координата X
[sl_Y] - Координата Y
[sl_Z] - Координата Z
[sl_Adder] - Число которое добавим к чему либо.
Инструкция которую я взял для скрипта работает с мобами и нашим игроком. В части BracnhSaver - мы сохраняем координаты нашего игрока в [sl_X]... В части BranchLoader - мы загружаем наши координаты и замещаем координаты мобов нашей сохраненной.
[] - можешь вывести их в таблицу.Как я понял из видео что ты предоставил. Keng ( Михаил ) (Если не правильно указал извините) он взял указатель HP своего игрока и с него вышел на структуру где лежали данные не только его игрока но и остальных игроков ( ботов ). Через каждые 18байт лежали данные другого игрока.
Вечерком попробую в CS:GO ( Как на видео ) сделать. Отпишусь в этой теме сегодня или завтра. -
41 минуты назад, lizzmack сказал:
пытаюсь понять откуда у михаила ремизова в видео https://www.youtube.com/watch?v=qzh6nL85SHs взялись оффсеты, если в предыдущей части он говорил только о смещениях в структуре между указателями на игроков, и внутри них на хп этих игроков. Ибо вот у него таблица , а через момент уже адреса.
Конечная цель у меня - получить оффсет мобов. а там уже с ним что-нибудь поделать.
Вот к примеру Vacuum:
Скрытый текст[ENABLE] aobscanmodule(sl_Vacuum,KFGame.exe,F3 41 0F 10 47 08 F3 0F 5C) alloc(newmem,$1000,"KFGame.exe"+656AB1) label(code) label(return) label(BranchVacuum) label(BranchLoader) label(BranchSaver) label(sl_X) label(sl_Y) label(sl_Z) label(sl_Adder) label(sl_Loader) label(sl_Saver) registersymbol(sl_Loader) registersymbol(sl_Saver) registersymbol(sl_X) registersymbol(sl_Y) registersymbol(sl_Z) newmem: sl_Saver: dd 0 sl_Loader: dd 0 sl_X: dd 0 sl_Y: dd 0 sl_Z: dd 0 sl_Adder: dd (float)100 BranchVacuum: cmp [sl_Saver],0 jne BranchSaver cmp [sl_Loader],0 jne BranchLoader jmp code BranchSaver: cmp [r15+B0],000033FA jne code cmp [r15+AC],00000000 jne code cmp [r15+F4],#22 jne code fld dword ptr [r15] fadd dword ptr [sl_Adder] fstp dword ptr [sl_X] fld dword ptr [r15+04] fstp dword ptr [sl_Y] fld dword ptr [r15+08] fstp dword ptr [sl_Z] mov [sl_Saver],0 jmp code BranchLoader: cmp [r15+AC],00000000 je code cmp [r15+F4],4 jne code fld dword ptr [sl_X] fstp dword ptr [r15] fld dword ptr [sl_Y] fstp dword ptr [r15+04] fld dword ptr [sl_Z] fstp dword ptr [r15+08] jmp code code: movss xmm0,[r15+08] jmp return sl_Vacuum: jmp BranchVacuum nop return: registersymbol(sl_Vacuum) [DISABLE] sl_Vacuum: db F3 41 0F 10 47 08 unregistersymbol(sl_Vacuum) unregistersymbol(sl_Loader) unregistersymbol(sl_Saver) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "KFGame.exe"+656AB1 "KFGame.exe"+656A81: 41 80 BE C0 00 00 00 01 - cmp byte ptr [r14+000000C0],01 "KFGame.exe"+656A89: 75 67 - jne KFGame.exe+656AF2 "KFGame.exe"+656A8B: 41 F7 86 F0 00 00 00 00 10 00 00 - test [r14+000000F0],1000 "KFGame.exe"+656A96: 75 53 - jne KFGame.exe+656AEB "KFGame.exe"+656A98: 85 C9 - test ecx,ecx "KFGame.exe"+656A9A: 75 4F - jne KFGame.exe+656AEB "KFGame.exe"+656A9C: F3 41 0F 10 0F - movss xmm1,[r15] "KFGame.exe"+656AA1: F3 0F 5C 4D A0 - subss xmm1,[rbp-60] "KFGame.exe"+656AA6: F3 41 0F 10 57 04 - movss xmm2,[r15+04] "KFGame.exe"+656AAC: F3 0F 5C 55 A4 - subss xmm2,[rbp-5C] // ---------- INJECTING HERE ---------- "KFGame.exe"+656AB1: F3 41 0F 10 47 08 - movss xmm0,[r15+08] // ---------- DONE INJECTING ---------- "KFGame.exe"+656AB7: F3 0F 5C 45 A8 - subss xmm0,[rbp-58] "KFGame.exe"+656ABC: F3 44 0F 5E E7 - divss xmm12,xmm7 "KFGame.exe"+656AC1: F3 41 0F 59 CC - mulss xmm1,xmm12 "KFGame.exe"+656AC6: F3 41 0F 59 D4 - mulss xmm2,xmm12 "KFGame.exe"+656ACB: F3 41 0F 59 C4 - mulss xmm0,xmm12 "KFGame.exe"+656AD0: F3 41 0F 11 8E 8C 01 00 00 - movss [r14+0000018C],xmm1 "KFGame.exe"+656AD9: F3 41 0F 11 96 90 01 00 00 - movss [r14+00000190],xmm2 "KFGame.exe"+656AE2: F3 41 0F 11 86 94 01 00 00 - movss [r14+00000194],xmm0 "KFGame.exe"+656AEB: 45 89 AE 94 01 00 00 - mov [r14+00000194],r13d "KFGame.exe"+656AF2: 49 8B 8E 68 02 00 00 - mov rcx,[r14+00000268] }
Фильтры на быструю руку. Репак от nemos.
Насчет видео:Скрытый текстconst DWORD plr_num_offset = 0x93CCB8 - Адрес библиотеки const DWORD plr_list_offset = 0x0089944C - Это адрес указателя const DWORD hp_offset = 0x214 - Это смещение const DWORD coords_offset = 0x214 - Это смещение
Если не так меня поправят.
-
38 минуты назад, lizzmack сказал:
Нашел 2 указателя,
один с таким же адресом, что и хп
второй имеет иной адрес, указывает туда же, посмотрел по 10 указателям по этим же смещениям тоже коорды. Получается, что тот который отличается - это оффсет мобов?Что-то я туплю.. Но для чего ты искал указатель? Просто нашел координату поставил бряк посмотрел. Нашел инструкцию работающую с тобой ( ну или со всеми ). Дальше определяешь структуру на основе этой инструкции. Если инструкция работает только с тобой то фильтры не нужны если со всеми то фильтры пишешь. Можешь сказать что ты хочешь сделать?
-
13 минуты назад, lizzmack сказал:
Но вот наткнулся на тупик, не могу найти в структурах позиции (по x y z) себя, а так же мобов.(хотел попробовать аим)
Не все адреса связаны в одну структуру. Ищи просто координаты через поиск. Float - неизвестное и для быстроты ищи Z координату ( Высота ). Встал повыше? Отсеиваешь значение увеличилось. Встал пониже? Отсеиваешь значение уменьшилось. И так пока не найдешь И да не стоит создавать новую тему. Ты мог в старой своей отписать
-
16 минуту назад, 2zolo2 сказал:
К чему ты тут спамишь? В видео ясно видно что это ошибка то вылетает то нет. Код не меняется но ошибка либо вылетает либо нет. Все что ты делаешь опять спамишь. Все запущенно от админа и нет ни где русских символов. И мой пост не только об ошибке но еще и помощи в правильном написании скрипта и как туда впихнуть таймер. Вообще читай пост..
Конечно извините но сделайте уже предупреждение этому человеку он даже видео не посмотрел а уже пишет пост. В видео ясно видно что на первых секундах ошибки нету как только я открываю редактор и выполняю скрипт то ошибка появляется и так 50\50 либо будет либо не будет ее.
И да я все таки добавлю в ЧС тебя.- 2
-
Не знаю какой заголовок написать.. Не могли бы вы мне помочь насчет ToggleBox.
Суть такова:
Делаю чит в CE на LUA ( Правильно написал? ). Делаю функцию телепорта по нажатию на кнопку. Так вот я написал скрипт ->
Скрытый текстfunction CEToggleBox2Click(sender) if UDF1.CEToggleBox2.Caption == "Teleport To Waypoint" then UDF1.CEToggleBox2.Caption = "Teleported" autoAssemble([[ --SCRIPT ]]) control_setEnabled(UDF1.CETimer1,true) else if UDF1.CEToggleBox2.Caption == "Teleported" then UDF1.CEToggleBox2.Caption = "Teleport To Waypoint" autoAssemble([[ --SCRIPT ]]) control_setEnabled(UDF1.CETimer1,false) end end end function CETimer1Timer(sender) if UDF1.CEToggleBox2.Caption == "Teleported" then writeInteger('TeleToWayp', 1) UDF1.CEToggleBox2.Caption = "Teleport To Waypoint" control_setEnabled(UDF1.CETimer1,false) end end
Скрипт работает но местами выдает ошибку а иногда нет ( Что меня удивило очень ). Хотел у вас проконсультироваться то как сделать скрипт более "чистым" и правильным.
Скрипт должен работать примерно так -> Жмем кнопку -> Проходит XX секунд -> Мы перемещаемся -> Скрипт не должен отключаться лишь переменная [TeleToWayp] смещаться на 0.
Видео:
Так же хочу узнать где можно найти книжки по LUA и по C#. -
11 час назад, Vasil сказал:
а что они мне могут дать эти кординатеы и вообще как их искать
Извини конечно я понимаю что ты новичок в CE но смысл тогда сразу брать Теру для "взлома"?
Координаты тебе могут дать все и ничего. Через них возможно будет выйти на скорость персонажа. -
15 минуту назад, MasterGH сказал:
Я забыл "else" написать )
Подправил и проверю. Еще раз спасибо.
18 минуту назад, Garik66 сказал:Но what228, не нужно цитировать - копируя полностью сообщение (особенно, если в сообщении скрипты, таблицы и видео), топик становится менее читабельным, лучше выделяйте нужную строчку в сообщении и её цитируйте. (поправил твоё предыдущее сообщение)
Учту.
19 минуту назад, Garik66 сказал:И если выкладываешь скрипт, используй и тег "спойлера" и тег "кода" - в фак я записал видео-фак про это.
Учту. Просто вчера когда писал сообщение оборвался интернет и тег "код" выдавал ошибку когда пытался его поставить.
-
4 часа назад, MasterGH сказал:
Возможно так будет работать
Спасибо огромное! Работает все кроме Default всегда пишется 0. И да скорее всего именно такой стиль без активации кнопки более простой в использовании.
2 часа назад, Garik66 сказал:нет.
Ошибка в наших кривых ручках
Поправил в таблице эти ошибки, но не тестил - не на чем.
табличка:
Спасибо огромное! Работает хорошо. На счет кривых ручек это правда
Спасибо за ответы. Учту свои ошибки- 1
-
1 час назад, Garik66 сказал:
Отдельно АА-скрипт без LUA-части работает?
В нём по крайней мере две ошибки.
Короче попробуй так:
function CEButton1Click(sender) if UDF1.CEButton1.Caption == "Player Speed - On" then UDF1.CEButton1.Caption = "Player Speed - Off" autoAssemble([[ aobscanmodule(LoadsiIska,Defiance.exe,8B 01 35 C1 99 54 D3) alloc(newmem,$1000) label(code) label(return) label(movspeed_value) registersymbol(movspeed_value) registersymbol(LoadsiIska) newmem: cmp [ecx+28],FFFFFFFF jne code mov eax,[movspeed_value] xor eax,D35499C1 mov [ecx],eax jmp code code: mov eax,[ecx] xor eax,D35499C1 jmp return movspeed_value: dd (float)0 LoadsiIska: jmp newmem nop nop return: ]]) control_setEnabled(UDF1.CEComboBox1,true) else if UDF1.CEButton1.Caption == "Player Speed - Off" then UDF1.CEButton1.Caption = "Player Speed - On" autoAssemble([[ LoadsiIska: db 8B 01 35 C1 99 54 D3 unregistersymbol(LoadsiIska) unregistersymbol(movspeed_value) dealloc(newmem) ]]) control_setEnabled(UDF1.CEComboBox1,false) end end end function CEComboBox1Change(sender) SpeedRate = getProperty(UDF1.CEComboBox1,'ItemIndex') if SpeedRate == 0 then writeFloat('movspeed_value',6.5) end if SpeedRate == 1 then writeFloat('movspeed_value',10.5) end if SpeedRate == 2 then writeFloat('movspeed_value',15.5) end if SpeedRate == 3 then writeFloat('movspeed_value',50.5) end end
PS: Если не сработает, проверь сначала АА-скрипт, фильтр ( [ecx+28],FFFFFFFF).
Выложи сюда АА-скрипт, лучше с Логами и скрин как ты добавляешь адрес movspeed_value в таблицу.
Насчет скрипта да это моя ошибка я его просто скопировал потом поправил и забыл скопировать повторно. Насчет работы работает все нормально.
Сам скрипт:Скрытый текст[ENABLE]
aobscanmodule(LoadsiIska,Defiance.exe,8B 01 35 C1 99 54 D3)
alloc(newmem,$1000)label(code)
label(return)
label(movimena)
label(movspeed_value)
registersymbol(movspeed_value)newmem:movspeed_value:
dd (float)4.5movimena:
cmp [ecx+28],FFFFFFFF
jne code
mov eax,[movspeed_value]
xor eax,D35499C1
mov [ecx],eax
jmp codecode:
mov eax,[ecx]
xor eax,D35499C1
jmp returnLoadsiIska:
jmp movimena
nop
nop
return:
registersymbol(LoadsiIska)[DISABLE]
LoadsiIska:
db 8B 01 35 C1 99 54 D3unregistersymbol(LoadsiIska)
unregistersymbol(movspeed_value)
dealloc(newmem){
// ORIGINAL CODE - INJECTION POINT: "Defiance.exe"+1482D4"Defiance.exe"+1482C9: CC - int 3
"Defiance.exe"+1482CA: CC - int 3
"Defiance.exe"+1482CB: CC - int 3
"Defiance.exe"+1482CC: CC - int 3
"Defiance.exe"+1482CD: CC - int 3
"Defiance.exe"+1482CE: CC - int 3
"Defiance.exe"+1482CF: CC - int 3
"Defiance.exe"+1482D0: 55 - push ebp
"Defiance.exe"+1482D1: 8B EC - mov ebp,esp
"Defiance.exe"+1482D3: 51 - push ecx
// ---------- INJECTING HERE ----------
"Defiance.exe"+1482D4: 8B 01 - mov eax,[ecx]
"Defiance.exe"+1482D6: 35 C1 99 54 D3 - xor eax,D35499C1
// ---------- DONE INJECTING ----------
"Defiance.exe"+1482DB: 89 45 FC - mov [ebp-04],eax
"Defiance.exe"+1482DE: D9 45 FC - fld dword ptr [ebp-04]
"Defiance.exe"+1482E1: 8B E5 - mov esp,ebp
"Defiance.exe"+1482E3: 5D - pop ebp
"Defiance.exe"+1482E4: C3 - ret
"Defiance.exe"+1482E5: CC - int 3
"Defiance.exe"+1482E6: CC - int 3
"Defiance.exe"+1482E7: CC - int 3
"Defiance.exe"+1482E8: CC - int 3
"Defiance.exe"+1482E9: CC - int 3
}
Насчет LUA таблицы. Я пбывал не только с этим скриптом но и с другими ошибка именно на стороне ComboBox'a ибо скрипт переключается а вот ComboBox не вносит изменений.
Видео -
Таблица - http://rgho.st/6DdvwqnDJ- 2
-
4 часа назад, lizzmack сказал:
UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ.
но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел.Вот работает при получении урона:
Скрытый текст[ENABLE] aobscanmodule(PlayerHealth,KFGame.exe,CC 07 89 06 48 83 C4 20) alloc(newmem,$1000,"KFGame.exe"+55CD0) label(code) label(return) newmem: cmp [rdi+310],8110C000 jne code cmp [rdi+434],00008387 jne code mov [rdi],64 jmp code code: mov eax,[rdi] mov [rsi],eax add rsp,20 jmp return PlayerHealth: jmp newmem nop nop nop return: registersymbol(PlayerHealth) [DISABLE] PlayerHealth: db CC 07 89 06 48 83 C4 20 unregistersymbol(PlayerHealth) dealloc(newmem)
Еще на пробу с таким работал но игра крашится не знаю почему:
Скрытый текст[ENABLE] aobscanmodule(pl_HP,KFGame.exe,41 8B 00 41 89 02 C3) alloc(newmem,$1000,"KFGame.exe"+E8EBE) label(code) label(return) newmem: cmp [r8+310],8110C000 jne code cmp [r8+434],00008387 jne code mov [r8],64 jmp code code: mov eax,[r8] mov [r10],eax jmp return pl_HP: jmp newmem nop return: registersymbol(pl_HP) [DISABLE] sl_HP: db 41 8B 00 41 89 02 unregistersymbol(pl_HP) dealloc(newmem)
Думаю просто нужно еще фильтр накинуть и мб норм будет. Т.к. в самые первые моменты я с скриптом #2 ( mov eax,[r8] ) побегал 2 волны и не вылетало. Потом после первого вылета стало вылетать очень часто. Но не буду этим заниматься т.к. игра мне не понравилась извини.
- 1
CEComboBox1 как сделать выпадающий список
in Cheat Engine
Опубликовано · Изменено пользователем what228
function CEComboBox1Change(sender) ViborColor = getProperty(UDF1.CEComboBox1,'ItemIndex') if ViborColor == 0 then local colorPicker = getMainForm().findComponentByName("ColorDialog1") colorPicker.Execute() if colorPicker.Execute then UDF1.CELabel1.Font.Color = colorPicker.Color end end if ViborColor == 1 then local colorPicker = getMainForm().findComponentByName("ColorDialog1") colorPicker.Execute() if colorPicker.Execute then UDF1.CELabel2.Font.Color = colorPicker.Color end end if ViborColor == 2 then local colorPicker = getMainForm().findComponentByName("ColorDialog1") colorPicker.Execute() if colorPicker.Execute then UDF1.CELabel3.Font.Color = colorPicker.Color end end if ViborColor == 3 then local colorPicker = getMainForm().findComponentByName("ColorDialog1") colorPicker.Execute() if colorPicker.Execute then UDF1.CELabel4.Font.Color = colorPicker.Color end end end
На вот такой Теперь можешь выбрать какой угодно цвет для каждого CELabel#.
Только под свою таблицу поправь его.