Как выйти из цикла?

 
+
-
edit
 

chukcha

разработчик l2j-сервера
Не могу выйти из цикла!

: get_life
	player@ "CurrentHp" p@		 проверим уровень жизни
;
: check_life				
	get_life 1 < if 				 
	      false to TTT-life
	      exit	  не выходит из цикла!!!!!!!!!!!!!!!!!!
                    else
	      True to TTT-life
	then
;
0 time_for_award do
	" check_life " I 1000 * do-timer
	-1 +loop

Не хотить выходить из цикла! Можа кто знает (Бал, например)? :)
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

chukcha

разработчик l2j-сервера
По идее, если переменная цикла равна конечному значению, то выход из цикла.
пытался сделать
0 to I -ругается.....

Или изменить стек возврата. Но я про него нигде не нашел (или плохо искал - подкиньте ссылку, если кто знает, плз).
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

chukcha

разработчик l2j-сервера
Кто есть живой!?
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

Balancer

администратор
★★★★★
>0 time_for_award do

У слова DO порядок аргументов ( конец_цикла начало_цикла )
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

chukcha

разработчик l2j-сервера
Шаг то у меня -1, поэтому 0 - это конец цикла (8 7 6 5 4 3 2 1 0 например). И это работает.
А вот с выходом посоветуй.
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

chukcha

разработчик l2j-сервера
Ай как хочется из цикла вывйти - сил нет!
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

Balancer

администратор
★★★★★
chukcha> Ай как хочется из цикла вывйти - сил нет!

А у тебя там я нигде выхода из цикла не увидел :)

 exit	  не выходит из цикла!!!!!!!!!!!!!!!!!!

- это выход из текущего слова. Аналог return в Java.

Я всерьёз циклом do/loop не занимаюсь, так как до сих пор он нигде мне ещё нужен не был. попробуй задачу описать, скорее всего её иначе нужно реализовывать :)

Зачем тебе N проверок слов через N секунд сделанных? Не проще запускать очередную проверку примо из текущего слова?

: check_life                
    get_life 1 < if                  
          false to TTT-life
          exit 
    then
    true to TTT-life
    "check_life" 1000 do-timer
;
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

chukcha

разработчик l2j-сервера
Ивент заключается в том что игрок, обратившийся к НПС должен выжить (продержаться) какое-то время (например 30 сек). Если проверять один раз после прошествия интервала ожидания, то игрок может реснуться пока период ожидания не закончился и получит приз (жизнь то > 1).
Поэтому проверяю каждую секунду (или любой другой интервал - не приципиально).

Попробую твой вариант.
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

chukcha

разработчик l2j-сервера
Бал, спасибо огромное! Все получилось - из цикла выходит!

 выходим, если уровень меньше 1 
: check_life				
	player@ "CurrentHp" p@ 1 < if 				 
      	      false to TTT-priz
	      false to TTT-life
	      exit
	else
	      True to TTT-life
	then
	" check_life " 1000 do-timer
;

 ждемс чтобы получить приз 
: wfp
	0 time_for_award do
	 check_life
	-1 +loop
;



УРА!
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
+
-
edit
 

Balancer

администратор
★★★★★
Только я не понял, почему у тебя в конце цикл? :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

chukcha

разработчик l2j-сервера
Если не проверять постоянно через промежутки времени (1 сек), то убитый игрок до окончания срока ожидания реснится и получит награду, т.к. будет живой. Поэтому проверяю каждую секунду. Плюс, если время ожидания большое (а его маленьким смысла делать нет - эльфа-лучника пока поймаешь в коллизее), то после убийства игрока придется ждать окончания периода ожидания. А так осуществляется выход из ожидания (wfp -wait for player) досрочно.
Russian Mafia TEAM (RMT) Lineage 2 C3 Server (L2J Fortress) http://www.la2c3.ru НИЧТО НЕ СЛИШКОМ.  
AD Реклама Google — средство выживания форумов :)
+
-
edit
 

Balancer

администратор
★★★★★
Ну так делай проверку на то, что он живой :)

true value award-period
"false to award-period" 60000 do-timer
 ...
: award-check  ( -- )
    award-period not if exit then
    player@ "Dead" p? if exit then
    100000 57 items_add
;
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
1938: в Швейцарии состоялась первая широкая презентация растворимого кофе (87 лет).
Поиск
Настройки






Твиттер сайта
Статистика
Рейтинг@Mail.ru
АвиаТОП
 
Яндекс.Метрика
website counter
 
free counters