Как сделать?

Re: Как сделать?

Всем привет.
Вот сижу пишу на куспе и натолкнулся на реально странную ошибку...
Объяснить что именно произошло затруднительно поэтому вот вам файлик урезанной игры.
Откройте его и следите за мыслью. Нажимаем навыки и выбираем силовой удар.
Всё ок никакой ошибки. Можете даже сами посмотреть на вывод действий и убедиться что всё вроде нормально.
Дальше. Переходим к странному багу.
Нажмите на ударить. Это по сути пустая локация, где есть gt на локацию 1. На ней ничего больше не происходит.
Казалось бы что не так.
Но теперь нажмите на навыки и на силовой удар.
Хопа! Непонятная ошибка. Начнем с того что кусп говорит про 23 строку (которой нет).
А если проще то аргумент в выводе навыков почему то равен 2. При том что максимум должен быть 0. И изза этого и сам баг.
откуда двойка?
pamagiti.qsp

oleksandrigo
ТвореЦ
useravatar
Offline
102 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

oleksandrigo,
он говорит о строке в действии, причём о строке в сгенерированном действии.

Чтобы отследить эту ошибку, я бы написал после каждой строки кода вывод тех данных, которые эта строка формирует. Например, в окно доп описания. Так я и отлавливаю непонятные баги.

Но вообще мне кажется, что у тебя не одна, а две или больше ошибок, которые совместными усилиями выдают глюк. Генерация действия в локации 2:

Код:

gs $Skills[args[0]], 'player', 'enemy'

в этой строке определённо будет подставляться всегда только 0 вместо args[0], потому что args сохраняет значения только в рамках одной "сессии" текущего блока кода. Блок кода в данном случае — это действие, а действию мы не можем передавать аргумент. Если генерировать действие с помощью dynamic, то глюк пропадает, но я не уверен, что работает правильно. Слишком мудрённый код.

Код:

dynamic "act '<<$Skills.Name[args[0]]>>':

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!! ВОТ ЗДЕСЬ!!!!!!!!!!!!
    'вывод <<args[0]>>'
    *pl 'Вы использовали <<$Skills.Name[args[0]]>>'
    gs '<<$Skills[args[0]]>>', 'player', 'enemy'
    xgt 'FightT'
end"

oleksandrigo написал(а):

откуда двойка?

двойка берётся из строки args[0] += 1. Ты по сути генерируешь действие с одинаковым названием, чем заменяешь старое правильное действие новым неправильным. Если в название действия подставить его номер (<<args[0]>>), ты увидишь сколько действий действительно генерируешь.

UPD^^ нет, последнее неверно. Не пойму, откуда берётся двойка. Надо более глубоко вникать в код.

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Забавно если args['memory'] приравнять у нулю после вывода действий на 1, то баг пропадает. Вероятно какая-та ошибка в аргументах.
Также сделал как вы говорили использовал dynamic

 Спойлер Show Spoiler Hide Spoiler
 
dynamic "
act $Skills.Name[<<args[0]>>]:
    <<args[0]>>
    *pl 'Вы использовали ' + $Skills.Name[<<args[0]>>]
    gs $Skills[<<args[0]>>], 'player', 'enemy'
    xgt 'FightT'
end
"
Теперь всё работает корректно. Благодарю за помощь smile

oleksandrigo
ТвореЦ
useravatar
Offline
102 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Друзья! Столкнулся со странной проблемой.
В текущем проекте хочу реализовать игровую карту, с ландшафтом, который в начале игры генерировался бы случайно, но зависел от набора также случайно сгенерированных в начале игре чисел. И вроде все получилось, карта каждый раз новая и т.д., однако случайно заметил, что иногда она... повторяется.
Зажимаю Alt+N (начать новую игру) - смотрю, как ландшафты друг друга сменяют и... вдруг в один из моментов два раза подряд одинаковых.
Вывожу на экран переменные, от которых ландшафт зависит (<<a>><<b>><<c>><<d>><<e>><<f>><<g>><<h>><<j>><<k>>), каждой из них заведомо присваивается =rand(1,9) -
и та же самая ситуация, то они случайные, как надо, то в один из моментов два раза подряд абсолютно одинаковые ряды чисел.
От чего это зависит?

