Elite Games - Свобода среди звезд!
.
  » Раскопки обжа на предмет юзабельных вещей | страница 5
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 5 из 5
На страницу: Пред.  1, 2, 3, 4, 5 | Все страницы
Поиск в этой теме:
Канал X-Tension/X-BTF: «Раскопки обжа на предмет юзабельных вещей»
yakim81
 305 EGP


Рейтинг канала: 6(382)
Репутация: 16
Сообщения: 219

Зарегистрирован: 07.02.2015
А подскажите, пожалуйста, может я плохо искал, есть ли полный список функций, вызываемых из exe с их идентификатором (числовое значение), по которому этот самый exe их определяет и исполняет (я так понимаю, функции callasm)?
    Добавлено: 12:43 12-02-2018   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
 Такой? Подозрение.   (кликните здесь для просмотра)
Код:
callasm                              005A
B3D_InstAddToScene                   00002FC1
B3D_InstAlloc                        00002A8B
B3D_InstDeleteFromScene              00003D2A
B3D_InstFree                         00002AC7
B3D_InstGetFlags                     000032D8
B3D_InstSetBody                      00002A99
B3D_InstSetFlags                     000032E9
B3D_InstSetInvis                     000034CB
B3D_InstSetOverrideEffect            0000345F
B3D_InstSetPos                       00002AA9
B3D_InstSetRot                       00002AB8
B3D_InstSetSize                      00000F47
B3D_InstSetSizeUsed                  00003479
B3D_LightAddToScene                  00002B92
B3D_LightAlloc                       00002B71
B3D_LightSetAttenuation              000032FA
B3D_LightSetColor                    00002B80
B3D_LightSetRange                    00003312
B3D_SceneDisable                     00002894
B3D_SceneEnable                      000028BA
B3D_SceneGetCamera                   00002FD4
B3D_SceneSetFocus                    00002C67
B3D_SceneSetViewPort                 000028A5
CD_PlayTrack                         000002AB
CD_Stop                              00000275
D_SaveTGAScreenshot                  00002C83
GS_AddGate                           00000AD6
GS_RemoveGate                        000015FA
GS_Route                             0000039F
GS_RouteLen                          000003A8
J3D_JobStart                         0000333D
J3D_JobStop                          0000334A
J3D_TakeAlloc                        00002948
J3D_TakeFree                         00002964
J3D_TakeStart                        00002956
J3D_TakeStop                         00002971
MOV_ConnectMovieToTexture            0000003B
MOV_FreeMovie                        0000010B
MOV_LoadMovie                        0000002D
MOV_PlayMovie                        0000029D
MOV_PlayMovieFrom                    000000E3
MOV_SetRateMovie                     0000322E
MOV_SetVolumeMovie                   0000028A
MOV_StopMovie                        000000B7
Net_CreatePlayer                     00002822
Net_GetPlayerName                    00002833
P_AddTime                            000012B6
P_CmpSec                             000025DF
P_CmpTime                            000012AC
P_Delay                              000000C5
P_GetAbsMilliSec                     00002AD4
P_GetAbsSec                          00002AE5
P_GetAbsTime                         00000D77
P_GetTimeWarpFactor                  00002E0C
P_GetTimeWarpFactorDisplay           0000A001
P_Interrupt                          00001979
P_Load                               00000945
P_LoadSaveNames                      00004792
P_Random                             000000F5
P_RandomLowNorm                      0000175E
P_Save                               0000094C
P_SetAbsTime                         00003A5D
P_SetTimeWarpFactor                  00002CC0
P_SetTimeWarpFactorDisplay           0000A01C
P_ViewEBMFullscreen                  00000931
P_WaitForInterrupt                   00001A9F
SA_AllocObject                       00000E5B
SA_AllocTextInst                     00003356
SA_AttackObject                      00001B11
SA_AttackObjectBig                   00001B65
SA_AvoidObjectCollision              000019FE
SA_BuildGalaxyMap                    00004579
SA_CaptureObject                     00001FCA
SA_ClearGalaxyMap                    0000458B
SA_ClearIdentifyView                 000031BA
SA_ClearObjectFromCarrier            000019E4
SA_ClearObjectFromHangar             00001A16
SA_CollisionObject                   00001A3E
SA_DisplayCameraMessage              00003091
SA_DisplayMessage                    00003050
SA_DisplayMessageWithDuration        00003032
SA_DisplayNavMap                     00003011
SA_DisplayStaticText                 00002C00
SA_DisplayText                       00002E41
SA_Distance                          00002293
SA_DoObjectSound                     00005489
SA_DrawObjectSymbol                  000044F3
SA_DrawObjectSymbol3D                00004510
SA_DrawRadar                         00002C97
SA_DumpSectorScene                   00000E99
SA_EnterIdentifyView                 00003387
SA_EnterOuterView                    00002BB7
SA_EnterTargetView                   000030A9
SA_EscortObject                      00001FA7
SA_FindNearestEnemy                  00001BC4
SA_FindNearestEnemyByStrength        00001BA6
SA_FindObject                        000011A1
SA_FindObjectSubTypeInContainer      00000F9F
SA_FindObjectType                    00000320
SA_FindObjectTypeInContainer         00000340
SA_FireOnObject                      00001B3A
SA_FlyBigShipBeforeDockPos           00009FC4
SA_FlyObjectBeforeContainer          00001A5D
SA_FlyObjectIntoContainer            00001A79
SA_FollowObject                      00002B30
SA_FollowObjectByCut                 000020C6
SA_ForceMove                         00003156
SA_FreeAllBodies                     00002A4A
SA_FreeCutScene                      000029BB
SA_FreeObject                        00000E8B
SA_GetBody                           00003C4B
SA_GetCameraObject                   00003117
SA_GetCollisionObjects               000035D5
SA_GetCompBody                       00003C3C
SA_GetCount                          00001EBE
SA_GetDirX                           00004B25
SA_GetDirY                           00004B30
SA_GetDirZ                           00004B3B
SA_GetEventObject                    00000F28
SA_GetFlags                          000013C0
SA_GetGrid                           00002D40
SA_GetInst3D                         00000F3A
SA_GetLaser                          000018E4
SA_GetLaserFired                     00003BC9
SA_GetLaserHits                      00003BED
SA_GetLaserPosition                  000016ED
SA_GetLaserTypeEnergyMax             000018F0
SA_GetMainType                       00001EAF
SA_GetMat                            00002FFE
SA_GetMatTextArray                   00003C29
SA_GetMaxLaser                       00001915
SA_GetMaxShield                      0000108F
SA_GetMaxShipTypeLasers              00001632
SA_GetMaxSpeed                       00002DBB
SA_GetMissileFired                   00003BDA
SA_GetMissileHits                    00003BFD
SA_GetObjectTextID                   000018C0
SA_GetPosX                           00001943
SA_GetPosY                           0000194E
SA_GetPosZ                           00001959
SA_GetRelation                       00001059
SA_GetRotAlpha                       00002488
SA_GetRotBeta                        00002497
SA_GetRotGamma                       000024A5
SA_GetScene                          00002888
SA_GetShield                         00001075
SA_GetShieldTypeEnergyMax            0000109F
SA_GetShipTypeCockpitBody            00001DFE
SA_GetShipTypeMaxExtraRotSpeed       00001173
SA_GetShipTypeMaxExtraSpeed          00001157
SA_GetShipTypeMaxLaserType           00001682
SA_GetShipTypeMaxNumRockets          00001666
SA_GetShipTypeMaxNumShields          0000164A
SA_GetShipTypeMaxRocketType          0000172D
SA_GetShipTypeMaxShieldType          0000169D
SA_GetShipTypeMaxTradeContainerSize  000010F0
SA_GetShipTypePowerGeneration        00003752
SA_GetShipTypeTradeContainerSize     00001114
SA_GetSize                           00001ECA
SA_GetSpeed                          000098CC
SA_GetStrength                       00001B97
SA_GetSubType                        00000332
SA_GetTimer                          000025CC
SA_GetTotalDistance                  00003C0F
SA_GetTrackingAim                    00001F8B
SA_GetType                           0000991F
SA_GetTypeAcceleration               0000370E
SA_GetTypeBody                       00002031
SA_GetTypeCompBody                   0000201E
SA_GetTypeGSubType                   00001587
SA_GetTypeMaxSpeed                   00001850
SA_GetTypePriMaxP                    0000124D
SA_GetTypeRelValue                   00000953
SA_GetTypeSecMaxP                    00001458
SA_GetTypeStepX                      00001863
SA_GetTypeStepY                      00001873
SA_GetTypeStepZ                      00001883
SA_GetTypeTextID                     000002EC
SA_GetTypeVolume                     00000FC9
SA_Idle                              00001C64
SA_IsDockingBlocked                  000013F0
SA_IsSafePos                         0000229F
SA_KillObject                        00000F57
SA_LandAllObjectsInHangar            00003295
SA_LeaveIdentifyView                 00003267
SA_LeaveOuterView                    000029D0
SA_LoadCutScene                      000029AB
SA_MatNearestPen                     00000DF9
SA_MatRectFill                       00000E1A
SA_MatTextBlock                      00000E0A
SA_MatTextBlockHeight                0000306B
SA_MatTextWidth                      00003081
SA_MaxDistance                       0000098C
SA_MoveLaserIntoContainer            000016D3
SA_MoveObjectIntoContainer           00000F84
SA_MovePos                           000099A4
SA_RotateToAngles                    00009FDF
SA_SetAsPlayerObject                 00001985
SA_SetBayDoorContent                 00002F28
SA_SetBayDoorStatus                  00002F51
SA_SetCount                          00001382
SA_SetCurrentMissile                 00001701
SA_SetDesiredSpeed                   00001DD5
SA_SetEventObject                    00000EE2
SA_SetExtraRotSpeed                  000017FA
SA_SetExtraSpeed                     000017E9
SA_SetFlags                          000013CC
SA_SetGalaxy                         00000E73
SA_SetGlide                          00000F03
SA_SetGrid                           00001E8C
SA_SetGroup                          00001488
SA_SetGroupRelation                  00001045
SA_SetHitRappelDelay                 00002EFA
SA_SetIdentifyView                   000031CF
SA_SetLaser                          00004B46
SA_SetLight                          00000F78
SA_SetMaxAvoidShield                 00001964
SA_SetPause                          00002F0F
SA_SetPlayerBoost                    00002CAE
SA_SetPlayerLand                     00002B47
SA_SetPos                            00000ECE
SA_SetRearView                       000030BC
SA_SetRelation                       00005629
SA_SetRelativePos                    00001ED5
SA_SetRot                            00000ED8
SA_SetSafePos                        000010B9
SA_SetShield                         00001068
SA_SetSpeed                          00001DC9
SA_SetTrackingAim                    000024CE
SA_SetWareID                         00001494
SA_ShootMissileOnObject              000017A9
SA_ShowRelativeExplosion             00004A9A
SA_StartAllShipsFromHangar           000014C0
SA_StartInHangar                     000019CC
SA_StartObject                       00000EF4
SA_StartTake                         00003324
SA_StopObject                        00001613
SA_StopTake                          00003331
SA_TurnToObject                      00004B15
SA_WarpObjectAway                    00001ADF
SE_ArrayAlloc                        00000AE1
SE_ArrayFree                         000002CE
SE_ArraySize                         000001B6
SE_CubicPoly                         0000146A
SE_Distance3                         000009A2
SE_DivFix                            00004545
SE_ExistsText                        0000459D
SE_FClose                            00000CCF
SE_FOpen                             00000C37
SE_FPrintf                           00000C4E
SE_FreeString                        00000DD2
SE_GetNum                            000096D7
SE_GetPID                            000014E9
SE_GetTaskPC                         00001440
SE_KGV                               000015CA
SE_KillTask                          00000E29
SE_LinFunc                           00000975
SE_LinFuncSum                        000092FF
SE_LoadText                          000009AF
SE_MakeString                        00000411
SE_MulDivFix                         000043F1
SE_MulFix                            00004533
SE_ObjectExists                      0000041F
SE_ObjectFunctionExists              00002BE8
SE_QSortByName                       00009F28
SE_ReadText                          000002FD
SE_SPrintf                           000003C2
SE_Sqrt                              00005481
SE_StringLen                         00002FF1
SE_StringReadChar                    00003782
SE_StringSPrintf                     00000871
SE_StringSub                         0000340C
SE_StringVSPrintf                    000048CB
SE_TableAdd                          000001DD
SE_TableAlloc                        00000129
SE_TableExists                       00004FBD
SE_TableFind                         0000007F
SE_TableFree                         000000FE
SE_TableNew                          00009F59
SE_TableNext                         00000B48
SE_TableRemove                       00000DC3
SE_TableSize                         00000BF7
SE_VSPrintf                          0000287C
SE_strcmp                            00001E20
SFX_GetFXVolume                      00000159
SFX_GetFlags                         00002B0A
SFX_GetLanguage                      00000011
SFX_GetMODVolume                     00000137
SFX_PlaySample                       000001E9
SFX_SetFXVolume                      00000169
SFX_SetLanguage                      00000119
SFX_SetMODVolume                     00000148
SFX_SetMasterVolume                  00000179
SFX_SetMusicType                     00000055


