Как сделать?
…
Прощу меня простить за мою Импульсивность и агрессию. Просто был на нервах!
Я наконец понял как правильно сформулировать….
нужно через цикл создать 5+ ссилок с разным Айди
с формированием таблицы вообще проблем нет!
Так что ладно, спс за попытку буду костыль делать! Это проще и быстрее! да и сильно не ударит по функциональности!
Teemo228,
Я тебе уже написал, что нужно делать.
Во время цикла сохраняй данные в переменные и все будет работать. Дал пример, хоть он и массивный, но работает.
Посмотри как сделано у других.
Если относительно хорошо разбираешся в коде, открой исходник The Dark Citadel.(ссылку найдешь в посте про игру).
В локации inventory. math найдешь то, что тебе нужно.
я КСП на базовом зню! и С UI.SSS в коде первый раз столкнулся, хотя окрывал некоторые исходники. это тип C++? или я чего то не догоняю, не знаком с реализацией в QSP
СПС открыл мне новые функции QSP о которых я не знал, буду углубляться в изучении…
Пошел шерстить Документацию.
Teemo228,
Я не буду помещать твой код в блок кода, чтобы выделить, что тебе нужно добавить. Об этом уже сказал dmvikar. Выделю место, где ты уже используешь формирование вставку ID, и где тебе нужно вставить то же самое:
Spoiler
NumerCreate = 10
*p ‘<center><table align=“center” border=“1” cellpadding=“1” cellspacing=“1” style=“width: 0px”><tr><td> id </td><td> Имя Фамилия </td><td> Пол </td><td>Ред</td></tr>’
a = 0
:uuuu
if a < NumerCreate: ‘<tr><td> ‘+’<<PeepolId[a]>>’+’ </td><td> ‘+’<<$PeepolName[a]>>’+’ </td><td>’+’<<$PeepolPol[a]>>’+’</td><td> ‘+”<a href=‘EXEC: $MenuButtonActive = ““Menu”” & gosub ““Crate Heroe””,<<PeepolId[a]>>’>”+’ </td></tr>’
a = a+1
if a < NumerCreate: jump “uuuu”
a = 0
При таком подходе на локации Crate Heroe ты можешь получить ID из args[0]. Либо ты можешь делать так:
Spoiler
if a < NumerCreate: ‘<tr><td> ‘+’<<PeepolId[a]>>’+’ </td><td> ‘+’<<$PeepolName[a]>>’+’ </td><td>’+’<<$PeepolPol[a]>>’+’</td><td> ‘+”<a href=‘EXEC: $MenuButtonActive = ““Menu”” & current_peopleID=<<PeepolId[a]>> & gosub ““Crate Heroe””’>”+’ </td></tr>’
a = a+1
if a < NumerCreate: jump “uuuu”
a = 0
при таком подходе на локации Crate Heroe можно получить ID из переменной current_peopleID.
Огромное спасибо всем что меня терпели!) Мозг отказывался понимать, но я понял))
Svartberg - слишком усложнил пояснение) хоть все и правильно написал) Просто его (использование точек сбило меня с толку)
Aleks Versus - теперь понял принцип работы.
по сути за каждый прокат ссылка получает новое значение не теряя значения за предвущий прокат… долго не мог вкурить, еще раз сори, что грубил…
P.S - это можно и в цикл видео “как сделать” - добавить)
Возможно ли присвоить переменной значение, которое бы соответствовало локации, в которой в качестве подлокаций используется массив $ARGS?
Другими словами - есть локация с названием “Школа”. И в ней есть подлокации:
If $ARGS[0]='Класс_1':
...
End
If $ARGS[0]='Класс_2':
...
End
И т.д.
Как мне присвоить переменной (Например, $Location) такое значение, чтобы, используя значение этой переменной, я оказался в подлокации Школа/Класс_1?
Mushinia,
Не очень понял о чем ты, но… Насколько я понял, ты передаешь текстовое значение. Чтобы не мучится с временным массивом и передачами, рекомендую просто завести несколько переменных с хранимыми данными локациями.
Еще как вариант, можно использовать одну переменную, хранящую путь для локации.
Как пример:
Spoiler
Не говорю, что это правильно и так нужно сделать. Но я делаю так:
$ui.DataSelect = 'Menu/Main'
Завожу переменную и записываю туда путь. При помощи INSTR можно просканировать переменную и узнать есть ли в ней нужное слово.
IF INSTR($ui.DataSelect,'Menu') ! 0:
%какой-то код%
IF INSTR($ui.DataSelect,'Main') ! 0:
%какой-то код%
END
END
В примере выше указано как можно это просто сделать. Чтобы разбить все это дело на локации, можно использовать следующую конструкцию:
Spoiler
!Определение локации для перехода:
$UICut.DataSelect = $UI.DataSelect
IF INSTR($UICut.DataSelect,'/') ! 0:
UICut.Mark['end'] = INSTR($UICut.DataSelect,'/')-1
$UICut.DataMid = UCASE(MID($UICut.DataSelect,0,UICut.Mark['end']))
$UICut.SubDataMid = MID($UICut.DataSelect,UICut.Mark['end']+2)
GS '<<$UICut.DataMid>>.ui'
ELSE:
$UICut.DataMid = UCASE($UICut.DataSelect)
GS '<<$UICut.DataMid>>.ui'
END
Так же рекомендовал бы хранить данные для отрисовке в переменных. И редактировать удобнее и не потеряешся.
Объясни подробнее, пожалуйста.
Как я понял из твоего сообщения. У нас существует локация ‘Menu.ui’ В ней находится подлокация в виде $ARGS=‘Main’.
Ты приводишь следующий код:
Spoiler
$ui.DataSelect = 'Menu/Main'
!Определение локации для перехода:
$UICut.DataSelect = $UI.DataSelect
IF INSTR($UICut.DataSelect,'/') ! 0:
UICut.Mark['end'] = INSTR($UICut.DataSelect,'/')-1
$UICut.DataMid = UCASE(MID($UICut.DataSelect,0,UICut.Mark['end']))
$UICut.SubDataMid = MID($UICut.DataSelect,UICut.Mark['end']+2)
GS '<<$UICut.DataMid>>.ui'
ELSE:
$UICut.DataMid = UCASE($UICut.DataSelect)
GS '<<$UICut.DataMid>>.ui'
END
Я протестировал этот код. В итоге я попадаю на локацию ‘Menu.ui’, но не в подлокацию ‘Main’.
Ты приводишь в коде такую переменную:
$UICut.SubDataMid = MID($UICut.DataSelect,UICut.Mark['end']+2)
Но при этом не используешь её. Значение этой переменной как раз равняется ‘Main’.
То ли ты не дописал код - потому что задача, которую я хотел решить как раз и состоит в том, чтобы попасть в подлокацию ‘Main’, то ли я не понял что и к чему.
В соответствии с моими знаниями, единственное, как мы можем попасть в данную подлокацию - это дописав через запятую неиспользованную переменную $UICut.SubDataMid сразу после GS ‘<<$UICut.DataMid>>.ui’. То есть:
GS '<<$UICut.DataMid>>.ui', '<<$UICut.SubDataMid>>'
Но это мне не подходит, потому что вся суть моего вопроса состояла в том, можно ли (используя сколько угодно переменных, функций, операторов или чего-угодно ещё) запихнуть в одну переменную возможность перехода на подлокацию.
Spoiler
Мне это нужно для работы динамиков. Здесь вычисляется местоположение НПС в определённое время.
Соответственно, я использую этот массив $NPC[’<<args[9]>>_22’] (который отражает местонахождение ученика в данный момент в соответствии с другой, неупомянутой переменной) для перехода на заданную локацию.
If Hour >= 8 and Hour < 18:
If Args[9]/20 = 0:
$NPC['<<args[9]>>_22'] = "Школа","Класс_1" & !%Место загвоздки%
End
End
В этом коде всё работает до той поры, пока не попытаешься припихнуть сюда подлокацию. Если будет просто “Школа” - всё работает. Но на подлокацию мы не попадём. А у меня уже созданы все эти локации, в большом количестве. И не хотелось бы сильно менять код… Поэтому и нужно узнать, существует ли возможность через переменную перейти сразу на заданную подлокацию.
В общем это всё тяжело объяснить, не приводя огромное количество кода. Вопрос не такой сложный, но решение этого вопроса не очевидно для меня. Я думал, что это теоретически можно сделать, правильно указав кавычки и скобки. Но судя по всему, плеер всегда будет считывать это как название одной локации, не желая учитывать временный массив…
Mushinia,
$test = "'Школа','Класс_1'"
dynamic 'gs <<$test>>'
?
Mushinia,
Прочитай внимательно весь текст, что я тебе написал и поймешь.
Вырезанное значение может быть полезно, если 1 значение совпадает с названием второго.
Да есть недостаток в том, что нужно правильно расставить проверку.
Если не понял, тебе уже подсказали как сделать через передачу.
Однако, раз уж ты разобрал мой код, то все понял.
Но ты не очень внимательно читаешь.
Много раз перечитывал, проверил всё в силу своих возможностей!
Я только учусь, поэтому может какие-то детали просто упускаю :(
Сейчас проверю, что предложил Engineer.
Engineer,
Если использовать это вообще, то работает.
В моём случае, в динамиках, игра крашится.
Mushinia,
Я лишь ответил на вопрос, “как запихнуть в одну переменную возможность перехода на подлокацию”, т.е. два аргумента для gs (или gt). Остальное смотри в своем коде. Наверняка где-то цикл бесконечный, если плеер перестает отвечать.
Mushinia,
лучше задавать вопрос в виде конкретной задачи. Например: “Можно ли на одной локации сделать несколько мест? И как это сделать?” Из твоего вопроса не ясно, зачем нужна локация “Школа”, если ты переходишь потом на локации “Класс_1”, “Класс_2” и т.д. Возможно, перепутаны понятия: локация - блок кода, и локация - конкретное место. Но, насколько я понимаю, переход и не должен происходить. Вот пример путешествия по школе, как я думаю, он у тебя должен выглядеть:
!# школа
If $args[0]='' or $args[0]='холл':
*pl "Я стою посреди школьного холла. Отсюда я могу попасть в любой из классов"
act "В класс 1":
goto 'школа','Класс_1'
end
act "В класс 2":
goto 'школа','Класс_2'
end
end
If $ARGS[0]='Класс_1':
*pl "Я нахожусь в Классе 1"
act "Выйти в холл":
goto 'школа','холл'
end
End
If $ARGS[0]='Класс_2':
*pl "Я нахожусь в Классе 2"
act "Выйти в холл":
goto 'школа','холл'
end
End
Здравствуйте. У меня небольшая загвоздка. Вылезает часть текста не так, как планировалось. И действие “не оплачивать проезд” особенно при повторном посещении локации, надо прожимать иногда несколько раз, с первого раза почему-то не срабатывает. Не поможете?
Spoiler
if место_занято=1 and проезд_оплачен=0:
*nl
*nl “К тебе подошел кондуктор.”
*nl
*nl “-Здесь что за проезд?!”
act “Оплатить проезд”:
проезд_оплачен=1
оплачен_на_месте=1
goto $curloc
end
end
if место_занято=1 and проезд_оплачен=0:
*nl
*nl “Тебе не очень хочется оплачивать проезд, поэтому ты делаешь вид, что не замечаешь кондуктора.” (!!! Проблема в том, что вылезает эта строка, сразу после фразы -Здесь что за проезд?!”. Задумывалось, что она будет появляться только после действия “Не оплачивать проезд”!!!)
act “Не оплачивать проезд”:
*nl
*nl “Немного подождав, и поняв, что ты оплачивать проезд не собираешься…”
*nl
*nl “-За проезд будем оплачивать!!!? - снова спросил кондуктор, повышая голос.”
конфликт=rand (1) !!! Тут пока для теста первый вариант конфликта, в дальнейшем планируется добавить еще несколько вариантов.
delact “Оплатить проезд”
goto $curloc
end
end
if конфликт=1:
*nl
*nl “Ты пробуешь схитрить, и просящим тоном говоришь.”
*nl
*nl “-Я деньги потерял, можно я так проеду, тут недалеко?”
ответ_кондуктора=rand (1,2)
end
if ответ_кондуктора=1:
*nl
*nl “-Что, на проезд заработать не можешь? Потерял он, ага! Ладно, езжай уж. Работать надо, а не побираться!”
место_занято=1
проезд_оплачен=1
delact “Не оплачивать проезд”
delact “Оплатить проезд”
end
if ответ_кондуктора=2:
*nl
*nl “-Я тут не собираюсь штрафы за каждого безбилетника платить! Меня тоже проверяют! Нет денег, пешком тогда ходи! Давай, на выход.”
*nl
*nl “-Останови автобус! - потребовал кондуктор у водителя.”
*nl
*nl “Водитель остановился и открыл двери.”
*nl
*nl “-Выходим! - потребовал кондуктор.”
delact “Не оплачивать проезд”
delact “Оплатить проезд”
act “Выйти из автобуса”:
goto “Улица”
end
end
if проезд_оплачен=1 and оплачен_на_месте=1:
*clr
*nl
*nl “Ты оплачиваешь проезд. Кондуктор пересчитав твои деньги выдает тебе билет и сдачу, и отправляется дальше по салону.”
end
if место_занято=1 and проезд_оплачен=1:
act ‘Выйти на остановке “Коммунистическая площадь”’:
time+=20
gs “Календарь”
goto “Площадь”
сел_в_автобус=0
end
end