RU 📌 Pinned

Как сделать?

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

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

Нубай,
Обнулять можно хоть в самом действии “Выйти из транспорта”.
Тут уже зависит как удобнее и будет читабельнее, практичнее. А это каждый автор/программист решает сам.

И все таки сложно для моего понимания многое. Еще хотелось бы помощи попросить, но с другой стороны, если так спрашивать, то ничему не научишься, а, если опять же с другой стороны, не понимаешь никак, то тоже прогресс на месте стоит. У меня вопрос по коду опять возник, но пока хочу спросить, увидел тут в одной игре решения авторы интересны, хотелось глянуть код через Qgen, но автор поставил пароль на файл. На форуме где-то видел, говорили, что пароль обходится на раз, можете научить?

И вопрос по коду опять, все внутри, если не затруднит помочь, ну, или сам буду биться головой о стену, пока либо голову не сломаю, либо стену не пробью :=D

Spoiler

*nl
*nl “Ты пришел на автобусную остановку.”

! Здесь хотел отразить работу транспорта, когда он работает, а когда нет.

if hour=6 and hour<23:
автобус_работает=1
end

! Здесь хотел отразить работу транспорта, когда он работает, а когда нет. По задумке, если ГГ приходит позже 23, то пропадает действие ждать автобус, но пока не доделал тут.
До этого пробовал, не работало как надо. То есть действие ждать автобус пропадало, но даже после 23 продолжала работать команда rand и выдавать результаты приезда автобуса во время тестирования локации.

if hour=23 and hour<6:
автобус_работает=0
end

! тут все работает, но, если поставить условие IF то перестает работать команда RAND, то есть время при нажатии действия работает как надо, но не работают условия ниже.

act “Ждать автобус”:
автобус=rand (1,3)
time+=10
gs “Календарь”
gt $curloc
end

! здесь я попытался имитировать ожидание транспорта на остановке, никогда не нравилось в играх, когда ГГ подходит, а его уже ожидает “карета”. Эти условия работают, но, если в действии ждать автобус, поставить хотя бы IF, то перестают работать, почему так? Из-за $curloc?

if автобус=1:
*clr
*nl
*nl “К остановке подъезжает автобус, но он идет не в ту сторону, куда тебе нужно.”
end

if автобус=2:
*clr
*nl
*nl “К остановке подъезжает автобус, но он идет не в ту сторону, куда тебе нужно.”
end

if автобус=3:
*clr
*nl
*nl “К остановке подъезжает нужный тебе автобус.”
delact “Ждать автобус”
end

if автобус=3:
act “Войти в автобус”:
time+=1
gs “Календарь”
goto “Автобус до площади”
end
end

Проблема возникает, что переменные на локации запоминаются на if автобус=3: и во время тестирования, локация больше не обновляется, сразу же выдает if автобус=3: Я пробовал переменную killvar, но она, портит календарное время, там начинает отображаться бессмысленный набор цифр. Вопрос, как грамотно обнулять переменные. Склоняюсь к мысли, чтобы создать отдельную локацию и обращаться к ней, через GS, вот только не совсем понятно, как лучше сделать.

Есть passvord dekoder. Он должен тебе помочь.
На форуме ссылку уже давно потерял, но он еще остался у меня.
Оставлю ссылку на скачивание из google drive.

Spoiler

https://drive.google.com/file/d/15HK6MCN5Tx4poM_jBCFUy9ut5C61PW5p/view?usp=sharing

Svartberg,
Вашпе-то, на форуме ее потерли не спроста). Раньшешние обитатели не одобряли.

Нубай,
Условие if hour=6 and hour<23: эээ, как бы это сказать, херовое! Оно будет выполняться только в 6 часов.
if hour=23 and hour<6: - это невыполнимое условие, т.к. противоречат друг другу.

if автобус=1:
*clr
*nl
*nl “К остановке подъезжает автобус, но он идет не в ту сторону, куда тебе нужно.”
end

if автобус=2:
*clr
*nl
*nl “К остановке подъезжает автобус, но он идет не в ту сторону, куда тебе нужно.”
end

if автобус=3:
*clr
*nl
*nl “К остановке подъезжает нужный тебе автобус.”
delact “Ждать автобус”
end

Это излишне. Напиши просто
if автобус!0:
if автобус=3:
else
end
end

if автобус=3:
act “Войти в автобус”:
time+=1
gs “Календарь”
goto “Автобус до площади”
end
end

Тут надо воткнуть автобус=0. Тебе уже говорили про обнуление переменных.

Алекс придет, распишет все подробно), а пока так как есть.

Svartberg:

Есть passvord dekoder.

Спасибо большое, попробую вскрыть файл, уж больно мне понравилось, как там реализовано движение транспорта.

dmvikar:

Условие if hour=6 and hour<23: эээ, как бы это сказать, херовое! Оно будет выполняться только в 6 часов.
if hour=23 and hour<6: - это невыполнимое условие, т.к. противоречат друг другу.

Я так понимаю, нарушен синтаксис кода (если я правильно выражаюсь). Надо использовать >= и <= так? Я пробовал, но почему-то выдает разом две строки, видимо все равно не догоняю.

dmvikar:

Это излишне. Напиши просто
if автобус!0:
if автобус=3:
else
end
end

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

dmvikar:

Тут надо воткнуть автобус=0. Тебе уже говорили про обнуление переменных.

Да, я помню, как раз туда втыкал, и начинались глюки. У меня написание очень медленно идет, так как напишу, и сразу тестирую, и весь процесс идет примерно так. Написал, давай проверим. Что за блин, почему не работает? А если так? Опять не работает. А так? И так не работает. Посмотрю справку? Не нашел ответа. Посмотрю FAQ от Алекса, вроде есть решение. Пробую. Нет, не работает. Еще смотрю, не находится ничего. А может на форуме что есть? Смотрю, ищу, не то, не то, нет моего случая. Блин, спрашивать на форуме придется. Нет, я лучше сам, а то так понимание не придет. Опять все по кругу, пробую, тестирую, не работает, да что же так сложно все. Все же придется просить помощи. И вот я тут. :rolleyes:

Нубай,
Условия работают так:

если истина:
   Выполнить
иначе (то бишь, неистина)
   Выполнить
end

У тебя же что было:
Допустим время у нас 10
Если время равно 6 И время меньше 23, то выполнить указанное.
А теперь давайте подумаем, что же тут не так собственно?

if 10 = 6 and 10 < 23: Дарова

10 равно 6? Не думаю. 10 меньше 23? Определённо так. НО!! Большое такое, но. Здесь истина - только одна часть условия. А именно - вторая. Но у нас же стоит И, а И хочет чтобы у тебя оба условия были истиной. Смекаешь?)

Поэтому, учим как работают логические операторы:

if true and true: "Я выведусь"
 if false or true: "Я тоже!"
 if 0 <> 1: "И я!" & !//-- эквивалетно 0!1 - то бишь неравно

А логика такова - И ожидает собственно, чтобы все условия которые он соединяет были истиной. ИЛИ ждёт чтобы одно из условий было истиной, а вот НЕРАВНО - требует дабы одно не совпадало с другим.
Есть ещё NO, но я его практически не использовал.

Нубай,
Зайди в дискорд, там можо быстрее ответы получать, щас попробую накатать решение.

Нубай,

Spoiler
*nl "Ты пришел на автобусную остановку."
!Задаем условие, при котором появится акт - ждать автобус.

if hour>=6 and hour<=23:
	act "Ждать автобус":
	time+=10
	gs "Календарь"
	*clr&cla
	*nl
		if rand(1,3)!3:
!тут мы экономим переменную, в дальнейшем ничего обнулять не надо, просто используем голый rand
		*nl "К остановке подъезжает автобус, но он идет не в ту сторону, куда тебе нужно."
		act'Далее':gt curloc
		act'Уйти':gt'loc'
		else
		*nl "К остановке подъезжает нужный тебе автобус."
			act "Войти в автобус":
			time+=1
			gs "Календарь"
			gt "Автобус до площади"
			end
			act'Пропустить':gt curloc
			act'Уйти':gt'loc'
		end
	end
end
!loc - это какая-то локация, на которую герой переместится с остановки, т.е. подставь свою.
act'Уйти':gt'loc'

Нубай:

Я так понимаю, нарушен синтаксис кода (если я правильно выражаюсь). Надо использовать >= и <= так? Я пробовал, но почему-то выдает разом две строки, видимо все равно не догоняю.

Если нарушен синтаксис - плеер тебе об этом скажет. Нарушена логика.

Нубай:

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

Это означает - не равно. В данном примере, если значение переменной автобус не равно 0, то условие выполнится.

Нубай:

Блин, спрашивать на форуме придется. Нет, я лучше сам, а то так понимание не придет.

Если будешь тупо копировать, конечно не придет). Я именно так и учился - на примерах. Ставишь задачу - решаешь. Не получается - ищешь на форуме. Находишь. Разбираешься, почему у тебя не работало. Осознаешь.
Когда научишься работать с if, else, act - этого, в принципе, уже достаточно для создания игры. Потом и чужой код можно будет смотреть.

Edited at 12.02.2021 06:04 (5 years ago)

Svartberg, Oliver, dmvikar спасибо большое за вашу помощь и подсказки. Я постараюсь не злоупотреблять вашим расположением.

Нубай,
Тема для того и создана, чтобы злоупотреблять)

Я в том смысле, чтобы не подумали, что прошу написать за меня сложный код. =)

Нубай:

Я в том смысле, чтобы не подумали, что прошу написать за меня сложный код. =)

Да мы готовы написать любой код, если это нам по силам. Главное, чтоб ты понял, как он работает. Иначе ты будешь путаться тем больше, чем больше кода мы тебе дадим. Т.к. мы не видим проект целиком, мы даем примерный код. Соответственно, этот код требует доработки напильником, в противном случае он может вызывать ошибки. А если ты не будешь понимать, как он работает, то и ошибок исправить не сможешь и вся наша помощь в пустую.

Не подскажите как сделать что бы ДИНАМИЧЕСКАЯ таблица а именно КНОПКА
Мне кажется что решение только отказ от динамической таблици, либо отказ от кнопок! Но хотелось бы узнать мнение более опытных кодеров!

Spoiler
*clr
*p '<center><table align="center" border="1" cellpadding="1" cellspacing="1" style="width: 0px"><tr><td>&nbsp; id &nbsp;</td><td>&nbsp; Имя Фамилия &nbsp;</td><td>&nbsp; Пол &nbsp;</td><td>Ред</td></tr>'
a = 0 
:uuuu
	if a < NumerCreate: '<tr><td>&nbsp;'+'<<PeepolId[a]>>'+'&nbsp;</td><td>&nbsp;'+'<<$PeepolName[a]>>'+'&nbsp;</td><td>'+'<<$PeepolPol[a]>>'+'</td><td>&nbsp;'+"<a href='EXEC: $MenuButtonActive = ""Menu"" & gosub ""Crate Heroe"" '>"+'&nbsp;</td></tr>' 
	a = a+1
	
	if a < NumerCreate: jump "uuuu"
	a = 0

P.S Я В КУРСЕ ЧТО КОД НЕ ПОЛНЫЙ, ОН ТУТ И НЕ НУЖЕН! ТУТ ВОПРОС ТОЛЬКО В ПЕРЕМЕНОЙ!

Log in or Register to post comments.