MOTR logo
    • Категории
    • Последние
    • Популярные
    • Метки
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Помогите разобраться в фрагментах программы jAhtena.

    Запланировано Прикреплена Закрыта Перенесена Архив Оффтопика
    15 Сообщения 8 Posters 979 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • S Не в сети
      SHNARK
      отредактировано

      Кто нибудь , ковырявшийся в 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

      1 ответ Последний ответ Ответить Цитировать 0
      • НеО_оН Не в сети
        НеО_о Заблокирован
        отредактировано

        Администрация на такие вопросы не отвечает...

        Да и нафига оно тебе нада?

        1 ответ Последний ответ Ответить Цитировать 0
        • ValetV Не в сети
          Valet
          отредактировано

          SHNARK, ну если отвлеченно смотреть только на то, что ты показал, то скорее всего получается, что суперновисы должны получить +10 ко всем статам на 90/70....
          а все остальные - только если ниразу не умрут, пока докачаются до 90/70, но это просто невозможно...
          а эта вещь, которую ты хочешь понять - наверно какой-то другой(не как у остальных профессий) счетчик смертей для СНов...

          ЗЫ это все чистое мое мнение только по этому посту.

          1 ответ Последний ответ Ответить Цитировать 0
          • BagginsB Не в сети
            Baggins
            отредактировано

            @"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]

            1 ответ Последний ответ Ответить Цитировать 0
            • S Не в сети
              SHNARK
              отредактировано

              НеО_о, не можешь помочь - не флуди.

              Baggins, если я правильно понял, то становясь Суперновисом не , как обычно, на 45 а на 90+ левеле есть вероятность 1% получить +10 ко всем статам?

              1 ответ Последний ответ Ответить Цитировать 0
              • ZenoZ Не в сети
                Zeno Модераторы
                отредактировано

                SHNARK, Предупреждение - оффтопик. Это не форум программистов.

                Правила общения на форуме

                1 ответ Последний ответ Ответить Цитировать 0
                • BagginsB Не в сети
                  Baggins
                  отредактировано

                  @"SHNARK":

                  Baggins, если я правильно понял, то становясь Суперновисом не , как обычно, на 45 а на 90+ левеле есть вероятность 1% получить +10 ко всем статам?

                  +10 ко всем статам, но только после 70 джоба, тоесть видимо пока не докачаешся до 70, то и не поймеш - повезло или нет )
                  Уезжал на дачу, поэтому так поздно ответил.

                  1 ответ Последний ответ Ответить Цитировать 0
                  • S Не в сети
                    SHNARK
                    отредактировано

                    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: ничего не вышло)

                    Помогите, пожалуйста, маленькому Суперновису стать большим!

                    .

                    1 ответ Последний ответ Ответить Цитировать 0
                    • deathbandD Не в сети
                      deathband
                      отредактировано

                      SHNARK,

                      1. поставь себе поддержку японского
                      2. открывай чем-нибудь умеющим работать с иероглифами (например браузер?)
                      3. babelfish.altavista.com

                      текст, конечно, получается не особенно читабельный, но кое-что понять можно.

                      1 ответ Последний ответ Ответить Цитировать 0
                      • S Не в сети
                        SHNARK
                        отредактировано

                        Спасибо...грустно А для Си ничего подобного нету?

                        1 ответ Последний ответ Ответить Цитировать 0
                        • deathbandD Не в сети
                          deathband
                          отредактировано

                          @"SHNARK":

                          Неужели Суперновисам собираются дать адванса?

                          разработчиков эмулятора не стоит понимать буквально. вот, если бы ты сейчас рассматривал код аэгиса (или на чём сейчас там стоят официальный сервера), то сомнения и ожидания могли бы вполне закономерно возникнуть.

                          а тут..
                          а) может быть, они ленились и просто откопировали блок от другой професии
                          б) перестраховались. т.е. заранее закинули такую возможность, чтобы потом о ней не вспоминать 🙂

                          1 ответ Последний ответ Ответить Цитировать 0
                          • S Не в сети
                            SHNARK
                            отредактировано

                            Ну не а) - это точно. Ни у кого больше такого бонуса нет: 2000+20*Vit на 99 лев.
                            А может они перестраховались настолько, что осталось только подключить НПС? А с чего бы им делать лишнюю работу?

                            1 ответ Последний ответ Ответить Цитировать 0
                            • S Не в сети
                              SHNARK
                              отредактировано

                              deathband, спасибо за подсказку. Действительно, вполне читабельно получается, одно плохо, если запихнуть текст целиком, нарушает форматирование.
                              А отдельными фразами переводить больно муторно.

                              1 ответ Последний ответ Ответить Цитировать 0
                              • NaxxramasN Не в сети
                                Naxxramas Заблокирован
                                отредактировано

                                @"Zeno":
                                SHNARK, Предупреждение - оффтопик. Это не форум программистов.ппц.. зен, от тебя такого не ожидал...

                                1 ответ Последний ответ Ответить Цитировать 0
                                • Andy666A Не в сети
                                  Andy666
                                  отредактировано

                                  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 ... не там смотрел? или каг?

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

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • Первое сообщение
                                    Последнее сообщение