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

 
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

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

Я тут сделал счетчик дней и он выводит
осталось 180 дней и каждый день уменьшается но вот проблема слово то дней не изменяется а хотелось бы
что бы например  остался 161 день или осталось 23 дня т.е нормально взависимости от дней выводил надпись. Как это можно сделать?

Переделал воровство так что теперь воровство происходит через диалог и мы можем задавать при каком скиле предмет будет виден любые условия. Пока черновая версия просто начните разговор с клинтом.
Можно доделать скрипт при каком условии сколько опыта получит что угодно пишите свои идеи.
В папке scripts есть исходники.

Установка распакуйте архив каталог игры

http://jordan631.narod.ru/Steal.rar

P.S. Следущая наработочка будет по изменению бартера оставайтесь на волне у меня еще несколько наработок в стадии доделки.

Файл в архиве 1.h с помощью программы f-Geck лучше не открывать смотрите в простом блокноте

Отправлено: 16:30 - 8 Фев., 2008 | ИСПРАВЛЕНО: Jordan 63 - 21:06 - 8 Фев., 2008
Alchemist
Модератор

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

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

Цитата:
нормально взависимости от дней выводил надпись. Как это можно сделать?

Например так. В скрипте:
Код:
 
variable word; // SVAR для верного слова
variable remn;       // SVAR для остатка

remn := global_var(GVAR_DayCounter) % 10;
if (remn > 4) then begin
   word : = 3;
end else begin
   if (remn > 1) then begin
        word := 2;
   end else begin
       if (remn == 1 and global_var(GVAR_DayCounter) != 11) then begin
           word := 1;
       end else begin
           word := 3;
       end
   end
end

display_msg(mstr(400+word) + global_var(GVAR_DayCounter) + mstr(410+word));



А в MSG:
Код:
 
{401}{}{Остался }
{402}{}{Осталось }
{403}{}{Осталось }

{411}{}{ день.}
{412}{}{ дня.}
{413}{}{ дней.}



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

Отправлено: 14:24 - 9 Фев., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

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

Alchemist

А можешь выложить полный скрипт! Или на мыло кинь! А то я его и так и эдак а он не компилится а найти ошибку никак не могу.

Отправлено: 16:43 - 12 Фев., 2008
Alchemist
Модератор

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

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

"Всего" скрипта не существует. Я просто привёл алгоритмический пример. Проблема твоя, вероятнее всего, в том, что для нормальной работы макроса mstr нужно прописать define для данного скрипта в scripts.h и, соответственно, define в голове самого скрипта. Вот пример, который точно соберётся на "голом" sslc без препроцессора. Только одна процедура, которую ты уже сам должен вызвать их какой-либо функции скрипта.
Код:
// Вместо 666 пропишешь номер своей GVAR 
// Вместо 111 пропишешь номер своего MSG

procedure DispRemain
begin
   variable word; // SVAR для верного слова
   variable remn;       // SVAR для остатка


   remn := global_var(666) % 10;
   if (remn > 4) then begin
       word := 3;
   end else begin
       if (remn > 1) then begin
            word := 2;
       end else begin
           if (remn == 1 and global_var(666) != 11) then begin
               word := 1;
           end else begin
               word := 3;
           end
       end
   end

   display_msg(message_str(111, 400+word) + global_var(666) + message_str(111, 410+word));
end


P.S. А ещё в предыдущем примере в одном присвоении я опечатался, вставив лишний пробел между ':' и '='.

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

Отправлено: 19:08 - 13 Фев., 2008 | ИСПРАВЛЕНО: Alchemist - 19:11 - 13 Фев., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

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

Alchemist

Цитата:

P.S. А ещё в предыдущем примере в одном присвоении я опечатался, вставив лишний пробел между ':' и '='.


Вот из за этого он и некомпилился

Теперь все компилится надпись выводит но не совсем, когда первый раз смотришь бинокль он выводит eror а когда пропускаешь день все нормально.

Вот часть скрипта

procedure description_p_proc begin
 script_overrides;
 call Node001;
end

procedure Node001 begin
  variable word; // SVAR для верного слова
  variable remn;       // SVAR для остатка
  variable GVAR_DayCounter;
  GVAR_DayCounter := GVAR_DAYS_TO_VAULT13_DISCOVERY;

remn := global_var(GVAR_DayCounter) % 10;
if (remn > 4) then begin
   word := 3;
end else begin
   if (remn > 1) then begin
        word := 2;
   end else begin
       if (remn == 1 and global_var(GVAR_DayCounter) != 11) then begin
           word := 1;
       end else begin
           word := 3;
       end
   end
end

display_msg(mstr(400+word) + (global_var(GVAR_DAYS_TO_VAULT13_DISCOVERY) - GAME_TIME_IN_DAYS) + mstr(410+word));
end

Част мсг

{401}{}{Остался }
{402}{}{Осталось }
{403}{}{Осталось }

{411}{}{ день.}
{412}{}{ дня.}
{413}{}{ дней.}

vault13.gam

GVAR_DAYS_TO_VAULT13_DISCOVERY          :=180;  //      (1009)

А вот скриншоты

http://jordan631.narod.ru/scr00001.JPG
http://jordan631.narod.ru/scr00000.JPG

Отправлено: 15:58 - 15 Фев., 2008
Alchemist
Модератор

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

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

Во-первых, раз ты выводишь не просто содержимое переменной, а (global_var(GVAR_DAYS_TO_VAULT13_DISCOVERY) - GAME_TIME_IN_DAYS), то вместо того, чтобы присваивать локальной переменной номер GVAR, лучше бы совал туда сразу результат вычета. И дальше работал уже с ним. А то алгоритм у тебя поломанный получается.
На счёт Error сказать что-то сложно. Похоже, что по какой-то причине, сразу после инициализации игры mstr(410+word) удаётся извлечь строку из MSG, а mstr(400+word) -- нет. Очевидный глюк, но что может быть источником, умозрительно не подскажу. Можешь попробовать сначала сделать конкатенацию строки в три прихода в локальную переменную, а уже её содержимое выводить. А ещё проверь, нет ли у тебя часом в соответствующей MSG дубликатов строк с номерами на 400.

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

Отправлено: 15:43 - 16 Фев., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

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

Alchemist

Я сделаю так если гвара равна 180 то вывести строку осталось, а остальное пусть алгоритм делает.

Так получается можно не только выводить дней но и монет. А есть ли универсальный алгоритм как атои прописываешь строку и число а он уже сам все делает.

А возможно ли через мсг вызвать процедуру?

Отправлено: 16:59 - 16 Фев., 2008
Alchemist
Модератор

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

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

Цитата:
Я сделаю так если гвара равна 180 то вывести строку осталось, а остальное пусть алгоритм делает.

Как временное решение пойдёт, но, если собираешься в будущем мод релизить в публичный доступ, лучше разобраться в причинах. Слишком уж экзотично смотрится, чтобы быть скриптонезависимым багом.

Цитата:
А есть ли универсальный алгоритм как атои прописываешь строку и число а он уже сам все делает.

В смысле, чтобы автоматически склонение определялось? Да ну, брось, у тебя не так много строк будет, чтобы делать эвристику подобного уровня. Тем более, на SSL. Приведённый выше алгоритм достаточно универсален. Передаёшь ему число, а на выходе получаешь индекс в массиве строк. А уж какой номер строки брать за базу -- выбираешь в зависимости от объекта.

Цитата:
А возможно ли через мсг вызвать процедуру?

Косвенный вызов по имени процедуры стандартом языка поддержан. А будешь ты грузить эту строку из MSG или вводить прямо в скрипт -- твоё дело. Хотя, конечно, хранить в MSG вещи, от которых зависит стабильность  системы, не стоило бы. Но технически это вполне возможно.

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

Отправлено: 18:56 - 16 Фев., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

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

Alchemist

Цитата:
Как временное решение пойдёт, но, если собираешься в будущем мод релизить в публичный доступ, лучше разобраться в причинах. Слишком уж экзотично смотрится, чтобы быть скриптонезависимым багом.


Буду разбираться в чем дело.

Цитата:
Косвенный вызов по имени процедуры стандартом языка поддержан. А будешь ты грузить эту строку из MSG или вводить прямо в скрипт -- твоё дело. Хотя, конечно, хранить в MSG вещи, от которых зависит стабильность  системы, не стоило бы. Но технически это вполне возможно.


Покажи пример как это сделать.

Отправлено: 19:14 - 16 Фев., 2008
Wasteland Ghost
Маленькое Злое Привидение

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

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

Цитата:
Похоже, что по какой-то причине, сразу после инициализации игры mstr(410+word) удаётся извлечь строку из MSG, а mstr(400+word)  -- нет. Очевидный глюк, но что может быть источником, умозрительно не подскажу.

Был у меня такой глюк на больших мсг. Точнее, на мсг с большими номерами строк. Странный глюк. Отписывалась где-то на форуме, кажется, в исследованиях. Можно поискать. Решение так и не найдено. Ну и кроме того может быть элементарная бага где-то при инициализации word.
Цитата:
Покажи пример как это сделать.

variable stored_node;
...
stored_node := node001;
...
call stored_node;

Отправлено: 23:36 - 17 Фев., 2008
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 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