LINUX.ORG.RU
Ответ на: комментарий от Tark

если пугает консоль

Неудобняет. Нужна подсветка, удобный вывод результатов в виде дерева, а не простыню. Гуглил вчера возможность вывода выдал модуль GtkSourceView, но инклуд для него для моего языка программирования устаревший 2012 года, переделывать несколько тысяч строк лень, Scintilla тащит 2 мб с собой, да и вывод я победил на 98%, а на CachyOS он сломался, сам Scintilla. Так что много отрицательных флагов для начала проекта.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 2)

Мысль о том, что однажды создавать программы можно будет по описанию мне приходила ещё в 0-вых. Но тогда казалась фантастикой, хоть и в теории математически возможной.

Т.е. текущее состояние сферы выглядит закономерным.

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

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

AnonymUser
()
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Тот же Клавдий тоже в архитектуру умеет.

А я и не спорю - он знает все существующие архитектуры. Но юзер не знает какую в данном случае и как использовать. И правильно спросить не может.

Вот да. Уже много раз замечал, что когда существенной разницы нет, то и Клоду особо пофиг. Более того, он просто делает как ты делаешь, повторяет за тобой. Ну или будет повторять то, что ранее в проекте сгенерировано. Это как крутой программист, но которому пофиг на всё. Типа деньги заплатили, я неделю у вас поработаю, сделаю задачу, и на этом всё.

А когда ты нанимаешь крутого программиста не на неделю, а на 10 лет, он начнёт разгребать авгиевы конюшни, критиковать всё, что было сделано до него, переделывать всё как лучше. Тебе это может быть и не понравится, но по факту это нужная деятельность, чтобы компания не зашла в тупик технического долга. И вот я пока не видел именно такого направления деятельности от ИИ.

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

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

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от anonymous_sama
  1. К этому моменту деньги уже мало что значат, любые новые технологические плюшки легко тебе доставят на дом, ибо дефицита в их производстве нет. Теперь богатство мерется не в количестве денег, а в количестве современных роботов во владении отдельного человека или корпорации.

Я не работаю уже, разрабов всех уволили остался только маркетинг/продажи

Это конечный пункт вашей эволюции? Ну я так и понял, что будет хеппи-енд.

bread
()
Ответ на: комментарий от shdown

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

Я сам примерно так ковыряю МК сейчас в своём хобби проекте (да я могу взять готовую прошивку и сделать то что мне хочется, может подпилить её чуть-чуть ИИ-шкой и всё будет хорошо), но куда интереснее узнать некоторые детали, делая всё самому с нуля. В кои то веки я в сорцы ядра линукса залез (чтоб утянуть оттуда /dev/random, т.к. родной random на моём МК софтварный и потому хреновый, хотя есть источники шума, но они не то чтоб качественные были).

anonymous
()
Ответ на: комментарий от urxvt

В компании, где я работаю, есть такой менеджер, кстати. Сам по себе он программировать вроде не умеет, но немного разбирается в смежных областях. К примеру XML или JSON его не пугает, сделать HTTP запрос через какие-то там тулзы умеет, а в последние годы немало «кода» «написал» на n8n (там программирование в чём-то вроде блок-схем). У него вообще такой workflow сложился, когда он сервис делает на n8n, деньги от заказчика выбивает, а потом это всё программисты переписывают уже на что-то более существенное. И на практике неплохо получается, скажу я вам. Вот для такого человека ИИ это прям большой enabler. Он может и не понимает ничего в коде на питоне, но сформулировать свои хотелки сможет. Не удивлюсь, если программисты ему станут не нужны в какой-то момент.

vbr ★★★★★
()
Ответ на: комментарий от vbr

Сам по себе он программировать вроде не умеет, но немного разбирается в смежных областях. К примеру XML или JSON его не пугает, сделать HTTP запрос через какие-то там тулзы умеет, а в последние годы немало «кода» «написал» на n8n (там программирование в чём-то вроде блок-схем).

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

CrX ★★★★★
()
Ответ на: комментарий от AZJIO

Просто никому не охота. По молодости интереснее пивка выпить и с девкой побыть, чем в ИИ-шку что-то вбивать. А сами игры линуксоидам особо не нужны. Так что серьёзные пацаны тоже не заинтересованы. Остаются одни пенсионеры-трезвенники с ЛОР-а, но тем ИИ-шку трудно осваивать, как и всё новое.

anonymous
()
Ответ на: комментарий от AnonymUser

Мысль о том, что однажды создавать программы можно будет по описанию мне приходила ещё в 0-вых.

