Мод: Новые вещи в старом мире.
#1 Гость_Scull_*
Отправлено 25 Июнь 2005 - 06:07
#2
Отправлено 25 Июнь 2005 - 12:57
#3 Гость_Scull_*
Отправлено 25 Июнь 2005 - 14:23
1. Перемещаюсь в помеченное место и заново его помечаю.
2. Помечаю место, где нахожусь и остаюсь на месте.
А можно заставить игру думать, что ближайший храм находиться в помеченном месте (через скрипт)?
#4
Отправлено 25 Июнь 2005 - 16:15
Метку поставить можно, но будет ли она ближайшей... хороший вопрос... если ты конечно готов потереть все другие метки - это даст гарантию я так думаю
#5 Гость_Scull_*
Отправлено 25 Июнь 2005 - 20:03
2 Infernal knight
На счёт меток: попробую, когда будет много свободного времени
#6
Отправлено 25 Июнь 2005 - 23:26
В Морке есть специальная функция которая может телепортировать перса в ЛЮБУЮ клетку в любую точку с координатами X,Y,Z...
Получить координаты месторасположения перса труда не составляет - если память не изменяет что-то вроде GetX, GetY, GetZ... (посмотри скриптинг для dummies) другое дело, что определить в какой клетке находится перс - это фсе... помнится есть в Морке функция Находится ЛИ перс в Такой-то локации, но в Морке этих локаций - Море! Так что если ты не хочешь писать скрипт длинной в несколько тысяч строк - самое простое ограничиться ключевыми локациями, если тебе такие нужны... ну сделаешь проверочку на десяток-два локаций и все будет пахать.
P.S. Правда есть там вроде один паршивый глюк 0:-) Из-за которого локация не прорисовыввается, если телепортируемый перс ранее в ней не находился... В смысле если ты был в локации удаленной от этой на 10 клеток то ты можешь увидеть черный экран... пока не произойдет переход между локациями... правда его может исправили в Бладмуне... или патче каком, но в оригинальной Морке и кажись в Трибе баг был на месте
#7 Гость_Scull_*
Отправлено 26 Июнь 2005 - 11:43
А в какой локации находится перс мне знать не надо Просто использовать предмет можно будет только во внешнем мире, а для внешнего мира надо знать только X,Y,Z.
Т.е. я хочу, чтобы было так:
1. первое использование - запоминаем координаты игрока в память (1pos)
2. второе использование - запоминаем координаты игрока в память (2pos) и
переносим его в предыдущие (1pos)
1. и 2. управляются неким счётчиком (use).
#8
Отправлено 27 Июнь 2005 - 10:32
Ты хочешь создать некий артефакт, который телепортирует PC из точки А в точку Б (ранее сохраненную) и при следующем использовании артефакта возвращает его в точку А
...
; определяем текущее местоположение PC
Set Xcurr to GetPos, X
Set Ycurr to GetPos, Y
Set Zcurr to GetPos, Z
; телепортируем PC в "точку возврата"
SetPos X Xprev
SetPos Y Yprev
SetPos Z Zprev
; координаты PC до телепортации
; становятся координатами "точки возврата"
Set Xprev to Xcurr
Set Yprev to Ycurr
Set Zprev to Zcurr
...
Для безупречной работы не хватает:
1) проверки существования "точки возврата"
2) определения нахождения PC (локация/"Внешний мир")
Надеюсь справишься, удачи...
PS А идея мне понравилась
Это сообщение отредактировано Dimonix - 27 июня 2005 | 11:34
#9 Гость_Scull_*
Отправлено 27 Июнь 2005 - 13:57
Begin travel_script
short status
short button
short OnPCEquip
short 1px
short 1py
short 1pz
if ( MenuMode == 1 )
return
endif
if ( OnPCEquip == 1 )
Set Status to 10
Set 1px to GetPos, X
Set 1py to GetPos, Y
Set 1pz to GetPos, Z
Set OnPCEquip to 0
Endif
If ( status == 10 ) ; меню
MessageBox "Телепортируй меня в ", "1", "0", "cancel"
Set Status to 20
Elseif ( status == 20 )
Set button to GetButtonPressed
If ( button == -1 )
Return
Elseif ( button == 0 ) ; 1
Player -> Position 1px, 1py, 1pz, 0
Elseif ( button == 1 ) ; 2
Player -> Position 0, 0, 0, 0
Elseif ( button >= 2 ) ; cancel
Set status to 0
Endif
Endif
End
А теперь вопрос, почему меня телепортируют в одно и тоже место (0,0,0) не зависимо от выбора кнопки?
#10
Отправлено 27 Июнь 2005 - 14:22
1. Лучше использовать разные переменные для запоминания текущей позиции и телепортации. Иначе ты телепортируешься в ту же точку, где артефакт заюзал, т.е. останешься на месте.
2. Кусок
QUOTE |
Set Status to 20 Elseif ( status == 20 ) Set button to GetButtonPressed If ( button == -1 ) |
Лучше сделать так
QUOTE |
Set Status to 20 Elseif ( status == 20 ) Set button to GetButtonPressed endif If ( button == -1 ) |
А телепортирует тебя в 0 всегда можт только по одной причине - не срабатывает ГетПоз. Посмотри внимательно эту ф-цию в указанном ранее мануале. Возможнор, что она работает некорректно или в чистой Морре вовсе не реализована...
#11
Отправлено 27 Июнь 2005 - 15:40
2) GetPos работает как буся - я ее юзал, но если мне память не изменяет она не short, а float...
3) мне не нравится конструкция, где ты переменной button присваиваешь GetButtonPressed - не уверен, что так можно делать... Но это возможно и правильно...
4) посмотри работает ли процедура Position...
5) Посмотри в Helpe к TES CS пример по работе с диалоговым окном, а именно с тем какой код когда возвращается и как они его обрабатывают
#12 Гость_Scull_*
Отправлено 27 Июнь 2005 - 18:23
1. при вводе строки "Player -> Position 0,0,0,0" -оказываюсь в районе Эшлендера
при вводе строки "Player -> Position 99999,99999,0,0" -оказываюсь в районе Грейзленда
в обоих случаях находился в Балморе...
2. "GetPos работает как буся..." - не понял
3. Эту конструкцию полностью скопировал из "указанного ранее мануала"
4. Работает
5.Посмотрел, всё тоже самое.
2 All
Как проверить работает ли GetPos?
Почему когда нажимаю кнопки, ничего не происходит:
if ( MenuMode == 1 )
Return
endif
if (OnPcEquip == 1 )
Set use to 1
Set OnPCEquip to 0
endif
if ( use == 1 )
MessageBox "What you want to do?","Save Pos 1","Save Pos 2","Teleport to 1","Teleport to 2"
Set use to 2
elseif ( use == 2 )
Set button to GetButtonPressed
if ( button == -1 )
Return
elseif ( button == 0 )
Set 1px to GetPos, X
Set 1py to GetPos, Y
Set 1pz to GetPos, Z
MessageBox "Pos 1 saved"
elseif ( button == 1 )
Set 2px to GetPos, X
Set 2py to GetPos, Y
Set 2pz to GetPos, Z
MessageBox "Pos 2 saved"
elseif ( button == 2 )
Player -> Position 1px, 1py, 1pz, 0
MessageBox "Teleported to 1"
elseif ( button == 3 )
Player -> Position 2px, 2py, 2pz, 0
MessageBox "Teleported to 2"
endif
endif
Set use to 0
#13
Отправлено 27 Июнь 2005 - 20:27
2) Я проверял - все работает... я использовал эти команды в своих скриптовых функциях.
Вот этот кусочек...
if ( use == 1 )
MessageBox "What you want to do?","Save Pos 1","Save Pos 2","Teleport to 1","Teleport to 2"
Set use to 2
elseif ( use == 2 )
Set button to GetButtonPressed
Ты сам-то понял, что написал? Он работать не будет... Потому что ты сначала присваиваешь значение 1 и проверяешь его - все ОК, но значение 2 оно уже не проверяет... почему? потому что оно у тебя стоит в ТОМ же IF, дальше ты проверяешь кнопки, но откуда ж там взяться значению если ты не присвоил переменной button GetButtonPressed? А в конце ты вообще берешь и понаглому обнуляешь переменную use...
Как я понял тебе вообще не надо присваивать значение равное 2 - нахрена?
Пиши так:
if ( use == 1 )
MessageBox "What you want to do?","Save Pos 1","Save Pos 2","Teleport to 1","Teleport to 2"
Set button to GetButtonPressed
А дальше пиши свою проверку на кнопочки
#14
Отправлено 28 Июнь 2005 - 07:25
ЗЫ Виноват, пропустил вот это
QUOTE |
в конце ты вообще берешь и понаглому обнуляешь переменную use... |
Тады да, работать не будет...
2 Scull
Зря пренебрегаешь моим советом - делай ИФ как можно меньшей длины - существует ограничение на кол-во строк, а именно 127, включая ИФ и ЭНДИФ...
Это сообщение отредактировано Zmey Artem - 28 июня 2005 | 08:27
#15 Гость_Scull_*
Отправлено 28 Июнь 2005 - 11:27
2 Infernsl knight
2. Приведи пример...
2 Zmei Artem
Я не пренебрегаю им. Тем более, что конструкций if и elseif у меня не так много.
2 All
Теперь с меню всё работает, но остаётся вопрос: как проверить работу GetPos, (axis).
Строки:
float 1px
Set 1px to GetPos, X - не работает (как был 1px=0, так и остаётся... )
Есть что-нибудь аналогичное GetPos ?
PS Подскажите, как проверять свой скрипт не выходя из Морра,а то эти постоянные загрузки просто убивают
Это сообщение отредактировано Scull - 28 июня 2005 | 12:28
#16
Отправлено 28 Июнь 2005 - 11:40
Поставь его после каждого MessageBox'a
...
MessageBox "Pos 1 saved"
Set use to 0
...
MessageBox "Pos 2 saved"
Set use to 0
...
MessageBox "Teleported to 1"
Set use to 0
...
MessageBox "Teleported to 2"
Set use to 0
...
#17
Отправлено 28 Июнь 2005 - 11:48
Проверить ГетПоз можно примерно так:
set 1px to 0
Set 1px to GetPos, X
if(1px == 0)
MessageBox "GetPos returned 0", "Ok"
endif
PS Попробуй player->GetPos, X
#18
Отправлено 04 Июль 2005 - 08:52
С GetPos все в порядке, проблемы с "Player -> Position x,y,z,angle".
Если снимать координаты GetPos, то телепортироваться нужно, используя функцию SetPos.
...
; определяем текущее местоположение PC
Set X0 to Player -> GetPos, X
Set Y0 to Player -> GetPos, Y
Set Z0 to Player -> GetPos, Z
...
; телепортируем PC в "точку возврата"
Player -> SetPos X X0
Player -> SetPos Y Y0
Player -> SetPos Z Z0
...
Похожие темы
Название темы | Форум | Автор | Статистика | Последнее сообщение | |
---|---|---|---|---|---|
Фаллаут на старом компе |
У разбитого Хайвеймена | Murzik |
|
|
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных