RU 📌 Pinned

Как сделать?

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

oleksandrigo,
функцией называется процедура, которая возвращает результат.

То есть можно в отдельной локации сделать часть кода, а потом с другой локации загрузить значение? А что если значений несколько?
И я никак не могу понять в чем разница между ним и gs. В каких ситуациях он нужен?

Aleks Versus Moderator 15.02.2018 09:34 (8 years ago)

oleksandrigo,

Spoiler

локация “proced”:

v=20
b=5
z=v*b

Чтобы получить значение z можно запустить через gosub:

gosub 'proced'

А можно изменить локацию так:

v=20
b=5
result=v*b

Теперь, чтобы то же самое значение записать в z, используем func:

z = func('proced')

Более того, теперь мы это значение можем поместить не только в z, но и в f, g, и h.

z = func('proced')
f = func('proced')
g = func('proced')
h = func('proced')

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

v=args[0]
b=args[1]
result=v*b
f = func('proced',5,20)
! f = 100
g = func('proced',3,6)
! g = 18
h = func('proced',34,1)
! h = 34

Более того, переменные v и b тоже можно исключить:

result=args[0]*args[1]
f = func('proced',5,20)
! f = 100
g = func('proced',3,6)
! g = 18
h = func('proced',34,1)
! h = 34

Возникла проблема…

Обычно в QSP текст выводится начиная с верхней левой части экрана. Как сделать так, чтобы текст выводился с нижней левой части экрана?

Spoiler

Я пробовал так:

'<table height="100%" valign="bottom"><tr height="100%" valign="bottom"><td height="100%" valign="bottom">Просто текст</td></tr></table>'

В теории должно было сработать.

Aleks Versus Moderator 16.02.2018 10:24 (8 years ago)

NickoAilus,
относительная высота не сработает в классическом плеере.

Просто забивай несколько пустых строк перед теми, которые должны быть внизу.

Spoiler
*pl "<<$args[0]>>"
  *pl $args[0]

Чем отличаются эти две команды?
Просто показывает обе, но вот в почему не пойму.

Aleks Versus Moderator 16.02.2018 19:35 (8 years ago)

oleksandrigo,
результат их работы идентичен. А вот работают они по-разному.

Когда плеер встречает первую команду, он видит подвыражение в строке. Сначала он получает значение $args[0] и подставляет его вместо подвыражения. Таким образом теперь у него получается текстовая константа. Он берёт её значение и передаёт оператору *pl. Оператор выводит значение на экран.

Когда плеер встречает вторую команду, он сразу берёт значение $args[0] и передаёт оператору *pl.

Первая команда — двойная работа для плеера. Ну это условно. Она выполняется где-то в 1,3 раза дольше.

В общем такая ситуация: есть локации:
1) локация “1” из которой меня кидает в бой, а точнее в локацию “Fight”
2) локация “Fight” в которой всякие проверки и тд, но в итоге меня gt’ешит в локацию “FightA”
3) локация “FightA” которая при выборе действия xgt’шит сама себя.
И вот какая проблема. Я пытаюсь сделать так, чтобы та же локация 1 могла быть даже локацией 2, но при победе меня должно возвращать на локацию в которой меня кинуло на локацию “Fight”.

Сделал вот так и вроде норм.

В локацию Fight при условии что я выиграл сделал gt $loc, $metka

Правда нужно каждую локацию отмечать ими же. Тоесть писать
$loc = $curlock
$metka=args[0]
Вот так вот.

Вот такой вот есть вопрос…Как сделать доход в игре ?
То есть,мы имеем золото ($gld) и доход ($doh) и у нас есть действие получить деньги
Например всего золота у нас 4 штук, а доход составляет 5 золота в ход
Какой должен быть оператор ? Я ничего не могу придумать как $gld=$gld+$doh,но тогда у меня выходит не 9 как должно получится,а 45 !!
Кто знает как правильно ?

Антипапа,Нуу. у тебя ведь числа? Зачем ты ставишь $? Этот знак для строки(текст). Тоесть получится
gld = gld + doh

а еще можно написать
gld += doh
Та же самая команда, просто короче.

И еще раз повторю.
$ - для текста.
К примеру $x = ‘Дарова’
А переменные для чисел просто
x = 1

А у тебя получилось, что числа просто стали рядом друг с другом.

oleksandrigo,спасибо…Но все равно то же самое,числа ставлятся в ряд $gld += $doh
или gld += doh,но если так то тогда переменная $gld не меняется (у меня так она и называется)
Хотя уже все исправилось и заработало
Но у меня вопрос
Какая разница между названием переменной с $ и без $ ?

Aleks Versus Moderator 17.02.2018 19:09 (8 years ago)

Антипапа,
внимательнее читай справку.
Знак $ ставится перед названием ТЕКСТОВОЙ переменной
’4’+’5’ — это конкатенация строк. Склейка. Ты склеил текст ’4’ и текст ’5’. Получилась строка ’45’, а не число, как тебе объяснил oleksandrigo.

Переменная $gld не меняется, потому что она текстовая. А переменная gld — числовая.

В общем такая проблема.

Хочу сделать шанс уворотов. То бишь чем больше переменная lovk тем больше шанс. Она должна зависеть и от ловкости врага.
Но никак не могу понять как это устроить.
Если просто rand(lovk) то шанс станет меньше.
Если rand (lovkM) ситуация та же.
!lovkM - ловкость врага
Если rand (lovk,lovkM)
То это вообще что-то не то. Ибо получится что если разница ловкостей большая то шанс меньше, а ведь ловкость у меня может быть больше чем у врага!

В общем суть вроде рассказал.

Пока использую вот это.

Spoiler
x = rand(1)
if lovk > lovkM*2 and x = 1:
	$evade = 'Вы увернулись'
	EvDa = 1
else
	HP -= ODamagFM
	$noEvade = 'У вас не получилось увернуться'
	EvNet = 1
end

Но тут по сути шанс уворота 50%. И это плохо.

Spoiler
raznisa = lovk - lovkM
if raznisa < 0: raznisaM = raznisa * (-1)

if lovk > lovkM:
	xr = rand(lovkM,lovk)
	if xr >= lovkM and xr <= raznisa: x = 1
end

if lovkM > lovk:
	xr = rand(lovk,lovkM)
	if xr >= raznisaM and xr <= lovkM: x = 1
end

!!!!

if x = 1:
	$evade = 'Вы увернулись'
	EvDa = 1
else
	HP -= ODamagFM
	$noEvade = 'У вас не получилось увернуться'
	EvNet = 1
end

Вот так вот сделал. Если кому нужно берите.

Log in or Register to post comments.