Мне другая мысль приходила: язык будет человеческий, ведь мы распознаем логику человека, не делаем ключевых слов, не сокращаем. Хотя это похоже, но не совсем. Одно дело писать ТЗ, другое дело писать логику.

AZJIO
() автор топика
Ответ на: комментарий от vbr

n8n прям хорош на самом деле когда нужно зоопарк подружить, и да код там тоже можно писать, например как node.js скрипт для обработки. Для социальных сетей удобно, чтобы не разбираться в oauth и аунтефикации в 30 сервисах. В целом он везде подходит где событийная связь и не нужна быстрая обработка данных, а все упирается в скорость http ответа.

anonymous_sama ★★★★★
()
Ответ на: комментарий от vbr

Заселяешь такого агента в проект и он его потихоньку улучшает, рефакторит, оптимизирует, фиксит какие-нибудь древние баги и тд и тп.

Отлично, но возникает вопрос: а вы сами что-то умеете кроме кнопкодавства? Как хить то собираетесь. Конкуренция на рынке ручного труда огромная если чо. Ворваться туда 50-летним увальнем без профессии будет сложновато.

bread
()
Ответ на: комментарий от AZJIO

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

Это мы уже по сути и получили с вайб-кодингом.

Хотелось бы вот только как раз наоборот тоже — чтобы как-то можно было и с людьми общаться с ключевыми словами, сокращениями, более формально, как на ЯП. Это бы решило столько проблем непонимания… А то иногда в том числе тут на форуме пишешь одно, за тебя додумывают: эмоциональную составляющую, которая не вкладывалась, контекст, затем добавляют свои личные травмы по этому поводу, и выдают «возражение» на то, с чего ты не говорил и даже не подразумевал, и пытаются убедить в том, с чем ты и так согласен, но говорил вообще о другом…

CrX ★★★★★
()
Ответ на: комментарий от bread

Отлично, но возникает вопрос: а вы сами что-то умеете кроме кнопкодавства?

Ничего не умею. Я даже с кнопкодавством периодически страдаю от синдрома самозванца, но пока вроде деньги на карточку переводят раз в месяц, это немного успокаивает.

Конкуренция на рынке ручного труда огромная если чо. Ворваться туда 50-летним увальнем без профессии будет сложновато.

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

Как хить то собираетесь.

Если представить, что меня завтра увольняют и я в течение нескольких месяцев не нахожу работу, то буду делать дауншифтинг. Немного денег я насобирал, своё жильё есть, я живу в стране, где можно жить очень дёшево по российским меркам (думаю, смогу прожить на 10 000 рублей в месяц, такую сумму я даже с депозита смогу получать, пока инфляция не догонит). Поумерю аппетиты и буду доживать свой век.

vbr ★★★★★
()
Ответ на: комментарий от anonymous_sama

В теории продукт хороший, но на практике возникало много проблем. Типа течёт память и не понятно - откуда. «Решили» просто ежедневными рестартами, но то такое.

vbr ★★★★★
()
Ответ на: комментарий от kto_tama

И кожаный превращается из субьекта творения в оператора - он отдает команду, тут же получает результат - и … не знаетчто с этим делать !

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

anonymous
()
Ответ на: комментарий от vbr

Типа течёт память и не понятно - откуда. «Решили» просто ежедневными рестартами, но то такое

Из докера стоял? Такого не замечал.

Ничего не умею. Я даже с кнопкодавством периодически страдаю от синдрома самозванца, но пока вроде деньги на карточку переводят раз в месяц, это немного успокаивает.

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

anonymous_sama ★★★★★
()
Ответ на: комментарий от AZJIO

Поэтому в линуксе нет ни поиска дубликатов файлов, ни ренеймера ни поиск-замена текста

Анонимусы не могут ставить клоунов.

  1. Поиск дубляжа файлов всегда был, как минимум fdupe.

  2. Мне он не нравился и я давно накропал для своих нужд такое на питоне. Скорость не ахти но мне пофигу.

  3. Со временем переписал это на го, бинарник где то валяеться, свои функции тащит…

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

В конце концов одной из особенностей юниха есть полная автоматизация, да хоть на баше.

anonymous
()
Ответ на: комментарий от Tark

Кому это нужно используют ZFS, там дедубликация на уровне блоков.

Это тут причем? Вопрос не в месте а то что куча одинаковых файлов/картинок валяется где не попадя.

anonymous
()
Ответ на: комментарий от anonymous

Поиск дубляжа файлов всегда был, как минимум fdupe

Терминал? Нет.

Анонимусы не могут ставить клоунов.

Зарегся, набери 2000 сообщений, чтобы вес был.

