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

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


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

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

 

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

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

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

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

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

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

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

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

_Призрак_, хм...Странно,значит остаётся 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, но на мой взгляд, так будет правильней. Помимо быстрых ячеек, хочу визуализировать скрытый инвентарь (фонарик, нож и т.д.) в свои отдельные слоты. Как будет выглядеть сие чудо, если интересно кому - выложу скрин (пока ещё не закончена работа).

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

Rolan

А,чё он у меня XR_3DA сохранять не хочет,пишет что файл типа не может быть сохранён :dash3::dash2::wacko:

 

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 пользователей

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