Как сделать?
…
Engineer,
В первом цикле программы прога не видит товар. Я во всех циклах поставил выражение: ДЕНЬГИ- ЦЕНА ТОВАРА
Теперь у меня такая ситуация: после входа в магазин отображается все деньги, но не заданное началом число, а уже с вычетом товара, который отображается в магазине.
Т.е. у меня было 1000 денег, отображается товар в 80 рублей. Отображается 920 денег и если я нажму КУПИТЬ- прога продолжит генерировать товар.
Первый товар в списке не учитываетсяvoprosnik.txt
Деньги вычитаются в блоке args[0]=“buy”, не важно куда его сунуть. Пока аргумент не равен “buy”, вычитание не происходит.
И зачем в каждой проверке делать вычет? Он будет происходить каждый раз когда товар прогружается!
Откровенно говоря, код непотребный и полон ошибок.
Если трудно, лучше его упростить и разбить на отдельные локации для наглядности. Сделать основную локацию магазин; локацию-обработчик для генерации и запоминания товара; локацию с обработками - проверка, покупка, вычет, обновление товара и т.д.
Товар можно хранить в массиве, выводить в магазине элементы этого массива, при покупке передавать информацию в локацию с обработками.
Можно начать с еще более простого - сделать все актами и использовать обычные переменные.
На данный момент вся локация “магазин” это одна большая ошибка. Потому что все в одной куче набросано:
- код под аргументом выполняется вместе с основным после него;
- переменная вычитаемой цены одна и постоянно перезаписывается без участия игрока;
- деньги вычитаются сразу как товар появляется на прилавке;
- проверка на наличие денег происходит уже после покупки и получения товара;
и т.д.
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
Но это лишняя переменная и тд. Есть ли более “красивые” способы решить эту проблему? И почему она вообще возникает?