#1 19-07-2011 21:00

DelFast
Registered: 19-07-2011
Posts: 10

Циклы

Доброго времени суток.
Я в кодинге новичок, но усваиваю быстро (знаю PHP, c#, pawno).
Надо телепортировать игрока из места в место, не по нажатию кнопки.
Есть 20 координат (x,y,z), и по всем этим координатам меня нужно ТПшить.
После этого - цикл повторялся.
(еще раз повторю, новичок, в других языках есть цикл for, тут как осуществить - не знаю)

Цикл что то типа:

00A1: put_actor $PLAYER_ACTOR at 1455.405 750.6191 11.0234 
00A1: put_actor $PLAYER_ACTOR at 1000.6517 640.98744 8.647687
00A1: put_actor $PLAYER_ACTOR at 1132.6357 350.3544 15.653587
00A1: put_actor $PLAYER_ACTOR at 535.63517 653.98534 1.6535
00A1: put_actor $PLAYER_ACTOR at 1150.65537 51.987524 1.523687
................

Offline

#2 19-07-2011 22:04

Jack Daniel's
Registered: 05-07-2011
Posts: 211

Re: Циклы

А почему не по нажатию? Просто при спавне?
Тогда:

{$CLEO}
wait 5000                   //просто ждем 5сек, игра все равно загружается
repeat                     //Основной цикл
wait 0                    //Чтобы не вылетело        
          repeat         //Цикл проверки того, существует ли игрок
             wait 0                                                 
          until Player.Defined($PLAYER_CHAR)            
             00A1: put_actor $PLAYER_ACTOR at 1455.405 750.6191 11.0234 
             wait 3000     //Ожидание 3 сек, чтобы все успело прогрузиться при очередной телепортации, да и чтобы успеть увидеть, куда попал
             00A1: put_actor $PLAYER_ACTOR at 1000.6517 640.98744 8.647687
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 1132.6357 350.3544 15.653587
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 535.63517 653.98534 1.6535
             wait 3000
             00A1: put_actor $PLAYER_ACTOR at 1150.65537 51.987524 1.523687
             wait 3000
until false                //Цикл будет выполняться бесконечно

Ну и можно еще обычными if..then..else. Способов еще много.

Offline

#3 19-07-2011 22:42

DelFast
Registered: 19-07-2011
Posts: 10

Re: Циклы

Ухх..
Спасибо огромное. Суть понял
Ещё.
Как при нажатии кнопки начинался цикл, если нажал паузу и снова нажал кнопку - не начинает сначала, а продолжает дальше

Offline

#4 20-07-2011 06:45

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Циклы

DelFast wrote:

Как при нажатии кнопки начинался цикл, если нажал паузу и снова нажал кнопку - не начинает сначала, а продолжает дальше

С середины цикла? Для этого нужно выполнять проверки после каждого действия... Например так:

(действие)
gosub @check
(действие)
gosub @check
(действие)
...

:check
if
  8AB0: not key_pressed (номер)
then
  return
end
repeat
  wait 100
until 0AB0: key_pressed (номер)

оффтоп:
Знаешь php? Где учился?

Offline

#5 20-07-2011 13:30

DelFast
Registered: 19-07-2011
Posts: 10

Re: Циклы

Можно полный код?

p.s. cамоучка)

Offline

#6 21-07-2011 03:54

DelFast
Registered: 19-07-2011
Posts: 10

Re: Циклы

Написал.
Не могу сделать одно:
Чтобы цикл продолжался до того момента, пока не будет нажата кнопка.
Делал по разному, не получается.

{$VERSION 3.1.0027}
{$CLEO .cs}

0000: NOP

:LOALA 
wait 0 ms

if
0AB0:   key_pressed 19
jf @LOALA
        

repeat
wait 0 ms
          
    00A1: put_actor $PLAYER_ACTOR at 2229.7996 -2284.3499 13.5469
   
    wait 8000
  
    00A1: put_actor $PLAYER_ACTOR at 2171.4026 -2255.0449 13.3036
   
    wait 8000 
  
until 0AB0:  key_pressed 35

jump @LOALA

Last edited by DelFast (22-07-2011 01:25)

Offline

#7 23-07-2011 02:59

DelFast
Registered: 19-07-2011
Posts: 10

Re: Циклы

Ребят, помогайте

Offline

#8 23-07-2011 09:27

Jack Daniel's
Registered: 05-07-2011
Posts: 211

Re: Циклы

{$CLEO .cs}
wait 4000

:1
repeat        
wait 1    //Проверка существования игрока
until Player.Defined($PLAYER_CHAR)

      repeat
        wait 1     //Проверка нажатия "1"
      until 0AB0:   key_pressed 0x31

        repeat
        wait 0
          
      00A1: put_actor $PLAYER_ACTOR at 2229.7996 -2284.3499 13.5469  //Телепортация по этим двум координатам пока зажата кнопка "1"
   
        wait 3000                    
  
      00A1: put_actor $PLAYER_ACTOR at 2171.4026 -2255.0449 13.3036
   
        wait 3000 
  
      until 8AB0:  key_pressed 31   //Проверка на то, отпущена ли кнопка "1", если отпущена, то выход из цикла

jump @1

P.S число 8 в начале опкода 0AB0 означает обратное действие опкода. Это работает и на других опкодах проверки чего-либо.

Last edited by Jack Daniel's (23-07-2011 09:32)

Offline

#9 23-07-2011 13:02

DelFast
Registered: 19-07-2011
Posts: 10

Re: Циклы

Я имел ввиду не то..
Нажал кнопку - цикл начался, нажал кнопку - цикл закончился.

Offline

#10 24-07-2011 09:59

Jack Daniel's
Registered: 05-07-2011
Posts: 211

Re: Циклы

DelFast wrote:

Я имел ввиду не то..
Нажал кнопку - цикл начался, нажал кнопку - цикл закончился.

Короче, после каждого действия в цикле надо делать проверку на нажатие.

Хотя, лучше сделать на зажатие, либо на ожидание нажатия, перед выполнением каждого действия, все из-за того, что проверка на нажатие между телепортациями будет проходить слишком быстро, так что чтобы остановить цикл, тебе придется жать помногу раз на кнопку.

Last edited by Jack Daniel's (24-07-2011 10:30)

Offline

#11 24-07-2011 15:01

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Циклы

Лучше замени клавишу пауза, например, на клавишу мыши.

{$CLEO .cs}
0000:
while true
    wait 0
    if
        not Player.Defined($PLAYER_CHAR)
    then
        continue
    end
    if
        8AB0:   not key_pressed 1
    then
        0@ = 0
    else
        if
            not 0@ == 1
        then
            0@ = 1
            if
                1@ == 0
            then
                1@ = 1
                32@ = 0
                00A1: put_actor $PLAYER_ACTOR at 2229.7996 -2284.3499 13.5469
            else
                1@ = 0
            end
        end
    end
    if
        not 1@ == 0
    then
        if and
            32@ >= 8000
            32@ < 16000
        then
            if
                not 1@ == 2
            then
                1@ = 2
                00A1: put_actor $PLAYER_ACTOR at 2171.4026 -2255.0449 13.3036
            end
        end
        if
            32@ >= 16000
        then
            if
                not 1@ == 1
            then
                32@ = 0
                1@ = 1
                00A1: put_actor $PLAYER_ACTOR at 2229.7996 -2284.3499 13.5469
            end
        end
    end
end

I know everything and nothing...

Offline

Board footer

Powered by FluxBB