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


Форум TeamX » Тех. поддержка » Скрипты (Все вопросы по скриптингу - сюда)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения

 
Alchemist
Модератор

Откуда: Арзамас-17
Регистрация: Дек. 2004

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

Нативный синтаксис скриптов Fallout, если что, называется Startrek Scripting Language aka SSL. К Си он отношения не имеет. А конструкция ${..........} является прямым заимствованием из Ruby, самого объектного из известных мне языков. На котором и написан Noid'ов декомпилятор.
Но имей в виду, часть опкодов он всё равно понимает неправильно. На это мы с Anchorit'ом уже натолкнулись и в int2ssl пришлось вносить исправления.

-----
/// What'ya be sain'? Vault 100+? We need nothing o'that!

Отправлено: 22:59 - 3 Окт., 2005
Fozzy
Пользователь

Откуда: Украина,Киев
Регистрация: Апр. 2004

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

Как можно проверить убил ли игрок Френка? Тоисть есть ли ГВАР'а которая за это отвечает?
Будете смеятся, но раньше я проверял показывалась ли концовка для Ароййо .

-----
Последний патрон в поржавевшем стволе - Остаток надежды на то что бы выжить.
И две банки джета в моем рюкзаке - Реальность, которой уже не увижу. (С)Fozzy

Отправлено: 21:21 - 5 Окт., 2005
Wasteland Ghost
Маленькое Злое Привидение

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

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

Вот типа ну никак скрипт Френка не изучить .

В процедуре destroy_p_proc:
set_global_var(GVAR_ENCLAVE_FRANK_DEAD,1);

Есть ещё один способ. Для скриптоманьяков .

int player_kill_count(int type) - число убитых игроком криттеров
Аргументы:
type - тип криттера
Возвращаемое значение:
число убитых игроком криттеров заданного типа
Примечания:
макрос от metarule3(METARULE3_GET_KILL_COUNT, type, 0, 0)

Наш Френки, кажись, идёт под номером 18 (type = 18) - Большой и Страшный Босс .

Отправлено: 22:00 - 5 Окт., 2005
Fozzy
Пользователь

Откуда: Украина,Киев
Регистрация: Апр. 2004

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

Сенк, а теперь чисто теоритический вопрос:
Как лучше зделать эффект подмены карты?
Убрать маркер старого города, и вместо него поставить новый, или проверять определенную ГВАРу на 0/1 и подменять карту при входе чара.

-----
Последний патрон в поржавевшем стволе - Остаток надежды на то что бы выжить.
И две банки джета в моем рюкзаке - Реальность, которой уже не увижу. (С)Fozzy

Отправлено: 18:01 - 6 Окт., 2005
Wasteland Ghost
Маленькое Злое Привидение

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

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

Также, как сделана "мёртвая" локация Арройо .

[Area 00]                ; Arroyo
area_name=Arroyo
world_pos=184,133
start_state=On
size=Medium
townmap_art_idx=156
townmap_label_art_idx=370
entrance_0=On,350,275,Arroyo Bridge,-1,-1,3  ; Etc.
entrance_1=On,280,175,Arroyo Village,-1,-1,0
entrance_2=On,200,90,Arroyo Temple,-1,-1,0
entrance_3=Off,100,150,Arroyo Wilderness,-1,-1,0
entrance_4=Off,-1,-1,Arroyo Caves,-1,-1,0

[Area 22]                ; Destroyed Arroyo
area_name=Arroyo
world_pos=184,133
start_state=Off
size=Medium
townmap_art_idx=-1
townmap_label_art_idx=370
entrance_0=On,345,230,Destroyed Arroyo Bridge,-1,26719,0

Вообще, прежде чем делать что-то посмотри реализацию аналогичных ситуаций.

Отправлено: 10:09 - 7 Окт., 2005
binyan
Пользователь

Откуда: Israel
Регистрация: Март 2005

Всего: 292 сообщения

Так.
Процедура смены брони для партийца:
variable original_fid; //"Родной" FID
Procedure start begin
original_fid:=obj_art_fid(self_obj);//Эта процедура вызывается первой - start, поэтому это будет действительно Родной FID
end
variable ptr_armor; //Указатель на броню
variable Art_fidM:=-1;//"Мужской" FID
variable Art_fidF:=-1;//"Женский" FID
Procedure critter_p_proc
begin
 ptr_armor:=critter_inven_obj(self_obj,INVEN_TYPE_WORN);
 if (ptr_armor==0) then
 metarule3(107,self_obj,original_fid,0);
 else
 begin
  if(obj_pid(ptr_armor)==PID_LEATHER_ARMOR)OR(obj_pid(ptr_armor)==PID_CURED_LEATHER_ARMOR)OR(obj_pid(ptr_armor)==PID_LEATHER_ARMOR_MK_II)then begin
  Art_fidM:=FID_HMLTHR;
  Art_fidF:=FID_HFLTHR;
  end
  else if(obj_pid(ptr_armor)==PID_LEATHER_JACKET)then begin
  Art_fidM:=FID_HMMAXX;
  Art_fidF:=FID_HFMAXX;
  end
  else if(obj_pid(ptr_armor)==PID_PURPLE_ROBE)then begin
  Art_fidM:=FID_HAROBE;
  Art_fidF:=FID_HAROBE;
  end
  else if(obj_pid(ptr_armor)==PID_METAL_ARMOR)OR(obj_pid(ptr_armor)==PID_TESLA_ARMOR)OR(obj_pid(ptr_armor)==PID_METAL_ARMOR_MK_II)then begin
  Art_fidM:=FID_HMMETL;
  Art_fidF:=FID_HFMETL;
  end
  else if(obj_pid(ptr_armor)==PID_COMBAT_ARMOR)OR(obj_pid(ptr_armor)==PID_COMBAT_ARMOR_MK_II)then begin
  Art_fidM:=FID_HMCMBT;
  Art_fidF:=FID_HFCMBT;
  end
  else if(obj_pid(ptr_armor)==PID_POWERED_ARMOR)OR(obj_pid(ptr_armor)==PID_HARDENED_POWER_ARMOR)OR(obj_pid(ptr_armor)==PID_BROTHERHOOD_COMBAT_ARMOR)then begin
  Art_fidM:=FID_NAPOWR;
  Art_fidF:=FID_NAPOWR;
