RU 📌 Pinned

Как сделать?

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

Aleks Versus Moderator 17.09.2021 13:40 (4 years ago)

Piksha,
Это происходит потому, что код на локации 2 не выполняется полностью, соответственно, после его выполнения не запускается выполнение кода на локации onnewloc. То есть при переходе на локацию 2 у тебя не выполняется код на локации onnewloc. Тебе нужно либо goto делать уже из onnewloc, либо goto завернуть в действие на локации 2. Я бы выбрал последнее:

СлучайнаяВстреча=rand(1,2)
If СлучайнаяВстреча=1:
	act "Внезапно!..":
		gt "СлучайноеСобытиеКоридор"
	end
end

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

act "В локацию 2":
		время = время + 2
		СлучайнаяВстреча=rand(1,2)	
		If СлучайнаяВстреча=1:
			ВозвратИвентКоридор=2
			gt "СлучайноеСобытиеКоридор"
		else
			gt "Локация 2"
		end	
	end

Основное тут - то что в переменную ВозвратИвентКоридор, записывается откуда был совершен коридор, что в дальнейшем реализуется в механизме возврата из локации ивента на следующую локацию (Что бы было понятнее, Локация 1 -> Коридор(Ивент) -> Локация 2 на которую происходит продолжение пути). Реализовано таким образом:

If ВозвратИвентКоридор=2:
			act "Продолжить путь":
				ВозвратИвентКоридор=0
				gt "Локация 2"
			end
		end

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

Возник другой вопрос - ивент, на то и ивент что не должен часто встречаться. Необходимо встроить таймер на срабатывание рандомизации.
К примеру, При срабатывании ивента Используется переменная ИвентСработал=1
А в условие каждого ролла ивента, встраивается следующее:

act "В главный зал":
	время = время + 2
	If ИвентСработал=1:
		wait 30000
		ИвентСработал=0
	Else
		СлучайнаяВстреча=rand(1,2)	
		If СлучайнаяВстреча=1:
			ВозвратИвентКоридор=2
			gt "СлучайноеСобытиеКоридор"
		else
			gt "Локация 2"
		end	
	end
end

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

Дамир Белялов #654 18.09.2021 17:41 (4 years ago)

Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?

*pl'<a href="EXEC:gt''start''"><img border="0" src="media/button_start.png"></a>'

Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?

Да в принципе, всё что душе угодно. Если текстовая ссылка - можно добавить class=‘plain’:

<a href="exec: ab = a + 1 & goto $curloc" class="plain"><<$NomesTexTus[ab]>></a>

Тогда не будет подчёркиваний текста ссылки. С картинками ситуация иначе. Там основными параметрами выступает ширина (width) и высота (height).

Всё зависит от цели, стилистики, желаний. И не зная ваших целей, невозможно дать “универсальный” ответ.
Лично я бы рекомендовал ориентироваться по справке (там есть список всех поддерживаемых тегов HTML), и уже экспериментируя с этим пользоваться более удобным вариантом. Ведь каждая игра индивидуальна.

Дамир Белялов:

Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?

*pl'<a href="EXEC:gt''start''"><img border="0" src="/media/button_start.png"></a>'

Все что угодно.

$act_code={
!тут любой код, вообще любой.
}
"<a href='exec:dynamic $act_code'>Выполнить</a>"

Piksha:

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

При wait 30000 у тебя игра зависнет на 30 секунд.
Первый вариант - количество посещений локации

act "В главный зал":
    время = время + 2
    If ИвентСработал=1:
        счетчик+=1
        if счетчик=5:
			счетчик=0
			ИвентСработал=0
        end
    Else

Второй вариант - от игрового времени

act "В главный зал":
	счетчик=время
    время = время + 2
    If ИвентСработал=1:
        if время-счетчик>20:
			счетчик=0
			ИвентСработал=0
        end
    Else

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

Spoiler

И да, если кто будет смотреть код, он немного не структурирован.
snakev1.rar

Может, кто-то тоже пытался сделать что-то похожее?

n3m0,
https://qsp.org/forum/comments/20749
Никакие костыли не нужны, можно сделать полноценную змейку.
Тебе нужно сделать массив с последней позицией “головы”, сколько очков, столько позиций и будешь сохранять и выводить. И добавить гамовер, когда позиция головы уходит за пределы поля или будет совпадать со значением хвоста.
Еще нужно запоминать направление движения и включать запрет реверса.

dmvikar,
Спасибо, попробую еще немного покорпеть.

QSP позволяет это сделать. Уверен на 100%. Даже управление можно щелчком мышки (на поле) сделать. Нет некоторых удобных вещей, но большенство или даже всё можно легко добавить пользовательскими функциями.

Здравствуйте! Я совсем новичок в QSP, и вообще не программист. Как мог искал, но не могу понять как это сделать. У меня рандом гененрирует персонажей, дальше те из них (не все), с которыми игрок знакомится, записываются в записную книжку. А дальше мне нужно чтобы игрок мог зайти в запись конкретного персонажа в записной книжке и увидеть его статы/совершить действия. Вот последний этап у меня и не получается. Логика такая:
1. при формировании персонажа у меня складываются рандомные характеристики:

$gname[gname] !имя 
$gsurname[gsurname] !фамилия
!остальные статы

2. Когда происходит знакомство, они переходят в запомненный массив:

fid=fid+1
$friendname[fid]=$gname[gname]
$friendsur[fid]=$gsurname[gsurname]
!остальные статы по той же логике

$fid[fid]=$friendname[fid]+' '+$friendsur[fid]

3. Потом в записной книжке я вывожу этот массив:

i=0
:for
if i<arrsize('$fid'):
   '<a href="EXEC:GT''Друг_интеракция''"><<$fid[i]>></a>'
   i=i+1
   jump 'for'
end

А вот как на новой локации, на которую по EXEC:GT переходит игрок, показать имя и фамилию и другие статы конкретного перса - уже не могу понять. Буду очень благодарен за помощь.

jazzy77,
Это достаточно просто. Вам необходимо вывести на новой локации что-то вроде:

$friendname[x]
$friendsur[x]
$fid[x] 
! тут я бы рекомендовал избегать одинаковое название текстовой и числовой переменной ($fid || fid)
...

И другие параметры. Но для этого необходимо подставить под ‘x’ порядочный номер (индекс).
Вы можете сделать это в коде ссылки.
К прим.:

'<a href="EXEC: x = <<i>> & GT''Друг_интеракция''"><<$fid[i]>></a>'

Так, при цикле каждая ссылки при клике будет назначать переменной ‘x’ значения переменной ‘i’, и соответствовать ‘шагу’ массива. Проще говоря, первая ссылка будет назначать переменной значение 0, вторая - 1, третья 2 и т.д.
А на локации будут выводится данные “по иксу”.

Надеюсь, смог помочь.

HronoStranger,

'<a href="exec: gt ''Друг_интеракция'', <<i>>"><<$fid[i]>></a>'
$friendname[args[0]]
$friendsur[args[0]]

Спасибо большое, получилось!

Дамир Белялов #654 08.12.2021 09:31 (4 years ago)

dmvikar:

$act_code= 
Код:
“<a href=‘exec:dynamic $act_code’>Выполнить</a>”

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

Log in or Register to post comments.