AZJIO
() автор топика
Ответ на: комментарий от vbr

он начнёт разгребать авгиевы конюшни, критиковать всё, что было сделано до него, переделывать всё как лучше.

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

anonymous
()
Ответ на: комментарий от anonymous

Остаются одни пенсионеры-трезвенники с ЛОР-а, но тем ИИ-шку трудно осваивать, как и всё новое.

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

anonymous
()
Ответ на: комментарий от AZJIO

Терминал? Нет.

Так гуй ограничивает ведь. В кли с ты выхлопом можешь делать ВСЕ что пожелаешь.

Зарегся, набери 2000 сообщений, чтобы вес был.

Спасибо. Уже 15 лет был зареганым, минусов больше чем плюсов.

anonymous
()
Ответ на: комментарий от anonymous

ты выхлопом можешь делать ВСЕ что пожелаешь

Так это тип прог, которому не нужен выхлоп.

AZJIO
() автор топика
Ответ на: комментарий от anonymous

Остаются одни пенсионеры-трезвенники с ЛОР-а, но тем ИИ-шку трудно осваивать, как и всё новое.

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

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

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)
Ответ на: комментарий от AZJIO

Я как-то в свои 30+ на молодёжь не тяну… Но ЛОР уже похоже на шестой десяток идёт.

anonymous
()
Ответ на: комментарий от AZJIO

Я бы тебе ответил, но нет удобного вывода результатов в виде дерева, а не простыни.

Tark ★★★
()
Ответ на: комментарий от anonymous

О боже мой, такая трагедия, невероятно, всем насрать.

Tark ★★★
()
Ответ на: комментарий от AZJIO

Конфликт поколений еще с А. С. Пушкина известен ;-D Нынче, Пенсия это что-то на невероятном и богатом ;-D

anonymous
()
Ответ на: комментарий от AnonymUser

Мысль о том, что однажды создавать программы можно будет по описанию мне приходила ещё в 0-вых.

В смысле в семидесятых. Как создавать программы пользуясь естественным языком люди думали всегда. Мой формальный научный руководитель кандидатскую на этом защитил в 1985, докторскую в 1992. Правда язык пришлось менять с естественного на более формальный, блочно-сборочный. Но всегда было ясно, что это временно, наступят времена. И таки да, 2025 год, всего то 40 лет, и это может делать любой, даже далёкий от программирования человек.

VIT ★★★
()
Ответ на: комментарий от vbr

Кстати для таких агентов можно использовать оплату вычислительных мощностей со скидкой.

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

VIT ★★★
()
Ответ на: комментарий от VIT

всего то 40 лет

Однако научрук наверное не по нейросетям делал) А его вариант еще не наступил, но это, конечно, временно)

goingUp ★★★★★
()
Ответ на: комментарий от VIT

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

VIT ★★★
()
Ответ на: комментарий от goingUp

Нет, по крайней мере таких слов мы тогда не знали. Мы говорили «экспертные системы».

VIT ★★★
()
Ответ на: комментарий от vbr

Вот такой стиль работы я и называл выше «проектирование». Мне кажется программистам следует именно к этому стремится. Переходить с кодирования на постановку задачи, архитектуру проекта, организацию функциональных блоков и связей между ними. А блоки с интерфейсами модель в виде функций сама должна писать.

VIT ★★★
()
Ответ на: комментарий от vbr

Не удивлюсь, если программисты ему станут не нужны в какой-то момент.

Ключевая фраза! Программисты не ему, а вообще не нужны в этой схеме.

VIT ★★★
()
Ответ на: комментарий от anonymous

Остаются одни пенсионеры-трезвенники с ЛОР-а, но тем ИИ-шку трудно осваивать, как и всё новое.

Это почему пенсионерам-трезвенникам с ЛОРа сложно осваивать ИИ? Некоторые всю свою жизнь новые инструменты и осваивают и создают. Это просто ещё один инструмент, ни лучше и не хуже других.

VIT ★★★
()
Ответ на: комментарий от vbr

openclaw

Рекомендую посмотреть Hermes agent, там у него перманентная память и в конце задачи он пишет в md файлик скилл, что он узнал о проекте за сессию) Но это все еще очень сыро и экспериментально. Вот тебе промо ролик https://www.youtube.com/watch?v=XMWI3nDk48c

goingUp ★★★★★
()
Ответ на: комментарий от anonymous_sama

Из докера стоял?

Я в кубернетес его засунул.

Такого не замечал.

Ну там какой-то job течёт, видимо. Я хз какой, там этих workflows нагородили несколько десятков и в каждом несколько десятков узлов.

