Помогите разобраться в фрагментах программы jAhtena.
-
Кто нибудь , ковырявшийся в jAthena , помогите пожалуйста разобраться.
Вот первый фрагмент программы:
}//1“x‚аЋЂ‚с‚Е‚И‚ўJob70ѓXѓpѓmѓr‚Й+10
if(s_class.job == 23 && (sd->die_counter == 0 || sd->repeal_die_counter == 1)&& sd->status.job_level >= 70){
sd->paramb[0]+= 10;
sd->paramb[1]+= 10;
sd->paramb[2]+= 10;
sd->paramb[3]+= 10;
sd->paramb[4]+= 10;
sd->paramb[5]+= 10;
}Если перс ниразу не умер -- "sd->die_counter == 0"
и джоблевел больше или равен 70 -- "sd->status.job_level >= 70",
то перс получает прибавку +10 ко всем статам (вроде так).
Но, есть еще один дополнительный аргумент -- "sd->repeal_die_counter == 1".(в eAthene его нет, кстати)
За что он отвечает?
Есть еще пара кусков где он присутствует:case SC_SUPERNOVICE://#ѓXЃ[ѓpЃ[ѓmЃ[ѓrѓX‚МЌ°#
if(sd && sd->status.base_level >=90 && atn_rand()%10000 < battle_config.repeal_die_counter_rate)//1%‚ЕЋЂ–Sѓtѓ‰ѓOЏБ‚·ЃH sd->repeal_die_counter = 1; if(bl->type == BL_PC){ if(battle_config.disp_job_soul_state_change) { char output[64]; strcpy(output,"Ќ°Џу‘Ф‚Й‚И‚и‚Ь‚µ‚Ѕ"); clif_disp_onlyself((struct map_session_data*)bl,output,strlen(output)); } } soul_through = 1; calc_flag = 1; break;
В этом куске что-то происходит если бейзлевел больше или равен 90, но что?
И , последний:
case SC_SUPERNOVICE://#ѓXЃ[ѓpЃ[ѓmЃ[ѓrѓX‚МЌ°#if(bl->type == BL_PC){ if(battle_config.disp_job_soul_state_change) { char output[64]; strcpy(output,"Ќ°Џу‘Ф‚ЄЏI—№‚µ‚Ь‚µ‚Ѕ"); clif_disp_onlyself((struct map_session_data*)bl,output,strlen(output)); } } if(((struct map_session_data*)bl)->repeal_die_counter) calc_flag = 1; if(bl->type==BL_PC) ((struct map_session_data*)bl)->repeal_die_counter = 0; soul_through = 1; break;
Помогите пожалуйста понять, как эта фича работает.
Да, забыл написать, это файл status.c
-
Администрация на такие вопросы не отвечает...
Да и нафига оно тебе нада?
-
SHNARK, ну если отвлеченно смотреть только на то, что ты показал, то скорее всего получается, что суперновисы должны получить +10 ко всем статам на 90/70....
а все остальные - только если ниразу не умрут, пока докачаются до 90/70, но это просто невозможно...
а эта вещь, которую ты хочешь понять - наверно какой-то другой(не как у остальных профессий) счетчик смертей для СНов...ЗЫ это все чистое мое мнение только по этому посту.
-
@"SHNARK":
Но, есть еще один дополнительный аргумент -- "sd->repeal_die_counter == 1".(в eAthene его нет, кстати)За что он отвечает?
[code:1uqp482v]
int status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag)
{
...case SC_SUPERNOVICE://#ГXБ[ГpБ[ГmБ[ГrГXВ╠Н░# if(sd && sd->status.base_level >=90 && atn_rand()%10000 < battle_config.repeal_die_counter_rate)//1%В┼ОАЦSГtГЙГOП┴В╖БH sd->repeal_die_counter = 1; if(bl->type == BL_PC){ if(battle_config.disp_job_soul_state_change) { char output[64]; strcpy(output,"Н░ПєС╘В╔В╚ВшВ▄В╡В╜"); clif_disp_onlyself((struct map_session_data*)bl,output,strlen(output)); } } soul_through = 1; calc_flag = 1; break;[/code:1uqp482v]
При переходе на суперновиса на уровне>=90 есть вероятность, заданная переменной repeal_die_counter_rate ( по умолчанию=100, тоесть шанс 1%), с которой переменной repeal_die_counter присвоится 1. И если вам так повезло, то кол-во смертей в следующем условии учитываться не будет:
[code:1uqp482v] if(s_class.job == 23 && (sd->die_counter == 0 || sd->repeal_die_counter == 1)&& sd->status.job_level >= 70){[/code:1uqp482v]
-
НеО_о, не можешь помочь - не флуди.
Baggins, если я правильно понял, то становясь Суперновисом не , как обычно, на 45 а на 90+ левеле есть вероятность 1% получить +10 ко всем статам?
-
SHNARK, Предупреждение - оффтопик. Это не форум программистов.
-
@"SHNARK":
Baggins, если я правильно понял, то становясь Суперновисом не , как обычно, на 45 а на 90+ левеле есть вероятность 1% получить +10 ко всем статам?
+10 ко всем статам, но только после 70 джоба, тоесть видимо пока не докачаешся до 70, то и не поймеш - повезло или нет )
Уезжал на дачу, поэтому так поздно ответил. -
Baggins, спасибо!
Заглянул в новую jAthena и увидел это:
[code:3iaa7m4j]if(s_class.job == 23 && sd->status.base_level >= 99)
{
if(pc_isupper(sd))
sd->status.max_hp += 2000*(100 + sd->paramc[2])/100 * battle_config.upper_hp_rate/100;
else if(pc_isbaby(sd))//—{Ћq‚МЏкЌ‡ЌЕ‘еHP70%
sd->status.max_hp += 2000*(100 + sd->paramc[2])/100 * battle_config.baby_hp_rate/100;
else sd->status.max_hp += 2000*(100 + sd->paramc[2])/100 * battle_config.normal_hp_rate/100;
}
[/code:3iaa7m4j]Очень удивило и даже потрясло вот это : if(pc_isupper(sd))
Неужели Суперновисам собираются дать адванса? :oops:
Мне, как человеку незнающему Си и, что особенно печально, японского :oops:, самому ну ни как не разобраться, как можно получить эту плюшку, а так хочется! (я пробовал, :oops: ничего не вышло)Помогите, пожалуйста, маленькому Суперновису стать большим!
.
-
SHNARK,
- поставь себе поддержку японского
- открывай чем-нибудь умеющим работать с иероглифами (например браузер?)
- babelfish.altavista.com
текст, конечно, получается не особенно читабельный, но кое-что понять можно.
-
Спасибо...грустно А для Си ничего подобного нету?
-
@"SHNARK":
Неужели Суперновисам собираются дать адванса?
разработчиков эмулятора не стоит понимать буквально. вот, если бы ты сейчас рассматривал код аэгиса (или на чём сейчас там стоят официальный сервера), то сомнения и ожидания могли бы вполне закономерно возникнуть.
а тут..
а) может быть, они ленились и просто откопировали блок от другой професии
б) перестраховались. т.е. заранее закинули такую возможность, чтобы потом о ней не вспоминать -
Ну не а) - это точно. Ни у кого больше такого бонуса нет: 2000+20*Vit на 99 лев.
А может они перестраховались настолько, что осталось только подключить НПС? А с чего бы им делать лишнюю работу? -
deathband, спасибо за подсказку. Действительно, вполне читабельно получается, одно плохо, если запихнуть текст целиком, нарушает форматирование.
А отдельными фразами переводить больно муторно. -
@"Zeno":
SHNARK, Предупреждение - оффтопик. Это не форум программистов.ппц.. зен, от тебя такого не ожидал... -
2 SHNARK:скачал снап 2219. вроде как если выполняется это условие- "bl->type == BL_PC" (sd?) ,- то "repeal_die_counter" обнуляется(то есть чуть ли не постояноо =\ )... не понял правда, поч к repeal_die_counter такое обращение идет: "((struct map_session_data*)bl)->repeal_die_counter"... я в исходниках нашел только вполне человеческое "sd->repeal_die_counter"... и вообще вот что я нашел:
[code:5liowzk8]case SC_SUPERNOVICE://#ѓXЃ[ѓpЃ[ѓmЃ[ѓrѓX‚МЌ°#
if(sd) {
if(battle_config.disp_job_soul_state_change) {
char output[64];
strcpy(output,"Ќ°Џу‘Ф‚ЄЏI—№‚µ‚Ь‚µ‚Ѕ");
clif_disp_onlyself(sd,output,strlen(output));
}
if(sd->repeal_die_counter)
calc_flag = 1;
sd->repeal_die_counter = 0;
}
break;[/code:5liowzk8]
в status.c ... не там смотрел? или каг?сидел думал до пол второго ночи, пришел к какому-то выводу, но записать и сформулировать его уже не смог- окончательно запутался