|
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
|
|
|
|