Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'exp'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Русскоязычная поддержка эмуляторов Athena l ea-support.ws
    • Новости
    • Правила и FAQ
    • Жалобы
    • Список серверов
  • Установка сервера
    • Сервер
    • Гайды
    • Вопросы, ошибки и баги
    • Хостинг
  • Кодинг
    • Скриптинг
    • SRC
  • Клиент
    • Модификации для клиента
    • Клиент
  • WEB
    • Панели управления
    • PHP скрипты
  • Доска объявлений
    • Совместные проекты / поиск партнёров
    • Запросы
    • Услуги
  • Остальное
    • События в мире Ragnarok
    • Развлечения
    • Корзина
    • Black List

Категории

  • Программы для клиента

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Сайт


ICQ


Skype


Город


Интересы


Название сервера

Найдено: 1 результат

  1. [src] Динамические рейты Описание Динамические рейты позволяют настроить рейты по своему усмотрению, к примеру, сделать рейты для тех или иных классов больше или меньше (самый распостранённый вариант использования). Установка Нам нужно будет поправить всего два файлика (diff'ы не делаю, кому нужно — создайте сами, тут только ручная правка по привычке). Первым правим src/map/pc.h, находим: int pc_gainexp(struct map_session_data*,struct block_list*,unsigned int,unsigned int, bool); Добавляем после: unsigned int pc_ntexprate (struct map_session_data *sd); Теперь приступаем к правке src/map/pc.c, находим: if(!battle_config.pvp_exp && map[sd->bl.m].flag.pvp) // [MouseJstr] return 0; // no exp on pvp maps Добавляем после: if( !quest ) { unsigned int nt_rateexp = pc_ntexprate(sd); if( base_exp ) { base_exp = (unsigned int) cap_value(base_exp * (nt_rateexp/100.), 0, UINT_MAX); } if( job_exp ) { job_exp = (unsigned int) cap_value(job_exp * (nt_rateexp/100.), 0, UINT_MAX); } } Дальше находим: unsigned int pc_maxbaselv(struct map_session_data *sd) Добавляем перед: /*========================================== * NeoTemple Extra: Returns Base/Job Exp Rate using Dynamic Base/Job Exp Rate System *------------------------------------------*/ unsigned int pc_ntexprate (struct map_session_data *sd) { unsigned int exprate = 100; if (sd->status.base_level > 70) { exprate += 50; } else if (sd->status.base_level > 50) { exprate += 25; } else if (sd->status.base_level > 30) { exprate += 10; } switch ( sd->class_ ) { case MAPID_MERCHANT: case MAPID_MERCHANT_HIGH: case MAPID_ALCHEMIST: case MAPID_CREATOR: case MAPID_BLACKSMITH: case MAPID_WHITESMITH: exprate += 200; break; case MAPID_ACOLYTE: case MAPID_ACOLYTE_HIGH: case MAPID_PRIEST: case MAPID_HIGH_PRIEST: case MAPID_BABY_ACOLYTE: case MAPID_BABY_PRIEST: exprate += 100; break; case MAPID_NOVICE: case MAPID_NOVICE_HIGH: exprate += 50; break; } return exprate; } Готово, мы добавили основную функцию, в данном исходном коде находится готовый пример, вам нужно обладать кое-какими познаниями в программирование, чтобы дописать свой, но общая концепция будет понятна сразу. Описание примера Итак, вы всё это сделали, но ничего не понимаете. Разумно, ведь это исходник. Сейчас я поясню пример. Все изменения под свой сервер вам нужно делать в функции pc_ntexprate, но для начала объясню, что в примере происходит. Каждый раз, когда вы получаете какой-либо опыт, дополнительно вызывается функция pc_ntexprate, это не касается только квестового получения опыта (из скриптов). Первым делом внутри функции устанавливается 1 рейты на получения опыта: unsigned int exprate = 100; затем, проверяется уровень персонажа, который должен получить опыт: if (sd->status.base_level > 70) { Логика такая: если игрок ниже 31ого уровня, то он не получает дополнительных бонусов к рейтам, если выше 30ого, то его бонус составляет ещё 10%, если выше 50ого, то 25%, если 70ого, то 50%. Затем функция делает проверку на класс персонажа и в зависимости от этого решает какой ещё бонус даётся. Учтите, что эти бонусы идут после уже установленных в конфиге, то есть, рейты не складываются с рейтами в конфиге, а вычисляются после. Так, допустим, если у вас рейты на сервер по опыту 2х, то при добавление 50% они составят уже 3х. Это самый простой пример использования таких рейтов, к примеру, можно добавлять/убавлять получение опыта по более сложным принципам (вычислять статы и предполагать билды чара, учитывать какие статусы на персонаже, какие предметы и прочее). Если вы хотите, чтобы опыт начислялся только для Базового или Профессионального уровня, то удалите одну из строчек указанную тут: if( !quest ) { unsigned int nt_rateexp = pc_ntexprate(sd); if( base_exp ) { base_exp = (unsigned int) cap_value(base_exp * (nt_rateexp/100.), 0, UINT_MAX); } if( job_exp ) { job_exp = (unsigned int) cap_value(job_exp * (nt_rateexp/100.), 0, UINT_MAX); } } Соответственно строчка с base_exp — базовый опыт, строчка с job_exp — профессиональным. Если желаете, чтобы квестовый опыт так же учитывался, то удалите проверку, должно получиться так (без if): if( base_exp ) { base_exp = (unsigned int) cap_value(base_exp * (nt_rateexp/100.), 0, UINT_MAX); } if( job_exp ) { job_exp = (unsigned int) cap_value(job_exp * (nt_rateexp/100.), 0, UINT_MAX); }
×
×
  • Создать...
Яндекс.Метрика