» TeamX (Архив Форума)«


Форум TeamX » Тех. поддержка » Критер и две его руки... (...)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
Akkella
Пользователь

Регистрация: Авг. 2006

Всего: 175 сообщений

Как вложить в руки критеру ствол?
Поиск и куча документации ничего не дали.

Отправлено: 8:22 - 11 Авг., 2006
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

Первый раз вижу такого фантастически ленивого юзера .

Если ты хочешь действовать через скрипты, ищи тут:
http://www.teamx.ru/rus/bd/bis_help.shtml

Если в маппере Димса, то тут:
http://www.teamx.ru/cgi-bin/ikonboard/topic.cgi?forum=5&topic=26&s%20tart=0

Если в маппере БИС, просто зайди в инвентарь криттера и положи предмет в его правую руку.

Отправлено: 11:38 - 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
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com