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