vbr ★★★★★
()
Ответ на: комментарий от anonymous

он начнёт разгребать авгиевы конюшни, критиковать всё, что было сделано до него, переделывать всё как лучше.

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

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

vbr ★★★★★
()
Ответ на: комментарий от VIT

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

При всём при этом локальные модели всегда будут ощутимо отставать от лучших моделей. Ну пока прогресс идёт по крайней мере.

При всём при этом железо для локальных моделей скорей всего будет загружено далеко не на 100%, т.е. будет существенная переплата за простой.

При всём при этом видеокарты развиваются бешеными темпами, т.е. новое железо сегодня через 3-4 года уже будет устаревшим.

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

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Цена и безопасность. Про безопасность вы уже сами сказали. И вы неправы. Ваша деятельность представляет очень большую ценность для конкурента, а запросы модели уже являются товаром, а не только токены. Ну а про цену вот простой пример. Спрашиваю Claude “сколько моделей мне доступно и как их выбирать?» Простой казалось бы вопрос. 145К токенов, 82 цента. Много агентов можно наделать с такими ценами?

VIT ★★★
()
Ответ на: комментарий от vbr

При всём при этом железо для локальных моделей скорей всего будет загружено далеко не на 100%, т.е. будет существенная переплата за простой.

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

VIT ★★★
()
Ответ на: комментарий от vbr

Ну или занимаешься чем-то нехорошим вроде взломов.

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

VIT ★★★
()
Ответ на: комментарий от anonymous

Можно получать удовольствие от получения результата. Я вот с помощью нейросетки сделал скрипт для раскладывания торрентов по каталогам после скачивания. И теперь я получаю удовольствие каждый раз, когда у меня автоматически попадает скачанное туда куда ему положено. А также я получил удовольствие от эффективности получения этого результата, ибо сам бы я писал этот скрипт часа 4(в лучшем случае), да ещё и багов скорее всего оставил бы прилично больше(шелл далеко не мой основной язык, вечно лажаю с экранированием) чем это сделал ИИ.

Loki13 ★★★★★
()
Ответ на: комментарий от AZJIO

Поэтому в линуксе нет ни поиска дубликатов файлов

Ты просто не в теме. 4.2

ни поиск-замена текста

Это вообще наглое 4.2

есть то хочется плеватьс

ты просто ниасилел, да?

anonymous
()
Ответ на: комментарий от vbr

Я не совсем понимаю привлекательность локальных моделей. Если код представляет собой какую-то прям огромную ценность - ну тогда понимаю.

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

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от AZJIO

Не родит. Если бы это было так, на линуксе было бы завались логических игр, а по факту еле найдёшь хоть чуть чуть вменяемое.

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

LightDiver ★★★★★
()

Немножко прекрасного из мира вайбкодинга. Тут как то сомневались в способнсти ИИшек раздувать код.

Скормил функции выдачи бонусов ИИшке и попросил сделать функцию, прив вызове которой в чат бы писался список бонусов. Ну, по сути это 2 строки самой функции и 4 строки отправки в чат. Шесть строк. Сначала задумайтесь, сколько можно раздуть из шести строк? в два раза? В десять раз? В тридцать?

Вот код:

