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

 
+
-
edit
 

chukcha

разработчик l2j-сервера
Не могу выйти из цикла!
code forth
  1. : get_life
  2.         player@ "CurrentHp" p@           проверим уровень жизни
  3. ;
  4. : check_life                           
  5.         get_life 1 < if                                  
  6.               false to TTT-life
  7.               exit        не выходит из цикла!!!!!!!!!!!!!!!!!!
  8.                     else
  9.               True to TTT-life
  10.         then
  11. ;
  12. 0 time_for_award do
  13.         " check_life " I 1000 * do-timer
  14.         -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> Ай как хочется из цикла вывйти - сил нет!

А у тебя там я нигде выхода из цикла не увидел :)
code forth
  1.  exit     не выходит из цикла!!!!!!!!!!!!!!!!!!

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

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

Зачем тебе N проверок слов через N секунд сделанных? Не проще запускать очередную проверку примо из текущего слова?
code forth
  1. : check_life                
  2.     get_life 1 < if                  
  3.           false to TTT-life
  4.           exit
  5.     then
  6.     true to TTT-life
  7.     "check_life" 1000 do-timer
  8. ;
 
+
-
edit
 

chukcha

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

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

chukcha

разработчик l2j-сервера
Бал, спасибо огромное! Все получилось - из цикла выходит!
code text
  1.  выходим, если уровень меньше 1
  2. : check_life                           
  3.         player@ "CurrentHp" p@ 1 < if                            
  4.               false to TTT-priz
  5.               false to TTT-life
  6.               exit
  7.         else
  8.               True to TTT-life
  9.         then
  10.         " check_life " 1000 do-timer
  11. ;
  12.  
  13.  ждемс чтобы получить приз
  14. : wfp
  15.         0 time_for_award do
  16.          check_life
  17.         -1 +loop
  18. ;


УРА!
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

администратор
★★★★★
Ну так делай проверку на то, что он живой :)
code forth
  1. true value award-period
  2. "false to award-period" 60000 do-timer
  3.  ...
  4. : award-check  ( -- )
  5.     award-period not if exit then
  6.     player@ "Dead" p? if exit then
  7.     100000 57 items_add
  8. ;
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru