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

Курилка программистов


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

(изменено)

На исходниках такой хак сделать в принципе нельзя...

Этот хак:

если можно читать/писать значения прямо в память?

Делается ровно так же, как и на ассемблере. В чем проблема-то. Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

(и случится, если мне удастся задуманное)

Звучит как http://xkcd.ru/927/ :) Изменено пользователем abramcumner
  • Спасибо 1
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

self explained код - это миф.

Не миф. Это идеал, к которому надо стремиться. Не бывает 100% самокоментируемого кода, как не бывает 100% безглючного кода или 100% ооп кода. Но к ним можно стремиться :)

 

К примеру твой кусок кода вполне самокомментируемый:

for id=0,65535 do
    local cobj = level.object_by_id(id)
    if cobj and cobj:is_stalker() and is_bandit(npc) then
        if distance_between(db.actor, cobj) < 20.0 then
            remove_head(cobj)
        end
    end
end
А вот наличие комментариев только усложняет его модификацию. Увеличил радиус поиска бандитов - надо править в двух местах: в коде и в комментарии :)

 

Хорошо было бы конечно забацать итератор по онлайновым объектам... Тогда было бы вообще, как в комментариях:

for _, cobj in pairs(level.objects) do
    if is_bandit(cobj) and distance_between(db.actor, cobj) < 20.0 then
            remove_head(cobj)
        end
    end
end
  • Согласен 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

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

А не получится так, что за ним шел коллбек, который у себя вел учет предметов в инвентаре(на on_take добавлял в словарик, на on_drop удалял из словарика). А тут до него коллбек не дошел и предмет так и остался висеть не удаленным. Ну и наоборот.
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@abramcumner, в таких случаях перед удалением можно дропать, как вариант.

 

ну или банально дропать, как предлагают ребята.

Его в on_drop и удалили. А половина модулей об этом не оповещена.

 

Также как вариант, можно послать сигнал что предмет удален, и дать всем подписчикам возможность удалить из списков. В этом и есть гибкость event систем

 

2) Там где надо я могу выстрелить еще один ивент, скажем on_post_take (после взятия) или on_pre_drop (перед удалением),

Есть в этом нечто забавное - остановить ивент, а потом вместо него посылать новые. Хотя вполне возможно - оставшейся части посылать уже не on_drop, а on_release. Но тогда модулям придется обрабатывать 2 ивента вместо одного.

 

Вообще "концепция ивентов" на мой взгляд включает следующие 2 пункта:

- локальность подключения к системе ивентов - иначе можно и через bind_stalker подключаться,

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

 

Пример с инвентарем привел из-за явной симметрии on_take/on_drop и такого же явного ее нарушения. А так это может быть маленький квестовый модуль, который следит за каким-то предметом и обновляет статус побочного квеста. Явно же это не тот модуль, который надо регистрировать первым и в специальном реестре. Просто маленький иногда подглючивающий квест :)

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

Поделиться этим сообщением


Ссылка на сообщение

Именно потому, что получение значения по ключу - тот же перебор, по хешмапу.

Хмм... Не хилое такое заявление про хешмап и перебор.

Поделиться этим сообщением


Ссылка на сообщение

Хорошо-хорошо, не полный перебор. а бинарный поиск :-)

Это у map - бинарный поиск. У хешмепов время поиска ключу - константа.
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

Вообще-то экспортрованные вещи написаны и так и так:

змея: game_object, биндер, серверные классы(за исключением имен :))

верблюд: уи-классы и прочее

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

Поделиться этим сообщением


Ссылка на сообщение

Да, это так. Т.е. вопрос только в том, кто это будет делать? :)

Тот, кто начинает свой глобальный проект с правками движка и скриптов. В том же xp-dev - править смысла нет, отвалятся у всех скрипты. А переписывать скрипты только потому, что кому-то так кажется красивей... :)
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@svarog2741, ты серьезно? :)

У тебя куда-то потерялось тело функции. Найди его и посмотри: может файл с ним не добавлен в проект или оно под каким-нибудь дефайном или еще что.

 

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

 

 

Методы действуют на объекты у которых вызываются. Тут все вполне логично. Вот если бы было написано get_normalize или на крайняк tonormalize, тогда этот метод уже что то возвращает.

Тебе дали удочку, а тебе цвет не нравится? Смирись/ищи другую/сделай сам/забей на всё.

Точно так же, как и ты :) Ты высказал предложения, Денис высказал свои.

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

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

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Если бы потерялось, то на DX8 не компилилось.

ДХ8 - это отдельный солюшен? Не увидел у тебя в студии на тулбаре панели с конфигурацией.

 

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

