RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2427188 views

Братец Лис #1793 28.07.2016 13:50 (9 years ago)

Вопрос даже не в том, как. Для игры которую делаю, критична именно такая система. посмотреть бы на рабочий пример, а если с открытым кодом - так и вообще шикарно будет.

Братец Лис,
Смотри игру “Истребление”, там всё комплексно, и 1 на 1, и массово.

Братец Лис,
сделать то не проблема, проблема наверное скорей в терминологии… группа героев по идее это те, кем ты играешь против нпс и обычно терять героев жалковато вообще даже по сюжету, а ты предлагаешь терять их случайно в рандоме… ну и в чем смысл игры? гринд сочетания сейв-лоад перед каждым боем это такой необходимый игровой элемент от разработчика игры, чтобы не разрабатывать элементы сюжета?

Братец Лис, то о чём ты спрашиваешь можно сделать. Конкретно массовый бой(группа на группу) у меня получилось реализовать. Но рандомный бой это медаль двух сторон. С одной стороны это быстрее продвигает игрока по игре, а с другой это много минусов. Чем больше разных по действиям способностей у существ, тем сложнее код. И самая распространенная проблема быстрых боёв: несовершенство искусственного интеллекта компьютера, который должен играть за игрока, а это влечет недовольство самого игрока. Но именно бой основанный на рандомных действиях зачем он нужен? А если в той или иной ситуации выгодно было атаковать, или наоборот? Игрока, любящего стратегии, рандомные действия своих же героев не сильно понравятся. Есть ещё один минус: игрок будет пользоваться загрузкой сохранений до тех пор, пока его не устроит результат боя.
Но воспринимай критику строго, просто моё мнение, но это реализовать можно, но это будет не простой задачей.

Storm,
именно в этом самый прикол и состоит, что если игроку для продвижения сюжета нужно чтобы на рулетке выпало зеро, а игродел задал шансы на зеро 1 из 1000, то всё равно игрок либо будет загружать сохранение пока не выпадет, либо пока не надоест, либо пока не разочаруется в игре… имхо, конечно, но я так думаю лучшим вариантом был бы результат в зависимости от действий игрока, а не в зависимости от рандома

Aaaspavel, это может быть не обязательно “зеро”, а значение от 1 до 1000, которое более менее устраивает игрока, и такое наверняка найдется, даже при малых количествах загрузок.

Помогите, пожалуйста, разобраться в решении задачи.
Игрок создает персонажей. Их количество может доходить до 1 000. Каждому персонажу присваивается ID, Имя и куча других характеристик. Какой персонаж участвует в бою будет определяться по ID, а дальше будут подгружаться остальные характеристики.
Пример параметров, отвечающих за характеристики: Здоровье[1002], $Имя[1002], Атака[1002] …

Задача состоит в том, чтобы сформировать список всех персонажей, которые создал игрок и при нажатии на него получить информацию об его характеристиках. Проблема в том, что список удалось создать, но передать каждому персонажу (в примере они создали с помощью ACT) значение ID - не получается.

Есть ли какой нибудь способ сделать это? Прописать каждому персонажу свой ID - не реально.

НачID = 1000 !Начальный ID
:ЦИКЛ
!Создает действие для каждого персонажа
act $Надпись&$Имя[НачID] :  
	ТекID = НачID !Должен присваиваться уникальный ID, но присваивает ID последнего персонажа
	goto "Карточка персонажа" !Переходит на локацию, где отображаются все параметры персонажа
end
!Повторное выполнение действий или прекращение
НачID += 1 
if НачID < ID : jump "ЦИКЛ"

С данным кодом игра всегда открывает информацию о последнем персонаже (все из-за ТекID = НачID), при нажатии на любого.

Aleks Versus Moderator 31.07.2016 06:06 (9 years ago)

Адри,
тебе поможет оператор dynamic.

dynamic "act '<<$Надпись+$Имя[НачID]>>':  
    ТекID = <<НачID>> & !Должен присваиваться уникальный ID, но присваивает ID последнего персонажа 
    goto 'Карточка персонажа' & !Переходит на локацию, где отображаются все параметры персонажа 
