RU 📌 Pinned

Как сделать?

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

Всем доброго времени суток! У меня пара вопросов накопилась и надеюсь, что Вы мне поможете. :)
1 - Как сделать вывод статистики персонажа? Например, есть: жажда, голод, здоровье, усталость.
2 - Например, игрок был ранен и купил у торговца аптечку. Как сделать так, чтобы при ее использовании здоровье скажем с по 50 % увеличивалось до 100? Или скажем есть параметр броня. Начальный уровень 10 %, а при покупке какого-то костюма нужно сделать так, чтобы он увеличился до 20 или выше. Друзья, если можно, то выложите пример кода. Заранее спасибо! :)

loony25,
1) нууу к примеру за жажду отвечает переменная ZAZDA то так и пишешь. Просто с новой строчки название переменной. Как вариант вот так еще.

'Жажда: <<ZAZDA>>'

а еще

'Жажда ' + ZAZDA

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

HP = HPMax

Ну а на счет процентов, то я с ними еще не игрался, но например так.
К пример надо 50% превратить в 70%. То есть добавить 20%. Пусть будет такая задача. Что нам нужно? Ну чтобы оперировать процентами будет легче если мы найдет один процент? То бишь у нас такое кол-во хо 500/1000. 500 то что сейчас 1000 максимальное.
Итак. Мы нашу тысячу делим на сотню процентов. Получаем 1000/100 = 10. То бишь 1% = 10 хп. Дальше мы просто умножаем нашу 10 на 20%. То бишь из одного процента делаем 20. Получаем 200.

Итак вот тебе код.

Spoiler

на начальной локации задаётся хп и хпмакс

hp = 500
hpmax = 1000
gt '1'

на локации 1

'<<hp>>/<<hpmax>>'
act 'зелье хп +20%':
	protsent1 = hpmax/100
	protsent20 = protsent1 * 20
	act 'Выпить':
                cla &!для удаления ненужных актов.
		hp += protsent20
		gt $curloc
	end
end

Важный момент. ксп не умеет пользоваться дробями. То бишь написать 4.123 неполучится.
К примеру. хпмакс будет 10 а хп 5.

Spoiler
'<<hp>>/<<hpmax>>'
act 'зелье хп +20%':
	if hpmax < 100:
		protsent1 = hpmax
		protsent20 = protsent1 * 20
		protsent20_ISTINA = protsent20/100
		jump 'lol'
	end
	protsent1 = hpmax/100
	protsent20 = protsent1 * 20
	protsent20_ISTINA = protsent20
	:lol
	act 'Выпить':
		cla
		hp += protsent20_ISTINA
		gt $curloc
	end
end

Само собой он выглядит так себе. Если постараться можно сделать лучше. Но он рабочий так что внимай к нему и учись. :-)

Благодарю за помощь, но я так и не понял, как при помощи предметов менять параметры персонажа. :)

loony25,
Ох я тебя немного не так понял. Ты имеешь ввиду предметы как addobj и тд?? Те которые в окне предметов?

Тогда тебе нужна локация-обработчик. Ниже будет код так что не бойся. Итак.

Spoiler

В начале игры (в самой первой локации) пишешь

$onobjsel = 'onobjsel'
!и не забудь предмет
addobj 'Зелье ХП'

Далее создаешь локацию onobjsel
В ней напиши вот это

if $selobj = 'ЗЕЛЬЕ ХП':
   gs '$zelie'
   menu '$zelie'
end

Далее
Делаешь локацию $zelie.
В ней вот что.

$zelie[0] = 'Зелье_20:Зелье_20'

Далее делаешь локацию Зелье_20
А в ней

if hpmax < 100: 
	protsent20 = hpmax * 20 
	protsent20_ISTINA = protsent20/100 
	jump 'lol' 
end 
protsent1 = hpmax/100
protsent20 = protsent1 * 20
protsent20_ISTINA = protsent20
:lol 
cla 
hp += protsent20_ISTINA
unsel
gt $curloc

Ни и в локации где ты тыкаешь на кнопку эту должно быть

'<<hp>>/<<hpmax>>'

Ну и под конец скажу что это всё не учитывает, вот такие моменты. Когда у тебя будет 9/10 хп (к примеру) и ты выпьешь зелье, то будет 11/10. Так что где-то добавь иф который будет твои хп приравнивать к максимальному значению в таком случае.

Благодарю за помощь. Буду разбираться. :)

Aleks Versus Moderator 18.03.2018 13:39 (7 years ago)

oleksandrigo:

Насчет оператора IIF
Код:

iif (prprpr > 0, gs '1', prprpr = 1)

Этот код не работает. Как я понял он не может выполнять действия? gs, gt …

IIF — не оператор. Это функция. Она возвращает ЗНАЧЕНИЕ выражения, а не выполняет команду.

iif(prprpr > 0, "1","2")

Есть ли способ узнать на каком устройстве запущена игра?

Тоесть if андроид: то текст такой-то
elseif компуктер: то так-то
end

Aleks Versus Moderator 20.03.2018 19:20 (7 years ago)

oleksandrigo,
нет, к сожалению такого способа пока нет.
Есть функция проверки версии плеера QSPVER. Но, насколько я помню, что на Андроиде, что в Quest Navigator, версию выдаёт одну.

Я ввожу отдельную переменную, скажем $PLAYERTYPE, а на титульном листе (заставке) даю игроку возможность выбрать плеер, в котором он запустил игру, самостоятельно.

*pl "Пожалуйста, выберите плеер, в котором вы запустили игру"
act 'Классический QSP v.5.7.0': $PLAYERTYPE='QSP' & goto 'start'
act 'Quest Navigator': $PLAYERTYPE='QN' & goto 'start'
act 'Плеер для Android': $PLAYERTYPE='MINI' & goto 'start'

Потом уже в зависимости от состояния $PLAYERTYPE можно выставлять настройки и прочее в самой игре.

Aleks Versus,
О спасибо)

Ну вообще-то в Навигаторе ОС выдаётся, я даже библиотеку патчил для этого )
Функция GETPLAYER
https://qsp.org/forum/comments/18669

А как сделать проверку на существование игры? (которая добавляется с помощью команды addqst)
Просто для standalone версии хотелось бы не удалять строчку “addqst”
А просто помещать файл в папку - и он сам добавлялся уже.
Пишу на классике если что.

Нашел решение, в ответе не нуждаюсь

Что делает

debug = 1

и для чего он нужен?

случаем не консоль отладки? проверь с дебаг = 1 запуск.
DEBUG - если значение переменной не равно 0, то отключается проверка идентификатора игры при загрузке состояния
из вики.

Log in or Register to post comments.