Все они сводятся к тому, что тело функции не найдено. Номер студии абсолютно не важен.

 

Итак: ты нашел файл, в котором определена функция UpdatePowerStatus?

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

Поделиться этим сообщением


Ссылка на сообщение

@svarog2741, забей на него. Переходи на хрей - единственный нормальный движок, поддерживающий дх9 и дх8

 

Ну ты хотя бы скажи, что тебе не нравится в приведенном коде :) Или компилятору что не нравится.

Код перебирает режимы моника и заполняет структурку. Что там: режимы не преребираются или структурка плохо заполняется?

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Can't find appropriate full screen video mode Mode: 800 x 600 x UNKNOWN

Выведи в лог все доступные режимы и посмотри почему ни один не подходит.

 

Есть подозрения, что в EnumAdapterModes надо передавать номер режима(типа переменную i).

Поделиться этим сообщением


Ссылка на сообщение

@abramcumner, кстати вопрос: как реализована поддержка HLSL на дх8? Вроде как он появился только в дх9... Читал где-то, что на самом деле там не дх8, а обрезок дх9 (хотя и непонятно, как такое возможно).

Так и есть, р1 работает на самом деле на дх9.

Можно и на ДХ12 сделать сталкеровский р1 - пиши шейдеры с запеченными тенями/освещением и все.

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Кто хочет р1, тот будет браться. Не представляю кому даже сейчас р1 может понадобиться.

  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

Ню-ню (код практически всех модов говорит мне обратное), но почему-то никому в голову не приходило это использовать. Особенно тем, кто любит говорить что на их моде можно будет с легкостью что угодно сделать ;).

Чтобы твой способ работал, нужно собирать спавн храи. Если храи не пользуешься, а пользуешься асдс, то твой способ только прибавит работы.

h0N0r, дирекция переписывается в абстрактном пакете - делай раз, дирекцию ставишь тем же поинтом (если это какой-то объект у которого есть схема с лук-точками) - делай два.

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

:)

Тебе надо еще в СДК поработать.

Поделиться этим сообщением


Ссылка на сообщение

АСДС я использую в режиме RO, слишком муторная телега чтобы с ней работать, но в связке с СДК утиль крутой. Я и подразумевал что работать надо в СДК, в любом случае даже если юзаешь асдс потом олл спавн можно будет побить, не вижу проблемы.

Способ безусловно хороший, только разговор же не о тебе, ты еретиками назвал всех, кто использует "alife():create" :)

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

Без этих трех условий способ не работает.

 

По правильному в функции alife():create не должно быть вообще лв/гв - это внутренности системы навигации. Должны быть только координаты. А лв/гв пусть эта самая система навигации и считает, если они ей нужны.

 

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

Поделиться этим сообщением


Ссылка на сообщение

Хм, а ничего, что одни и те-же координаты могут быть на куче разных локаций ? Как бы все не спорили, а реальность есть такова, что имея только координаты заспавнить объект не получится - по любому нужен gv, который определяет целевую локацию.

И имя локации, например, в параметры добавить. Именно гв то зачем?

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Но я не ради америку открыть, а ради разузнать почему деятели которые объвяляют свои моды как какие-то платформы/базы для дальнейших разработок этим не озадачиваются, а может мне понравится их мод как основа, но состав уровней не понравится, или просто захочу заменить сам сетку где-то, что тут делать? То-то и оно :).

Какие деятели? АМК? Я же написал причины, по которым твой способ может не подходить. По-видимому у них одна из трех причин.

Может стоит добавить конкретики, а то обсуждать сферических деятелей в вакууме совершенно не хочется.

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

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

А в чем разница? Все одно нужен еще один параметр, кроме координат: меня и gv устраивает, хотя-бы тем, что имея имя уровня, придется городить какой-то скрипт для получения gv на целевом уровне. А имея gv, можно его сразу и передать в create...

Разница в том, что ни скриптеры, ни квестовики не замарачиваются с гв/лв. Разбор делается в движке.

Если добавить имя уровня, то оно по-любому понятней и проще гв.

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

 

 

P.S. А желание, с помощью скриптов создать некий универсальный спавнер всего и вся, якобы не привязанный ни к чему, кроме координат - на мой взгляд фикция, до тех пор, пока не будет альтернативы единственной ф-ции создания объектов в игре(хоть она и в нескольких ипостасях), которая обязательно требует одним из параметров gv, для определения целевой локации.

Я говорил исключительно про дизайн движка. Что его внутренности вытащены наружу(в скрипты). Все. Ни о каких универсальных спавнерах и прочем я не говорил.

Собственно я и говорил об этой альтернативе.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...