Перейти к содержанию
Авторизация  
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-файлов, или продолжить без изменения настроек. Оставаясь на сайте, вы подтверждаете свое согласие на их использование. Политика конфиденциальности | Условия использования