end"

На локацию “карточка персонажа” можно передавать аргумент, который там на этой локации персонажа будет храниться в переменной args[0], поэтому если не критично ТекID вообще можно не использовать.

dynamic "act '<<$Надпись+$Имя[НачID]>>':  
    goto 'Карточка персонажа',<<НачID>> & !Переходит на локацию, где отображаются все параметры персонажа 
end"

Почитай справку о подвыражениях <<>>. Старайся не использовать & для конкатенации - тяжело читать код. Старайся не использовать в имени переменной одновременно латиницу и кириллицу - легко запутаться: ТекID, TeкID, ТeкID - разные переменные.

А ошибка твоя заключалась в том, что когда создаётся действие, код действия сам по себе НЕ ВЫПОЛНЯЕТСЯ, и получается, ты в каждое действие записал строку

ТекID = НачID

А поскольку в конце цикла НачID присваивается последнее значение, то при щелчке по любому действию и переменной ТекID присваивается последнее значение НачID, как ты программе и указал. dynamic же в данном случае вычисляет подвыражение и вместо ТекID = НачID ставит в каждое действие правильную строку ТекID = 1, ТекID = 2 и т.д.

Спасибо. Все прекрасно работает.

Здравствуйте гуру. Такой вопрос. К примеру реализация инвентаря. Ничего не приходит в голову .

Задача в следующем к примеру при нажатии далее появляется следующий тип оружия, назад соответственно предыдущий.
Можно конечно присвоить каждому оружию номер и менять прокруткой аля (+1, -1), но если к примеру предметы найдены не по порядку или часть не найдена вообще.

Как по кругу прокручивались только вещи которые в наличии? Я так понимаю здесь как то лучше реализовать оператор dynamic.

Bup0H,
dynamic в этом примере не нужен.

Джентльмены. Решил тут поэкспериментировать с врезанием в игру “цельнолитого” миниквеста.
Суть - врезание прошло, но при обратном переходе обнуляются переменные. Догадываюсь что из-за таймера, но честно говоря не хватает опыта - совместить доп. QSPшку так, чтобы при выходе из нее не обнулялись переменные основной игры. Демку кидаю, надеюсь на помощь Гуру.

PS - или все-таки только править основную игру и такая вставка нереальна?)))test_kosti.rar

Aleks Versus Moderator 06.08.2016 20:40 (9 years ago)

Bup0H,
объясни подробнее, что нужно. На пальцах, ака: на экран выводится это, тыкаю в действие “далее”, выводится это.
lamerUA,
что-то я не вижу выхода в основную игру. Ну запустил я кости из основной, а как обратно в основную выйти? Раз такого выхода нет, то как ты можешь судить о том, обнуляются переменные, или нет? Это раз.
В локациях 1 и 2 почему-то есть переменные Начать и Продолжить. Очевидно, что это не переменные, а комментарий. Закомментируй. Это два.
Команда addqst - добавляет из указанного файла все локации, имена которых не совпадают с именами уже существующих локаций. Т.е. она как бы склеивает файлы для плеера, а это значит, что кости по сути становятся частью основной игры и все переменные, которые работают в основной игре, работают и в добавленных локациях. Это три.
Переменные же у тебя пропадают, поскольку на третьей локации ты делаешь KILLALL. Делать KILLALL следует либо на самой первой локации игры, либо в действии, которое выкидывает на самую первую локацию игры.
Нарисуй для себя схемку, где что и как происходит, чтобы разобраться в логике своей игры, потому как сейчас она несколько хромает.

Что то на подобие прокрутки оружия которое было в старых рпг.

Есть таблица (3 квадрата) I <- I I Предмет I I -> I.
При нажатии на левую/правую часть таблицы (стрелки), предмет меняется.
Соответственно листаются предметы только те которые есть в наличии.

Не могу просто сообразить вообще как это реализовать. Можно присвоить каждому объекту номер а стрелки соответственно +/- 1, но тогда как не выводить изображения которых нет.

Aleks Versus Moderator 07.08.2016 15:59 (9 years ago)

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

Log in or Register to post comments.