|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Как вложить в руки критеру ствол? Поиск и куча документации ничего не дали.
|
Отправлено: 8:22 - 11 Авг., 2006
|
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Wasteland Ghost Спасибо за помощь и не надо комментариев. Меня интересовали скрипты...
|
Отправлено: 11:47 - 11 Авг., 2006
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Очень легко написать
Цитата: Поиск и куча документации ничего не дали.
чтобы за тебя поработали другие. На сайте есть огромный раздел "База данных", на форуме есть ФАК и тема по скриптам. Пользуйся. ЗЫ Всегда пожалуйста :D.
|
Отправлено: 11:53 - 11 Авг., 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Подниму тему. Ситуация: Чузен перед разговором перекладывает оружие и броньку в инвентарь. Сохраняем на них указатели: set_local_var(0, critter_inven_obj(dude_obj, 0)); set_local_var(1, critter_inven_obj(dude_obj, 1)); set_local_var(2, critter_inven_obj(dude_obj, 2)); После разговора нужно из инвентаря взять предметы в руки и одеть броньку. Вопрос: как, зная указатели, вернуть чузену предметы в руки и надеть броньку? (Добавление от 21:19 - 24 Окт., 2006.) Подзреваю, что вот это: wield_obj_critter(ObjectPtr who, ObjectPtr obj) т.е. wield_obj_critter(dude_obj, local_var(0)); wield_obj_critter(dude_obj, local_var(1)); wield_obj_critter(dude_obj, local_var(2)); Но проверить до пятницы нет возможности, так чтоб не изобретать велосипед...
|
Отправлено: 21:08 - 24 Окт., 2006
|
|
Dar
Пользователь
Откуда: Воронеж Регистрация: Дек. 2004
Всего: 289 сообщений
|
Если броня лежит в инвентаре то прямо так, и пид свой. иначе сначала переместить инветарь затем прямо так: wield_obj_critter(dude_obj, obj_carrying_pid_obj(dude_obj, PID_TESLA_ARMOR)); metarule3(107, dude_obj, 16777230, 0); Без присваивания облика метарулой у меня дело не пошло. Точнее ситуация в том, что команда wield_obj_critter легко экипирует критеров , кроме дюда последнему просто отправляет предмет в указанный слот, не изменяя его анимации при этом. С оружием были какие-то не лады, я своем аналогичном случае забил - не приниципиально было, может там тоже самое достаточно, а я просто не до усердствовал. :-) (Добавление от 23:32 - 24 Окт., 2006.) set_local_var(0, critter_inven_obj(dude_obj, 0)); set_local_var(1, critter_inven_obj(dude_obj, 1)); set_local_var(2, critter_inven_obj(dude_obj, 2)); Не пойдет. Ты только, что сохранил указатели на "пустые слоты"?, а не итемы.
|
Отправлено: 23:20 - 24 Окт., 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Dar Чузен уже эпикирован броней и оружием Сначала я сохраняю указатели set_local_var(0, critter_inven_obj(dude_obj, 0)); set_local_var(1, critter_inven_obj(dude_obj, 1)); set_local_var(2, critter_inven_obj(dude_obj, 2)); Затем перемещаю инвентарь move_obj_inven_to_obj(dude_obj, cont) Перемещается и броня с оружием Далее кое-какие действия и возвращаем инвентарь: move_obj_inven_to_obj(cont, dude_obj) Однако и броня и оружие не в слоте, а в инвентаре. Вот тут я делаю такой ход: wield_obj_critter(dude_obj, local_var(0)); wield_obj_critter(dude_obj, local_var(1)); wield_obj_critter(dude_obj, local_var(2)); Почему указатели на пустые слоты, если там были итемы? Броня в инвентаре, можно без глобального металура?
|
Отправлено: 6:20 - 25 Окт., 2006
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
2Dar Зачем менять анимацию, если нужно просто одеть броник? 2Akkella Всё правильно, нужно юзать именно wield_obj_critter. Только дать оружие/предметы в обе руки не получится. Да и получить указатель на неактивную руку тоже (см. ФАК). Получится узнать указатель на броник и предмет в активной руке. И соответственно ими криттера и экипировать.
|
Отправлено: 12:31 - 25 Окт., 2006
|
|
Dar
Пользователь
Откуда: Воронеж Регистрация: Дек. 2004
Всего: 289 сообщений
|
Wasteland Ghost >>2Dar Зачем менять анимацию, если нужно просто одеть броник? Для того чтобы броник отобразился надетым, иначе он просто ляжет в слот, а изображение - внешний вид дюда не изменится, как минимум до тех пор пока ты не залезещь в инвентарь ручками. Я это уже пробывал. Хм, мод "отображения брони на напарниках" от B-team помнишь ? Тот же случай. Akkella: 1)Хм, я понял ситуацию как wield_obj_critter(dude_obj, critter_inven_obj(dude_obj, 0)); - это моя ошибка: 2) Ну попробуй, у меня не получилось. см выше.
|
Отправлено: 1:06 - 27 Окт., 2006 | ИСПРАВЛЕНО: Dar - 1:12 - 27 Окт., 2006
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Цитата: Для того чтобы броник отобразился надетым
Кто сказал, что он должен отображаться? Отвечать надо на вопрос, а не вносить где ни попадя лишние сущности.
Код:
wield_obj_critter(dude_obj, critter_inven_obj(dude_obj, 0));
Это явная ошибка, т.к. если в слоте брони уже есть броня, зачем её ещё раз одевать? А если нет, то critter_inven_obj(dude_obj, 0) вернёт 0 и, соответственно, одето ничего не будет. Ещё раз повторяю: 1. Не получится получить указатель на предмет в неактивной руке. 2. Указатели надо сохранить до снятия предметов, например, так:
Код:
set_local_var(10, critter_inven_obj(dude_obj, 0)); if (critter_inven_obj(dude_obj, 1) != 0) then set_local_var(11, critter_inven_obj(dude_obj, 1)); else if (critter_inven_obj(dude_obj, 2) != 0) then set_local_var(11, critter_inven_obj(dude_obj, 2));
3. Для возвращения предметов на место используется wield_obj_critter. Фсё.
|
Отправлено: 9:15 - 27 Окт., 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Wasteland Ghost
Цитата: 1. Не получится получить указатель на предмет в неактивной руке.
Почему? Вставь этот код чузену (если Самоделкин не стоит): procedure description_p_proc begin variable i; variable ptr; script_overrides; i:= critter_inven_obj(dude_obj, -2)-3; while i< critter_inven_obj(dude_obj, -2) do begin ptr:=inven_cmds(dude_obj,13,i); i+=1; display_msg(obj_name(ptr)); end end Он спокойно публикует и указатель на броню и указатель на обе руки. Ну а выяснить какая из них активная дело техники. Пришлось остановиться на таком варианте... Тем более и с анимацией нет траблов... Ушло и вернулось...
|
Отправлено: 21:21 - 31 Окт., 2006 | ИСПРАВЛЕНО: Akkella - 21:22 - 31 Окт., 2006
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Хм. А код действительно рабочий. Ну что, ещё один миф развенчан? P.S. Надо наверное ФАК будет обновить...
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 22:52 - 31 Окт., 2006
|
|
binyan
Пользователь
Откуда: Israel Регистрация: Март 2005
Всего: 292 сообщения
|
Интересно, а как же это "Дело техники"? Как узнать, какая из них активная?
----- ...выражая озадаченность, граничащую с озабоченностью..
|
Отправлено: 23:11 - 31 Окт., 2006
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Цитата: Он спокойно публикует и указатель на броню и указатель на обе руки.
Он тебе даёт просто указатели на все объекты в инвентаре по порядку. Как ты будешь выяснять где какой объект находится? Гадость в том, что если в руке есть предмет, но рука при этом не активна, то critter_inven_obj вернёт ноль.
Цитата: Ну а выяснить какая из них активная дело техники.
Сказал "а", говори "б". Рабочий код - в студию.
|
Отправлено: 13:18 - 1 Ноября, 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Наверно сделаю проще и наглядней: procedure description_p_proc begin variable lh; variable rh; variable br; variable ah; script_overrides; lh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-3); rh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-2); br:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-1); ah := critter_inven_obj(dude_obj, 1); ah := critter_inven_obj(dude_obj, 2); if ah!=lh then ah := rh; display_msg(obj_name(lh)); display_msg(obj_name(rh)); display_msg(obj_name(br)); display_msg(obj_name(ah)); end Эта процедура получает указатель на броню, правую и левую руки и какая из них активная. Проверить легко. Впишите ее чузу и увидете, что код работает (нажмите на биноколь в меню чуза)
|
Отправлено: 18:43 - 1 Ноября, 2006 | ИСПРАВЛЕНО: Akkella - 18:43 - 1 Ноября, 2006
|
|
Alchemist
Модератор
Откуда: Арзамас-17 Регистрация: Дек. 2004
Всего: 298 сообщений
|
procedure description_p_proc begin variable lh; variable rh; variable br; variable a1h; variable a2h; variable ah; script_overrides; lh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-3); rh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-2); br:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-1); ah:= "Indeterminate"; a1h := critter_inven_obj(dude_obj, 1); a2h := critter_inven_obj(dude_obj, 2); if (a1h or a2h) then begin if ((a1h == rh) or (a2h == rh)) then begin ah := "Right"; end else begin ah := "Left"; end if ((a2h == lh) or (a1h == lh)) then begin ah := "Left"; end else begin ah := "Right"; end end display_msg("(-3): " + obj_name(lh)); display_msg("(-2): " + obj_name(rh)); display_msg("(-1): " + obj_name(br)); display_msg("Active: " + ah); end Я немного модифицировал код для наглядности. Как видим, не смотря на интересную идею, метод работает тогда, и только тогда, когда активная рука непуста. Потому что, в противном случае, оба указателя, получаемые через critter_inven_obj(dude_obj, x) равны NULL и для сравнения непригодны. А отдельно взятые указатели, полученные через inven_cmds(dude_obj, 13, critter_inven_obj(dude_obj, -2), x), не позволяют даже сказть, взяты ли в данный момент предметы в руки или же находятся в "карманах".
----- /// What'ya be sain'? Vault 100+? We need nothing o'that!
|
Отправлено: 21:04 - 1 Ноября, 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
Да. Кстати, этот момент я не учел... Действительно, проверял только с занятой активной рукой... По поводу карманов, если критер снял броню и убрал активную руку, то тогда сохраняться карманы...
|
Отправлено: 21:19 - 1 Ноября, 2006
|
|
Alchemist
Модератор
Откуда: Арзамас-17 Регистрация: Дек. 2004
Всего: 298 сообщений
|
Цитата: По поводу карманов, если критер снял броню и убрал активную руку, то тогда сохраняться карманы...
lh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-3); rh:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-2); br:= inven_cmds(dude_obj,13,critter_inven_obj(dude_obj, -2)-1); Эти указатели определены, даже после того, как броня и содержимое рук убрано в "карманы". А, раз активная рука пуста, сказать лежит ли в неактивной руке один из предметов или нет, мы по прежнему не можем.
----- /// What'ya be sain'? Vault 100+? We need nothing o'that!
|
Отправлено: 21:42 - 1 Ноября, 2006
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Угу. Примерно об этом я и говорила. Как ни крути, но непосредственно факт наличия предмета в неактивной руке установить невозможно. В частных случаях по косвенным признакам - да. Но верного способа нет.
|
Отправлено: 13:51 - 3 Ноября, 2006
|
|
|
|