Я тут exe колупал XBTF и XT, пытался найти в чём же разница в скорости/ускорении поворота. В XBTF супер приятно шаттл поворачивает, когда поставишь на него апгрейды. В XT сколько апгрейдов не ставь - всё равно колымага любой корабль. Базовая скорость и ускорение поворота фиксированы..

Если менять TTX шаттла в XBTF и повышать там скорость поворота, то будет эффект XT, когда возросла максимальная скорость поворота, а ускорение нет.

Нашёл три функции, которые считывают в XT и XBTF поворот по pitch, roll, yaw. Пытался их покастрировать - это ограничивало максимальную скорость поворота, т.е. они что-то делают. Улыбка

В XBTF при управлении мышкой exe даже не обращается к ТТХ шаттла. Улыбка Только при управлении с клавы.

Так что дело в функции SA_SetExtraRotSpeed, 000017FA. Но как выйти на её расположение в exe для меня пока загадка.

ollydgb2 классный дебаггер. Улыбка

Последний раз редактировалось: Non (17:12 12-02-2018), всего редактировалось 1 раз
    Добавлено: 17:01 12-02-2018   
KWON
 335 EGP


Рейтинг канала: 7(610)
Репутация: -10
Сообщения: 153
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Спасибо непревзойденному Shaddie
за супер редактор и за обновленный файл кодов code_xt для программы нашего чудного модератора.

