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

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


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

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

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


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

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

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

 

Тоже возвращусь к началу - просто стоит запомнить, что это - возможно, и не ломать.

Если попытка поломать где-то замечена - убрать.

(на самом деле вопрос такой был: "откуда может взяться клиентский объект без серверного". Как выяснили - может.)

 

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

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

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


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

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

А вот то, что топор каменный и пила кривая (и еще в нее надо бензин заливать) - по назначению применять не пробовали, нет ? Прежде чем переходить на "да я, да ты..." ?

 

И, кстати, да "никто не родился с бензопилой в руках". По-моему, как-то быстро все об этом забывают.

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

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


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

Пример странного был в древнемодах. Водка и энергетик.

В сочетании со всякими модификациями древних "варок" медуз из водки и хвостов эффекты получались, гм, познавательными. А еще когда поверху какую-нибудь "детонацию" со рвущимся рюкзаком навешивали...

 

О, еще "телепорты"...

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

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


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

2 Shadows, вообще-то тут меня били ногами за предложенные "промежуточные" решения. ;)

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

 

Типа, "разнести по секциям" и т.д. Да и не только меня. А также пинали кто попало кого попало и за "переусложнения". Но это так, лирика.

 

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

Вот все то же банальное for i = 1, #t do t().

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

 

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

 

 

"Правда, что ли?" - правда-правда. Ну или иначе это придется зачесть вообще как цепляние совершенно помимо предмета.

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

 

По тому как ну в общем-то очевидно, что именно это и было написано "от переборов не уйти". И так же совершенно очевидно, что отнюдь не имеется в виду набивание руками некоей таблицы t, а что-то типа t = {}; function subscribe_on_something( ptr ) table.insert( t, ptr ) end

От которого тоже ни куда не уйти - максимум - что-то добавить, ну или эквивалент на более других командах.

 

 

"мегасистем" - это любые комплекты любых оберток поверх того перебора, от которого не уйти, с любым дополнительным функционалом, общим объемом более страницы.

 

"Главный цимес, что можно это делать динамически" - О !!! Неужто договорились ?

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

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


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

Не понимаю... Вроде, все расписывал, примеры давал...

local t = on_drop_t[item:section()]

if t then

for i = 1, #t do t( item ) end

end

- вот и вся "черная магия". Можно вложить внуть каждого t() такое же по любому другому условию. По вкусу вместо t() - if t() ... end (да хоть бы и return).

 

И, гм, не уверен, что вот так вот прямо надо в global. Все подписанты вполне в состоянии сами попросить себя добавить. А знать, кто там еще и зачем - можно и отдельную функцию для таких запросов предоставить.

 

Upd: Опередили...

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

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


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

"т.к. параметр далеко не только секция." - остальное лично мне попадалось сильно реже.

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

 

А дальше то же самое можно повторить сколько угодно раз для любого количества параметров. Вот хоть как у Desertir.

 

e.section == 'my_item' and - вот здесь очевидно придется руками каждый раз лазить везде, где надо что-то добавить или убрать. Либо что-то нетривиальное творить.

 

 

Upd: Все, признаю. Вавилонское столпотворение свершилось, и с этого момента я ТОЖЕ уже перестал понимать, кто здесь вообще про что пишет, и что при этом имеет в виду.

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

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


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

Добавьте мне в if ... then ... elseif ... что-нибудь из скрипта.

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

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


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

Кажется, я понял, что происходит. Здесь все описания того, что кто-либо делает, начинаются примерно с середины.

Ну, типа "историю вопроса все знают, как и зачем сделано - тоже все знают, куда что подключено, что там внутри и зачем оно подключено - тоже все знают. Осталось прояснить одну конкретную особенность реализации". это на самом деле не так.

 

Вот по-этому адресаты и не понимают, зачем им вообще пишут ЭТО, и что, собственно, хотят.

Вопрос - у кого-нибудь найдется время/желание написать все подробно и с самого начала ?

 

 

2 malandrinus: self.sm:call("on_drop", obj) - self. в примере как бы явно указывает на то, что относится к актору, а не к внешней системе, нет ?

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

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


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

"Но секунды - это уже совсем экстрим" - иногда бывает как раз полезно. Скажем, событие происходит раз в час, с точностью +- полчаса. Ну или даже пусть бы и раз в 5 секунд. Зачем здесь нужен лютый, бешеный поллинг с максимальной скоростью ?

 

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

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


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

Добавить в LUA #define.

А заодно - #include.

 

Да, и научить его инлайну. А вот строки копировать - наоборот, отучить.

 

 

P.S. И что-то сделать с векторами: либо изменяется то, что на входе, либо результат возвращается, не затрагивая аргумент. А не где попало как попало.

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


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

А вот как раз переименовать что нам надо так, как хотим.

Ну и простыни разные урезать. #include - в общем, для того же.

 

Зло, на самом деле, от make, когда начинают писать на нем, вместо того, чтобы писать на вменяемом языке. ;)

 

Инлайн - это когда функция разворачивается в код.

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

 

Про вектора - это вот, например про когда надо писать вот такого монстра:

c = vector():set( v_lin ):normalize():dotproduct( vector():set( lv_lin ):normalize() )

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


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

local ct_npc = 0

local ct_item = 1

local ct_corpse = 2

local ct_out = 4

local ct_med = 5

 

Ну и зачем, когда во всех вменяемых языках это делается как раз через переопределение ?