end
Отлично!
Теперь вопросы:
1. Если сменить(т.е снять одну, и одеть другую) броню в режиме диалога, вид партийца не меняется. Т.е. Чтобы сменить броню, нужно снять броню, выйти из диалога, зайти в диалог, и одеть другую. Почему?
2. Иногда, при смене брони(выход из диалога) партиец начинает съезжать вниз по карте. ИЗ-за чего это может быть?



(Добавление от 23:53 - 13 Окт., 2005.)


Далее...
Мне всегда не нравилось, что в режиме диалога нельзя сказать партийцу, какое точно оружие он должен взять. Выбрать тобеж.
Вот:
#define Weapon(Pid_Item)  if(obj_carrying_pid_obj(self_obj,Pid_Item)!=0)then\
                         gsay_option(-1,"Я хочу, чтобы ты взял в руки"+  proto_data(Pid_Item,it_name), wield_obj(obj_carrying_pid_obj(self_obj,Pid_Item)),-1);
или (тут я не знаю точно что ставить, но мне кажется что всё-таки gsay_option)
#define Weapon(Pid_Item)  if(obj_carrying_pid_obj(self_obj,Pid_Item)!=0)then\
                         SayOption("Я хочу, чтобы ты взял в руки"+proto_data(Pid_Item,it_name),wield_obj(obj_carrying_pid_obj(self_obj,Pid_Item)));
Я понимаю, что вместо wield_obj(obj_carrying_pid_obj(self_obj,Pid_Item)) там должно быть указание на процедуру. Что-то вроде:
SayOption("Я хочу, чтобы ты взял в руки"+proto_data(Pid_Item,it_name), Wield_Critter);
Procedure Wield_Critter begin
wield_obj(obj_carrying_pid_obj(self_obj,Pid_Item));
end
Но как передать этой процедуре Pid_Item???
Procedure Take_Weapon begin
variable Pid_Item:=4;
Rep(10);
Weapon(45)Weapon(94)Weapon(118)Weapon(120)Weapon(122)Weapon(143)Weapon(159)
Weapon(261)Weapon(268)Weapon(270)Weapon(280)Weapon(283)Weapon(287)Weapon(296)
Weapon(313)Weapon(332)Weapon(365)Weapon(421)Weapon(427)Weapon(500)Weapon(519)
while((Pid_Item>=3)AND(Pid_Item<14))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=15)AND(Pid_Item<17))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=18)AND(Pid_Item<29))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=115)AND(Pid_Item<117))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=160)AND(Pid_Item<163))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=233)AND(Pid_Item<237))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=241)AND(Pid_Item<243))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=290)AND(Pid_Item<294))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=299)AND(Pid_Item<301))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=319)AND(Pid_Item<321))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=350)AND(Pid_Item<356))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=371)AND(Pid_Item<373))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=383)AND(Pid_Item<408))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=496)AND(Pid_Item<498))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
while((Pid_Item>=508)AND(Pid_Item<510))do begin Weapon(Pid_Item)Pid_Item:=Pid_Item+1;End
end



-----
...выражая озадаченность, граничащую с озабоченностью..

Отправлено: 23:47 - 13 Окт., 2005
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

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

Извращаться с critter_p_proc не надо.

procedure talk_p_proc begin
variable previous_armor;
variable current_armor;
variable previous_weapon;
variable current_weapon;

--запоминаем текущее состояние криттера в previous'ы---

--диалог--

--если текущее состояние != предыдущему, то сменить броню, потом оружие (если не wield'ать оружие, то, после смены брони, криттер окажется с пустыми руками)--

end

-----
Scio me nihil scire

Отправлено: 9:19 - 14 Окт., 2005
binyan
Пользователь

Откуда: Israel
Регистрация: Март 2005

Всего: 292 сообщения

Ты слегка не прав. Я так пробовал, не получается. Процедуру нужно засовывать в Node999, т.е. в конец диалога. Тогда всё работает отлично. А как насчёт второй процедуры? Можешь что нибудь посоветовать?

-----
...выражая озадаченность, граничащую с озабоченностью..

Отправлено: 23:00 - 15 Окт., 2005
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

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

>>Ты слегка не прав.
А может ты? ;)
У меня-то всё работает. Я так делал уже ;)

-----
Scio me nihil scire

Отправлено: 0:04 - 16 Окт., 2005
binyan
Пользователь

Откуда: Israel
Регистрация: Март 2005

Всего: 292 сообщения

Быть может всё. Но у меня работает так как я написал =)

-----
...выражая озадаченность, граничащую с озабоченностью..

Отправлено: 0:30 - 16 Окт., 2005
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения


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