RU 📌 Pinned

Как сделать?

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

Aleks Versus Moderator 05.05.2016 13:48 (9 years ago)

Bup0H,
это ужасно. Полностью завалена логика вложений. End’ы натыканы как попало. После else не ставится двоеточие, писать в той же строке, где else нельзя. Возможно ты хочешь вот это:

Spoiler
gs 'stat' 
if $args[0] = 'База1':
! начало условия "База"
	act 'Разведать':
	! начало действия Разведать 
		cla 
		minut += 5 
		stealth += 5 
		If stealth >= 20:
		! начало условия
		! если скрытность больше 20
			act 'Смотреть дальше1':
			! открываем действие
				*clr 
				cla 
				minut += 5 
				stealth +=5
			! закрываем действие
			end
		! конец условия!
		end
		if stealth >= 40:
		! если скрытность больше сорока!
		! начало условия
			act 'Смотреть дальше2':
			! открываем действие
				*clr 
				cla 
				minut += 5 
				stealth +=5
			! закрываем действие
			end
		! конец условия
		if stealth<20:
		! начало условия
			act 'Уйти, меня могут заметить':
			! начало действия
			! конец действия
			end
		! конец условия
		end
	! конец действия Разведать	
	end
! конец условия база
end

а может так

Spoiler
gs 'stat' 
if $args[0] = 'База1':
! начало условия "База"
	act 'Разведать':
	! начало действия Разведать 
		cla 
		minut += 5 
		stealth += 5
		if stealth >= 40:
		! если скрытность больше сорока!
		! начало условия
			act 'Смотреть дальше2':
			! открываем действие
				*clr 
				cla 
				minut += 5 
				stealth +=5
			! закрываем действие
			end
		elseif stealth >= 20:
		! иначе, если. Середина условия
		! если скрытность больше 20, но не больше сорока
			act 'Смотреть дальше1':
			! открываем действие
				*clr 
				cla 
				minut += 5 
				stealth +=5
			! закрываем действие
			end
		else
		! иначе. Середина условия. Если скрытность меньше 20
			act 'Уйти, меня могут заметить':
			! начало действия
			! конец действия
			end
		! конец условия
		end
	! конец действия Разведать	
	end
! конец условия база
end

Ух. Жесть как вам хватает терпения отвечать так подробно мне. Спасибо вам, сейчас буду разбирать.

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

Попытаюсь объяснить попроще так так как бы показав структуру без кода:
После начала действия разведать:
1 условие Смотреть дальше 1 (if stealth >= 20)
2 условие Смотреть дальше 2 (if stealth >= 40)
3 условие Смотреть дальше 3 (if stealth >= 60)
4 условие Смотреть дальше 4 (if stealth >= 80)
5 условие Смотреть дальше 5 (if stealth >= 100)
! Если не хватает очков до следующего действия для одного из условий то
Else (act ‘Уйти меня могут заметить’: )

Можно ли это реализовать все это с 1-ним Else (общим для всех действий) или для каждого случая надо прописывать Else (act ‘Уйти меня могут заметить’: ) отдельно?

