Перейти к содержанию
Авторизация  
Bowsette

Механика карточной игры на артефакты.

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

 

09000f12732e8d491213401693568aa3.jpeg

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

Может ли такую механику написать AI чатбот?

UPD

Оказывается уже кто-то даже сделал:

Самый простой и убедительный пример — это мод "Blackjack / 21 for IWP". Это полноценная игра в блэкджек, портированная из сборки Anomaly. Она позволяет подходить к барменам и торговцам, делать ставки и играть против дилера за рубли

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

Диалог с NPC (Точка входа): Первым делом нужно добавить новую реплику в диалог торговца. Это делается в XML-файлах диалогов, и вы привязываете эту реплику к своей скриптовой функции . Выбор "сыграем в картишки" вызовет вашу игру.

Пользовательский интерфейс (Сама игра): Самое сложное. Игра в карты — это не просто текст, это полноценное окно с картами, кнопками "Взять", "Хватит" и т.д.

В X-Ray движке этим занимается скриптовое GUI. Основой для создания таких окон служит класс CUIScriptWnd .

Этот класс позволяет создавать собственные окна с кнопками, полями ввода и обработкой кликов мыши. Отличный пример для изучения — скрипт ui_numpad.script, который реализует панель ввода кода от дверей .

Система ставок и наград: Здесь все просто. Когда игра заканчивается, вы используете стандартные скриптовые функции для управления инвентарем.

dialogs.relocate_money(second_speaker, "1000", "in/out") — для передачи денег .

dialogs.relocate_item_section(trader, "af_artifact_name", "in/out") — для передачи артефактов .

Платформа для разработки: Для серьезной работы рекомендуется использовать OpenXRay — открытую и улучшенную версию движка. Она предоставляет больше возможностей для мододелов, включая поддержку 64-бит и современные инструменты разработки . В ней же появился и нодовый редактор диалогов, который сильно упрощает создание сложных веток разговоров по сравнению с редактированием XML-кода вручную .

Насколько сложно адаптировать в другие моды?

 

 

 

Изменено пользователем Bowsette
  • Лайк 1

 

Спойлер

Screenshot-20241118-181546-com-android-c

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

Да, такую механику можно реализовать. Более того, движок X-Ray, на котором основаны игры серии S.T.A.L.K.E.R., позволяет запускать собственные окна и Lua-скрипты через диалог с NPC. Правда, сложность зависит от того, на каком движке и модификации ты работаешь:

Shadow of Chernobyl — сложнее, UI ограничен.

Clear Sky / Call of Pripyat — значительно проще.

OpenXRay — вообще можно реализовать практически полноценную игру с собственным интерфейсом.

Общая схема работы

Игрок подходит к NPC │ ▼ Открывается диалог │ ▼ Выбирается фраза "Сыграем в карты?" │ ▼ Lua вызывает функцию │ ▼ Создаётся новое UI-окно │ ▼ Запускается карточная игра │ ▼ После окончания выигрыш / проигрыш │ ▼ Закрывается окно Возврат в игру

Первый этап — диалог

В XML диалога добавляется новый вариант ответа.

Например:

<phrase id="play_cards"> <text>Сыграем в карты?</text> <action>dialogs.start_card_game</action> </phrase>

или

<action>play_cards.start</action>

в зависимости от системы диалогов.

После выбора строки вызывается Lua.

Второй этап — Lua

Создаётся файл

gamedata\scripts\play_cards.script

Например

function start() level.start_stop_menu( ui_card_game(), true ) end

Вместо ui_card_game() создаётся собственное окно.

Третий этап — XML интерфейс

Создаётся файл

gamedata\config\ui\ui_card_game.xml

В нём описывается окно.

Например

----------------------------------------- | КАРТЫ | | | | Карты NPC | | | | | |---------------------------------------| | | | Игрок | | | | | | | | [Ход] [Пас] [Выйти] | -----------------------------------------

В XML задаются

кнопки

фон

изображения карт

текст

счёт

Четвёртый этап — Lua-класс окна

Создаётся

ui_card_game.script

Например

class "ui_card_game"(CUIScriptWnd) function ui_card_game:__init() super() self:InitControls() end

Тут происходит

загрузка XML

создание кнопок

обработчики нажатий

Например

function ui_card_game:on_btn_hit() end function ui_card_game:on_btn_pass() end

Пятый этап — логика игры

Например, колода

deck = { "6H", "7H", "8H", "6S", "7S", ... }

После запуска

shuffle(deck)

Игрок получает карты

player_cards = { deck[1], deck[2], deck[3] }

NPC

npc_cards = { deck[4], deck[5], deck[6] }

Шестой этап — отображение карт

Каждая карта —

textures\cards\

Например

ace_spades.dds king_hearts.dds queen_diamonds.dds

Lua просто меняет

UIImage:SetTexture(...)

Седьмой этап — ставки

Перед началом

1000 RU

Проверяется

db.actor:money()

Если денег хватает

db.actor:give_money(-1000)

После победы

db.actor:give_money(2000)

Восьмой этап — интеллект NPC

Можно сделать по-разному.

Самый простой

случайный ход

Средний

простая оценка силы карт

Сложный

дерево решений

Практически как в настоящих карточных играх.

Девятый этап — сохранение

После окончания

wins losses money favorite npc

можно записывать в

xr_logic или db.storage

Какие игры можно реализовать

Практически любые:

Дурак

Покер

Блэкджек

Очко

Преферанс (самый сложный)

Тысяча

Пьяница

Свара

Сека

Бридж (очень сложный)

Что получится в игре

Игрок подходит к сталкеру.

Привет. Есть работа. Что нового? Сыграем в карты. До встречи.

Выбирает

Сыграем в карты.

Открывается полноценное окно поверх игры.

┌──────────────────────────┐ │ БЛЭКДЖЕК │ ├──────────────────────────┤ │ NPC │ │ 🂠 🂠 │ │ │ │--------------------------│ │ Игрок │ │ 🂡 🂱 │ │ │ ├──────────────────────────┤ │ [Взять] [Стоп] [Выход] │ └──────────────────────────┘

После окончания окно закрывается, управление возвращается игроку, а NPC может произнести реплику вроде «Неплохо сыграл» или «Сегодня удача на моей стороне».


Дополнено 0 минут спустя

Вот что написал Chat GPT, можно))

  • Мастер! 1

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

Важная информация

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