RU 📌 Pinned

Как сделать?

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

Последний из Гаяр Moderator 04.03.2018 16:18 (7 years ago)

loony25,

$text=$input('Введи выражение')
act 'Покажи текcт':*pl '<<$text>>'

Как то так …

Последний из Гаяр Moderator 04.03.2018 16:25 (7 years ago)

Большое спасибо, но что касается вопроса о блокноте я так и не разобрался как такое реализовать. :)

Aleks Versus Moderator 05.03.2018 06:41 (7 years ago)

oleksandrigo:

Итак еще вопрос. Нужно сделать так чтобы при нажатии акта(даже если этот акт в акте) он в локации битва отображался первым.

Spoiler

Как насчёт акта в акте, не знаю, но есть такой вариант.
Предварительно действия в виде текста заносишь в массив:

$acts_array[0]="act '1': 
    *nl '1 ' 
    acts_count[0]+=1+max('acts_count')
    pl acts_count[0] 
    gt $curloc 
end "
! действие внесено в массив под индексом 0 и счётчик в нём acts_count[0] под индексом 0

На локации, где выводишь действия пишешь такой код:

! получаем наибольшее значение счётчика
memory=arrpos('acts_count',max('acts_count'))
! выводим действие с наибольшим значением счётчика
dynamic $acts_array[memory]
! далее выводим все остальные действия
i=0
:for
if i<arrsize('$acts_array'):
   if i<>memory:
       dynamic $acts_array[i]
   end
   i+=1
   jump 'for'
end

loony25,
блокнот сделать просто.
Если хочешь в виде предмета в инвентаре, повесь на него два действия (два пункта меню):
Добавить запись

$note[]=input('Что вы хотите записать в блокнот')

Таким образом в новые ячейки массива $note будут вноситься записи
Просмотреть записи:

clr
i=0
:for
if i<arrsize('$note'):
   pl $note[i]
   i+=1
   jump 'for'
end

Aleks Versus,
Что-то не хочет…

сделал так

Spoiler

Тут локация старт

$acts_array[0]="act '1': 
					*nl '1 '
					acts_count[0]+=1+max('acts_count') 
					pl acts_count[0] 
					gt $curloc 
				end " 

$acts_array[1]="act '2': 
					*nl '2 '
					acts_count[1]+=1+max('acts_count') 
					pl acts_count[1] 
					gt $curloc 
				end " 

$acts_array[2]="act '3': 
					*nl '3 '
					acts_count[2]+=1+max('acts_count') 
					pl acts_count[2] 
					gt $curloc 
				end " 

act 'gt1': gt 1

А тут я в локации в которой битва

! получаем наибольшее значение счётчика 
memory=max('acts_count') 
! выводим действие с наибольшим значением счётчика 
dynamic $acts_array[memory] 
! далее выводим все остальные действия 
i=0 
:for 
if i < arrsize('$acts_array'): 
   if i <> memory: 
       dynamic $acts_array[i] 
   end 
   i += 1 
   jump 'for' 
end

И получается что первый раз акты меняются а потом нет.

Aleks Versus Moderator 06.03.2018 20:04 (7 years ago)

oleksandrigo,
эм. Да. Я накосячил. Функция max получает не индекс, а максимальное значение. Чтобы найти индекс, нужно после строки

memory=max('acts_count')

добавить строку

memory=arrpos('acts_count',memory)

или поправить строку так:

memory=arrpos('acts_count',max('acts_count'))

Aleks Versus,
Вот теперь работает! Спасибо
Но я еще в каждый акт добавил его “обнулятор”, а то числа потом вообще в минус уходят.

Итак вопрос: Зачем нужно поле ввода в плеере?
Я изначально думал, что это для ввода команд типа gt ‘туда’ или изменение переменных в игре, но нет.

Aleks Versus Moderator 11.03.2018 15:51 (7 years ago)

oleksandrigo,
для парсерных игр можно.

Последний из Гаяр Moderator 13.03.2018 09:11 (7 years ago)

Вопрос всем? Как вывести на экран данные двумерного массива типа:

in=0
i=0
set vtype['<<i>>_<<in>>']=2

Тому как, если написать:

pl '<<vtype[0_0]>>'
pl '<<vtype[0_1]>>'

etc.
То кусп выдаёт “ошибка синтаксиса” и данные в массиве нормально не считаются.
даже если писать так

$id=str(i)
$in=str(ind)
set vtype[$id+'_'+$in]=2

Вопрос: что делать?

Edited at 13.03.2018 09:18 (7 years ago)

Последний из Гаяр,
хмм у тебя как-то запутано.

Spoiler
p1_M = 6
p2_M = 6

P1 = 0
:pzm1
p2 = 0
:pzm2
$twoMMas[p1 * p2_m + p2] = '[<<p1>>,<<p2>>]'
p2 += 1
if p2 < p2_M: jump 'pzm2'
p1 += 1
if p1 < p1_M: jump 'pzm1'


p1 = 0
:pvm1
	*nl
	p2 = 0
:pvm2
	*p $twoMMas[p1 * p2_m + p2] + ' '
		p2 += 1
	if p2 < p2_M: jump 'pvm2'
		p1 += 1
	if p1 < p1_M: jump 'pvm1'
	*nl
	
	
n = arrsize ('$twoMMas')	
n

$twoMMas[i]
*p '<<i>>'

act 's':
	if i < n - 1:
		i += 1 
		gt $curloc
	else
		i = 0
		gt $curloc
	end
end

Кинь себе и посмотри в работе его. Кинь весь с актом в конце будет понятнее.

Последний из Гаяр Moderator 13.03.2018 13:27 (7 years ago)

oleksandrigo,
Тут задаются последователньные значения от 0 до 6.

$twoMMas[p1 * p2_m + p2] = '[<<p1>>,<<p2>>]'

плюс мне надо чтоб массиву с двухчислным индексом задать одно значение, а не два в квадратных скобках как указанно в примере выше.

set vtype['<<i>>_<<in>>']=2

Всё ещё жду ответа.

Aleks Versus Moderator 13.03.2018 14:07 (7 years ago)

Последний из Гаяр:

pl ‘<<vtype[0_0]>>’
pl ‘<<vtype[0_1]>>’

Если тебе действительно необходимо использовать подвыражения в строке, тогда пользуйся разными кавычками:

pl '<<vtype["0_0"]>>' 
pl '<<vtype["0_1"]>>'

Или наоборот:

pl "<<vtype['0_0']>>" 
pl "<<vtype['0_1']>>"
Последний из Гаяр Moderator 13.03.2018 14:56 (7 years ago)

Aleks Versus,
Спасибо! Это работает! А то я уже совсем заколебался, думал это я такой косячу.

Задам достаточно странный вопрос:

set x = 1
let x = 1
x = 1

Может между ними есть хоть какая-то разница?

Ибо я никакой не заметил

И еще вопрос:

Насчет оператора IIF

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

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

Log in or Register to post comments.