Перейти к содержанию

Вис691

Управление проектами
  • Публикаций

    1 539
  • Пожертвование

    0,00 ₽ 
  • Зарегистрирован

  • Посещение

  • Победитель дней

    67

Весь контент Вис691

  1. Вис691

    Вернулся к старой идее

    Из альбома: Разработки

    Помнится, года 2 назад попытался вернуть дополнительную инфу во время загрузок. Ту, что была в 3-ей части. На тот момент знаний было у меня меньше, и получалось, что надписи попадали за фоновую картинку и просвечивали только при их смене. Вернувшись к идее сегодня, я добился возврата прогресса по уровню. Пока что это чисто статическая картинка, но сделать плагин для нормальной работы несложно. Это лишь скорее вопрос времени, который рано или поздно разрешится. А вот вопрос о том, где я хочу это видеть - в оригинале или только в рамках Гранд Каньона - это тема для размышления. Так же как и вопрос о том, что я хочу видеть. Стандартные статы? Ещё какую-нибудь информацию? Буду думать. Да и вы не стесняйтесь предлагать что-либо в комментариях.
  2. Вис691

    Вернулся к старой идее

    Мне кажется для этого там маловато места всё же, да и в случае обновления модулей придётся вручную эту инфу обновлять, что неудобно.
  3. Вис691

    Разработки

  4. В общем, поглядел я на это всё, постарался осознать, что я сотворил аж в 14-ом году. Система следующая: мы решили ввести систему рецептов для того, чтобы как раз таки захватить все виды книг. Соответственно никакой сегментации нет, писец всё также скупает всё, просто у вас есть выбор, от какой конкретно избавиться и в каком количестве (вдруг вы хотите продать лишь половину). Та часть, которая находится в скрипте к продаже никакого отношение не имеет. Да, сегодня я бы написал это всё не так прямолинейно, однако смысла что-то править не вижу по золотому правилу "раз уже работает, значит не трогай". Т.е. основной упор (насколько я помню) был на то, чтобы избавиться от диалогов а-ля "я хочу продать 1 книгу", "я хочу продать 2 книги" и т.д. в пользу гибкого выбора.
  5. Или же 15-ти летний я подобных вещей не умел делать
  6. Ну а что в таких ситуациях принято говорить? Удачи ребятам, верим, что проект не загнётся. А вот когда будут хотя бы скрины или даже ролики, тогда и обсудить можно будет.
  7. Вис691

    Ассасин

    Ох даже моё прохождение указали. Спасибо) Проходил мод я уже очень давно, но прекрасно помню, что он мне понравился. Местами приходилось думать, местами всё было более-менее прозрачно. Из вопросов остался, пожалуй, один - как много вариантов прохождения? Думаю, что несколько, ибо местами приходилось импровизировать (до сих пор помню, как толкал какого-то охранника, а ведь наверняка можно было заставить его отойти добровольно). В общем, если кто не играл ещё - могу смело посоветовать. Мод очень большой (вон, аж на 29 частей растянулось прохождение), но не без мелких косяков, конечно. Однако впечатления остались только положительные.
  8. Вис691

    Овчарка не канон

    Ну подменить не проблема (вроде в эдите быстро делается). А вот перенести, да, нужен кто-то умеющий. Хотя статика не должна быть очень трудной (наверно)
  9. Вис691

    Овчарка не канон

    Я хоть уже в Фолл не играю, но ради этого момента после релиза найду время!
  10. Вис691

    Овчарка не канон

    О да, светящаяся бутылка! Именно то, о чём я говорил.
  11. Ну и до кучи реальный пример из ГК. В моей азартной игре всё зависит от чисел, выпавших на двух кубиках. Проблема в том, что кубики иногда на ребре останавливаются, и нужно их перекидывать. Решил подобные моменты разбавить сообщениями в углу. А-ля советы, анекдоты и прочее (их содержание ещё не придумал). В общем насоздавал сообщений, закинул их в форм лист. По логике, всё, что мне нужно, - при каждом броске брать и выводить следующее сообщение из листа. Как это выглядело бы с компилятором из ГЕККа (опущу объяснение математики и некоторых переменных): let iSize := ListGetCount BHCDCrapsMsgsList ; узнал размер листа, т.е. точное количество сообщений в нём let iNth := iCounter % iSize ; выбрал нужный номер из него let rMsg := ListGetNthForm BHCDCrapsMsgsList, iNth ; наконец вытащил сообщение с номером iNth showMessage rMsg ; показал его С компилятором NVSE это всё можно записать так: let rMsg := ListGetNthForm BHCDCrapsMsgsList, (iCounter % (ListGetCount BHCDCrapsMsgsList)) showMessage rMsg ; вполне вероятно можно и в одну строку всё запихнуть, но у меня не вышло Мало того, что это на пару строк короче, так я ещё и не завожу какие-то второстепенные переменные для хранения промежуточных данных. И всё, что нужно сделать, чтобы этот код скомпилировался - вместо begin GameMode написать begin _GameMode Не знаю, как со стороны обычного юзера, а меня с позиции скриптера это очень впечатлило.
  12. Ну если совсем кратко, то это просто другой компилятор для скриптов. Позволяет использовать некоторые конструкции, которые нельзя использовать со стандартным. Там очень неплохо на примерах показано различие, поэтому если есть хоть малейшее понимание программирования, то должно быть понятно, что и как. Если же понимания нет, то предлагаю следующий абстрактный пример. Представим, что у нас есть контейнер с ящиками. В них может лежать всё, что угодно - числа, строки, даже другие контейнеры с ящиками. Мы знаем, что в каждом ящике лежит именно какое-то число. А компилятор ГЕККа этого не знает. Поэтому когда мы ему скармливаем содержимое ящика, он ругается: "Я не знаю, что там такое! Я жду на вход число, а вдруг ты мне подкинул строку? Не буду компилироваться!" А этот NVSE'овский компилятор говорит: "Хм, ну раз он мне даёт содержимое ящика, то он уверен, что это число. Скомпилируюсь без проблем. Любые ошибки будут на его совести." Как-то так.
  13. Наткнулся тут на очень интересную страничку https://geckwiki.com/index.php/Script_Compiler_Override Надо будет поэкспериментировать.
  14. Вис691

    ScreenShot325

    Ну я и говорю, закинуть туда что-то светящееся, чтобы взгляд привлекало. А так, всё круто, мне нравится.
  15. Вис691

    ScreenShot325

    Если стекло холодильника прозрачное, т.е. видно содержимое, то я бы какую-нибудь светящуюся бутылочку положил бы, чтобы она привлекала внимание. Например, квантовую ядер-колу.
  16. Вообще можно и напрямую через скрипт получать текущую радиостанцию. Думаю, так будет даже удобнее для реализации таймера для подзарядки. Опять же скрипты позволят избежать подобной проблемы. Хотя и в результ-скриптах, по идее, можно извернуться. Но зачем усложнять вещи?
  17. Вторая попытка перенести интересный пост в мой блог, чтобы он не потерялся. Напоминаю, что подобные записи могут иногда здесь появляться. Убрал окошко цитаты, чтобы читалось удобнее. ====================================== Возвращаясь к самому первому посту в этой теме, наткнулся на интересную фразу: Конкретно, конечно, имею в виду пометку про переменные типа Long. По интересному стечению обстоятельств я таки столкнулся с этим типом. Самое забавное, что пришлось им пользоваться самому. Если вкратце, то нужен был код, позволяющий одну из восемнадцати переменных увеличивать до одного, а остальные семнадцать уменьшать до нуля. Если говорить совсем по-простому, представьте что перед вами 18 лампочек. В любой момент времени гореть может только одна. Пускай горит лампа номер 5. Если вы зажигаете, скажем, лампу номер 12, то 5ая обязана потухнуть. Как это сделать? Ну, из логичных вариантов на ум приходит запоминать, какая лампа горит в данный момент и при зажигании другой тушить её и запоминать новую. К сожалению, переводя это всё в код скрипта, необходимо будет писать 18 проверок а-ля "Если горела лампа номер 1, то потушить её. Иначе если горела лампа номер 2, то потушить её ..." И так далее. Решение рабочее, но учитывая ограничения на количество строк в скрипте, не самое элегантное. А есть и более плохой вариант (который и использовался изначально, когда переменных-"лампочек" было около пяти): не запоминаем вообще ничего, а просто постоянно выключаем все лампы, кроме нужной. Даже если лампа и не горела в данный момент. "Если зажгли лампу номер 1, то потушить лампу номер 2 потушить лампу номер 3 ... иначе если зажгли лампу номер 2, то потушить лампу номер 1 потушить лампу номер 3 ..." Думаю, смысл ясен. Очевидно, что этот вариант совершенно неприемлемый. Однако он имеет место быть, если была бы возможность/необходимость зажигать сразу несколько ламп. Тогда бы прошлый, более компактный вариант, не совсем бы подходил и раздувался бы по количеству строк. "Что же делать?" - подумал я. Хотелось бы иметь всего одну кнопку, по нажатию которой сразу бы выставлялись все 18 состояний ламп. И тут я придумал следующее: в качестве кнопки будем передавать обычное число, скажем, 4. Вы наверное спросите, а как число 4 может изменить состояние всех 18ти лампочек? Всё очень просто - переведите число в двоичную систему, тогда оно будет состоять только из нулей и единиц. Даже если вы про такую только слышали или вообще слышите впервые, то ничего не составит труда разобраться. Это абсолютно такие же числа, которыми мы пользуемся. Как работает наша система? У нас есть 10 цифр 0-9, и, когда мы доходим до следующего после 9ки числа, мы просто добавляем новый разряд и получаем 10. Также и там, только цифр всего 2. Но это всё теория, которую даже знать не надо - есть куча конвертеров в Интернете, где за 5 секунд вы сможете перевести любое число в любую систему. Вернёмся к нашим баранам. Что я там выбрал, 4ку? В двоичной системе это число записывается как 100. "И что же тебе это даёт?" - спросите вы. А всё очень просто, пускай 0 - это лампа выключается, а 1 - включается. Добавлю для наглядности нулей перед нашим числом, чтобы выровнять по по количеству лампочек: 000000000000000100. Соответственно, каждый разряд соответствует своей лампочке. Имея функцию, которая просто приравнивает лампочки к разрядам а-ля "Лампа 1 = 0 (т.е. тушим её) Лампа 2 = 0 ... Лампа 16 = 1 (зажигаем) ..." мы с лёгкостью избавили себя от 18ти проверок (или 18*18 изменений состояний по второму методу) и сократили код до 18 строк. Ну, конечно, их по факту чуть больше, но не в этом смысл. При этом мы можем "зажечь" абсолютно любую комбинацию из этих ламп (хоть мне и нужно было только по одной). Допустим, хочу зажечь 2ую, 7ую и 15ую лампы. Всё, что мне нужно - это записать последовательность 010000100000001000 и перевести это число в привычную нам десятичную систему. Вручную или через конвертер получаем 67592. Передаём это число в функцию ("нажимаем кнопку") и радуемся жизни. Горят ровно те лампы, которые были нужны. А главное - совершенно не надо думать, чтобы "запрограммировать" какую-либо комбинацию. Выписал в строку 18 цифр и перевёл из двоичной систему в десятичную. Удобно, красиво, лаконично на мой взгляд. Проблема лишь в том, что с увеличением количества лампочек, увеличивается и количество комбинаций. 67592 явно больше, чем 32767 (см. цитату - это граница integer'a). Отсюда и применение переменной типа Long. Но он тоже не вечен - максимум в теории мы можем завести 31 лампочку (2147483647 = 1111111111111111111111111111111 (31 символ)). А если работаем конкретно с ГЕККом, то у функции, работающей с разрядами, к сожалению, есть ограничение на примерно 20 разрядов-"лампочек". Собственно, пожалуй, это всё, что я хотел сегодня рассказать. Хотелось бы почитать ваше мнение - достаточно ли понятно я всё рассказал, может вопросы какие остались? Придумали/знаете другой способ для зажигания конкретно одной лампочки? Поделитесь им, не стесняйтесь. Да и насколько интересно это было читать? А то, может, я время от времени буду подобными интересными моментами делиться. Или наоборот не буду, если вам не понравилось. Источник: Школа Скриптинга
  18. Скорее как компактный вариант управления огромным числом состояний. Правда, конкретно мне нужны были лишь 18. Но да, от ненужных if-elseif мы избавились)

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