Спасибо гениальному и идеальному модератору Non
за то что код Великого Shaddie можно переделать и осуществить мечты
которые казались раньше несбыточными!

Теперь предлагается разобранный на запчасти их файл для более лёгкого поиска нужных функций,
типа как ассемблер разбивает на секции так и тут.
(Фуф, пол дня потратил на это Ой, не могу!.. )

code_xt_cpp.7z
 Описание:
Разбитый на файлы код обжа от пилота Shaddie
 Имя файла:  code_xt_cpp.7z
 Размер файла:  116.62 KB
 Скачано:  72 раз(а)
    Добавлено: 20:27 12-02-2018   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Нашёл наконец-то хотя бы такой способ увеличения ускорения разворота для корабля игрока. Вместе с разворотом увеличивается конечно и максимальная скорость разворота, но хотя бы корабль теперь не такая колымага в сравнении с прогрейджеными M5. Подозрение.

Побочные эффекты - на значения из этой функции exe'шника реагируют все крутящиеся объекты (планеты, торговые станции).

Для экзешника версии 2.2.

Чем меньше значение - тем быстрее разворот.

Три адреса с одинаковым значением для кручения по оси, вверх вниз и право лево.

По смещениям 00415BE1, 00415BFD, 00415C19 есть конструкции B9 E8 03 00 00.
Означают они запихнуть в один из регистров процессора значение 3E8. Первый байт это команда, следующие 4 байта - DWORD со значением.
Чтобы правильно запихнуть нужное нам число на место того что там есть, нужно у DWORD'а поменять байты задом наперёд вот так:
Код:
E8 03 00 00

