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

Dennis_Chikin

Жители
  • Число публикаций

    6 272
  • Регистрация

  • Последнее посещение

  • Дней в топе

    33
  • AMKoin

    551 [Подарить AMKoin]

Весь контент пользователя Dennis_Chikin

  1. 2 Desertir: только код смотреть. Адреса же нам принципиально не показывают в явном виде. Собственно, имея в виду (господи, как же это и назвать-то теперь, чтоб очередной страницы флуда не получить) - ну, вы поняли - я бы вообще сделал банально: Если что-то передается в функцию - передается адрес (у нас внутри все равно не регистровые операции, а если и регистровые, то с предварительной загрузкой из стека). То есть, пока нет присваивания - по этому адресу и получаем. Как только присваивание - создаем новую переменную, и указатель выставляем на нее. В связке с концепцией "уборки мусора" оно кажется единственно правильным, и я думал, что именно так и работает. 2 abramcumner: ожидаемо, 246 для таблицы (vs 212 и 212 для "" и 0 ).
  2. local test_s1 = "" local test_s2 = "" local test_i = 0 function test( v ) end for i = 1, 10000 do test_s1 = test_s1 .. " " end local pt = profile_timer() pt:start() for i = 1, 10000 do test ( test_s1 ) end pt:stop() log( "info", "string 200000: %s", pt:time() ) local pt = profile_timer() pt:start() for i = 1, 10000 do test ( test_s2 ) end pt:stop() log( "info", "string 0: %s", pt:time() ) local pt = profile_timer() pt:start() for i = 1, 10000 do test ( test_i ) end pt:stop() log( "info", "int: %s", pt:time() ) string 200000: 30992.1328125 string 0: 231.48368835449 int: 216.08390808105 Таки да, действительно копирует. Прощай очередной "оптимизаторский" миф про "строки существуют только в одном экземпляре".
  3. Dennis_Chikin

    C++

    Символ с кодом 0x20 внезапно назывался раньше пробелом. Ну, в смысле, во всех кодировках, принятых на x86. Возможно, нынче как-то иначе, особенно в "средах разработки". Но я ж честно пишу: не знаю, как теперь. Аналогично с указателями: переменная, в которой содержится адрес (относительный, или абсолютный - не важно) - это он и был. Когда-то давно. Ежели у вас есть ссылка на словарик, где написано, что чем нынче стало согласно последним постановлениям ВЦСПС - буду благодарен, да.
  4. Dennis_Chikin

    C++

    1. Не-а, вообще ни одного не знаю. Я даже компьютер включать не умею. 2. Только чистый спирт. Что касается LUA, то как ЭТО еще назвать ? Не, уверен, что правильное слово нынче придумали. Вообще много страшных слов напридумано, за последнее-то время. Но я их не знаю. И в общем-то не сильно стремлюсь - так, если по случаю кто расскажет. upd: впрочем, да, указателем называть тоже нельзя. По указателю должно быть доступно не только чтение, но и изменение. А в LUA - только создание нового.
  5. Dennis_Chikin

    C++

    Если ты про пробелы, то не имеет значения. Что касается int *a и int &a - первое, если оно у тебя где-то лежит, и ты передаешь как указание - где брать. То есть, например, сегодня у тебя там 0, а завтра - 1. Ну, кто-то где-то зачем-то поменял. Однако при этом все заинтересованные, и знающие правильное место - каждый раз, когда туда полезут - получат именно то, что там лежит сейчас. Во-вторых, если ты их захочешь изменить, для всех, то ты и пишешь *ptr = my_var; & тебе пока не нужен вообще. 2 Desertir: m1VeЯyKee\/\/11IntigerP001nteЯ - так круче.
  6. Dennis_Chikin

    C++

    *var - обратиться по адресу, указанному в var. &var - получить адрес var Собственно, в lua, имея дело с переменной, всегда имеешь дело с ее адресом, к которому зачем-то привязан тип, а потом при операции происходит 100500 преобразований, и не всегда с ожидаемым результатом. upd: зачеркнутое было действительно написано не на русском языке. Я подумаю, как сказать то, что хотел сказать. (И вообще - что именно хотел.) В сях, если не указал, что это - адрес - имеешь дело с копией. char *s = "моя строка"; // s - это "где конкретно лежит буква "м". char c1 = *( s + 3 ); // это пробел. То есть, просто пробел. А вот s+3 - это откуда мы его берем. char c2 = s[3]; // тоже пробел. Но уже другой. Хотя взят оттуда же. char c3 = s[3]; // и еще один пробел. char *ptr = &c1; // адрес какого-то пробела, лежащего где-то. А вот char &addr = s; // это уже типично плюсплюснутое извращение, придуманное для изращенцев, и так делать не надо. Для чего все такое придумано - а вот собственно то, что я тебе про сохранение/чтение писал. Выделяешь память, много. Получаешь указатель (сиречь, адрес). Объявляешь его указателем на структуру нужного тебе типа, ну там, на таблицу, например. И, вуалая - по элементу всегда имеешь нужное. Если хочешь что-то другое - объявляешь более другую стуктуру, или вообще указатель на тип (если знаешь, где у тебя что лежит), и по нему имеешь что хочешь в том виде, в каком надо. А читаешь/пишешь в файл - всегда блоком, от которого тебе надо знать только адрес и размер. И все это - мгновенно.
  7. function take_money(pid) db.actor:iterate_inventory(is_item, db.actor) end Жуть какая... Собственно, то, что получаем - это и есть искомый предмет. Все. Получаем id, получаем объект, удаляем. Больше ничего не надо. Ни каких итераций. Единственный момент - после того, как удалили, ни каких действий в :on_что-попало() быть не должно. Собственно, я в статье про использование именно по-этому и сделал выбор нужной функции по таблице. Ну и продолжение трэда можно в курилке посмотреть.
  8. Из всех моделей компьютеров и комплектующих во всех магазинах в прайс-листе должна быть только одна позиция "компьютер стандартный, одна штука". © неизвестный "менеджер по продажам". Это если апеллировать к "реальной жизни". Но вообще, действительно, это судьба такая у всех "рекламных" тем: видеоматериалы не смотрятся, а кто смотрит - не очень-то понимает, про что оно. Пока руками не пощупает. У тебя ж есть "фишки", есть "сюжет", и есть визуальные "решения". И по видео в них не разберется - что есть что - никто, и никогда. Гм, я к чему это: предлагали ж подумать над списком тем, и их наполнении: что и когда. Пустые не нужны, а общерекламная - она и есть "общерекламная". Тут, как бы, от автора зависит. (Да, понимаю, что хочется сначала доделать, а не отрываться на объяснения.) И, да, если пора почистить - так куратору и кнопка в руки.
  9. Очередной забавный вопрос: se_monster:on_death() / se_stalker:on_death() при каких-то условиях вообще вызываются, или это кто-то просто для красоты добавил ? Так, я вообще не понял этого юмора... При net_destroy()/net_spawn(), то есть, при переходе offline/online, у монстров load() тоже не вызывается. Init() -> reload() -> reinit() -> netspawn(). По крайней мере в солянке. Это значит, что все, например, сохраненное в pstor - того... А в оригинале-то оно работает ?
  10. Гм, как я недавно с удивлением выяснил, гэйм-объект вообще не позволяет что-либо добавить или изменить, кроме того, что дано свыше. То есть, в смысле, self.что-то_там - пожалуйста, но это будет экземпляр, доступный только самому себе. Впрочем, уже не больно-то и хотелось, ибо сама идея зарекомендовала себя как Чистое Зло. В смысле, не только по-этому, а по совокупности. Эрго, достаточно лишь вменяемой альтернативы нетпакетам для серверных, и вменяемого управления интерфейсами. А эти уродцы - ну их... О, возможно, был бы небесполезен офлайновый инвентарь.
  11. Нет, ну если уж трогать непосредственно движок, то почему бы и не потрогать код сохранения/загрузки ? Весь вопрос в том, что именно мы хотим сохранять, и как оно выглядит внутри игры. Сохранению контекста объектов и нетпакетам - отказать. Сделать плоскую таблицу, иметь ее в виду как последовательный кусок памяти, и тупо писать/читать поблочно. Вот прямо в новосозданный сэйв. Ничего лучшего не придумали. Скорость будет выше, чем у копирования средствами системы.
  12. Вопрос весьма расплывчат. Даже непонятно, относится ли он к работе с файлами, или к организации данных. Как бы в идеале, чтобы все было быстро, у тебя должен быть организован непрерывный блок, скажем, полученный через malloc() (ну или массив таки блоков), который ты пишешь/читаешь через read() или pread() / write(), а потом накладываешь структуру, и разбираешь все в один проход. При этом, да, размер сэйва тебя волновать не должен от слова совсем - ты вряд-ли в данном случае выйдешь за ту границу, где он начнет реально влиять. И, да, взятую память ни кому никогда больше не отдавать. Это я тебе как человек, писавший/правивший всякие ata* и прочие burncd с raid'ами рекомендую. И забить на "совместимость" с 49.5битным процессором неведомого производителя, работающим на троичной логике, со старшим байтом в середине слова. Но, разумеется, тебе сейчас именно xmlы генерить/парсить и насоветуют, как "идеологически правильный" подход.
  13. 2 Карлан: вообще-то вопрос скорее в тему с++. Если сохранять/читать фиксированными блоками, причем в один файл - будет практически мгновенно. Построчно/побайтно - медленно и печально. Традиционно медленными являются сами вызовы/служебные операции, действия с 1000 файлов - это очень медленно. С 10000 - невменяемо. Операция с 1 байтом - не сильно быстрее операции с 100kb. Вообще, то, что мы видим как "загрузку игры" - это чтение много разных файлов (сравни с re-load на той же локации), а все остальное (вот этот самый re-load) - вычисления и всяческие многократные рекурсивные переборы разной ереси.
  14. Внезапный такой вопрос: от чего зависит (и где вызывается) :load() для монстров ? Ибо внезапно обнаружил, что сэйв у меня для них отрабатывает, и что-то туда пишет, а вот load почему-то отрабатывает только для торговца. Собственно монстры - reinit() и сразу net_spawn(). Upd: эффект явно связан с se_monster, и вдумчивой ревизией я, наверное, и проблему найду. Но сама суть эффекта пока что загадочна.
  15. Гм, по-моему, ты не понял. При чем здесь переносимый вес, если речь идет про инвентарный ? Совершенно разные вещи. И вот это - именно тот самый "артефакт, который снижает вес рюкзака". Это во-первых. Во-вторых, это как раз иллюстрация, что ни что не мешало сделать еще в 2008, когда только-только начинали править конфиги, стоило лишь чуть-чуть подумать, а не вздыхать о том, что "это надо править движок". Ну и про движок повторюсь еще раз, и про это и про DTL, и про все остальное - мало "просто" править движок, надо еще сделать так, чтобы такой вот исправленный движок включал в себя сразу набор для много разного, и набор этот был хорошо продуман. А что до конкретно алпетовского, то интерес у меня лично был вообще потерян сразу после заявления про "избранных и отбракованных" - то есть, тех, кто его получат на определенных условиях, с какой-то поддержкой, и всех остальных.
  16. "хотя вряд ли представляете, сколько названных вами идей я уже взял на вооружение и реализацию" А уж сколько из этого взято на вооружение чуть ли не четверть века назад там, где ни какого сталкера и близко не было... И сколько потом успешно, гм, утеряно теми же самыми людьми, по тому что брали чисто "на интуиции", и сами ни фига не поняли, где у них взлетело и почему... Опять, же, в той же "игромании" в свое время много чего писалось... И кто это прочитал, и кто из прочитавших запомнил ? Так что - пусть будет. Чтоб хоть ту же "игроманию" за 10 лет назад неизвестно какой выпуск не искать.
  17. Если в этом антиграве закомментить inv_grid_width = 0 inv_grid_height = 0 - будет выглядеть как пистолет, убирающий 50 кг веса. То есть, заспавнить в инвентарь, и наслаждаться. Или заспавнить на землю, подобрать, и наслаждаться. Далее можно пойти разными путями: 1. Например, приделать к нему иконку и визуал не ПМ'а, а, например, арта, и более другой слот, чтоб даже при желании как оружие нельзя было выбрать. 2. Можно оставить невидимым и спавнить в инвентарь при подборе какого-то арта в пару к этому арту. 3. Заспавнить в инвентарь сразу, выставить 0 патронов, а при подборе/потере артов делать local item = actor:object( "antigrav" ) if item then item:set_ammo_elapsed( сколько надо ) end Я рекомендую третий вариант.
  18. "при взятии денег из схрона прибавлять их к общим деньгам ГГ" Если деньги - это предмет, то вешаем вызов на on_take_item_from_box().
  19. Dennis_Chikin

    [SoC] Вопросы по SDK

    Петрович продолжает жечь напалмом. 100500 раз обсуждалось. Если такую текстуру как -то удалось подсунуть игре - будет тормозить и глючить. Первая по распространености причина мегалагов, перед кривыми звуками.
  20. Кстати, про караваны уже здесь обсуждали, но вспомнить не лишне. Да, некоторое количество носильщиков + охрана. Грабить не рекомендуется, по тому как это уже действительно займутся, и закопают. Где попало и когда попало не шляются - таки скорее всего нахоженные тропы есть, но ничего интересного на этих тропах нет. Но изредка по какой-то надобности пересечься можно. Или даже авангардом/разведкой поработать. 2 Карлан: чисто из соображений лени я предлагаю не ограничивать совсем. Пусть за копейки покупает кто угодно что угодно. Но именно за копейки, совсем смешные. Проданный металлолом тут же можно выкупить обратно. Мало-ли, передумал. Но уже с наценкой, ибо "что с воза упало". Продажа у торгоговцев "от торговцев" - в полной исправности, из тех же соображений + он с этого и кормится, что взял за копейки, бригада негров в порядок привела - продал за много. Это если, конечно, не строить сюжет на продаже с браком и последующими оргвыводами. Типа, в кокой-то момент этот придурок со свои браком всех достал, и решили, что место может занимать и кто-то более вменяемый.
  21. Итак, тайна золотого ключика антиграва в рюкзаке. Вы, конечно, будете смеяться, но перед этим хочу сказать несколько слов. Если кто заметил, у меня добрались руки до артоконтейнеров. Раньше просто другим занимался. В общем, кто знает, что там исходно было внутри, тот знает. Кто не знает, может посмотреть. Ужас этот (по пять скриптов на каждый из 3-х контейнеров, с лютым бешеным апдейтом в каждом), естественно, был переписан. Разумеется, в процессе переписывания возникла мысль, что лютый, бешеный переспавн "балласта" - это не есть хорошо. При том, что существует стандартная вполне функция, меняющая вес предметов. Ну, некоторых. Дальше возник закономерный вопрос: действительно ли ПЫСы устраивали лютую и беспощадную "борьбу с читерами", как это нынче модно, или так, для виду пару проверок куда попало вставили ? В общем, ларчик - ЛОМОМ открывался: -- это антиграв на 50 кг, невидимый. Можно в пару к арту спавнить, можно картинку арта и слот другой. Или еще как - в меру буйства фантазии.
  22. Флуд, конечно, но рискну спросить: неужели - Меченый ?
  23. Я хочу детали. Что видим, что делаем, какой получаем результат. Ну, если по сюжету, то вообще то вариантов 2: 1. Жмем в тапку в пол, колеса крутятся, выкапывают яму в грязище до полного приземления на брюхо. 2. Жмем тапку в пол, проезжаем сквозь деревья, проезжаем сквозь аномалии, проезжаем сквозь кабанов, проезжаем сквозь насыпь, проезжаем сквозь забор/шлакбаум/БТР/закрытые ворота на переходе на свалку, проезжаем сквозь Юрика и бандитов, проезжаем сквозь ворота на бар, проезжаем сквозь бар со всеми его зданиями и сталкерами ... проезжаем сквозь стены саркофага, паркуемся около монолита. Как-то так. Но коль все карты переделаны, я хочу знать, как это должно выглядеть на переделанных. Хотя, в принципе, игра про то, как Меченый на тракторе распахивает в Зоне поле под картошку Сидоровичу... Мда...
  24. И тем не менее. Поскольку тема как раз про это, то предположим, что кто-то взял, и все переделал. Вообще все. Остался Сидорович в бункере. У бункера стоит тазик. Мы в его залазим, заводим двигатель, жмем тапку в пол. Что дальше ?
  25. Так, у меня просьба: описать маршрут на полученном от Сидоровича тазе... ну, куда-нибудь. Кстати, куда ? И с какой целью ? Вот взять и описать. То есть, таз стоит у бункера, мы в него залазим, заводим, тапку в пол и крутим руль. Куда крутим и что при этом видим/что происходит.
×
×
  • Создать...