Перейти к контенту

Редактирование движка X-Ray


Рекомендуемые сообщения

Ну, раз создали тему, и народ здесь есть, может объявятся мастера программирования, которые реально могут управляться с файлами движка ? А то некоторые вещи без ковыряния .dll ну никак не хотят получаться...

 

P.S.Ненадо тут просить: "мол сделайте то и это"

А вот здесь в корне не согласен !

Действительно программистов обладающих навыками работы на том уровне, чтоб игра работала в дальнейшем без сбоев - единицы. И как, скажите на милость, мне внести задуманные изменения/дополнения в игру, если без редакции движка ну никак не обойтись (пусть и по мелочи совсем, как кажется). И затрачено времени много очень, и сил, и работа почти закончена - бац - тупик - движок - необходимо изменить параметры. А изучать даже основы программирования - процесс небыстрый и с учетом занятости работой и семьёй - года на 2-3 хватит - за это время желание может отпасть, а могут обстоятельства измениться. А мод так и не будет закончен, хотя время и силы потрачены.

И в конце концов - попросить я думаю всегда можно, а вот получить желаемое... дай бог каждому.

  • Нравится 2
  • Согласен 1
Ссылка на комментарий

Ну давай Ролан с тобой подумаем вот над каким вопросом. Все знаю что в ЗП кол-во артов на поясе записано в двигателе. Я говорил с колмогором по этому поводу и даже копался в движке но ничего не нашел кроме строку belt и дальше 2 пробела (00 00). Собственно вопрос - где та цифра 5 которая жестоко ограничивает читерство?

Freedom

Ссылка на комментарий

Есть правленые dll-ки для увелечения плотности травы на r1 и r2.Такое было,дальность прорисовки-не слышал о таком...

Изменено пользователем C2D
BfioH.png

Ссылка на комментарий

_Призрак_, хм...Странно,значит остаётся 2 варината,декомпиляция или где-то что-то в скриптах,но точно я в этом не уверен.Подождём ответов профи.

P.S.Поговорю с одним человеком,может знает

Ссылка на комментарий

_Призрак_, Судя по .ltx-файлам, я вижу картину следующую:

 

system.ltx

max_belt = 5 ;16

 

artefact.ltx

belt = true

slot = -1 ;10

 

weapons.ltx

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; AMUNITION

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[ammo_base]:identity_immunities,default_weapon_params

;belt = true;

slot = -1

 

единственное место где фигурирует цифра 5 (реальное кол-во слотов в игре) - system.ltx, а в artefact.ltx - под слоты зарезервировано 11 мест, но -1 под патроны на пояс (но закомментирован) и возможно слот 0 тоже где-то под что-то планировался. То есть разрабы изначально оставили места для увеличения кол-ва мест на поясе (и видимо не только под арты).

Все знают что в ЗП кол-во артов на поясе записано в двигателе. Я говорил с колмогором по этому поводу и даже копался в движке но ничего не нашел кроме строки belt и дальше 2 пробела (00 00). Собственно вопрос - где та цифра 5 которая жестоко ограничивает читерство?

Вопрос: а откуда все знают что кол-во слотов на поясе зашито в движок ? Может так решили потому-что в конфигах или скриптах найти не смогли ? :dash3: ну, а дальше, сарафанное радио...

Может ПЫСы хорошо спрятали, а может мы плохо ищем. Обычно то, чего найти не можешь долго и нудно - на поверхности, смотришь и не замечаешь.

Изменено пользователем Серый Волк
Ссылка на комментарий

Мне тут мысль реально бредовая в голову пришла...короче значение выставлено 5 , а если к примеру выставить в конфигах костюма 6 ? Думаю так же ничего не произойдёт,в ТЧ можно было так,ну любой костю вешай столько сколько укажешь и ведь всё это видно,а может мы просто не видим этого 6 слота?Может он тупо в xml файле не сделан?Не задумывались?

 

 

Изменено пользователем Rolan
Ссылка на комментарий