00 00 03 E8


Неплохое значение для этой конструкции выглядит вот так:
Код:
B9 80 01 00 00


Корабль будет уже разворачиваться существенно быстрее, неписи будут разворачиваться так же, а торговки и планетки еще не настолько быстро, чтобы бросалось в глаза.

Я всё-таки надеюсь когда-нибудь найти как exe-шник понимает, что рулит автопилот / непись и пропорционально увеличивает ускорение разворота, а не только макс. скорость, как в XBTF.


Пока искал развороты, нашёл так же где можно отключить тряску корабля со смещением курса при разгоне, стрельбе и попаданиях по нему.

Один компонент шатает корабль, другой просто потрясывает модельку кокпита.

По смещению 004283F7 меняем байт 74 (Jump if equal, условный прыжок) на безусловный EB. Это отключит шатание корабля со сменой курса во всех ситуациях.

По смещению 00428348 меняем байт 7E (Jump if less, условный прыжок) на безусловный EB. Это отключит микротряску модельки кокпита.

Пока так. Улыбка

Последний раз редактировалось: Non (05:28 29-03-2019), всего редактировалось 2 раз(а)
    Добавлено: 05:04 29-03-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Чегой-т не додумался в прошлый раз IsDisabled при пересборке обжа пометить .extern'ом. Сейчас собрал обж XT с нуля и он вроде как работает.

