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

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


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

@tatarinrafa, небольшой пример работы с потоками (с++11).

// thread_test.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <thread>
#include <future>
#include <limits>

//Один цикл выполняется в уже идущем(главном) потоке где к "A" прибавляется 1 сто раз.
//Второй цикл, в новом фоновом потоке, прибавляет 1 к "B" двести раз.
//В конце обе переменные, в главном потоке, складываются(без багов, главный поток ждет завершения второго цикла).

void secondLoop(std::promise<int> & p)
{
	int B=0;
	for (;
	{
		B++;
		std::this_thread::sleep_for(std::chrono::milliseconds(10));
		std::cout << "secondLoop running." <<std::endl;
		if (B>=200)
			break;
	}
	p.set_value(;
	std::cout << "secondLoop ending." <<std::endl;
}

int firstLoop()
{
	int A=0;
	for (;
	{
		A++;
		std::this_thread::sleep_for(std::chrono::milliseconds(10));
		std::cout << "firstLoop running." <<std::endl;
		if (A>=100)
			break;
	}
	std::cout << "firstLoop ending." <<std::endl;
	return A;
}

void PressEnterToContinue()
{
  std::cout << "Press ENTER to continue... " << std::flush;
  std::cin.ignore( std::numeric_limits <std::streamsize> ::max(), '\n' );
}

int _tmain(int argc, _TCHAR* argv[])
{
	std::promise<int> p;
	auto future = p.get_future();
	std::thread threadRun(&secondLoop, std::move(p));
	int result1,result2;
	result1=firstLoop();
	threadRun.join();
	result2=future.get();
	std::cout << "results: " << result1 + result2 << std::endl;
	PressEnterToContinue();
	return 0;
}

 

 

отдельные функции сделаны для наглядности, для этого же добавлены задержки в циклах.

Само собой - пример чрезвычайно прост и не учитывает кучи вариантов, как блокировки, исключения. также, можно использовать std::async вместо std::future. Если с потока нет необходимости возвращать результат - пример еще упрощается :)

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

Решил собрать движок Лост Альфы. Взял версию для 2005 год визулки, конвертнул в 2008. Даже без ошибок, что удивило. Первый баг залечил с SLA\SDK\Xiph\Libs\theora_static.lib. Взял библиотеку из движка 1.6.02.  Теора отвечает за звук ogg, я так понял. А если я заменил библиотеку на более новую, то что мне грозит?

andreyholkin.gif

rod_cccp.gif

 

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

...Собрал движок Lost Alpha (частично), но этого достаточно для работы. Проверил в игре - работает. Движок рендером давит или сама игра не оптимизирована, на максимальных настройках смазанная картинка - подвисает. ЗП на таком же качественном рендере меньше грузит железо. Зато есть у Лост Альфы обалденные лучи от солнца, чего я в ЗП не видел.

Короче, вот исходники: качалка. 320 мб.

Теперь о правках. Их практически я не делал, за исключением замены библиотеки theora_static, потому как не полная, нет нужного объекта. Данный движок создан слиянием двух проектов (SLA и la_src_repository.shadow-net - последний сверху) и последующим конвертированием проекта Визуалки 2005 под 2008. Так что, кто работал с ЗП в 2008 VS, проблем не составит. Напомню, что есть не собираемые пока части проекта, это например фирменный Левел- эдитор, так что сильно не материте меня.

В следующий раз (через полгода), я постараюсь доработать этот движок, либо движок ЗП. Одно из двух. Есть в ЛА чего подтянуть в ЗП.

 

Вот результат: bins  3.67Мб. В проекте исходников, вообще, нет трех dll, они 2001-03 годов выпуска, и они есть в этой папке, для полного счастья.

Изменено пользователем Дизель
  • Нравится 1

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
Проверил в игре - работает. Движок рендером давит или сама игра не оптимизирована, на максимальных настройках смазанная картинка - подвисает. ЗП на таком же качественном рендере меньше грузит железо. Зато есть у Лост Альфы обалденные лучи от солнца, чего я в ЗП не видел.

 

Так посмотри шейдеры и константы которые передаются в них

 

Решил собрать движок Лост Альфы. Взял версию для 2005 год визулки, конвертнул в 2008. Даже без ошибок, что удивило. Первый баг залечил с SLA\SDK\Xiph\Libs\theora_static.lib. Взял библиотеку из движка 1.6.02. Теора отвечает за звук ogg, я так понял. А если я заменил библиотеку на более новую, то что мне грозит?


Перенос проекта из 2005 в 2008 - просто смена 1 строки в файле версии(так во всех версиях до 2010 - там ввели новый формат файла проекта).
Ничем не грозит. Изменено пользователем BFG
  • Спасибо 1
Ссылка на комментарий

Запустил "STALKER build 5578, May 14 2014". При использовании еды или медикаментов получаю вылет:

Expression : fatal error


Function : CScriptEngine::lua_error
File : script_engine.cpp
Line : 73
Description :
Arguments : LUA error: d:\stalkersoc\gamedata\scripts\use_item.script:443: attempt to call field 'hide_weapon' (a nil value)

 

У меня установлен мод "MEDICINE RC ver. 1.0":

-- Модуль с реакциями на использование "съедобных" предметов.
-- Убирание оружия при использовании;
-- Медленное восстановление параметров;
-- Запрет на использование подряд нескольких предметов (аптечки, бинт, антирад);
-- Прерывание восстановления здоровья при получении критического хита;

 

Я так понимаю это из-за убирания оружия, а вылет по причине равнозначных слотов для оружия в "STALKER build 5578"... Можно как-то исправить ?

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

 

 

при чем тут движок?

Потому как на другом двигле (тоже с правками) всё работает как часы.

 

З.Ы. Ещё вопрос. Хотелось бы только правку на мерцание травы (собственно из-за неё и пытался перейти на build 5578). Не подскажете в чём она реализована, в смысле, в каких файла билда ?

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

Здравствуйте уважаемые.

Вопрос как бы и по движку, но и как бы в Курилку. Но очень интересно, кто и как боролся с такой весчью, как циклические references непосредственно в xray. например:

моя длл импортирует функции из xrLua, функции из моей длл будут импортированы в xrCore. Добавить в VS2012 references из xrCore на мою dll уже нельзя, ибо студия считает что это будет циклическая ссылка, так как xrLua имеет references на xrCore. я решал данную проблемы прямым добавлением my_dll.lib в inputs к линкеру xrCore. Но данный метод, как по мне - кривоват, и часто путает меня самого. А какое правильное решение?

 

p.s. Хочется иметь единую dll с моим кодом для всего solution XR_3DA. в ogse.dll, если я правильно понял, переносились необходимые куски кода непосредственно из движка. если нет - поправьте пожалуйста.

Спасибо за ответы!

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

 

 

pragma once.
- pragma once позволяет решить циклические ссылки при компиляции. а при линковке как можно обойти данную проблему?

lib1 exports func1

lib2 exports struct2

lib2 uses func1

lib3 uses func1 , struct2 in func3

lib3 exports func3

lib1 uses func3

и усе :) насколько я понимаю - придется скопировать код struct2 и/или func1 в lib3 , дабы разорвать циклическую компиляцию и линковку...

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

Ковыряю Лост Альфа. Почем все твердят, что это ТЧ? Это какая то смесь ТЧ и ЧН. Хотел было забуриться в Лост Альфу, да что то передумал. Буду ЗП допиливать.

  • Нравится 1

andreyholkin.gif

rod_cccp.gif

 

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

Вот, кстати, правка для LA - убрал баг в авто, когда нет худа. Просто подсунул визуал ГГ. Камеру настройте в системном файле, как надо вам.

https://yadi.sk/d/Y_Vz8_FNsc5bf

Изменено пользователем Дизель
  • Нравится 1

andreyholkin.gif

rod_cccp.gif

 

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

возьми на stalkerin.gameru.net для 2008, отконвертируй для 2015, внеси правки в исходный код для поддержки 2015 - и у тебя будет своя версия для vs2015... какие именно изменения в коде - базовые со статьи на сталкерине, а дальше - как не странно , если установлен reshaper - он подскажет...

  • Спасибо 1
Ссылка на комментарий
Доброго времени суток, господа. У меня тут пара вопросов возникла, правда найти ответы не могу, но знаю что они где-то рядом)

1.В движке нету отдельно взятой функции, которая бы сохраняла дочерние элементы для класса inventory_box и при загрузке игры спавнила их обратно. Значит эта функция есть в базовом классе. Значит новый предмет должен наследовать этот же класс чтобы дочерние элементы сохранялись?

2.Как можно проверить синхронизацию объекта для сервера и клиента?

Вот код (собирался под 2013 студией), все изменения выложены в отдельную папку. В игре все предметы положенные в новый контейнер при синхронизации пропадают. Помогите поправить это момент.

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

Я писал ответ на gameru, стоит ли дублировать его сюда? Да и ответ есть в исходниках nlc7, к тому же я теперь понял почему никто не помог)

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

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

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

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

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

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

Войти

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

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

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