Перейти к содержанию

Управление объектами без уникальных ID.


Рекомендуемые сообщения

Все манипуляции с Объектами можно делать либо из подключенных к ним локальных скриптов или по уникальным ID, что бывает не всегда возможным.

 

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

Рассмотрим управление "Лифтом" ( вверх/вниз ) с помощью "Кнопок".

 

Создадим глобальные переменные:

--------------------------

;Short nPlatformStat ;GlobalVariable

;Float fPlatformPosX

;Float fPlatformPosY

;Float fPlatformPosZ

;Float fPlatformDelta ;Default = 100 ;X,Y (+/-) fPlatformDelta

;Short nPlatformSpeed ;Default = 5 ;2,5,10

 

Напишем следующие скрипты:

Begin ButtonPosZ_Script

 

Short nVar

 

If ( OnActivate == 0 )

Return

EndIf

 

Set nPlatformStat to 1

Set fPlatformPosX to GetPos, X

Set fPlatformPosY to GetPos, Y

Set nVar to GetItemCount "Gold_001"

Set fPlatformPosZ to GetItemCount "Gold_005"

Set fPlatformPosZ to fPlatformPosZ - nVar

 

End

Begin PlatformPosZ_Script

 

Short nStat

 

Float fVar

Float fPosXMin

Float fPosXMax

Float fPosYMin

Float fPosYMax

 

If ( MenuMode == 1 )

Return

EndIf

 

If ( nPlatformStat == 1 )

 

Set fVar to GetPos, X

Set fPosXMin to fVar - fPlatformDelta

Set fPosXMax to fVar + fPlatformDelta

Set fVar to GetPos, Y

Set fPosYMin to fVar - fPlatformDelta

Set fPosYMax to fVar + fPlatformDelta

 

If ( fPosXMin > fPlatformPosX )

ElseIf ( fPosXMax

ElseIf ( fPosYMin > fPlatformPosX )

ElseIf ( fPosYMax

Else

 

Set nPlatformStat to 0

Set fVar to GetPos, Z

If ( fVar

Set nStat to 1

Else

Set nStat to 2

EndIf

EndIf

EndIf

 

If ( nStat == 0 )

Return

EndIf

 

Set fVar to GetPos, Z

If ( nStat == 1 )

If ( fVar

If ( nPlatformSpeed

MoveWorld Z 2

ElseIf ( nPlatformSpeed

MoveWorld Z 5

Else

MoveWorld Z 10

EndIf

Else

Set nStat to 0

EndIf

Else

 

If ( fVar > fPlatformPosZ )

If ( nPlatformSpeed

MoveWorld Z -2

ElseIf ( nPlatformSpeed

MoveWorld Z -5

Else

MoveWorld Z -10

EndIf

Else

Set nStat to 0

EndIf

EndIf

 

End

Здесь я для "Кнопки" использовал трюк с Контейнером.

В этом случае скрипт получается универсальный, общий для всех "Кнопок".

 

В качестве "Кнопки" можно использовать любой Контейнер в который необходимо положить золото:

"Gold_001" - минус 'Z' или "Gold_005" - плюс 'Z' которое задает абсолютную координату для лифта.

 

Примечание:

Контейнер должен быть 'ЖИВОЙ' и НЕ пополняемый,

и для каждой высоты - свой. (с разным количеством золота)

 

"Лифтом" может быть любой активатор-платформа.

Хотя поднимать можно и другие Объекты (например бутылку :)

 

fPlatformDelta - задает область действия "Кнопки" плюс/минус по 'X' и 'Y'.

При ее активации, рядом стоящий "Лифт" поднимется/опустится на соответствующую высоту.

 

Примечание:

Если рядом с "Кнопкой" поставить два "Лифта", то работать будет только один.

 

Скорость движения "Лифта" задает nPlatformSpeed.

Я заложил три: 2,5,10 но при желании их можно изменить.

 

 

В данном примере можно спокойно обойтись и с уникальными ID, это дело вкуса.

Лично мне так больше нравится...

 

Главное, что этот подход можно применить и к другим не уникальным Объектам...

 

Например: Чародей крыс... каждую крысу не сделаешь уникальной... :)

 

Надеюсь идея кому-нибудь пригодится...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Спасибо!!!!!!!! Я как раз Такой скрипт мутил, только потом с ним лажа такая приключилась....

Все равно спасибо!!!!!

Ссылка на комментарий
Поделиться на другие сайты

Я сделал это по проще, только для понятия принципа...

но если будешь использовать, то могу чуть-чуть усложнить.

 

Если лифт состоит из нескольких частей, то в случае уникальности -

относительная позиция остальных привязывается к координатам ID этой платформы...

а если она не уникальна ?

 

Для этого необходимо в кнопке задать это количество, например четыре:

Set nPlatformStat to 4

 

Для универсальности, это можно задать например количеством "Gold_010".

а для частей платформы:

Set nPlatformStat to nPlatformStat - 1

 

Кстати, в этом случае можно будет одной кнопкой вызывать сразу два соседних лифта.

 

Для каждой части должен быть свой скрипт, учитывающий свою поправку к координате Z.

Но, в таком случае, лучше и для них тоже использовать не активаторы,

а контейнеры с золотом, задающее эту поправку, и общий скрипт...

 

P.S.

Вас не должно беспокоить большое количество используемого золота.

Контейнеры не раскрываются и его никто не увидит и не возьмет. :1anim_ab:

При желании можно использовать хоть вилки/ложки...

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...