Bup0H,
Я пришёл к подобному, но не совсем понял чего ты хочешь(

IF stealth >= 20: ACT 'Смотреть дальше 1': GT '1'
 IF stealth >= 40: win_stealth = 40 & ACT 'Смотреть дальше 2': GT '2'
!И так дальше..
ELSEIF win_stealth < stealth:
  ACT 'Уйти меня могут заметить':
 END
END

win_stealth - объявил заранее 20ти, потому как действие Уйти.. висело на начале.

Aleks Versus Moderator 06.05.2016 09:35 (9 years ago)

Bup0H,
Поясни.
Если все пять условий верны, должен ли игрок получить все пять действий?
Или…
Действия выпадают друг за другом? Т.е. тычем в первое - выпадает второе, тычем во второе - выпадает третье…
Или…
Выпадает только то действие, которое соответствует наибольшему значению stealth?

Посмотри так же темы “Действие по условию” и “Действие по условию без delact

Aleks Versus,
Я так понял, он про второе.

Aleks Versus Moderator 06.05.2016 18:53 (9 years ago)

Bup0H,
Oliver,
если второе, то тут только для каждого прописывать::

Spoiler
!...
if $args[0] = 'База1': 
! начало условия "База" 
    act 'Разведать': 
    ! начало действия Разведать 
        cla 
        minut += 5 
        stealth += 5 
        if stealth >= 20: 
        ! иначе, если. Середина условия 
        ! если скрытность больше 20, но не больше сорока 
            act 'Смотреть дальше1': 
            ! открываем действие 
                *clr 
                cla 
                minut += 5 
                stealth +=5
                if stealth >= 40: 
				! если скрытность больше сорока! 
				! начало условия 
					act 'Смотреть дальше2': 
					! открываем действие 
						*clr 
						cla 
						minut += 5 
						stealth +=5
						if stealth >= 60: 
						! если скрытность больше сорока! 
						! начало условия 
							act 'Смотреть дальше3': 
							! открываем действие 
								*clr 
								cla 
								minut += 5 
								stealth +=5
								! открываем условие и т.д.
								!....
							! закрываем действие 
							end
						else
						! иначе если скрытность <60
							$marker_escape='уйти'
							goto $curloc,$args[0]
						! закрываем условие
						end
					! закрываем действие 
					end
				else
				! иначе если скрытность <40
					$marker_escape='уйти'
					goto $curloc,$args[0]
				! закрываем условие
				end
            ! закрываем действие 
            end
        else
        ! если скрытность невелика <20
			$marker_escape='уйти'
			goto $curloc,$args[0]
		! конец условия скрытность 20
        end
    ! конец действия Разведать    
    end
    if $marker_escape='уйти':
    ! проверяем маркер
		act 'Уйти, меня могут заметить': 
			! начало действия 
			! конец действия 
		end
	! конец проверки маркера
	end
! конец условия база 
end

Есть ещё вариант, как это записать покороче, но нужно твёрдо разобраться с этим примером сначала.

Здравствуйте!
Столкнулся с проблемой одной небольшой проблемой. Хочу сделать внутри игры магазин, но хочу, чтобы выбор товара был не через окно действий, а, например, через гиперссылки на экране, и не знаю как это организовать, т.к. гиперссылка в себе может хранить только 1 действие. Обычно я делал так: создавал локацию с нужными действиями и просто в гиперссылку писал gosub ‘локация’, но тут может быть большое кол-во товаров и создавать десятки локаций как то не комильфо. Что можете посоветовать?

CH_B_L,
В локации можно использовать аргумент, для локации “Покупка”, например, можно передавать название вещи или его номер в массиве цен.
http://wiki.qsp.su/help:gosub

Aleks Versus Moderator 09.05.2016 08:11 (9 years ago)

CH_B_L,
IIopy4uk,
А ещё можно помещать нужный код в переменную и выполнять его из-под гиперссылки оператором dynamic:

$object[0]={addobj 'Кружка пива'
кружка_пива+=1
деньги-=100}
$object[1]={addobj 'Морковка'
морковка+=1
деньги-=20}
*pl '<a href="exec:dynamic $object[0]">Купить кружку пива</a>'
*pl '<a href="exec:dynamic $object[1]">Купить морковку</a>'

IIopy4uk, Спасибо, надо будет протестировать.
Aleks Versus, о, так вот как надо DYNAMIC делать. Мне казалось, что надо код надо записывать в ’ ’, и у меня возникали проблемы, когда надо было внутри ещё кавычки ставить (скажем, для gosub). Спасибо, только что 2 лишние локации благодаря этому удалил.
Ещё пара вопросов: в чем отличия в qsp у ’ ’ от ” “? И второй: как в qsp можно часть строки сделать, скажем, курсивом, а часть - нормальной?

Aleks Versus Moderator 09.05.2016 14:04 (9 years ago)

CH_B_L,
Отличий нет. Два типа “кавычек”, насколько я понимаю, введены как раз для таких случаев, когда нужно использовать один из них в строке.

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

usehtml=1

Курсив:

*pl "<i>Этот текст будет написан курсивом.</i> А этот текст будет написан без курсива."

На самом деле есть разница: когда записываешь код для DYNAMIC в фигурных скобках, а когда – в кавычках. Заключается она в том, что в фигурных скобках нельзя использовать подвыражения типа:

*pl "Полная защита доспеха: <<защита_перчатки + защита_сапоги + защита_кираса + защита_шлем + защита_штаны>>"

в угловые скобки здесь помещено подвыражение, которое будет вычислено и результат станет частью строки. Т.е. на экране появится что-то вроде:

Полная защита доспеха: 117

Если же ты попытаешься засунуть то же самое в фигурные скобки, а не в кавычки (при отключенном html)

*pl {Полная защита доспеха: <<защита_перчатки + защита_сапоги + защита_кираса + защита_шлем + защита_штаны>>}

на экране появится вся надпись:

Полная защита доспеха: <<защита_перчатки + защита_сапоги + защита_кираса + защита_шлем + защита_штаны>>

Aleks Versus, спасибо, теперь разобрался!

Так, просмотрев всю цепочку act-if-else попробовал составить ее сам не подглядывая. Вроде получилось. Главное отступом правильно пользоваться. Как сделать покороче?

И еще небольшой огрех. при условии если скрытности не хватает, я ухожу с локации, но по возвращению на нее я начинаю с того же места где и закончил, т.е условие 1ое и 2ое условия выполнены 3тье не проходит я опять могу только уйти с локации. Как сделать чтоб она запускалась с начала с 1 условия?

Aleks Versus Moderator 09.05.2016 18:47 (9 years ago)

Bup0H,
можешь выложить весь получившийся код локации? Так сложно сообразить.

При выполнения действия уйти локация начинается с того же места откуда ушел. А не с начала.

Spoiler

if $args[0] = ‘Баз1’:
act ‘Разведать’:
cla
‘<center><img src=“pic/baza1.jpg” ></center>’
minut += 5
stealth += 5
if stealth >= 20:
act ‘Посмотреть еще’:
*clr
cla
‘<center><img src=“pic/baza2.jpg” ></center>’
minut += 5
stealth +=5
if stealth >= 40:
act ‘Посмотреть еще’:
*clr
cla
‘<center><img src=“pic/baza3.jpg” ></center>’
minut += 5
stealth +=5
if stealth >= 60:
act ‘Посмотреть еще’:
*clr
cla
‘<center><img src=“pic/baza4.jpg” ></center>’
minut += 5
stealth +=5
if stealth >= 80:
act ‘Посмотреть еще’:
*clr
cla
‘<center><img src=“pic/baza5.jpg” ></center>’
minut += 5
stealth +=5
end
else
$marker_escape=‘уйти’
goto $curloc,$args[0]
end
end
else
$marker_escape=‘уйти’
goto $curloc,$args[0]
end
end
else
$marker_escape=‘уйти’
goto $curloc,$args[0]
end
end
else
$marker_escape=‘уйти’
goto $curloc,$args[0]
end
end
if $marker_escape=‘уйти’:
cla
act ‘Уйти, меня могут заметить’:
gt ‘forest’
end
end
end

забыл еще строку:
if stealth>100: stealth=100
Под спойлом к сожалению отступы не совсем корректно сохранились

Log in or Register to post comments.