PDA

Просмотр полной версии : Прокачка умений


Агапит
26.09.2005, 21:06
Подскажите люди добрые... Правильно ли я поступаю
Я дружинник
Выучил только два умения длин.лезв и сбить - Чем меньше умений тем быстрее качаются?
У меня мудра 13 и ум 12 - это способствует прокачке?
наверно раз 500 удачно сбивал, а все равно ум. сбить 12% от чего оно зависит?
Если не в облом пожалста обьясните нубу механизм прокачки...

Аристарх
26.09.2005, 21:25
ты раз 500 сбивал 1 и того же моба чтоль?)
ваще за 500 раз буит как мин процентов 40% )

Агапит
26.09.2005, 21:32
а как влияет тип моба или уровень моба на прокачку?

Ковшегуб
26.09.2005, 23:13
ну вроде как чем выше моб = тем больше шанс получить просвет на нем.
бывают мобы типа !трен, за них экспы не дают и просветы на них не случаются - это например крестьяне в родовых и всякие горожане в городах.

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

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

инта влияет на скорость роста умения (частоту просветов), мудрость - на максимальный уровень умения на данном левеле.

Kalika
26.09.2005, 23:44
удачно или неудачно ты сбиваешь - пофиг, качается независимо от результата.

Зависит немного - при фейле скилла - шанс получения просвета выше.

Borga
27.09.2005, 06:26
на скока мне известно от левла моба, твоей визды...и упорства...зависит уровень прокачки....

а не качается на тех мобах за которых не дают опыт :d

doost
27.09.2005, 12:45
делить дружа с такими статами .....

Полосний[МЗ]
28.09.2005, 15:06
Решил запостить для исчерпывающего ответа, потому как тема возникает довольно часто.

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(больше никто на нем не получит просвет)
}
}
}