Rolan, Я уже пробовал по разному, и так тоже: менял во всех кофигах кол-во слотов под арты -результат пока нулевой. С ячейками быстрыми дальше продвинулся: у меня их 8 отображается, но работают реально 4, причем новые задваивают предмет на обе ячейки (старую и новую), когда в новую ячейку его кладешь. даже клавиши новые назначил для новых ячеек - но в этом случае в основном меню игры "ОПЦИИ" не открываются.

 

Наковырял интересную статейку :

Динамически подключаемые библиотеки (dynamic link libraries, DLL) используются для уменьшения объема исполняемого файла, за счет выделения некоторых функций в отдельный файл. Более того, функции из DLL могут использовать разные загрузочные модули, что особенно важно для жизнедеятельности Windows (например в KERNEL32.DLL содержаться функции управления памятью процессами и потоками).

Для создания DLL в среде C++ Builder необходимо выбрать File\New\Dll при этом автоматически генерируется проект, компиляция которого и дает искомый результат. Для написания экспортируемых функций используется следующий синтаксис:

__declspec(dllexport) void nameFunc();

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

Подключение DLL в C++ Builder возможно явным и неявным способом. При неявной компоновке в секцию директив необходимо добавить строку вида:

#pragma link ”nameFile.lib”

а, в секцию прототипов добавить описание прототипа функции:

void nameFunc();

При неявной компоновке функция вызывается по имени, необходимы файлы с расширениями *.LIB и *.DLL. Библиотека подключается к процессу в момент загрузки процесса и выгружается вместе с процессом.

Явная компоновка требует использования функций WINAPI LoadLibrary() и GetProcAddress(). В данном случае функция вызывается по номеру, который ей присвоен при создании DLL. C++ Builder упорядочивает экспортируемые функции DLL в алфавитном порядке их имен. Номер функции в DLL можно получить с помощью утилиты tdump с ключом -ee.

Функция LoadLibrary() принимает в качестве параметра имя библиотеки, а возвращает переменную типа HINSTANCE. Функция GetProcAddress() имеет следующий прототип:

void *GetProcAddress (HINSTANCE, const char *);

она принимает переменную типа HINSTANCE и символическую константу, а возвращает указатель на функцию.

В приведенных листингах демонстрируется создание, неявная и явная компоновки DLL.

//Пример создания DLL #include <vcl.h> #pragma hdrstop int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)

{

return 1;

}

//Выше находится заголовок DLL, генерируется автоматически

double dblValue(double);

double halfValue(double);

__declspec(dllexport) int AreturnValue(bool);

__declspec(dllexport) int CreturnValue(bool);

__declspec(dllexport) int BreturnValue(bool);

int CreturnValue(bool i)

{

i= true;

return(2);

} int BreturnValue(bool i)

{

i= true;

return(3);

} int AreturnValue(bool i)

{

i= true;

return(1);

} double dblValue(double value) { return value * value; }; double halfValue(double value) { return value / 2.0; }

 

//Пример неявной компоновки DLL

#ifndef useDllU1H

#define useDllU1H

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//--------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TButton *Button1;

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//--------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//--------------------------------------------------------

int AreturnValue(bool);

int CreturnValue(bool);

int BreturnValue(bool);

#endif

 

//--------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "useDllU1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

#pragma link "createDllP1.lib"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

bool buff;

 

Label1->Caption=AnsiString(AreturnValue(buff));

Label2->Caption=AnsiString(BreturnValue(buff));

Label3->Caption=AnsiString(CreturnValue(buff));

}

//---------------------------------------------------------

 

//Пример явной динамической компоновки DLL

#include <vcl.h>

#pragma hdrstop

#include "dll_cb_u.h"

//--------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

HINSTANCE hinst;

 

int (*returnVa1)(bool);

int (*returnVa2)(bool);

int (*returnVa3)(bool);

//--------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)

{//Создание формы

hinst=LoadLibrary("dll_cb_c.dll");

returnVa1=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(1));

returnVa2=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(2));

returnVa3=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(3));

}

//На форме имеется одна кнопка и три метки

void __fastcall TForm1::Button1Click(TObject *Sender)