Во-вторых, таки да, если кто-то где-то зачем-то определил it_is_my_kee\/\/11_Name0ff\/aЯ1b1ee_BecauseIAmKee\/\/1XackeP, и прибил это гвоздями, то написать один дефайн, и все...

 

 

Если я хочу сделать v_lin = v_lin:normalize() - я хочу, чтобы это именно так и выглядело.

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

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


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

Идиотизм.

 

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

Впрочем, на фоне маринующихся разработок 2010-го...

 

Но, да, при этом мы ноем, что наши гениальные разработки ни кому не нужны. И, да, разумеется, за 8 лет только мы знаем, КАК. И наше знание - единственно кошерное, но мы вам его не покажем !

 

 

P.S. Кстати, а ничего, что штуки три модов с этими страшными тайнами уже выпущено ? Кстати, пока изобретатели этих велосипедов, тоже экземплярах, этак, в 5-ти, если не больше, вышвыривали из команд всех "шпионов", и прятали эти самые велосипеды поглубже ?

Изменено пользователем Dennis_Chikin
  • Спасибо 2
  • Согласен 1

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


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

Майн готт... В курилку !

 

Там завтра попробую объяснить.

Изменено пользователем Dennis_Chikin
  • Спасибо 1

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


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

"а я меняю для себя как удобно мне"

 

Ну вот и что планируется получить в результате ?

Сколько версий мы имеем на данный момент ? Что мы знаем о стабильности этих версий ? Об их функционале ?

На сколько сложно (и вообще возможно) заменить одну версию на другую ?

 

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

 

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

 

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

 

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

 

 

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

 

На выходе же нужно нечто, позволяющее без особого напряга просто пересобрать экзешник у себя + документация того, что внесено, + как этим пользоваться (доступное для освоения без "все бросить"), + ревизия этого внесенного со стороны, на предмет стабильности, взаимоисключающих параграфов и дублей. С массовым тестированием на стабильных модах, ага.

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

 


Это вот было то, что касательно движка.

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

Как-то так.

 

 

p.s. да, свой хост с gnats или типа того - оно бы, конечно, неплохо. Базу патчей, в смысле. Но коли нет, так хоть на форум.

P.P.S. Да, этот самый движок кто-нибудь пробовал под x64 собирать ?

Изменено пользователем Dennis_Chikin
  • Нравится 1
  • Согласен 2

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


Ссылка на сообщение
Практика показывает что к единому все равно не придут.

 

Чтобы куда-то прийти - надо это самое что-то сначала иметь.

Зайду издалека, и, заодно, слегка намекну на поле напаханное:

 

Вот многие ли из здесь присутствующих ПОЛНОСТЬЮ прочитали "справочник по функциям и классам", и активно пользуются прочитанным ? Прежде чем бить себя пяткой в грудь, прошу чуть-чуть подумать. То есть, вот именно оттуда ли все, чем пользуетесь, или ?

 

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

Ну вот кто знает, как, например, работает ВСЕ, относящееся к memory object ? Ага, я на disable прежде всего намекаю.

 

Меж тем, есть исходники, в которых кто-то копается. "Из интереса". А справочник - и ныне там.

 

Вот хотя-бы, дописать недописанное, расписать подробности, сделать версию не как сейчас "если вы видите в коде неведомую фигню, то возможно, в теме вы найдете - ЧТО ЭТО", а с группировкой по назначению/функционалу.

 

Как минимум, сразу станет видно, что надо поправить/добавить в движок.

 

То есть, range() например, есть, а остальное  конфиговое ? Что сейчас эмулируем через range() в апдейтах.

Далее, да, сколько лет жуем темы всяких "хранилищ", прости-господи, сотворили целое rvp с какими-то файловыми системами, и при этом - до сих пор не имеем средства сохранить произвольному объекту произвольные данные (custom_data -  это ни разу не произвольные).

Далее, разные наименования методов для game и se-объектов, делающих одно и то же, ни кого не смущают, нет ? Сначала проверяем тип объекта по отсутствующим методам (вместо того, чтобы иметь нормальный флажок), а потом... Кстати, какого, вообще, дергать метод, со всеми его накладными расходами, если он возвращает константу ? Что, сразу по людски нельзя ?

Ну и можно продолжать до бесконечности.

 

В общем, пользуются тем, что, во-первых, ЗНАЮТ, во-вторых - как могут. Вот вам и все "мнения".

 

Аналогично, кстати, со скриптовыми велосипедами. Справочника - нет, совместимости - нет, вот и ага.

Изменено пользователем Dennis_Chikin
  • Полезно 1

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


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

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

 

1. Прошерстить, и ответить, наконец, на все проклятые вопросы.

2. По результатам п1 будет сразу видно, чего в него добавить. Или не добавить.

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


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

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

 

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

(Ага, спрашиваю: что делает enable_memory_object() ? У меня оно либо не делает ничего, либо виснет; also, спрашиваю: что у них внутри всех ихних *info ?)

 

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

 

 

Во-вторых, именно что не прибегая к телепатии, собрать имеющееся по группам и функционалу, не от названия, а от "что оно делает" - как раз сразу будут видны "пустые места" - чего именно в этой группе не хватает.

 


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

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

Изменено пользователем Dennis_Chikin
  • Согласен 2

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


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

успеть деактивировать объект до того, как он занесется в список врагов

Во-во. Именно это я и пытался делать. Результаты- вышеуказанные.

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


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

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