Потестируем-с? Подозрение.

rebuilt-obj.7z
 Описание:
 Имя файла:  rebuilt-obj.7z
 Размер файла:  419.42 KB
 Скачано:  38 раз(а)
    Добавлено: 04:53 30-03-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Прикладываю патчики для ленивых делающих описанное в посте выше. Улыбка
Только для версии 2.2.
Можно применять вместе.

xt-noshake-steering.7z
 Описание:
 Имя файла:  xt-noshake-steering.7z
 Размер файла:  14.65 KB
 Скачано:  31 раз(а)
    Добавлено: 07:29 31-03-2019   
KWON
 335 EGP


Рейтинг канала: 7(610)
Репутация: -10
Сообщения: 153
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Non :
Сейчас собрал обж XT с нуля

Напишите, пожалуйста, отличия и преимущества новосозданного обжа
совместим ли он с редактором карт, возможно ли включение режима отладки?
    Добавлено: 06:25 12-04-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
KWON :
Напишите, пожалуйста, отличия и преимущества новосозданного обжа


При сборке обжа с нуля есть возможность добавить в существующие классы вроде TSHIP, TMENU новые переменные, необходимые для работы новых функций.

В теории можно:
- переписать функции меню на XC полностью с добавлением расширенного функционала по примеру X2
- выкидывать классы и функции целиком, квесты, функции дубли TRACE.LOGIC_(P3/P2) и другие
- перенести парсер XML из X2, дабы уже не редактировать карту в обже
- сделать сильно урезанную версию обжа с упрощенной процедурой инициализации для тестирования своих функций, поведение той же расовой логики улучшить, но без тестирования на живую это муторно


Насколько я понимаю, редактор карт меняет функцию TGALAXY.BuildFromEditor, так что проще на мой взгляд редактировать карту на оригинальном обже а потом переносить эту функцию целиком.

Возможно всё, что не требует правки по конкретным адресам, ибо они сместились.

Функционально этот обж должен быть идентичен обычному.

Естественно, если никто не будет ничего переписывать (максимальная вероятность) и добавлять функционал, то смысла в пересобранном обже немного.

Наверное больше смысла есть при совместимости с существующими сохранениями. Улыбка

Но тут упираешься в ограничение - никаких новых переменных в классах с классами потомками. Т.е. захочешь новый переключатель с переменной культурно в менюшке - фигвам - исследуй возможности битовой логики и храни пятьдесят переключателей в одной неиспользуемой переменной вроде ga_ServerID или ga_ClientID.

Хочешь для своей логики поведения расовых кораблей какие-то новые переменные - тоже фигвам.
    Добавлено: 13:37 12-04-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Подумал, а чего в asm'е мозг шатать, если можно в XC функции менять без пересборки обжа. Всё равно семикратно патченый обж XT свалка. А так и мне проще, и народу будет понятнее. Улыбка Многое по-прежнему с сейвами совместимо. Если не работает во время подмены обжа на патченый.

Разбираю интересующие меня функции, оставляю комментарии, обзываю переменные, причёсываю и в таком духе.

Функция TSHIP.AttackedBy, обработчик сигнала "корабль атакован".

По хорошему можно изрядно поднять читаемость этой функции, если использовать ранний возврат, вместо тонны вложенностей.

 TSHIP.AttackedBy   (кликните здесь для просмотра)
