|
![]() |
#1 |
Знакомый Мадера
![]() Регистрация: 22.06.2005
Сообщений: 63
|
![]()
на скока мне известно от левла моба, твоей визды...и упорства...зависит уровень прокачки....
а не качается на тех мобах за которых не дают опыт :d
__________________
дайте мне большую дубину и бутылку водки и поглядим кто из нас злее :D |
![]() |
![]() |
![]() |
#2 |
Занятой мадер
![]() Регистрация: 16.04.2005
Сообщений: 140
|
![]()
делить дружа с такими статами .....
|
![]() |
![]() |
![]() |
#3 |
Отличник форума
![]() Регистрация: 09.04.2005
Адрес: МЗ
Сообщений: 418
|
![]()
Решил запостить для исчерпывающего ответа, потому как тема возникает довольно часто.
void improove_skill(CHAR_DATA * ch, int skill_no, int success, CHAR_DATA * victim) { int skill_is, diff = 0, how_many = 0, prob, div; if (IS_NPC(ch)) - у мобов(и чармисов) умения не качаются return; if (victim && (IS_HORSE(victim) || MOB_FLAGGED(victim, MOB_NOTRAIN))) return; не качаются на лошадяках и мобах с флагом NOTRAIN if (IS_IMMORTAL(ch) || ((!victim || OK_GAIN_EXP(ch, victim)) && IN_ROOM(ch) != NOWHERE && !ROOM_FLAGGED(IN_ROOM(ch), ROOM_PEACEFUL) && // Стрибог !ROOM_FLAGGED(IN_ROOM(ch), ROOM_ARENA) && //Свентовит !ROOM_FLAGGED(IN_ROOM(ch), ROOM_HOUSE) && !ROOM_FLAGGED(IN_ROOM(ch), ROOM_ATRIUM) && (diff = wis_app[GET_REAL_WIS(ch)].max_learn_l20 * GET_LEVEL(ch) / 20 - GET_SKILL(ch, skill_no)) > 0 && GET_SKILL(ch, skill_no) < MAX_EXP_PERCENT + GET_REMORT(ch) * 5)) { не качается на мобах за которых не дают экспу, в комнате "нигде", в мирках, на арене, в замках, входе в замок. Ограниченно по мудрости для каждого левела. и ограничено по ремотрам. for (prob = how_many = 0; prob <= MAX_SKILLS; prob++) if (GET_SKILL(ch, prob)) how_many++; считаем количество выученных скилов how_many += (im_get_char_rskill_count(ch) + 1) >> 1; прибавляем к ним выученные рецепты деленые на 2 /* Success - multy by 2 */ prob = success ? 20000 : 15000; если фейл то шанс примерно на 1/4 выше div = int_app[GET_REAL_INT(ch)].improove /* + diff */ ; чем выше интеллект персонажа тем выше шанс просвета if ((int) GET_CLASS(ch) >= 0 && (int) GET_CLASS(ch) < NUM_CLASSES) div += (skill_info[skill_no].k_improove[(int) GET_CLASS(ch)][(int) GET_KIN(ch)] / 100); prob /= (MAX(1, div)); if ((diff = how_many - wis_app[GET_REAL_WIS(ch)].max_skills) < 0) prob += (5 * diff); else prob += (10 * diff); чем больше мудрость и чем меньше умений тем больше шанс просвета prob += number(1, GET_SKILL(ch, skill_no) * 5); чем больше процент скила тем меньше шанс просвета skill_is = number(1, MAX(1, prob)); if ( (victim && skill_is <= GET_REAL_INT(ch) * GET_LEVEL(victim) / GET_LEVEL(ch)) || (!victim && skill_is <= GET_REAL_INT(ch))) { чем больше отношение левелов моба и персонажа(идеальный случай персонаж 1 уровня а моб 50) тем выше шанс просвета if (success) sprintf(buf, "%sВы повысили уровень умения \"%s\".%s\r\n", CCICYN(ch, C_NRM), skill_name(skill_no), CCNRM(ch, C_NRM)); else sprintf(buf, "%sПоняв свои ошибки, Вы повысили уровень умения \"%s\".%s\r\n", CCICYN(ch, C_NRM), skill_name(skill_no), CCNRM(ch, C_NRM)); send_to_char(buf, ch); GET_SKILL(ch, skill_no) += number(1, 2); просветы бывают только на 1 или 2 процента за раз if (!IS_IMMORTAL(ch)) GET_SKILL(ch, skill_no) = MIN(MAX_EXP_PERCENT + GET_REMORT(ch) * 5, GET_SKILL(ch, skill_no)); // скилл прокачался, помечаю моба (если он есть) if (victim && IS_NPC(victim)) SET_BIT(MOB_FLAGS(victim, MOB_NOTRAIN), MOB_NOTRAIN); если кто-то уже получил просвет на мобе, то моба помечают флагом NOTRAIN(больше никто на нем не получит просвет) } } }
__________________
Делаю как лучше, а получется... |
![]() |
![]() |