mkir
useravatar
Offline
138 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

mkir,
абсолютно случайных чисел не бывает. Генератор генерирует псевдослучайные числа. Плохо помню из информатики, но кажется он опирается на значение времени. Миллисекунды или микросекунды. В бейсике предлагалось выходить из этого выбрасывая случайный предел, а затем выбрасывая случайное число из предела.

В QSP можно повторить нечто подобное, и даже лучше:

 Спойлер Show Spoiler Hide Spoiler
 

Код:

! в первую очередь генерируем массив, заполненный всеми нужными данными

! можно проставить вручную, но я использую цикл для чисел от 1 до 9
if arrsize('arand')=0:
! только если массив не создан, так как незачем создавать его сто раз
    args['i']=1
    :for
    if args['i']<10:
        arand[]=args['i']
        args['i']+=1
        jump 'for'
    end
end
! копируем этот массив во временный
copyarr "temprand","arand"
! теперь заполняем другой массив, случайным образом выдёргивая данные
! из уже сформированного массива (из temprand в newtemprand)
:for_rand
args['size']=arrsize('temprand')
if args['size']>0:
    args['rand']=rand(0,args['size']-1)
    newtemprand[]=temprand[args['rand']]
    ! удаляем выбранную ячейку массива
    killvar 'temprand',args['rand']
    jump 'for_rand'
end
! теперь когда новый массив заполнен случайным образом данными из исходного массива
! выкидываем из него случайное значение
args['result']=newtemprand[rand(0,arrsize('newtemprand')-1)]
! удаляем временные массивы
killvar 'temprand'
killvar 'newtemprand'
! заставляем функцию вернуть значение
result=args['result']

Нужно записать этот код на отдельной локации, назвать её например rand-rand и получать случайное число уже так:

Код:

d=func('rand-rand')

Само собой она будет работать медленнее оригинального rand, и для примера я написал только вариант с числами от 1 до 9, но можно легко переделать под возможность гибко задавать предел.

P.S.: такие короткие ряды случайных чисел могут банальным образом случайно повторяться. Такая штука была замечена в айподе. Он смешивал песни в случайном порядке, но пользователи пожаловались, что "очень часто" песни повторяются, или может "долгое время" играть один и тот же исполнитель, из-за чего разработчикам пришлось внести в алгоритм перемешивания корректировку. То есть они "снизили" случайность. Таким образом в плейлисте стало меньше повторов, но он уже не перемешивался по настоящему случайным образом.

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Код:

$LSP="<a href='EXEC:beginning_quest[2]=beginning_quest[2]+1 & goto ""Loc""'>Бла бла<a/>"

*pl "Бла бла бла <<$LSP>> бла бла бла."

У меня такой вопрос, почему в данном коде, все что после <<$LSP>> тоже выделяется гиперссылкой?
Думал проблема в недостающей кавычке или лишней, но ничего такого не нашел.

UPD неправильно закрыл </a>, вопрос снят

BraJelon
useravatar
Offline
4 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

BraJelon,
просто ты ошибся в закрывающем теге:

Код:

<a/>

Должно быть

Код:

</a>

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Всем привет. Подскажите как сделать работающие переменные как голод и уталость? Пробовал сделать систему денег в   PL  но
То значение что пишу изачально в строке  Pl не меняется. Если не трудно объясните. Желательно с примером кода
чтобы показатели было видно

Andrik3206
Князь_Тьмы
useravatar
Offline
6 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Что значит "система денег в PL"?...
PL это вывод текста. Если ты напишешь pl '5' он всегда будет выводить 5. Различай вывод от хранения.
Значения храним в переменной

Код:

деньги = 5

Работаем дальше с ней, в том числе и выводим

Код:

pl деньги

Engineer
useravatar
Offline
24 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

Engineer,
Зачем str? И так ведь выведется

oleksandrigo
ТвореЦ
useravatar
Offline
102 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
970
Всего опросов:
14
Всего сообщений:
16790545
Сообщений на этой неделе:
10
Пользователи форума:
 
Всего пользователей:
2346
Последним зарегистрировался:
Rizrael