» 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 ] Все собщения

 
Wasteland Ghost
Маленькое Злое Привидение

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

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

Вот только не надо засорять тему воплями "а моя песочница круче!"

Работают оба способа, но способ Mynah более изящный и верный. Совать одноразовые действия такого объёма в процедуру, которая вызывается десять раз в секунду - садизм чистой воды. Так что, binyan, проверь свой код, если есть вопросы - задай их. А шашкой махать не стоит.

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

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

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

Я конечно очень извиняюсь, что начал спорить, и я понимаю, что оба способа работают. Но:
Цитата:

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



Продолжать спорить не хочу, но от криттер_п_проц я отказался почти сразу.

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

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

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

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

Вот упрямый человек. Да нечего этой процедуре делать в Node999, об этом тебе и пытаются сказать. Место ей - в отдельной процедуре. Во-первых. Во-вторых, в tpp после завершения диалоговой последовательности, должно идти что-то вроде того, что тебе изложил Mynah. С последующим вызовом твоей процедуры. И вся проблема. Так что засунь свою процедуру в tpp .

Отправлено: 10:07 - 17 Окт., 2005
Mynah
Модератор

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

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

Насчёт выбора оружия.

Вот здесь лежит header с набором необходимых процедур. Он НЕ проверялся, так что возможны какие-нибудь мелкие ошибки, да и принцип довольно таки топорный. Но всю работу за тебя мне делать не досуг:) Да и, если "птица говорун отличается умом и сообразительностью", то разберёшся дальше сам. Главное - концепт ;)

ЗЫ: Самый большой недостаток и, одновременно, самая большая сложность состоит в том, что у Option нельзя указывать параметром процедуру с параметрами. От такая, блин, тавтология.

-----
Scio me nihil scire

Отправлено: 13:18 - 17 Окт., 2005 | ИСПРАВЛЕНО: Mynah - 15:20 - 17 Окт., 2005
binyan
Пользователь

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

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

У меня такой вопрос:
Можно ли в Фоловских скриптах объявлять массивы? Если да, то как?

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

Отправлено: 22:12 - 18 Окт., 2005
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

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

[Что то с памятью моей стало. Здесь был бред]

Масивы у меня не получились. Вот только строки:

variable temp:="abcd";

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 0:01 - 19 Окт., 2005 | ИСПРАВЛЕНО: Ray - 23:12 - 18 Окт., 2005
binyan
Пользователь

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

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

С памятью всё в порядке.
Цитирую Raven:
Цитата:

Небольшой полуофтопец. При извесном желании можно в вару запихнуть оч. много указателей. Каким образом:
"12345678:87654321:6892020"...
Т.е. - самодельный char-массив. atoi написан. Естественно, это подходит только для динамического хранения вар. И работает не слишком шустро. Зато - массивы :-) И куча указателей "в одной варе" :-)

Теперь бы понять как их потом оттуда вытаскивать

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

Отправлено: 0:49 - 19 Окт., 2005
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

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

После некоторой мороки представляю для общественности самопальный массив (причём отличия от Raven'овского должна быть существенна). Код:

========================
procedure start;
procedure getmas(variable name,variable index);
procedure setmas(variable name,variable numb,variable index);
procedure look_at_p_proc;

variable mas:=0;
variable h:=0;

procedure start
begin
end


procedure look_at_p_proc
begin
 mas:=setmas(mas,70,0);
 mas:=setmas(mas,90,1);
 mas:=setmas(mas,80,2);
 h:=getmas(mas,1);
 h:=getmas(mas,2);
end

procedure getmas(variable name,variable index)
begin
variable ret:=0;
variable k:=0;
ret:=name;
while (index!=0) do
begin
index:=index-1;
ret:=ret/100;
end
k:=ret;
k:=k/100;
k:=k*100;
ret:=ret-k;
return ret;
end

procedure setmas(variable name,variable numb,variable index)
begin
variable temp:=0;
variable inj:=0;
inj:=index;
temp:=name;
if (index!=0) then
begin
while (inj!=0) do
begin
inj:=inj-1;
temp:=temp/100;
end
temp:=temp/100;
temp:=temp*100+numb;
while (index!=0) do
begin
index:=index-1;
temp:=temp*100+getmas(name,index);
end
end
else
begin
temp:=numb;
end
return temp;
end
============================


Что мы имеем. А имеем мы масив mas. Нумерация идёт от 0. Имеет следующий вид __ __ __ __
где один элемент - число от 0 до 99.

procedure setmas(variable name,variable numb,variable index);

Записать в масив. Аргументы name - имя масива, numb - значение, index - номер элемента (нумерация с нуля)

procedure getmas(variable name,variable index);

Чтение
name- имя масива
index - номер

Вроде проверял, работает. Кто может проще или элегантнее - милости прошу.

-----
Не бывает невозможных задач – бывает мало времени.

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

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

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

Садисты . Во-первых, сами ГВАР, МВАР и ЛВАР уже являются масивами. Во-вторых, ещё один способ реализации массива (через функцию) показал Mynah в своём хеадере для выбора оружия. В-третьих, скачайте фиксита и залезьте в исходники. И будет вам щастье . Файл custstr2.ssl, процедура wordar.

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

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

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

Итак, сабж.
Когда делаешь смену брони для партийца посредством смены Фидов, то в "Приказ" партиец может взять даже то оружие, которое ему запрещено из-за АИ. Потому что есть анимация с этим оружием. Чего не скажешь о выборе из диалога. Если оружие выбирать из диалога, то запрещённое оружие партиец в руки не возьмёт. Так вот, возникла идея, сделать так, чтобы при диалоге, и "Приказе" запрещённое оружие не показывалось, а при выходе из диалога, и бартере показывалось.Вот несколько процедур:

#define remove_from_inventory(Forbidden_weapon_remove) rm_obj_from_inven(self_obj,obj_carrying_pid_obj(self_obj,Forbidden_weapon_remove))
#define add_to_inventory(Forbidden_weapon_add) add_obj_to_inven(self_obj,create_object(Forbidden_weapon_add,1,1))

procedure forbidden_weapon_pid_array(variable num);
procedure degree(variable num, variable degree);
Procedure Hide_forbidden_weapon;
Procedure Show_forbidden_weapon;

variable amount_forbidden_weapon:=4;

procedure forbidden_weapon_pid_array(variable num) begin
variable temp;
if num==0 then temp:=PID_PLASMA_RIFLE;
if num==1 then temp:=PID_ROCKET_LAUNCHER;
if num==2 then temp:=PID_GATLING_LASER;
if num==3 then temp:=PID_TURBO_PLASMA_RIFLE;
return temp;
end

Кстати, в скриптах Фоловских есть степень? Типа 10 в степни n и т.д.? Если есть, то я зря процедуру делал =((
procedure degree(variable num, variable degree) begin
variable i:=1;
variable temp;
while(i<degree) do begin
num:=num*num;
i+=1;
end
temp:=num;
if degree==0 then temp:=1;
return temp;
end

Procedure Hide_forbidden_weapon begin
variable i;
set_local_var(LVAR_forbidden_weapon,0);
while(i<amount_forbidden_weapon) do begin
if(obj_carrying_pid_obj(self_obj,forbidden_weapon_pid_array(i))!=0)then
begin
remove_from_inventory(forbidden_weapon_pid_array(i));
set_local_var(LVAR_forbidden_weapon,((local_var(LVAR_forbidden_weapon)*10)+1));
end
else set_local_var(LVAR_forbidden_weapon,(local_var(LVAR_forbidden_weapon)*10));
i+=1;
end
end

Procedure Show_forbidden_weapon begin
variable i;
variable j:=0;
variable g:=1;
i:=(amount_forbidden_weapon-1);
if((local_var(LVAR_forbidden_weapon)/degree(10,i))==1) then add_to_inventory(forbidden_weapon_pid_array(j));
while(i>=0) do begin
i-=1;
j+=1;
if(((local_var(LVAR_forbidden_weapon)/degree(10,i))%degree(10,g))==1) then add_to_inventory(forbidden_weapon_pid_array(j));
g+=1;
end
end

Procedure Dialog_in_party begin
call Hide_forbidden_weapon;
Rep(6);
Opt(61,Weapon);
//if self_wearing_armor then        Self_wearing_weapon - Command.h
if(critter_inven_obj(self_obj,INVEN_TYPE_WORN)!=0)then
Оpt(62,Remove_Armor);
Opt(63,Healing);
Opt(64,Waiting);
Opt(66,Distance);
Opt(65,End_dialog);
End

Procedure talk_p_proc begin
Dialogue(self_obj,Choose_dialog);
call Show_forbidden_weapon;
//Тут дальше смена брони
еnd

Как видите, при входе в диалог, всё запрещённое оружие скрывается, а при выходе открывается. Есть только одна проблема...Бартер. Специальной процедуры для бартера нету, есть только gdialog_barter. Но она не возвращает никакого значения. Следовательно я не могу узнать, начал ли дуд бартер с партийцем.И не могу открыть оружие в бартере.
Из всего вышесказанного следует вопрос:
А возможно ли вообще узнать, в бартере ты или нет?



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

Отправлено: 0:24 - 24 Окт., 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