Код:
// Оптимизаций почти нет, код старался оставить похожим на исходник
function TSHIP.AttackedBy(AttackedShip)
{
  this->___SetVar(0, P_GetAbsTime());

  // Похоже на проверку активен ли атакуемый корабль, т.е. находится ли он
  // в секторе с игроком
  if(AttackedShip)
  {
    // Существует ли атакующий корабль
    var Attacker = SA_GetEventObject(AttackedShip);
    if(Attacker)
    {
      // Если атакующий корабль станция или авианосец и действие атакуемого -
      // приземлиться, то ничего не делать
      if(Attacker->IsClass(TSTATION) || Attacker->IsClass(TSHIP_CARRIER) && Attacker == TSHIP.sh_ActionTarget)
      {
        if(TSHIP.sh_IsLanding)
        {TSHIP.sh_IsLanding = -1;}
        if(TSHIP.sh_IsStarting)
        {TSHIP.sh_IsStarting = -1;}
        SA_StopObject(TSHIP.sh_ObjectID, 2);
        return(0);
      }

      THITLIST.Add(Attacker, this);

      // Если у атакуемого и атакующего есть владельцы, при этом они не
      // не одна и та же раса и атакующий - корабль игрока
      // Перейти к коду обеспечивающему захват корабля
      if(TSHIP.sh_Owner && Attacker->GetOwner() && Attacker->GetOwner() != TSHIP.sh_Owner && Attacker == TCLIENT.GetPlayerShip())
      {
        // Измерить текущую и максимальную ёмкость щитов
        var ShieldLevel = SA_GetShield(TSHIP.sh_ObjectID);
        var MaxShieldLevel = SA_GetMaxShield(TSHIP.sh_ObjectID);
        // Лишить игрока лицензии
        TCLIENT.GetPlayer()->LoseLicense(TSHIP.sh_Owner);
        // Если у атакуемого есть кокпит и это не корабль игрока и нету флага
        // невозможности захвата
        if(SA_GetShipTypeCockpitBody(TSHIP.sh_SubType) && TSHIP.sh_Owner->GetID() != 9 && !this->___GetVar(5))
        {
          // Если текущая ёмкость щитов < 5%
          if(ShieldLevel > 0 && (ShieldLevel < MaxShieldLevel / 20))
          {
            // Если последняя попытка захватить корабль делалась больше минуты назад
            if(P_CmpTime(P_GetAbsTime(), TSHIP.sh_LastTakeoverChanceTime) > 60000)
            {
              // Запишем время текущей попытки
              TSHIP.sh_LastTakeoverChanceTime = P_GetAbsTime();
              // Изначальная вероятность захвата 20%
              var CaptureProbability = 20;
              // Если корабль игрока слабее вражеского, то 30%
              if(Attacker->GetStrength() < this->GetStrength())
              {CaptureProbability = 30;}
              // Если корабль игрока называется EGOSOFT, то 35%
              if(!SE_strcmp(Attacker->GetYourName(), "EGOSOFT"))
              {CaptureProbability = 35;}
              if(P_Random(1) < CaptureProbability)
              {
                // Получим имя пилота
                var PilotName = this->GetPilotName();
                // Если получили ничего то напишем просто Pilot
                if(!PilotName) {PilotName = SE_MakeString("Pilot");}
                // Сформируем строчку для лога о том, что пилот отдал корабль
                var PilotLeftShipStr = SE_StringSPrintf(SE_ReadText(1100055), PilotName, this->GetName());
                // Напишем в лог
                TCLIENT.GetPlayer()->LogString(PilotLeftShipStr);
                // Очистим созданные строки
                SE_FreeString(PilotName);
                SE_FreeString(PilotLeftShipStr);
                // Выкидываем скафандр, отдаём корабль и выходим из функции
                this->LeaveShip();
                return(0);
              }
            }
          }
        }
      }

      // Узнать максимальный лазер
      var AttackerMaxLaser = Attacker->GetMaxLaser() + 10;
      // Запустить функцию повреждения оборудования
      this->MakeDamage(P_Random(AttackerMaxLaser) + 10);

      // Если атакуемый и атакующий разных рас и атакующий - корабль игрока -
      // снять репутацию
      if(TSHIP.sh_Owner && Attacker->GetOwner() && Attacker->GetOwner() != TSHIP.sh_Owner && Attacker->GetOwner() == TCLIENT.GetPlayer())
      {
        var LastNotorietyHit = TCLIENT.GetPlayer()->GetLastNotorietyHitTime();
        if(P_CmpTime(P_GetAbsTime(), LastNotorietyHit) > 60000)
        {
          TSHIP.sh_Owner->AddNotoriety(Attacker->GetOwner(), -1);
          TCLIENT.GetPlayer()->SetLastNotorietyHitTime(P_GetAbsTime());
        }
      }

    }

    // Если это не корабль игрока, но игрок владелец и это не боевой дрон -
    // уведомить о том что корабль атакован
    if(!TSHIP.sh_IsPlayer && TSHIP.sh_Owner && TSHIP.sh_Owner->GetID() == 9 && !this->IsClass(TFIGHTDRONE)) {
      TCLIENT.NotifyAttacked(this);
    }

    // Если это корабль игрока мигать красным на карте что он атакован
    if(TSHIP.sh_IsPlayer && AttackedShip && Attacker) {
      TSHIP.sh_LastAttackTime = P_GetAbsTime();
      TSHIP.sh_Attacker = Attacker;
    }

  }
}