{

bool buf_b;

int j;

buf_b=false;

if(returnVa1==NULL)

Label1->Caption=AnsiString("Error");

else

{

j=returnVa1(buf_B);

Label1->Caption=AnsiString(j);

}

Label2->Caption=AnsiString(returnVa2(buf_B));

Label3->Caption=AnsiString(returnVa3(buf_B));

}

MAKEINTRESOURCE — макрос для создания символической константы. Переменная типа HINSTANCE создается глобально. Загрузка библиотеки и присвоение указателей на функции производится в момент создания формы. Количество и тип параметров в описании функций (сигнатура функции) в DLL и указателя на функцию, в вызывающем модуле должны совпадать, совпадение имен не обязательно.

DLL выгружается из памяти при завершении работы вызывающего модуля. Принудительная выгрузка DLL осуществляется функцией FreeLibrary(HINSTANCE).

 

Изменено пользователем Серый Волк
Ссылка на комментарий

Я не жадный:

U4ATd4tUcq.jpg

В принципе увеличением кол-ва быстрых ячеек я пытаюсь создать аналог разгрузки которая будет непосредственно в меню инвентаря. Уважаю труд по реализации разгрузки и подсумков команды NLC, но на мой взгляд, так будет правильней. Помимо быстрых ячеек, хочу визуализировать скрытый инвентарь (фонарик, нож и т.д.) в свои отдельные слоты. Как будет выглядеть сие чудо, если интересно кому - выложу скрин (пока ещё не закончена работа).

Изменено пользователем Серый Волк
Ссылка на комментарий

goust, Возможно он у тебя открыт ещё где-то помимо hex-редактора.

Серый Волк, тут дело странное...Да, у тебя они на кнопки забиндены?

Ссылка на комментарий
Rolan, их нереально забиндить на кнопки скриптом. Нужно смотреть родные ячейки и делать на их основе. Изменено пользователем iDreD
Ссылка на комментарий

iDreD, Хм...Нереально говоришь?Хех, ну тогда....Через движок чтоль?

Ну не знаю,если кому нужно, могу приложить коды клавишь клавиатуры.

Ссылка на комментарий

iDreD, я забиндил новые ячейки на кнопки через ui_keybinding.xml и после этого меню "ОПЦИИ" перестало открвываться, думаю потому, что они не прописаны в xrGame. Старые 4 ячейки прописаны, и даже описание забинденных кнопок там прописано.

pV5qTXGU43.jpg

 

goust, посмотри по редакторам здесь, у меня без проблем установился и до сих пор работает

 

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

xSrjeAsR2t.jpg

Изменено пользователем Серый Волк
Ссылка на комментарий

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

 

48celt48, что именно выложить?

Изменено пользователем Серый Волк
Ссылка на комментарий

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

 

Извиняюсь.

||

\/

Изменено пользователем 48celt48
Ссылка на комментарий
кстати а что если сделать все проще увеличить кол-во слотов под арты

А ты попробуй под арты ... :dash3::grin2:

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

Изменено пользователем Серый Волк
Ссылка на комментарий
Серый Волк, обсуждалось уже тыщу раз - забинтить хотя бы скриптово на Х-рэе можно только клавишу Таb. Для быстрых ячеек ещё хуже, ибо клавиши от F5, F6 и далее не прописаны в хrГейме (?). Поэтому смысла ковырять ячейки только в игре нет.
Ссылка на комментарий

1. Называть файлы лежащие в папке bin движком не правильно - это скомпилированные библиотеки функций движка. Сам движок нам не будет доступен никогда, ну если только кто-нибудь из нас миллионер и не купит у разработчиков.

2. Многие посчитали вид инвентаря ЗП лучшим и красивым. Однако он был изначально сделан не для красоты и удобства, а для затруднения редактирования.

3. Профи действительно есть. Только с какой радости они будут расписывать здесь способы редактирования папки bin.

4. Редактировать ехе и dll Notepadom++ - извините ребята но это дикость, а потом вы еще удивляетесь почему у вас ничего не работает и глючит.

 

 

Изменено пользователем sabir
  • Согласен 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...