function nsCoursePrintBonusInfo()
    local function debugMsg(message)
        if type(nsCourseDebug) == "function" then
            nsCourseDebug(message)
        end
    end

    local queue = {}

    local function addLine(message)
        table.insert(queue, tostring(message or ""))
    end

    local function pluralChars(n)
        n = tonumber(n) or 0

        local mod10 = n % 10
        local mod100 = n % 100

        if mod10 == 1 and mod100 ~= 11 then
            return "символ"
        end

        if mod10 >= 2 and mod10 <= 4 and (mod100 < 12 or mod100 > 14) then
            return "символа"
        end

        return "символов"
    end

    local function formatReward(tier)
        local rep = tonumber(tier and tier.rep) or 0
        local exp = tonumber(tier and tier.exp) or 0

        return "репутация " .. rep .. ", опыт " .. exp
    end

    local function formatCharsCondition(chars)
        if chars == nil then
            return "любое количество символов"
        end

        chars = tonumber(chars) or 0

        return "не более " .. chars .. " " .. pluralChars(chars)
    end

    local function HasTimer()
        if type(C_Timer) == "table" and type(C_Timer.After) == "function" then
            return true
        end

        if type(CreateFrame) == "function" then
            return true
        end

        return false
    end

    local function ScheduleAfter(delay, func)
        if type(C_Timer) == "table" and type(C_Timer.After) == "function" then
            C_Timer.After(delay, func)
            return
        end

        if type(CreateFrame) == "function" then
            local f = CreateFrame("Frame")
            local elapsed = 0

            f:SetScript("OnUpdate", function(self, dt)
                elapsed = elapsed + dt

                if elapsed >= delay then
                    self:SetScript("OnUpdate", nil)
                    self:Hide()
                    func()
                end
            end)

            f:Show()

            return
        end

        func()
    end

    local function sendNow(message)
        if type(SendChatMessage) ~= "function" then
            debugMsg("nsCoursePrintBonusInfo: SendChatMessage не найден")
            return
        end

        local ok, err = pcall(SendChatMessage, message, "OFFICER")

        if not ok then
            debugMsg("nsCoursePrintBonusInfo: ошибка отправки в OFFICER: " .. tostring(err))
        end
    end

    local function SendNext(index)
        local message = queue[index]

        if not message then
            return
        end

        sendNow(message)

        if queue[index + 1] then
            ScheduleAfter(0.2, function()
                SendNext(index + 1)
            end)
        end
    end

    local function flushQueue()
        if #queue == 0 then
            return
        end

        if type(SendChatMessage) ~= "function" then
            debugMsg("nsCoursePrintBonusInfo: SendChatMessage не найден, очередь не отправлена")
            return
        end

        if HasTimer() then
            SendNext(1)
        else
            for _, message in ipairs(queue) do
                sendNow(message)
            end
        end
    end

    addLine("=== Бонусы курса: за что и что выдаётся ===")

    addLine("1. За каждый уникальный модуль, впервые выполненный за день, выдаётся бонус: опыт 1.")
    addLine("2. Если серия выполнения дней подряд составляет 5 или больше, за первый уникальный модуль дня выдаётся лотерейный билет.")
    addLine("3. Если серия 5+ дней подряд продолжается, и за день выполнено минимум 5 уникальных модулей, выдаётся случайный бонус.")
    addLine("Случайный бонус: либо кусок карты, либо подсказка.")
    addLine("Серия считается по первому уникальному модулю за день. Если вчера не было выполнения, серия сбрасывается на 1 день.")

    if type(NS_COURSE_BONUSES) == "table" then
        local moduleIds = {}

        for id in pairs(NS_COURSE_BONUSES) do
            table.insert(moduleIds, id)
        end

        table.sort(moduleIds, function(a, b)
            local na = tonumber(a)
            local nb = tonumber(b)

            if na and nb then
                return na < nb
            end

            return tostring(a) < tostring(b)
        end)

        if #moduleIds > 0 then
            addLine("=== Спецбонусы за модули ===")

            for _, moduleId in ipairs(moduleIds) do
                local bonus = NS_COURSE_BONUSES[moduleId]

                if type(bonus) == "table" and type(bonus.tiers) == "table" then
                    local tiers = {}

                    for _, tier in pairs(bonus.tiers) do
                        if type(tier) == "table" then
                            table.insert(tiers, tier)
                        end
                    end

                    table.sort(tiers, function(a, b)
                        local ca = tonumber(a and a.chars)
                        local cb = tonumber(b and b.chars)

                        if ca and cb then
                            return ca < cb
                        end

                        if ca == nil and cb == nil then
                            return false
                        end

                        if ca == nil then
                            return false
                        end

                        return true
                    end)

                    local tierParts = {}

                    for _, tier in ipairs(tiers) do
                        table.insert(
                            tierParts,
                            formatCharsCondition(tier.chars) .. " -> " .. formatReward(tier)
                        )
                    end

                    local line = "Модуль " .. tostring(moduleId)

                    if type(bonus.verb) == "string" and bonus.verb ~= "" then
                        line = line .. " (" .. bonus.verb .. ")"
                    end

                    if #tierParts > 0 then
                        line = line .. ": " .. table.concat(tierParts, "; ")
                    else
                        line = line .. ": условия не заданы"
                    end

                    addLine(line)
                end
            end
        else
            addLine("Спецбонусы за модули не найдены.")
        end
    else
        addLine("Таблица NS_COURSE_BONUSES не найдена, спецбонусы за модули не выведены.")
    end

    addLine("Если модуль не указан в спецбонусах, за первое прохождение обычно выдаётся: репутация 100, опыт 1.")

    flushQueue()
end

Восхищайтесь. 230 строк кода. Тут только проверок на существование функции отправки сообщения в чат четыре. Эта функция есть всегда и везде. Без нее не было бы сервера.

В ближайшие годы ИИшка точно не заменит программистов. Особенно программистов новичков. Старперы, выдохните уже. Все успеют уйти на пенсию спокойно.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 3)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.