Модифицируя эту функцию по своему усмотрению можно научить корабли скидывать мины на игрока, можно поменять логику захвата, опускать репу при атаке мирных кораблей гораздо сильнее, что на мой взгляд было бы логично.
И самое главное - поменять условия, при которых повреждается оборудование.
К примеру я бы сделал повреждение оборудования только если текущая ёмкость щита < 10%, а не всегда, что даёт дрону с AIRE уничтожать оборудование на корабле с 2х25МВт щитами.

Также было бы неплохо писать в лог, какое оборудование было уничтожено. В принципе повреждение оборудования штука интересная, только реализована уж больно топорно и нелогично.

PS: Сорри если комментарии к коду слишком надмозговые. Гы-гы

PS2: Обновил xt-obj-patching в начале темы.
Добавлен старт на шаттле, старт в фиксированном секторе (указываете в файлике самостоятельно), средние апгрейды NPC (ровно наполовину), оставить только СЕТУ на старте, количество денег на старте и самое главное - турбо двигатель для шаттла с тру-тряской кокпита. Да.

В X2 это невозможно, т.к. из exe ампутирована функция-трясучка SA_SetHitRappelDelay. Наслаждаемся почти аутентичностью Улыбка совместимость с сейвами присутствует. Использует две неиспользуемые переменные ga_ServerID и ga_ClientID.

Последний раз редактировалось: Non (04:03 17-04-2019), всего редактировалось 2 раз(а)
    Добавлено: 02:35 17-04-2019   
KWON
 335 EGP


Рейтинг канала: 7(610)
Репутация: -10
Сообщения: 153
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Non :
Обновил xt-obj-patching в начале темы.

Клас! Спасибо. Будем потихоньку разбираться.

Всё таки выложу Ваш новый патч для ХТ.ехе в.2.2
в виде делфи-прожки.
(Честно признаюсь сам в игре не проверял, поскольку нужно переустановить весь виндовс, что бы все программы опять заработали нормально.)

XT patch.7z
 Описание:
Патч модератора Non для X-Tension.exe
 Имя файла:  XT patch.7z
 Размер файла:  647.84 KB
 Скачано:  31 раз(а)


Последний раз редактировалось: KWON (20:18 17-04-2019), всего редактировалось 1 раз
    Добавлено: 20:15 17-04-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Хорошие новости.

Велосипедисты из ES сами столкнулись с необходимостью добавлять новые переменные в своих патчах, поэтому в обже уже есть переменные, сменившие своё назначение.

К примеру:
Код:
function TMENU.___NewVarInit()
{
 TMENU.me_LastKeyR = SE_ArrayAlloc(32);
 return(0);
}

function TMENU.___SetVar(arg1, arg2)
{
 global.IntToArray(TMENU.me_LastKeyR)[arg1 + 1] = arg2;
 return(0);
}

function TMENU.___GetVar(arg1)
{
 return(global.IntToArray(TMENU.me_LastKeyR)[arg1 + 1]);
}

function TMENU.GetNewVarArray()
{
 return(global.IntToArray(TMENU.me_LastKeyR));
}


Что это значит? Можно запилить крутой функционал, совместимый с сохранёнками не пересобирая обж.

Ковыряю пока AttackedBy, повысил штрафы репутации за атаку расовых кораблей и думаю переработать алгоритм работы захвата.

Он должен учитывать боевой рейтинг и скорость падения щита. Тут то мне как раз и нужна была переменная класса. Чтобы сохранить для атакуемого корабля начальное значение щита, игровое время (функция запускается на каждое попадание по кораблю) и сравнить время и новое значение щита.
А раз можно использовать массив в переменной, в котором свободны слоты с 7 по 32, то при довольно солидной модификации алгоритма будет совместимо с сохранёнками.

Так то получается побитовая логика-то и не нужна. Можно хранить массив переменных в одной. Супер!
    Добавлено: 05:06 18-04-2019   
Non
 800 EGP


Модератор
Рейтинг канала: 6(377)
Репутация: 237
Сообщения: 800

Зарегистрирован: 27.06.2006
Небольшое, но очень приятное обновление xt-obj-patching Улыбка

Переназначение кнопок

Удалось наконец-то соорудить изящный хук для переопределения кнопок,
обрабатываемых в обже (те что не A Z Space Q W E T B ALT CTRL Стрелки)

Работает с сохранениями.

К примеру меня давно раздражало, что так неудобно игрокам-клавишникам
выравнивать скорость под цель. Теперь нажатием кнопки v курсор скорости
устанавливается на скорость цели.

Кнопка x сбрасывает скорость в 0. Тянуться к backspace неудобно.
Также можно и ракеты позапускать кнопками которые ближе и удобнее, но это уже на
ваше усмотрение.

Для поиграть кнопка ~ меняет скайбокс текущего сектора и выводит его
номер на экранчик в корабле, где пишется ID цели. Имейте ввиду, что изменение
запишется в сохранение.

Код:
if(btn != 434) {
  SA_DisplayStaticText(SE_SPrintf("%d", btn));
}


Функция exe выше будет выводить на экранчик в корабле код нажатой
кнопки, или комбинации кнопок (SHIFT+V например), для простоты эксперимента и
назначения кнопок на интересующие действия. Почему-то не все комбинации кнопок и
просто кнопки выдают свой код. Так что в переназначении игрок слегка ограничен.

См. xc/TCLIENT.InputOverrides.c

Хранение массива на 100 элементов в переменной ga_ServerID

Теперь можно относительно удобно предотвращать повторный запуск своего кода там,
где он уже отработал. К примеру нулевой слот используется для турбо режима шаттла.

Работает с сохранениями.

Пользуйтесь global.SetVar(слот, что_записать) и global.GetVar(слот). Они вернут
0 при запросе через GetVar если массив не существует и тут же его создадут.

См. xc/ServerID-array.c

Упрощённая инициализация игры для тестирования своего кода (полигон)

Разобрался как игруха стартует и что запускает, обрезал лишнее, а именно:
- Создание карты из TGALAXY.BuildFromEditor
- Старт всех квестов
- Создание расы гонеров и запуск их логики, которая вешает игру если на карте
нету храма

Теперь создавать объекты для своего полигона нужно программно, но преимущество
перевешивает - ALT+Tab, поменял немного код, откомпилировал через patch.cmd,
развернул игруху, вышел SHIFT+Q, нажал новую игру, меньше чем за секунду уже
тестируешь новый код. Улыбка

В первую очередь открываем patch.c и внимательно изучаем комментарии в нём и в
остальных вкладываемых файлах (#include)

PS: Кому не понятно сидеть и читать код с комментариями - скачайте нормальный
редактор с подсветкой синтаксиса, например Notepad++ и вникайте удобно Подмигиваю


PS2: Специально для работы подсветки синтаксиса в различных редакторах
переименовал все *.xc файлы в *.c, а *.inc файлы в *.asm.
Т.к. возможно только мне не лень настроить подсветку синтаксиса для произвольных
расширений файлов.
    Добавлено: 00:22 28-04-2019   
Канал X-Tension/X-BTF: «Раскопки обжа на предмет юзабельных вещей»
На страницу: Пред.  1, 2, 3, 4, 5 | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Бойся Модера - ибо ОН пожиратель ЕГОПОК! (предостерег Bozz)

  » Раскопки обжа на предмет юзабельных вещей | страница 5
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18