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

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

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

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

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

Тип контента


Форумы

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

Категории

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

Регистрация

  • Начало

    Конец


Группа


Сайт


ICQ


Skype


Город


Интересы


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

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

  1. [src] Шанс выпадение предметов не зависящий от рейтов Традиционное примечание, незабывайте о такой полезной функции Афины, как работа с db/mob_item_ratio.txt, что он умеет и для чего нужен вы можете почитать прямо внутри. От себя добавлю, что данный мод и работа этого файла отличаются. Описание Данный мод позволяет игнорировать рейты на шанс выпадение предметов, такое иногда бывает нужно, когда хочется сделать, чтобы определённые предметы из мобов падали с шансом без рейтов. Благодаря этому моду, подобное можно будет делать без перекомпиляции сервера, а только перезагрузив базу предметов. Установка Правим только один файл src/map/mob.c, находим: if (battle_config.logarithmic_drops && rate_adjust > 0 && rate_adjust != 100 && baserate > 0) //Logarithmic drops equation by Ishizu-Chan Добавляем перед: if( baserate < 0 ) { return (unsigned int)cap_value(abs(baserate),rate_min,rate_max); } Теперь, если в mob_db.txt указать шанс выпадения отрицательным числом (например -1), то рейты на шанс выпадения будут игнорироваться. Ещё раз говорю (если кто не прочитал), данный мод не одно и то же, что и работа с db/mob_item_ratio.txt.
  2. [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); }
×
×
  • Создать...
Яндекс.Метрика