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


Форум TeamX » Проекты » Книги

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 ] Все собщения

 
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

Меня в реализации книг бесит очень многое.

Цитата:
1. После прочтения книжка исчезает. Мы что, ее кушаем чтоли?

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

3. Нельзя дать почитать напарнику.

4. Получать пользу от книг можно только до развитости скилла в 99%, дальше бесполезно. Я никогда не развивал Small Guns до тех пор, пока книжки не переставали действовать.


Багов много, я пока решил остановиться на последнем. Как исправить баг #4? Вот моя задумка:

Цитата:
1. Польза должна измеряться в Skill Points и только в них. Измерять пользу в процентах - порождать обидные читы.

2. Сделать ограничение пользы от книг зависящее не от процентов развитости умения, а от того, сколько книг прочитано ранее и только от этого.


Таким образом, можно будет читать книги когда угодно, но у вас ни за что не получиться развить умение от 50% до 300% только за счет книг. Допустим, за счет книг максимум можно сэкономить 50 Skill Points. Тогда если вы прочитаете все эти книги сначала, вы измените свой уровень от 50% до 100%, а если позже - от 180% до 190%. В этом и была вся идея, вылилась она в примерно в такой код:

Код:
 
/*                                                                           */
/*  Используется не только GVAR_BOOK_POINTS, но и следующие за ней 17 GVAR.  */
/*                                                                           */
#define GVAR_BOOK_POINTS                           (696)

/*                                                                           */
/*  Объявлений, которые совсем не используются, но вроде как нужны для       */
/*  порядка.                                                                 */
/*                                                                           */
#define GVAR_BOOK_POINTS_SMALL_GUNS                (696)
#define GVAR_BOOK_POINTS_BIG_GUNS                  (697)
#define GVAR_BOOK_POINTS_ENERGY_WEAPONS            (698)
#define GVAR_BOOK_POINTS_UNARMED_COMBAT            (699)
#define GVAR_BOOK_POINTS_MELEE                     (700)
#define GVAR_BOOK_POINTS_THROWING                  (701)
#define GVAR_BOOK_POINTS_FIRST_AID                 (702)
#define GVAR_BOOK_POINTS_DOCTOR                    (703)
#define GVAR_BOOK_POINTS_SNEAK                     (704)
#define GVAR_BOOK_POINTS_LOCKPICK                  (705)
#define GVAR_BOOK_POINTS_STEAL                     (706)
#define GVAR_BOOK_POINTS_TRAPS                     (707)
#define GVAR_BOOK_POINTS_SCIENCE                   (708)
#define GVAR_BOOK_POINTS_REPAIR                    (709)
#define GVAR_BOOK_POINTS_CONVERSANT                (710)
#define GVAR_BOOK_POINTS_BARTER                    (711)
#define GVAR_BOOK_POINTS_GAMBLING                  (712)
#define GVAR_BOOK_POINTS_OUTDOORSMAN               (713)

/*                                                                           */
/*  Сколько максимум Skill Points можно получить из книг.                    */
/*                                                                           */
#define BOOK_POINTS_MAX     (50)

/*                                                                           */
/*  Максимум Skill Points из одной книги.                                    */
/*                                                                           */
#define BOOK_POINTS_STEEP   (5)

/*                                                                           */
/*  Должна переводить SkillPoints в SkillPercents.                           */
/*                                                                           */
/*  percents - начальный процент умения                                      */
/*  points - количество баллов, которые мы хотим потратить на его развитие   */
/*  (result bwand 511) - конечный процент умения                             */
/*  (result/512) - количество Skill Points, которые мы перерасходовали       */
/*                                                                           */
procedure points_to_percents(variable percents, variable points) begin
 while points>0 do begin
   if percents<101 then
     points:=points-1;
   else
     if percents<126 then
       points:=points-2;
     else
       if percents<151 then
         points:=points-3;
       else
         if percents<176 then
           points:=points-4;
         else
           if percents<201 then
             points:=points-5;
           else
             points:=points-6;
   percents:=percents+1;
 end
 points:=-points;
 return (512*points+percents);
end

/*                                                                           */
/*  Игрок читает книгу.                                                      */
/*                                                                           */
/*  result - зря (не зря)                                                    */
/*                                                                           */
procedure dude_read_book(variable skill_num) begin
 variable percents;
 variable points;
 /*                                                                         */
 /*  Сколько Skill Points мы можем получить из книжки.                      */
 /*                                                                         */
 if global_var(GVAR_BOOK_POINTS+skill_num)+BOOK_POINTS_STEEP>BOOK_POINTS_MAX then
   points:=BOOK_POINTS_MAX-global_var(GVAR_BOOK_POINTS+skill_num);
 else
   points:=BOOK_POINTS_STEEP;
 /*                                                                         */
 /*  Если книжки нам все еще полезны.                                       */
 /*                                                                         */
 if points>0 then begin
   percents:=has_skill(dude_obj,skill_num);
   points:=points_to_percents(percents,points);
   percents:=(points bwand 511)-percents;
   points:=BOOK_POINTS_STEEP+(points/512);
   /*                                                                       */
   /*  Поднимаем Skill.                                                     */
   /*                                                                       */
   critter_mod_skill(dude_obj,skill_num,percents);
   /*                                                                       */
   /*  Увеличиваем счетчик.                                                 */
   /*                                                                       */
   set_global_var(GVAR_BOOK_POINTS+skill_num,global_var(GVAR_BOOK_POINTS+skill_num)+points);
   return true;
 end else
   return false;
end


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

Конечно, остается еще куча вопросов и ньюансов, но, согласитесь, это уже шаг?

Если у кого-нибудь есть интересные идеи - приглашаю на обсуждение здесь. Лично меня в данный момент интересуют две фичи:

1. Возможность заставить читать наших партийцев (чтобы сделать это прийдестя править ихние скрипты ).

2. Возможность сделать так, чтобы книга после прочтения не улетучивалась, но свою полезность для того, кто ее прочитал, она навеки теряла.

P.S. Хотелось бы услышать мнение людей, делающих обширные моды (патчи).

-----
hit me, nail me, make me god

Отправлено: 18:30 - 2 Янв., 2006 | ИСПРАВЛЕНО: Alan Killenger - 21:39 - 2 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

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

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

Ты это проверял? Спорю, что нет. Перечислю проблемы:
1. Книги после навешивания на них скрипта перестанут складываться в стопку.
2. Увеличивает скиллпойнты не скрипт, а движок. Отменить ты это никак не сможешь.
3. Ну и на закуску: при использовании предмета из окошка инвентаря скрипт use не работает (правда, только для некоторых подтипов, для книжки, может, и сработает, но п.2 обойти не получится).

Убрать исчезание "просто": удаление предметов (и ограничения на наркоту, кстати) привязано к номеру прошника.

Отправлено: 20:41 - 2 Янв., 2006
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

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

Т.е. прийдется создавать прошник с другим номером, но с тем же описанием и картинкой и вешать на сам прототип такой скрипт. Все, кроме складывания таких прошников в стопочки (ну не задумывался), я проверял, работает замечательно.

-----
hit me, nail me, make me god

Отправлено: 20:44 - 2 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

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

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

Я читаю очень внимательно, товаристч. Придётся изменять прошники, править все карты и скрипты всех торговцев. Окромя этого ещё вопрос про инвентарь и повышения скилла двигом. Серьёзно. Поддаётся оверрайду? Или нет?

Отправлено: 20:50 - 2 Янв., 2006
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

Нет, никакие script_overrides не помогают, как ни крути. Я и говорю, это может сделать только модификатор, кторый строит глобальный мод (патч) ;(. Вот как раз при использовании такой книжки из инвентаря все нормально и работает, но... обязательно это должен быть другой прошник.

-----
hit me, nail me, make me god

Отправлено: 20:51 - 2 Янв., 2006 | ИСПРАВЛЕНО: Alan Killenger - 21:53 - 2 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

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

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

Вот теперь я спрашиваю: ты внимательно читал? Повторю вопрос: если ты навешиваешь скрипт на книгу, ставишь в use_p_proc script_overrides и юзаешь её из инвентаря, то скилл повышается? Да или нет?

Отправлено: 20:54 - 2 Янв., 2006
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

Да. Все равно идет двигловое повышение скилла и запись в display_msg. Легкой модераторской рукой почистишь тему, OK?

-----
hit me, nail me, make me god

Отправлено: 20:57 - 2 Янв., 2006 | ИСПРАВЛЕНО: Alan Killenger - 22:00 - 2 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

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

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

Зачем чистить?

Итак, если от повышения скилла движком не помогает оверрайд, то идею не сможет реализовать никто. Кроме Mynah'а . И дело тут не в прошниках.

Отправлено: 21:01 - 2 Янв., 2006
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

Почему? И почему дело не в прошниках, когда вопрос именно в них. Точнее в муторной работе по замене номеров прошников.

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

-----
hit me, nail me, make me god

Отправлено: 21:11 - 2 Янв., 2006
Mynah
Модератор

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

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

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

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

Основная грабля - на стопочном варианте тоже должен висеть скрипт. Но именно над этим я буду думать, когда приду в состояние стояния:)

[EDIT]
Alan Killenger,
Замена всех прошников на свои мне кажется не элегантным и громоздким решением. Это ж сколько такой патч будет весить, с учётом изменения всех карт и кучи скриптов? Плюс - несовместимость с модами.

-----
Scio me nihil scire

Отправлено: 21:29 - 2 Янв., 2006 | ИСПРАВЛЕНО: Mynah - 23:36 - 2 Янв., 2006
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 ] Все собщения


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