MasterGH Опубликовано 29 января, 2010 Поделиться Опубликовано 29 января, 2010 Здесь можно задавать общие вопросы по Cheat Engine в том числе и русской.Если ваш вопрос заслуживает особого внимания, то вы можете создать отдельную тему.Старайтесь задавать вопросы, которые больше относятся к специфике Cheat Engine, а не по играм которые ей можно обмануть. К этим вопросам можно отнести применение той или иной функции, общие настройки Cheat Engine, настройки отдельных функций, ошибки и т.д. Вопрос должен быть привязан к специфике cheat engine, а уже в последнюю очередь к игре. В противном случае лучше задать вопрос в форуме по взлому игр. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 29 января, 2010 Поделиться Опубликовано 29 января, 2010 После того как скачал любую версию СЕ и нажимаю "Открыть", выходит вот такая ошибка:Перепробовал не все, так как не знаю что делать. Так, что делать? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 января, 2010 Автор Поделиться Опубликовано 29 января, 2010 Данная проблема произошла по моей вине в русской CE версии ниже 1.0.0 (а может и более ранняя версия, т.е. та, которая ниже 1.0.0)Решение такое:1) Сохранить нужные файлы, например, таблицы.2) Корректно удалить CE инсталлятором (вроде такой должен быть, если я не ошибаюсь)3) Установить инсталлятором англискую CE4) Скопировать в директорию программы, главный файл CE RUS ни ниже 1.0.0. ,если нужно пользоваться русской версией.Проблема из-за того, что в реестре остаются не верные данные от CE RUS после её закрытия, после чего могут быть проблемы с английской версией, которая также напортачит в реестре. Затем ни одна версия не откроется.Увы, моя вина... но сейчас такого быть не должно. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 29 января, 2010 Поделиться Опубликовано 29 января, 2010 О_о! Помогло! Спасибо большое Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 29 января, 2010 Поделиться Опубликовано 29 января, 2010 Еще один вопрос, тупой. Просто интересно. Возможно ли каким либо образом СЕ открыть таблицы ArtMoney? В СЕ нажимаешь откурыть, в "Тип Файлов" выбираю "ArtMoney Tables". Выбираю какую нужно таблицу и выходит что СЕ не может загрузить версию таблиц ArtMoney. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 января, 2010 Автор Поделиться Опубликовано 29 января, 2010 Я думаю, ты делал всё правильно, наверно, просто есть какие-то ошибки в коде CE. В CE предусмотрено открывать таблицы артмани, попробуй открыть английской версией CE, если не пробовал.О багах русской версии.1) В версии CE RUS 1.2.0 трейнер сделать почему-то нельзя. 2) Почему-то CE автоматически сохраняет таблицы с названиями без расширения .CT. Например у меня в папке лежит "spider.CT" и просто "spider". Если вас беспокоит этот "мусор", то вы можете его удалить.3) В русской версии до 1.2.0 замечено, что генерируемые ей трейнеры прибавили в весе чуть ли не 6 мб.Мною было решено, дождаться выхода версии 5.6 и модернизировать уже только её. А версию CE 5.5 RUS 1.2.0 можно считать больше не обновляемой. Следующая версия будет CE 5.6 RUS. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 29 января, 2010 Поделиться Опубликовано 29 января, 2010 Я думаю, ты делал всё правильно, наверно, просто есть какие-то ошибки в коде CE. В CE предусмотрено открывать таблицы артмани, попробуй открыть английской версией CE, если не пробовал.[...].Да, английской тоже пробовал. Может это из-за того что у меня ArtMoney версии 7.30? Сейчас уже более поздняя версия, намного, есть. Мною было решено, дождаться выхода версии 5.6 и модернизировать уже только её. А версию CE 5.5 RUS 1.2.0 можно считать больше не обновляемой. Следующая версия будет CE 5.6 RUSУх ты...интересно на это посмотреть. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 2 февраля, 2010 Поделиться Опубликовано 2 февраля, 2010 А в СЕ так и должно быть: Когда пытаюсь сохранить таблицу, он мне выводит окно - "Сделай трейнер...пожалуйста". Я его посылаю и все...потом заново. Короче, нельзя что ли иметь таблицу в СЕ как в ArtMoney? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 февраля, 2010 Автор Поделиться Опубликовано 2 февраля, 2010 Короче, нельзя что ли иметь таблицу в СЕ как в ArtMoney?Можно. Сохраняешь как "имя файла.CT" и будет сохранён файл с табличными данными. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 3 февраля, 2010 Поделиться Опубликовано 3 февраля, 2010 То-то я удивился, что в версии 1.2.0 тренер получился такой здоровый))) метр то многовато (но терпимо), а шесть уже перебор..И кстати в 1.2.0 у меня не получалось сделать тренер. Причина оказалась в иконке. Если пытаюст изменить иконку файла, тренер генерируется, но ругается при запуске что мол "приложение не является Win32". Если оставить иконку по умолчанию, всё работает. Ждём новых версий Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 февраля, 2010 Автор Поделиться Опубликовано 3 февраля, 2010 Да, я знаю про этот баг с иконкой. Это не столько моя вина, сколько отсутствие описания о том, как настраивать компилируемые проекты. На то чтобы с иконкой разобраться у меня не хватило нервов. А размер генерируемого терейнера увеличился, когда я либо подправил криво макросы видимости, либо когда дописывал куски кода, чтобы можно было идентифицировать активирующие скрипты, которые всегда активируются первыми и один раз.Откопал исходники сходники CE 5.6, сейчас качну и гляну рабочие ли они. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 февраля, 2010 Автор Поделиться Опубликовано 4 февраля, 2010 Задали мне такой вопрос, про то как работают активирующие скрипты. Разберём пример.//=========================================// ParaWorld// Game Version : 1.0// Script Version: 1.0// CE Version : 5.5// GodMode and Resources// 16-Jan-2010//=========================================[ENABLE]alloc(MyCode,1024)//=========================================// Declaration sectionlabel(_GodMode)label(_BackGM)label(_ExitGM)label(_MonID)label(_BackMI)label(_MonRes)label(_BackMR)label(_ExitMR)label(pHero)label(pUnit)label(pRes)label(iEnableGM)label(iEnableMR)label(iPlayerID)registersymbol(MyCode)registersymbol(pHero)registersymbol(pUnit)registersymbol(pRes)registersymbol(iEnableGM)registersymbol(iEnableMR)registersymbol(iPlayerID)//=========================================// Hacking PointsPWServer.exe+1c408c: jmp _GodMode nop_BackGM:PWServer.exe+045540: jmp _MonID nop nop_BackMI:PWServer.exe+237944: jmp _MonRes nop_BackMR:MyCode://=========================================_GodMode: cmp dword ptr [iEnableGM],0 je _ExitGM // Jump if feature is disabled mov eax,[iPlayerID] // Get player ID cmp eax,[esi+10] // Is it a playerґs Object? jne _ExitGM // Jump if false mov [pHero],esi // Save pointer for debugging mov dword ptr [esp+08],0 // value2decrease = 0 mov eax,[esi+0000061c] // Get Max HP mov [esi+00000618],eax // Update HP_ExitGM: fld dword ptr [esi+00000618] // Original code jmp _BackGM // Back to main code//=========================================_MonID: mov ecx,[esp+2c] // Original code mov [pUnit],ecx // Save ptr for debugging push ebx mov ebx,[ecx+10] // Original code mov [iPlayerID],ebx // Save Player ID for further use pop ebx cmp eax,[ecx+10] // Original code jmp _BackMI // Back to main code//=========================================// EDI = ptr to Worker_MonRes: cmp dword ptr [iEnableMR],0 je _ExitMR // Jump if feature is disabled or edi,edi // Valid pointer? jz _ExitMR // Jump if false mov eax,[iPlayerID] // Get player ID cmp eax,[edi+10] // Is it a playerґs worker? jne _ExitMR // Jump if false mov [pRes],esi // Save ptr for debugging mov eax,459c4000 // Get cheat value cmp eax,[esi+000002dc] // Current value >= cheat value? jle _ExitMR // Jump if true mov [esi+000002dc],eax // Update value_ExitMR: fld dword ptr [esi+000002dc] // Original code jmp _BackMR // Back to main code//=========================================// VariablespHero: dd 0pUnit: dd 0 pRes: dd 0 iEnableGM: dd 1iEnableMR: dd 1iPlayerID: dd 0//=========================================// Original Codes[DISABLE]PWServer.exe+1c408c: fld dword ptr [esi+00000618]PWServer.exe+045540: mov ecx,[esp+2c] cmp eax,[ecx+10]PWServer.exe+237944: fld dword ptr [esi+000002dc]dealloc(MyCode)unregistersymbol(MyCode)unregistersymbol(pHero)unregistersymbol(pUnit)unregistersymbol(pRes)unregistersymbol(iEnableGM)unregistersymbol(iEnableMR)unregistersymbol(iPlayerID)Пишем вспомогательные скрипты, типа этого[ENABLE]iEnableGM:db 01[DISABLE]iEnableGM:db 00//Скрипт2На главный скрипт вешаем хот-кей ctrl+0.На скрипт2 вешаем хот-кей ctrl+1.Когда идём в игру, то нажимает на ctrl+0 один раз. Затем можем включать читы, например нажав ctrl+1.Активирующим скриптом я называю первый скрипт. Остальные - вспомогательными. Ссылка на комментарий Поделиться на другие сайты Поделиться
ArxLex Опубликовано 7 февраля, 2010 Поделиться Опубликовано 7 февраля, 2010 Вот уже дождались выхода версии 5.6, теперь осталось только подождать мод от Мастера Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 1 апреля, 2010 Поделиться Опубликовано 1 апреля, 2010 неплохой прикол, я ток потом догадался что эта хрень только первого апреля появляется ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 апреля, 2010 Поделиться Опубликовано 1 апреля, 2010 Ага, я в прошлом году на эту фишку накололся ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 апреля, 2010 Автор Поделиться Опубликовано 1 апреля, 2010 Бывают ещё сообщения: strhappybirthday='Let''s sing Happy Birthday for Dark Byte today!'; strXMess='Merry christmas and happy new year'; strNewyear='And what are your good intentions for this year? ;-)'; strfuture='Wow,I never imagined people would use Cheat Engine up to today';Если в образовательных целях, то сообщение с первоапрельской шуткой вылазит здесь.. [cod]procedure TMainForm.FormShow(Sender: TObject);resourcestring strhappybirthday='Let''s sing Happy Birthday for Dark Byte today!'; strXMess='Merry christmas and happy new year'; strNewyear='And what are your good intentions for this year? ;-)'; strfuture='Wow,I never imagined people would use Cheat Engine up to today';var reg: tregistry; modifier: dword; key: dword; hotkey: string; year,month,day: word; temp:string; i: integer; outputfile: textfile; go:boolean; loadt: boolean; firsttime: boolean; x: array of integer;begin Set8087CW($133f); loadt:=false; edit2.Text:=format('%.1f',[1.0]); reg:=Tregistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if not Reg.OpenKey('SoftwareCheat Engine',false) then begin if Reg.OpenKey('SoftwareCheat Engine',true) then begin //write some default data into the register reg.WriteBool('Undo',true); reg.writeBool('Advanced',true); reg.writeBool('SeperateThread',true); reg.writebool('Use Hyperscan if posible',false); reg.WriteInteger('ScanThreadpriority',formsettings.combothreadpriority.itemindex); end; end; except end; if reg.ValueExists('First Time User') then firsttime:=reg.ReadBool('First Time User') else firsttime:=true; if firsttime then begin reg.WriteBool('First Time User',false); if messagedlg('Do you want to try out the tutorial?',mtconfirmation,[mbyes,mbno],0)=mryes then shellexecute(0,'open','Tutorial.exe','','',sw_show); end;// animatewindow(mainform.Handle,10000,AW_CENTER); //mainform.repaint; fronttext:='brings Cheat engine to front'; if dontrunshow then exit; dontrunshow:=true; decodedate(now,year,month,day); if (month=7) and (day=1) then showmessage(strhappybirthday); if (month=12) and ((day=25) or (day=26)) then Showmessage(strXmess); if (month=1) and (day=1) then showmessage(strnewyear ); if (month=1) and (day=1) and (year>=2010) then showmessage(strFuture); if (month=4) and (day=1) then aprilfools:=true; if aprilfools=true then Messagedlg('Your license to use Cheat Engine has expired. You can buy a license to use cheat engine for 1 month for $200, 6 months for only $1000 and for 1 year for only $1800.'+' If you don''t renew your license Cheat Engine will be severely limited in it''s abilities. (e.g: Next scan has been disabled)',mtwarning,[mbok],0); LoadSettingsFromRegistry; //Load the table if one was suplied overridedebug:=false; if paramcount>=1 then begin loadt:=true; if uppercase(paramstr(1))='-O' then begin OverrideDebug:=true; loadt:=false; end; if paramcount>1 then begin //extra param temp:=paramstr(2); if length(temp)>4 then if temp[1]+temp[2]+temp[3]='/o=' then begin //output to: temp:=copy(temp,4,length(temp)-3); assignfile(outputfile, temp); rewrite(outputfile); for i:=0 to numberofrecords-1 do writeln(outputfile,memrec.description+' '+IntToHex(memrec.Address,8)); closefile(outputfile); showmessage(temp+' has been created'); end; end; end else begin end; if loadt then begin LoadTable(paramstr(1),false); updatescreen; updatelist; end; if GetSystemType<3 then //not a supported os for hardware breakpoints with formsettings do begin rdWriteExceptions.Checked:=true; rbDebugRegisters.Enabled:=false; label6.Enabled:=false; label7.Enabled:=false; rbDebugAsBreakpoint.Enabled:=false; rbInt3AsBreakpoint.Checked:=true; end; if (GetSystemType<4) {or (is64bitos)} then //not nt or later begin with formsettings do begin cbKernelQueryMemoryRegion.enabled:=false; cbKernelReadWriteProcessMemory.enabled:=false; cbKernelOpenProcess.enabled:=false; cbProcessWatcher.Enabled:=false; cbKDebug.enabled:=false; cbGlobalDebug.enabled:=false; TauntOldOsUser.Visible:=true; label25.Enabled:=false; end; end; vartypechange(vartype); adjustbringtofronttext; if aprilfools then caption:=cenorm+' EXPIRED!'; if autoattachtimer.enabled then autoattachcheck; //SMenu:=GetSystemMenu(handle,false); //don't put this in oncreate, just don't if memscan=nil then memscan:=tmemscan.create(progressbar1); memscan.setScanDoneCallback(mainform.handle,wm_scandone); FileAccessTest; end;[/cod]Оно мне уже надоело своим появление и я его кильну на... так же как и предложение потренироваться при первом запуске (при сбросе настроек в реестре) Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 2 апреля, 2010 Поделиться Опубликовано 2 апреля, 2010 +1, приколы это хорошо конечно, но порой бесят, да и предложение потренироваться тоже как то не серьёзно... Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 3 апреля, 2010 Поделиться Опубликовано 3 апреля, 2010 Приведу пример скрипта по добавлению опыта по нажатию горячей клавиши.[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(_Exp)registersymbol(_Exp)H5_Game.exe+75AA80:jmp newmemreturnhere:newmem:cmp byte ptr [_Exp],1jne originalcodeadd [ecx+60],3E8mov [_Exp],0originalcode:mov eax,[ecx+60]retint 3jmp returnhere_Exp:db 0 [DISABLE]H5_Game.exe+75AA80:mov eax,[ecx+60]retint 3после активации скрипта нужно добавить в таблицу значений адрес _Exp и навесить горячую клавишу чтобы присваивать значение 1. Как только скрипт добавит значение то переменная станет равна 0. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 3 апреля, 2010 Поделиться Опубликовано 3 апреля, 2010 Вот ещё самописный скрипт на тему "Активирующие скрипты".{Герои Меча и Магии 5 - Повелители ордыВерсия игры : 3.1Версия скрипта : 1.1Версия СЕ : 5.6Автор: Akama}[ENABLE]alloc(MyCode,2048)label(_MovePoints)label(_ExitMP)label(_Troops)label(_ExitT)label(_Resource)label(_ExitR)label(_Expirience)label(_BackExp)label(_ExitExp)label(_Mana)label(_ExitM)label(_Buildings)label(_ExitB)label(_DarkEnergy)label(_ExitDE)label(_Atributes)label(_ExitAtr)label(_MP)label(_Tr)label(_Bl)label(_M)label(_Res)label(_DE)label(_Atr)label(_Exp)registersymbol(MyCode)registersymbol(_MP)registersymbol(_Tr)registersymbol(_Bl)registersymbol(_M)registersymbol(_Res)registersymbol(_DE)registersymbol(_Atr)registersymbol(_Exp)//=========================================//??? ???????MyCode:_MovePoints:cmp [_MP],1jne _ExitMPcmp ecx,ebxjne _ExitMP//push eax//mov [ecx+130],1E240//mov eax,[ecx+130]mov eax,1E240mov [ecx+12c],eax//pop eaxjmp _ExitMP_Troops:cmp [_Tr],1jne _ExitTmov [eax+20],92Ejmp _ExitT _Buildings:cmp [_Bl],1jne _ExitBmov [esi+80],1jmp _ExitB _Expirience:cmp byte ptr [_Exp],1jne _BackExpadd [ecx+60],3E8mov [_Exp],0_BackExp:mov eax,[ecx+60]retint 3jmp _ExitExp_DarkEnergy:cmp [_DE],1jne _ExitDEadd [ecx+638],3E8mov [_DE],0jmp _ExitDE_Atributes:cmp [_Atr],1jne _ExitAtradd [ecx+30],1add [ecx+34],1add [ecx+38],1add [ecx+3c],1add [ecx+40],0Aadd [ecx+44],0Amov [_Atr],0//mov eax,[ecx+30]xor edx,edxjmp _ExitAtr_Mana:cmp [_M],1jne _ExitMpush ebxmov ebx,[ecx+00000140]mov [ecx+13c],ebxpop ebxmov eax,[ecx+0000013c]jmp _ExitM_Resource:cmp [_Res],1jne _ExitRadd [ecx],1F4add [ecx+4],1F4add [ecx+8],1F4add [ecx+c],1F4add [ecx+10],1F4add [ecx+14],1F4add [ecx+18],2B995Amov [_Res],0jmp _ExitR//=========================================//??????????_MP:db 0_Tr:db 0_Bl:db 0_Res:db 0_DE:db 0_M:db 0_Atr:db 0_Exp:db 0//=========================================//???????? ??????????H5_Game.exe+74BCBD:jmp _MovePointsnop_ExitMP:H5_Game.exe+1EDE0D:jmp _Troopsnopnopnopnopnop_ExitT:H5_Game.exe+8D4E0F:jmp _Buildingsnopnopnopnopnop_ExitB:H5_Game.exe+6F7F40:jmp _Mananop_ExitM:H5_Game.exe+FB90B:jmp _DarkEnergy_ExitDE:H5_Game.exe+74C190:jmp _Atributes_ExitAtr:H5_Game.exe+5D0470:jmp _Resource_ExitR:H5_Game.exe+75AA80:jmp newmem_ExitExp://========================================[DISABLE]H5_Game.exe+74BCBD:mov [ecx+0000012c],eaxH5_Game.exe+1EDE0D:mov edx,[eax+20]mov [esp+000000e4],ecxH5_Game.exe+8D4E0F:mov [esi+00000080],0H5_Game.exe+FB90B:mov [ecx+00000638],eaxH5_Game.exe+74C190:mov eax,[ecx+30]xor edx,edxH5_Game.exe+5D0470:mov esi,[ecx]cmp esi,[edx+ecx]H5_Game.exe+6F7F40:mov eax,[ecx+0000013c]H5_Game.exe+75AA80:mov eax,[ecx+60]retint 3dealloc(MyCode)unregistersymbol(_M)unregistersymbol(_MP)unregistersymbol(_Tr)unregistersymbol(_Bl)unregistersymbol(_Res)unregistersymbol(_DE)unregistersymbol(_Exp)unregistersymbol(MyCode)скрипт сам писал, и трейнер тоже по нему существует. (Верите или нет, но это единственный трейнер для русской игры 3.1)P.S.Кстати, MasterCH, я всё таки разобрался в чём проблема с опытом, я там слегна нарушил порядок инструкций, по-этому игра крашилось, сейчас всё адекватно. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 апреля, 2010 Автор Поделиться Опубликовано 3 апреля, 2010 Если нужны мои комментарии, то первый твой пример в новинку может быть полезным для многих, а второй можно воспринять как закрепление материала по "активирующим" скриптам Немного поправлю:newmem:cmp byte ptr [_Exp],1jne short originalcode // корткий прыжок не пишет лишних нопов в теле чит-кодаadd [ecx+60],3E8mov [_Exp],0originalcode:mov eax,[ecx+60]ret // эта инструкция "конечная станция" поэтому...int 3// ...можно было не писатьjmp returnhere // ...можно было не писать Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 апреля, 2010 Поделиться Опубликовано 6 апреля, 2010 Ну дык мы ж народ простой, чё пишут то в оригинал код и вписываем )))jmp short можно использовать в таких огромных скриптах как мой? Там прыжок не такой уж и маленький... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 апреля, 2010 Автор Поделиться Опубликовано 6 апреля, 2010 Akama, попробуй сам проверить, я к сожалению не помню: вроде прыжок может быть на расстоянии (0xFFFF-1) / 2 вверх и вниз. Или (0xFF-1)/2. Или без "-1" Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 26 апреля, 2010 Поделиться Опубликовано 26 апреля, 2010 Чисто для справки из личного опыта по написанию огромных скриптов дам совет: прежде чем писать само тело скрипта ОБЯЗАТЕЛЬНО нужно для одной функции создать 3 лейбла - начало функции, ориг код и выход из функции.Т.е. если вы будете создавать функцию бессмертия, убедитесь что в лейблах есть такие строки.label(GodMode) // Это начало читаlabel(BackGM) // это начало оригинального кода того же читаlabel(ExitGM) // это выход из него. (аналог returnhere)И так в каждой функции, должно быть начало, кусок ориг кода и выход из него. Без чего то либо из этих трёх может случиться крах игры либо неадекватное действие скрипта.Вот собственно и всё ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 28 апреля, 2010 Поделиться Опубликовано 28 апреля, 2010 Ещё один мини совет: если хотите чтобы в переменную вписывался нужный адрес (например здоровья), то:1) если функция типа А, то просто копируйте значение указателя в переменную.2) Если тип В или С, то перед этим нужно отфильтровать остальные значения, чтобы в обработку попал только нужный адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 апреля, 2010 Автор Поделиться Опубликовано 29 апреля, 2010 В свою очередь напомню (чтобы другим не лазить и не искать):Классификация инструкций сработавших при брейкпоинте.-Тип АДанная инструкция работает с некоторым единственным параметром только определённого игрового объекта. Например, здоровье от структуры находится по смещению +155. Инструкция А, работает только с этой структурой, только со смещением +155.-Тип BЭта инструкция работает с параметрами двух и более объектов, параметры которых находятся по одинаковым смещениям. Например, у нас шесть объектов - игроков, у которых по смещениям +155 находится здоровье. Инструкция типа B получает указатель на начало некоторой структуры объекта игрока, прибавляет смещение +155 и работает с параметром (читает параметр из адреса или пишет в адрес). Таким образом, инструкция типа B может отнимать здоровье у героя, а также отнимать здоровье у врагов.-Тип СДанный тип инструкций может работать с данными находящимися не по одному (как при типах А и В), а по разным смещениям относительно одной или более структур. Стоит не путать тип А с С, т.к. инструкция А работает с одним смещением, тоже самое касается и B.Отсюда мы получаем подтипы:C(А) - работает с разными смещениями одной структуры (объекта);C( - работает с разными смещениями более одной структуры (объекта). Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения