1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Помощь в освoении Mapster32 и скриптов EDuke32, а также других его редакторов

Тема в разделе "Мастерская", создана пользователем LipSheZ, 27 дек 2007.

?

Играя в Duke Nukem, пробовали ли вы когда-нибудь редактировать его con-файлы?

  1. Да, конечно!

    50,0%
  2. Было несколько раз, но я в них ничего не понял(а), там всё так сложно...

    20,6%
  3. Нет, даже и не думал(а) об этом никогда.

    29,4%
  1. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Едрёна копоть! :victory:Ну нихре..а себе, ну девелоперы дают! Ёжкин мотор, такие сочные эвэнты добавили, ай, молодцы, парни! Правильно один мой знакомый сказал: "XXI век - эпоха расцвета EDuke32". :yahoo::yahoo::yahoo:
     
  2. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    ыыЫ))))хорошо сказал...золотые слова:good:
    Посмотри плиз мой код...чего же я всетаки недописываю!
    кстати переменные у меня лежат в def.con...без них ничего работать не будет...ну я думаю, ты их пропишешь если что:)
     
  3. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Лучше если ты его присобачешь к посту.
     
  4. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Код:
    // **************
    // BLOODTC SCRIPTS
    // **************
    
    gamevar   x 0 0
    gamevar   y 0 0
    gamevar  tmp 0 0
    gamevar num 0 0
    gamevar col 0 0
    gamevar shade 0 0
    gamevar pal 0 0
    gamevar hudtype 0 0
    gamevar xweapon 0 0
    gamevar yweapon 0 0
    gamevar tilenumweapon 0 0
    gamevar orientationweapon 0 0
    gamevar palweapon 0 0
    
    define PITCHFORK 8342
    
    // *******************
    // END BLOODTC SCRIPTS
    // *******************
    
    А если хочешь,чтобы и HUD нормально запустился, скачай арты:) весят 6мб...я уже несколько раз опубликовывал ссылку...хотя последний арт я все-же модернизировал:) архив в инете устарел
     
  5. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Ладно, M, сейчас не до хьюда... сейчас посмотрю.
     
    M210 нравится это.
  6. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    LipSheZ, ну что, надумал че-нить?:rolleyes:
     
  7. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Сегодня открыл секрет 6 ключей!!! правда вроде как доработать надо, но все равно выставляю на обозрение:)
    В game.con нужно найти APLAYER и прописать
    Код:
    actor APLAYER MAXPLAYERHEALTH PSTAND 0 0
    ifvarg CUSTOMKEYCARDPOS 0 { setplayer[THISACTOR].weapon_pos 10 setplayer[THISACTOR].kickback_pic 0 subvar CUSTOMKEYCARDPOS 1 }
    
    а вот сам код ключей:)
    Код:
    eventloadactor ACCESSCARD2
    setactor[THISACTOR].xrepeat 28
    setactor[THISACTOR].yrepeat 28
    enda
    
    
    useractor notenemy ACCESSCARD2
    
        ifp pshrunk nullop
        else
          ifp palive
            ifpdistl RETRIEVEDISTANCE
              ifcount 6
                ifcanseetarget
    		{ 
                ifspritepal 12 { ifvarand ACCESSKEY2 1 { break } else addvar ACCESSKEY2 1 } else
                ifspritepal 11 { ifvarand ACCESSKEY2 2 { break } else addvar ACCESSKEY2 2 } else
                ifspritepal 15 { ifvarand ACCESSKEY2 4 { break } else addvar ACCESSKEY2 4 }
    		globalsound DUKE_GET
                quote 43
    		palfrom 16 0 32
    		killit 
    		}
    
    enda
    
    action LOCKED 0
    action UNLOCKING 0
    action UNLOCKED 1
    
    eventloadactor ACCESSSWITCH3
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
    
    eventloadactor ACCESSSWITCH4
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
    
    state checkcounterpart2
    
    setvar TEMP 0
    whilevarn TEMP 16384
    {
      getactor[TEMP].statnum TEMP4
      ifvarn TEMP4 1024
      {
        getactor[TEMP].picnum TEMP2
        ifvare TEMP2 ACCESSSWITCH3
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 { setactor[TEMP].picnum 5169 }
        }
        ifvare TEMP2 ACCESSSWITCH4
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 { setactor[TEMP].picnum 5171 }
        }
      }
      addvar TEMP 1
    }
     
    ends
    
    state CUSTOMACCESSSWITCH
    
    ifaction 0 { action LOCKED }
    
    ifpdistl 1024 ifhitspace ifaction LOCKED 
    {
    ifspritepal 12 
    {
    ifvarand ACCESSKEY2 1
    {
    setvar CKEYCARDTILE 5316
    setvar CKEYCARDPAL 12
    setvar CUSTOMKEYCARDPOS 21
    action UNLOCKING
    }
    else { quote 133 }
    }
    else
    ifspritepal 11 
    {
    ifvarand ACCESSKEY2 2
    {
    setvar CKEYCARDTILE 5316
    setvar CKEYCARDPAL 11
    setvar CUSTOMKEYCARDPOS 21
    action UNLOCKING
    }
    else { quote 134 }
    }
    ifspritepal 15 
    {
    ifvarand ACCESSKEY2 4
    {
    setvar CKEYCARDTILE 5316
    setvar CKEYCARDPAL 15
    setvar CUSTOMKEYCARDPOS 21
    action UNLOCKING
    }
    else { quote 135 }
    }
    }
    
    ifaction UNLOCKING
    {
    ifvare CUSTOMKEYCARDPOS 9
    {
    state checkcounterpart2
    ifvare HITAGSAVED 0 { sound SWITCH_ON } else { soundvar HITAGSAVED }
    operateactivators LOTAGSAVED APLAYER
    operaterespawns LOTAGSAVED
    operatemasterswitches LOTAGSAVED
    action UNLOCKED
    ifspritepal 12 subvar ACCESSKEY2 1 else
    ifspritepal 11 subvar ACCESSKEY2 2 else
    ifspritepal 15 subvar ACCESSKEY2 4
    }
    }
    ends
    
    useractor notenemy ACCESSSWITCH3
    state CUSTOMACCESSSWITCH
    enda
    
    useractor notenemy ACCESSSWITCH4
    state CUSTOMACCESSSWITCH
    enda
    
    
    правда не знаю, может быть чтото лишнее:) но думаю разбиремся еще

    добавлено через 1 минуту
    Правда код работает только с новыми спрайтами...вот думаю как бы этот код связать со старыми картами и замками?
     
    Последнее редактирование: 22 июн 2008
    LipSheZ нравится это.
  8. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    А попробуй вместо ACCESSCARD2 везде писать ACCESSCARD.

    P.S. я всё никак не могу разобраться, что такое eventloadactor...
     
  9. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    неа))) так не работает:)
    карточка берется, но дверь не открывает((
    посмотри на код
    Код:
    eventloadactor ACCESSCARD2
    setactor[THISACTOR].xrepeat 28
    setactor[THISACTOR].yrepeat 28
    enda
    
    тут пишутся размеры спрайта...а так, похоже что это операции при загрузки актора

    добавлено через 18 часов 16 минут
    Вот че про него пишут
    http://wiki.eduke32.com/wiki/Eventloadactor
     
    Последнее редактирование: 23 июн 2008
  10. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    LipSheZ, какой переменной поднимается камера в игре?
    .posz не работает!
    еще я заметил, в Blood'е игрок "толще", т.е. там где он не мог пройти в какую-нить щель, дюк там спокойно пролазиет!(( можно ли вообще это исправить?
     
  11. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Дело в том, что .posz - это не переменная, а объект переменной, может быть либо источником, либо target'ом. Объекты переменных в EDuke32 называются Structure Members (или структурные элементы по-русски). Наверное, ты брал слишком малую разницу между дэфолтовой позицией камеры головы и изменённой в событии EVENT_DISPLAYROOMS. Открой редактор, поэкспериментируй с горизонтальными плоскостями, поподнимай и поопускай, при этом замеряя значения высоты Z, и ты увидишь, что высота Z измеряется не в десятках и не в сотнях единиц даже, а тысячами. Другими словами, если ты изменишь Z на 100 единиц верх/вниз, то разницу будет очень трудно заметить (разве что под микроскопом :D). Чтобы изменение позиции камеры было более ощутимым, надо брать большие значения, например:
    Код:
     
    onevent EVENT_DISPLAYROOMS
    addvar cameraz -3000 // камера выше
    endevent
    
    или
    Код:
     
    onevent EVENT_DISPLAYROOMS
    addvar cameraz 3000 // камера ниже, где-то в районе подмышек :) 
    endevent
    
    В игре включи прицел, выстрели в стену - забавно получится.

    Там не то чтобы лишнего - самого основного нет. Как будто ты наобум вырезал часть нужного нам кода из другого чьего-то дополнения. Мне удалось сделать так, чтобы карточки (#60, дэфолтные) с pal'ами 0, 21, 23, 11, 12, 15 можно было применить к замкам, но к не тем, которые в игре под номерами 130 и 170, а к другими, я вложил картинки в прикреплённый tiles000.art. Нужные замки под номерами 16 и 18.

    Итак, сначала определяем переменные и picnum'ы:

    Код:
     
    definequote 1000 ACCESS CARD REQUIRED!
     
    define ACCESSSWITCH3 16
    define ACCESSSWITCH4 18
     
    gamevar HITAGSAVED 0 0
    gamevar LOTAGSAVED 0 0
    gamevar colorbits 0 0
    gamevar TEMP 0 0
    gamevar TEMP2 0 0
    gamevar TEMP3 0 0
    gamevar TEMP4 0 0
    gamevar CUSTOMKEYCARDPOS 0 0
    gamevar CKEYCARDTILE 0 0
    gamevar CKEYCARDPAL 0 0
    


    Теперь открываешь файл GAME.CON, удаляешь целеком actor ACCESSCARD ... ends. На это место вставляешь:
    Код:
     
    // здесь определяем актор и биты для каждого из шести цветов карточки... 
    useractor notenemy ACCESSCARD
    fall
      ifmove RESPAWN_ACTOR_FLAG
        state respawnit
      else
        ifp pshrunk nullop
        else
          ifp palive
            ifpdistl RETRIEVEDISTANCE
              ifcount 6
                ifcanseetarget
          { 
            ifspritepal 11 
            { 
              ifvarand colorbits 1 break 
              else addvar colorbits 1
            } 
            else ifspritepal 12 
            { 
              ifvarand colorbits 2 break 
              else addvar colorbits 2
            } 
            else ifspritepal 15 
            { 
              ifvarand colorbits 4 break 
              else addvar colorbits 4
            }
            else ifspritepal 21 
            { 
              ifvarand colorbits 8 break 
              else addvar colorbits 8
            }
            else ifspritepal 23 
            { 
              ifvarand colorbits 16 break 
              else addvar colorbits 16
            }
            else ifspritepal 0 
            { 
              ifvarand colorbits 32 break 
              else addvar colorbits 32
            }
            globalsound DUKE_GET
            quote 43
            palfrom 16 0 32
            killit 
          }
    enda
    
    Дальше запоминаем тэги "пропускателей", заодно определяем action'ы:
    Код:
     
    eventloadactor ACCESSSWITCH
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
    eventloadactor ACCESSSWITCH2
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
    eventloadactor ACCESSSWITCH3
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
    eventloadactor ACCESSSWITCH4
    {
        getactor[THISACTOR].hitag HITAGSAVED
        getactor[THISACTOR].lotag LOTAGSAVED
        setactor[THISACTOR].hitag 0
        setactor[THISACTOR].lotag 0
    }
    enda
     
    action LOCKED 0
    action UNLOCKING 0
    action UNLOCKED 1
    

    Теперь фильтрация спрайтов на соответствие picnum'а заранее определённому:
    Код:
     
    state checkcounterpart2
    setvar TEMP 0
    whilevarn TEMP 16384
    {
      getactor[TEMP].statnum TEMP4
      ifvarn TEMP4 1024
      {
        getactor[TEMP].picnum TEMP2
        ifvare TEMP2 ACCESSSWITCH
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 setactor[TEMP].picnum ACCESSSWITCH
        }
        ifvare TEMP2 ACCESSSWITCH2
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 setactor[TEMP].picnum ACCESSSWITCH2
        }
        ifvare TEMP2 ACCESSSWITCH3
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 setactor[TEMP].picnum ACCESSSWITCH3
        }
        ifvare TEMP2 ACCESSSWITCH4
        {
           getactorvar[TEMP].LOTAGSAVED TEMP3
           ifvarvare LOTAGSAVED TEMP3 setactor[TEMP].picnum ACCESSSWITCH4
        }
      }
      addvar TEMP 1
    }
    ends
     
    
    Фильтрация битов:
    Код:
     
    state customaccessswitch
    ifaction 0 action LOCKED
    ifpdistl 1024 ifhitspace ifaction LOCKED 
    {
      ifspritepal 11 
      {
        ifvarand colorbits 1
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 11
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
      else
      ifspritepal 12 
      {
        ifvarand colorbits 2
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 12
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
      else
      ifspritepal 15 
      {
        ifvarand colorbits 4
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 15
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
      else
      ifspritepal 21 
      {
        ifvarand colorbits 8
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 21
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
      ifspritepal 23 
      {
        ifvarand colorbits 16
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 23
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
      ifspritepal 0 
      {
        ifvarand colorbits 32
        {
          setvar CKEYCARDTILE 15
          setvar CKEYCARDPAL 0
          setvar CUSTOMKEYCARDPOS 21
          action UNLOCKING
        }
        else quote 1000
      }
    }
    ifaction UNLOCKING
    {
      ifvare CUSTOMKEYCARDPOS 9
      {
        state checkcounterpart2
        ifvare HITAGSAVED 0 sound SWITCH_ON 
        else soundvar HITAGSAVED
        operateactivators LOTAGSAVED APLAYER
        operaterespawns LOTAGSAVED
        operatemasterswitches LOTAGSAVED
        action UNLOCKED
        ifspritepal 11 subvar colorbits 1 
        else ifspritepal 12 subvar colorbits 2 
        else ifspritepal 15 subvar colorbits 4 
        else ifspritepal 21 subvar colorbits 8 
        else ifspritepal 23 subvar colorbits 16 
        else ifspritepal 0 subvar colorbits 32 
      }
    }
    ends
     
    
    От частного к общему: :)
    Код:
     
    useractor notenemy ACCESSSWITCH
    state customaccessswitch
    enda
    useractor notenemy ACCESSSWITCH2
    state customaccessswitch
    enda
    useractor notenemy ACCESSSWITCH3
    state customaccessswitch
    enda
    useractor notenemy ACCESSSWITCH4
    state customaccessswitch
    enda
     
    
    Желательно ещё сделать фиксированный размер карточки, чтобы не париться с этим в редакторе:
    Код:
     
    onevent EVENT_SPAWN
    ifactor ACCESSCARD
    {
      setactor[THISACTOR].xrepeat 28
      setactor[THISACTOR].yrepeat 28
    }
    endevent
     
    
    Теперь, чтобы видеть какие карточки уже нашли, размещаем на экране иконки соответствующего цвета, заодно скриптуем анимацию руки, подносящей карточку к "пропускателю":
    Код:
     
    onevent EVENT_DISPLAYREST
    switch CUSTOMKEYCARDPOS
     case 0:
      break
     case 1:
     rotatesprite 130 190 65000 0 2565 -30 0 0 0 0 xdim ydim
      break
     case 2:
     rotatesprite 130 185 65000 0 2565 -30 0 0 0 0 xdim ydim
      break
     case 3:
     rotatesprite 130 180 65000 0 2565 -30 0 0 0 0 xdim ydim
      break
     case 4:
     rotatesprite 130 175 65000 0 2565 -30 0 0 0 0 xdim ydim
      break
     case 5:
     rotatesprite 130 170 65000 0 2564 -30 0 0 0 0 xdim ydim
      break
     case 6:
     rotatesprite 130 165 65000 0 2564 -30 0 0 0 0 xdim ydim
      break
     case 7:
     rotatesprite 130 160 65000 0 2564 -30 0 0 0 0 xdim ydim
      break
     case 8:
     rotatesprite 130 155 65000 0 2564 -30 0 0 0 0 xdim ydim
      break
     case 9:
     rotatesprite 130 150 65000 0 2564 -30 0 0 0 0 xdim ydim
      break
     case 10:
     rotatesprite 130 150 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 11:
     case 12:
     rotatesprite 130 155 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 13:
     rotatesprite 130 160 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 14:
     rotatesprite 130 165 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 15:
     rotatesprite 130 170 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 16:
     rotatesprite 130 175 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 17:
     rotatesprite 130 180 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 18:
     rotatesprite 130 185 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 19:
     rotatesprite 130 190 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 20:
     rotatesprite 130 195 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
     case 21:
     rotatesprite 130 200 65000 0 15 -30 CKEYCARDPAL 0 0 0 xdim ydim
      break
    endswitch
    ifvarand colorbits 1 rotatesprite 10 4 15000 0 ACCESSCARD -30 11 0 0 0 xdim ydim
    ifvarand colorbits 2 rotatesprite 10 8 15000 0 ACCESSCARD -30 12 0 0 0 xdim ydim
    ifvarand colorbits 4 rotatesprite 10 12 15000 0 ACCESSCARD -30 15 0 0 0 xdim ydim
    ifvarand colorbits 8 rotatesprite 10 16 15000 0 ACCESSCARD -30 21 0 0 0 xdim ydim
    ifvarand colorbits 16 rotatesprite 10 20 15000 0 ACCESSCARD -30 23 0 0 0 xdim ydim
    ifvarand colorbits 32 rotatesprite 10 24 15000 0 ACCESSCARD -30 0 0 0 0 xdim ydim
    endevent
    
    Ну, и в коде APLAYER'а обязательно впиши то, что предлагал...

    Эх, разобраться бы с or-/and-/xor- var'ами, и этот код можно было бы упростить. И позицию иконок на экране задать правильнее. Попробуй этот код, потом отпишись...
     

    Вложения:

    • tiles000.zip
      Размер файла:
      469,7 КБ
      Просмотров:
      38
    Последнее редактирование: 2 июл 2008
    M210 нравится это.
  12. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Ок, код то я попробую...хотя и тот тоже работал нормально:)
    Дело немного в другом...в бладе нет замков!!! появилась новая мысль...хотя этот код тоже должен помочь. В общем идея такая...делать не замок а activator, который встраивается в сектор двери и проверяет наличие ключа....если ключ есть, дверь открывается, если нет...пишет сообщение о необходимости ключа...
    вот только проблемка есть...как у игрока сделать проверку? проверку о нахождении самого игрока...толи по радиус-дистанции, толи по соседним секторам(где находится игрок) сможешь разобраться?
    и еще
    Код:
    actor MOONKEY
    fall cstat 128 sizeat 32 32
        ifmove RESPAWN_ACTOR_FLAG state respawnit
        else ifp pshrunk { } else ifp palive ifcount 6 ifpdistl RETRIEVEDISTANCE ifcanseetarget
        {
            getplayer[THISACTOR].got_access tmp
            orvar tmp 32
            setplayer[THISACTOR].got_access tmp
    	quote 136
            ifspawnedby MOONKEY state getcode
            else state quikget
        }
    enda
    
    вот один из ключей...у меня их 6, все ключи подбираются...от 60го спрайта я отказался и соответственно он pal'ов тоже...
    [THISACTOR].got_access 32 - это 6й ключ...
    остальные tmp'ы имеют значения 1 2 4 8 16
    а activator нужно будет проверять на ключ с помощью lotag'а, например lotag 100 будет проверять ключ - череп, 101 - ключ глаз и т.д.
     
  13. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Секундочку! Ты сам сказал: "правда вроде как доработать надо", "вот думаю как бы этот код связать со старыми картами и замками?". Я попытался сделать то, что ты сам просил.

    Да это очень просто сделать:
    1. "Проверятель" делаешь невидимым. Прозрачность задаешь cstat'ом.
    2. Натаскиваешь его прям на дверь. Пусть висит себе, всё-равно никто его не увидит!
    3. Отключаешь анимацию руки с карточкой.
    4. Увеличиваешь радиус в этой строке: ifpdistl 1024 ifhitspace ifaction LOCKED...
    Я же говорю, что с orvar'ами не дружу. Ну не понимаю я что это такое. Если объяснишь, я поковыряю код Лунного Ключа. А так я просто не знаю с чем имею дело... Or - это "или". Это, насколько я представляю, вычленение битов из числа (степеней двойки) и побитное сопоставление чего-то с чем-то, так? Так какое ж оно, сопоставление? Что с чем сравнивать нужно? :banghead:

    добавлено через 11 минут
    Вот чем, например, cstat от сstator'а отличается? Там тоже OR зачем-то. Так зачем?

    P.S. Новый апдейт EDuke32 - ловите! Eduke32_snapshot_20080701.zip :yahoo:
     
    Последнее редактирование: 2 июл 2008
  14. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    ух ты)))) июльский))))
    а вот хз...вроде видет cstator применяется в action'ах
    Код:
     The Lezing (20:40:26 2/07/2008)
    вычленение - and...
    
     The Lezing (20:40:36 2/07/2008)
    переключение - xor
    
     The Lezing (20:40:53 2/07/2008)
    установка - or
    
     The Lezing (20:41:10 2/07/2008)
    выключение - nand (not and)
    
    or - это видать степень бита чтоли,я хз что это:)
    orvar 32
    это 2^5

    добавлено через 3 минуты
    LipSheZ, напиши плиз что есть LOCKED и UNLOCKED
    пишет что неопределена

    добавлено через 6 минут
    Так, LOCKED и UNLOCKED сам нашел что такое:)
    Теперь проблема в другом...сектор все равно не закрывается...т.е. ставишь этот актор в сектор двери, а она все равно в любом случае открывается...
    как заблокировать сектор?))
     
    Последнее редактирование: 2 июл 2008
  15. New Beast

    New Beast

    Регистрация:
    7 янв 2005
    Сообщения:
    21
    Когда нам нужно манипулировать не целым числом, а битами, из которых оно составлено, следует прибегать к булевой логике, представленной в конах в виде операций типа orvar, andvar, xorvar. В качестве первого операнда, как и в арифметике, выступает некая переменная. Второй операнд - число, являющейся суммой значений требуемых битов, причём or устанавливает выбранные биты в единицу, and вычленяет их (остальные - обнуляются), xor переключает с 0 на 1 и с 1 на 0. Будем нумеровать биты от #0 до #31, с численными значениями от 2^0 до 2^31, так как все переменные - 32-разрядные. Соответственно orvar a 1 выставит бит #0, а orvar a 16 выставит бит #4. Просуммировав нужные значения, одной командой можно установить любое число битов в переменной. А команда ifvarand выбирает из переменной указанные биты, и, если хотя бы один из них установлен, выполняет код внутри скобок.
     
    LipSheZ и M210 нравится это.
  16. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Если ты про "пропускатель", его надо ставить не в сектор двери. В соседнем секторе рядом со стеной двери повесь несколько "пропускателей":

    [​IMG]


    [​IMG]
     

    Вложения:

    • M210Keys.map.rar
      Размер файла:
      373 байт
      Просмотров:
      41
    Последнее редактирование: 2 июл 2008
    M210 нравится это.
  17. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Спасиб)))) можно и так, хотя я хотел сделать спрайт как ActivatorLocked, чтобы одним спрайтом все было, а не тыкать вокруг двери кучу спрайтов:)

    добавлено через 2 часа 32 минуты
    LipSheZ, проблему решил немного другим способом:
    Код:
    actor KEYACTIVATOR
    cstat 32768
    ifaction 0 { espawn ACTIVATORLOCKED  setactor[RETURN].lotag LOTAGSAVED action ANULLACTION }
    enda
    
    а в ключах написана такая вещь:
    Код:
    operateactivators 100 1 // Ключ-череп
    
    все ключи имеют лотаги от 100-105, а на карте ставишь актор, который расставляет под собой локеры двери и присваивает им лотаг, такой же как и у него самого...т.е. если нужно сделать дверь с черепом, ставишь KEYACTIVATOR и присваиваешь ему 100й лотаг, в игре он блокирует ACTIVATORLOCKERом с лотагом 100, а когда берешь ключ, operateactivation отпирает локер и дверь можно открыть=)) только пока не знаю, куда вписать код квоты, которая просит ключ((( quote не куда деть
     
    Последнее редактирование: 3 июл 2008
  18. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    EDuke32_snapshot_20080702.zip!:yahoo: Что-то в последнее время апдейты выходят чуть ли не каждый день! :D
     
    M210 нравится это.
  19. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Афигеть)))) а пишут, че там нового то?
     
  20. LipSheZ Пахан

    LipSheZ

    Регистрация:
    1 окт 2007
    Сообщения:
    908
    Прикол в том, что не пишут. Мы можем лишь догадываться об изменениях. Иногда всё-таки сообщают о глобальных изменениях! Но это они редко...
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление