RU

Система начисления опыта

Mad_Demon #1496 30.07.2015 09:22 11 comments 9023 views

А вот ещё один вопрос. Как сделать так, чтобы при накоплении определённого опыта давался соответствующий уровень? Пока что я пользуюсь вот таким рабочим кодом, сам додумался до него, но это вообще не вариант, так как это неудобно с каждым уровнем прописывать всё больше и больше новых условий.

#Начало
IF Опыт = 0 OR Опыт = 10 OR Опыт = 20 OR Опыт = 30 OR Опыт = 40:
Уровень = 1
END
IF Опыт = 50 OR Опыт = 60 OR Опыт = 70 OR Опыт = 80 OR Опыт = 90 OR Опыт = 100 OR Опыт = 110 OR Опыт = 120 OR Опыт = 130 OR Опыт = 140:
Уровень = 2
END
IF Опыт = 150 OR Опыт = 160 OR Опыт = 170 OR Опыт = 180 OR Опыт = 190 OR Опыт = 200 OR Опыт = 210 OR Опыт = 220 OR Опыт = 230 OR Опыт = 240 OR Опыт = 250 OR Опыт = 260 OR Опыт = 270 OR Опыт = 280 OR Опыт = 290:
Уровень = 3
END
CLEAR
PL 'Ваш уровень: <<Уровень>>'
PL 'Ваш опыт: <<Опыт>>'
ACT '+20 опыта':
Опыт = Опыт + 20
GOTO $CURLOC
-

Подскажите кто-нибудь :/ Я столько всего перепробовал, что уже готов волосы на голове рвать :=D

Белый Шарик #100 30.07.2015 09:36 (10 years ago)

Наверное так?

If Опыт >= 0 and Опыт <= 40 : Level = 1
elseif Опыт > 40 and Опыт <= 140 : Level = 2
end

у меня примерно так всегда (в counter):

if expa > 9 + levelexp:
expa = expa - 10 - levelexp
level = level + 1
levelexp = levelexp + rand(15,35) + (levelexp/10)
end

последнее - “levelexp/10” как вариант, эдакое процентное наращивание, можно и без него, а можно и только с ним)

Премного благодарен :rolleyes:

Ужас какой! Нельзя ничего такого записывать в каунтер! Ещё и других этому учить….

Вынесите в отдельную локацию и вызывайте по GS там, где количество опыта меняется.

опыт = опыт + 100
GS 'уровень'

Nex, ну вот и мне будет полезно что-то новое) почему нельзя в каунтер?

а в ньюлок то же самое можно? если без gs обойтись

Самый удобный и подробный от Алекса, за что ему спасибо.

Допустим, уровень считается в переменной lvl. Очки опыта в exp. Поинты, пусть будет point.

Можно сделать подсчёт через формулу. В большинстве RPG так и делается.
Пишем отдельную локацию. Локация вызывается всякий раз при изменении опыта. Т.е. чтобы увеличить опыт на 5 очков нужно сделать

gosub 'level',5

На сто:

gosub 'level',100

!#level
exp=exp+args[0]
:for
if exp>=exp_marker:
! если количество опыта достигло критического значения:
!уровень повышается
lvl=lvl+1
!добавляем поинтов:
point=point+2
!увеличивается критическое значение (это то значение опыта, при котором в следующий раз сменится уровень. Допустим у тебя уровень повышается через каждые сто опыта):
exp_marker=exp_marker+100
!возвращаемся, чтобы вновь проверить, не достигло ли значение опыта критического значения (это нужно для того, чтобы учесть случаи, когда получен опыт сразу на два и больше уровней)
jump 'for'
end

Способ подъёма уровня через массив мне неизвестен. Вывод на экран всего этого безобразия трудностей вызвать не должен. Выводим строкой:

*pl 'Текущий уровень: , Набрано опыта:, Очков развития:,
До слудующего уровня необходимо опыта: '

Да, ну, а если уровень должен повышаться не через каждые сто очков опыта? Сначала, например, повышается через 50, потом через 100, потом через 200 и т.д. Как это осуществить с помощью этого кода?

!#level 
exp=exp+args[0] 
:for 
if exp>=exp_marker: 
! если количество опыта достигло критического значения: 
!уровень повышается 
lvl=lvl+1 
!добавляем поинтов: 
point=point+2 
!увеличивается критическое значение (это то значение опыта, при котором в следующий раз сменится уровень. Допустим у тебя уровень повышается через каждые сто опыта): 
exp_marker=exp_marker+100 
!возвращаемся, чтобы вновь проверить, не достигло ли значение опыта критического значения (это нужно для того, чтобы учесть случаи, когда получен опыт сразу на два и больше уровней) 
jump 'for' 
end

Если только использовать IF

#Уровень_игрока
Опыт = Опыт + args[0] 
:FOR 
IF Опыт >= Опыт_макс: 
Уровень_игрока = Уровень_игрока + 1
IF Уровень_игрока = 1:
Опыт_макс = 50
END
IF Уровень_игрока = 2:
Опыт_макс = 150
END
IF Уровень_игрока = 3:
Опыт_макс = 300
END
IF Уровень_игрока = 4:
Опыт_макс = 400
END
JUMP 'FOR' 
END

Белый Шарик:

Наверное так?

If Опыт >= 0 and Опыт <= 40 : Level = 1
elseif Опыт > 40 and Опыт <= 140 : Level = 2
end

Проще надо быть :)

Level = 1
if Опыт > 40: Level = 2
if Опыт > 140: Level = 3
Aleks Versus Moderator 03.08.2015 09:19 (10 years ago)

Slavik_44,
любое изменение опыта можно забить в формулу, если, конечно, пороговые значения взяты не от балды.

Формула, где для следующего уровня нужно накопить в два раза больше опыта, чем для предыдущего:

exp_marker=exp_marker*2

Формула, где количество требуемого опыта до следующего уровня зависит от предыдущего уровня:

exp_marker=exp_marker+100*lvl

Поиграйся с формулами в Exel’е и обязательно подберёшь оптимальную.

Log in or Register to post comments.