Как сделать?
…
Engineer,
Я чуть-чуть запутался. Объясните пожалуйста вот эти минусы: как их исправить?
- код под аргументом выполняется вместе с основным после него;
- переменная вычитаемой цены одна и постоянно перезаписывается без участия игрока;
- деньги вычитаются сразу как товар появляется на прилавке;
- проверка на наличие денег происходит уже после покупки и получения товара;
я перетащил локацию- начало в конец документа. А у меня папки сверху. как поднять локацию?
Объясните пожалуйста доступным языком. Как сделать такую шнягу:
Создать список- таблицу предметов на одной локации, но отобразить этот список в виде таблицы на другой?
Как строить таблицы- html код - понятно.
А как именно создать на одной локации, а отобразить на другой?
И после перехода на другую локацию - список не исчезает, а отображается сформированный
Poganec37:
Объясните пожалуйста доступным языком. Как сделать такую шнягу:
Создать список- таблицу предметов на одной локации, но отобразить этот список в виде таблицы на другой?
я делаю так. Создаю локацию с названием “print.table”
На этой локации пишу так:
$args[9]+="<table width=720>"
$args[9]+="<tr>"
$args[9]+="<td width=50%>"
$args[9]+="содержимое ячейки"
$args[9]+="</td>"
! и т.д...
$args[9]+="</tr>"
! и т.д....
$args[9]+="</table>"
*pl $args[9]
Теперь, в нужном месте можно просто написать:
gosub "print.table"
Сработает в любой локации, в которой мы его напишем.
Если нужно, чтоб выводилось всякий раз при входе на новую локацию, на самой первой локации в игре пишем:
$onnewloc="onNewLoc"
Создаём локацию с названием onNewLoc, и в неё помещаем уже знакомую строку кода:
gosub "print.table"
Poganec37:
Объясните пожалуйста доступным языком. Как сделать такую шнягу:
Создать список- таблицу предметов на одной локации, но отобразить этот список в виде таблицы на другой?
Переменные.
#генератор
!задаем товары с индексами
$shop_item1['name']='Товар 1'
shop_item1['price']=85
$shop_item1['color']='Синий'
!...другие свойства
$shop_item2['name']='Товар 2'
shop_item2['price']=120
$shop_item2['color']='Красный'
!...
#магазин
!отображаем
*p '<table border=1><tr><td></td><td>Название</td><td>Цена</td><td>Цвет</td>(...прочие свойства...)</tr>'
!если есть товар 1
if $shop_item1['name']<>'':
*p '<tr><td>Товар 1:</td><td><<$shop_item1["name"]>></td><td><<shop_item1["price"]>></td><td><<$shop_item1["color"]>></td>(...прочие свойства...)</tr>'
end
!если есть товар 2
if $shop_item2['name']<>'':
*p '<tr><td>Товар 2:</td><td><<$shop_item2["name"]>></td><td><<shop_item2["price"]>></td><td><<$shop_item2["color"]>></td>(...прочие свойства...)</tr>'
end
!...прочие товары...
*p '</table>'
!...
При попытке купить, скажем, первый товар, в отдельной локации проверяем деньги и вычитаем (если хватает) из них shop_item1[’price’].
При удачной покупке делаем killvar ‘shop_item1’, очищая память. Либо вручную чистим все его значения внутри, но самое главное это очистить наименование, т.к. по нему идет проверка наличия товара ($shop_item1[’name’]=‘’).
Или, если нужно, после покупки отправляем в #генератор чтобы заново сгенерировать все товары. Только в начале генератора нужно ставить обнуление старых товаров.
#генератор
!чистим магазин
killvar 'shop_item1'
killvar 'shop_item2'
!...
!добавляем новых товаров
!...
Извините, что по новой с этим вопросом. Как отобразить результат времени. Постараюсь попроще
На пример: Задача - отожмись 10 раз за определенное время время “Старт” (запускаем таймер для его отключения нажмите на ссылку)
Отжались нажимаем на ссылку переходим на другую локацию результата “нет”, если зациклили время в противном случае он будет все время бежать дальше.
Через разные функции пробовал, всего “сапера” перековырял(честно так и не понял как он запоминает время окончания(вернее частично так, как этот способ мне несильно подходит))
Freem82,
Приблизительно так. Создаём локацию, например с именем “таймер”. Указываем плееру в самом начале игры, что это локация-счётчик:
$counter="таймер"
Там же задаём периодичность выполнения кода на этой локации
settimer 20 & ! каждые 20 мс
На самой локации “таймер” пишем что-то типа:
if timer_start=1:
! таймер работает как правило с небольшими значениями
! поэтому достаточно писать только милисекунды
msecs+=20
! для отображения секунд минут и прочего, просто делаем персчёт
secs=msecs/1000
msecs_mod=msecs-secs*1000
mins=secs/60
secs=secs-mins*60
hour=mins/60
mins=mins-hour*60
! и т.д.
clr
pl "<<hour>>:<<mins>>:<<secs>>.<<msecs_mod>>"
end
Действия для проверки:
act "запустить таймер":
timer_start=1
end
act "остановить таймер":
timer_start=0
end
act "сбросить таймер":
msecs=0
secs=0
mins=0
hour=0
! и т.д.
end
act "нужно кликнуть десять раз":
click+=1
if click=10:
timer_start=0
time_msecs=msecs
end
if time_msecs>2000: "Вы не уложились во время"
end
Думаю, допилишь, как тебе нужно.
Спасибо огромное. В двух словах: как сохранить значение(эта система работает и показывает значение, но при переходах его сбрасывает, то есть ты увидишь это время всего один раз, оно не сохранится как аргумент или в массиве).Да же если создавать несколько локаций-счетчиков.
Freem82,
Эм. Не понял. Значение пишется в переменную msecs. И хранится там, пока ты не сбросишь таймер, то есть не обнулишь значение переменной. Если ты останавливаешь счётчик, но тебе нужно, чтобы значение выводилось на экран при переходе на любую локацию, можно например воспользоваться локацией-обработчиком перехода на новую локацию:
На самой первой локации, указываем плееру название локации-обработчика:
$onnewloc='onNewLoc'
Создаём локацию обработчик и на ней пишем по аналогии с counter:
clr
pl "<<hour>>:<<mins>>:<<secs>>.<<msecs_mod>>"
Если же тебе нужно хранить разные значения таймеров, заведи несколько переменных.
timer_msecs1=msecs
timer_msecs2=msecs
Или массив:
timer_msecs[0]=msecs
timer_msecs[1]=msecs
Друзья! Искал по форуму, но так внятного ничего и не нашел. Как сделать прокачку персонажа? Например, в начале у нас ноль опыта, а с выполнением какого-то квеста его, например, прибавилось на десять, а после того как шкала заполнится до ста, то выдается какой-то перк или предмет? Возможно ли вообще такое провернуть средствами qsp?
loony25,
конечно возможно, причем очень просто, все через те-же базовые средства.
Создаем локацию добавления опыта “exp”. Делаем
gs ‘exp’,10
чтобы добавить 10 опыта (или -10 чтобы убрать).
#exp
!в аргументе 0 нам приходит та десятка после запятой
exp+=args[0]
if exp<0: exp=0
if exp>100:
exp=0
lvl+=1
end
Отсюда пляшешь как хочешь:
- Чтобы опыт переносился на следующий уровень, а не обнулялся, заменяешь exp=0 на exp-=100;
- Чтобы количество опыта для поднятия уровня различалось, делаешь переменную maxExp и заменяешь константу 100 на эту переменную:
maxExp=100
!...#exp
if exp>maxExp:
exp-=maxExp
lvl+=1
!сделаю, чтобы каждый новый уровень нужно будет собрать больше опыта на уровень*10
!т.е. на 1-м уровне надо набрать 100, 2=120, 3=150, 4=190, 5=240, 6=300 и т.д.
maxExp+=lvl*10
end
!...
- Можно добавить переход на отдельную локацию, где игроку дается перк\скилл\предмет:
!...#exp
if exp>maxExp:
exp-=maxExp
lvl+=1
maxExp+=lvl*10
gs 'new_perk'
end
!...
#new_perk
if lvl=3: addobj 'Ценная монета'
if lvl=3: perk['Живчик']=1
if lvl=5: maxHp+=10
!...
Спасибо большое за подробное объяснение. :)
Всем привет, вопрос такой: почему args’ы не видны в актах?
Приведу пример.
Spoiler
я хочу сделать так
act("asdasdsdsada"): gs $args[1]
но увы говорит что локация не существует. Он даже не выводит значение этого аргумента чего уж там.
Можно его сделать разве что так.
$s = $args[1]
act("asdasdsdsada"): gs $s
Но это лишняя переменная и тд. Есть ли более “красивые” способы решить эту проблему? И почему она вообще возникает?
oleksandrigo,
проверь аргумент перед переходом, может переписал ты его.
Проверь, что ты передаешь. Может число - а вызываешь строку.
Проверь индекс, может вызываешь не то.
Протестированный код:
#start
gt '1','test'
#1
!выводит 'test'
msg $args[0]
act 'Погнали?':gs $args[0]
#test
*p 'success '
Отрабатывает приемлемо.
Engineer,
Угум короче аргумент не передается в акт если это gs или func. Только при gt или (возможно) xgt. Возможно из-за того что акт создался и аргумент пропал после окончания обработки локации и из-за этого получается такой косяк. Фиг с ним решается доп переменной.