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

    Нужна формула расчета стрипа

    Запланировано Прикреплена Закрыта Перенесена Воровская Гильдия
    11 Сообщения 4 Posters 553 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • N Не в сети
      NNOV
      отредактировано

      сабж.., слышал что шанс от дексы увеличивается..
      П.С. ногами не пинать.

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

        strip_fix = status_get_dex(src) - status_get_dex(bl);
        вычитаем из декса рога декс врага
        if(strip_fix < 0)
        strip_fix=0;
        если декс врага больше то 0
        strip_per = 5+5*skilllv+strip_fix/5;
        вот тут видно базовый шанс 5+25 (на 5ом лвле) плюс разница в дексах делить на 5
        if (rand()%100 >= strip_per)
        break;
        проверка удачи 🙂

        Весь код стрипов:

        case RG_STRIPWEAPON:/* XgbvEF| /
        case RG_STRIPSHIELD:/
        XgbvV[h /
        case RG_STRIPARMOR:/
        XgbvA[}[ /
        case RG_STRIPHELM:/
        Xgbvw */
        {
        struct status_change *tsc_data = status_get_sc_data(bl);
        int cp_scid,scid, equip, strip_fix;
        scid = SkillStatusChangeTable[skillid];
        switch (skillid) {
        case RG_STRIPWEAPON:
        equip = EQP_WEAPON;
        cp_scid = SC_CP_WEAPON;
        break;
        case RG_STRIPSHIELD:
        equip = EQP_SHIELD;
        cp_scid = SC_CP_SHIELD;
        break;
        case RG_STRIPARMOR:
        equip = EQP_ARMOR;
        cp_scid = SC_CP_ARMOR;
        break;
        case RG_STRIPHELM:
        equip = EQP_HELM;
        cp_scid = SC_CP_HELM;
        break;
        default:
        map_freeblock_unlock();
        return 1;
        }

        if (tsc_data &&
        (tsc_data[scid].timer!=-1 ||
        tsc_data[cp_scid].timer!=-1))
        break;

        strip_fix = status_get_dex(src) - status_get_dex(bl);
        if(strip_fix < 0)
        strip_fix=0;
        strip_per = 5+5*skilllv+strip_fix/5;
        if (rand()%100 >= strip_per)
        break;

        if (dstsd) {
        for (i=0;i<MAX_INVENTORY;i++) {
        if (dstsd->status.inventory**.equip && (dstsd-
        **
        >status.inventory.equip &
        **
        **equip)){
        **
        **pc_unequipitem(dstsd,i,0);
        **
        **break;
        **
        **}
        **
        **}
        **
        **if (i == MAX_INVENTORY)
        **
        **break;
        **
        **}
        **
        **clif_skill_nodamage(src,bl,skillid,skilllv,1);
        **
        **strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
        **
        **status_change_start(bl,scid,skilllv,0,0,0,strip_time,0 );
        **
        **break;
        **
        }

        свадьбы от того самого арчера

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

          NNOV, короче archer хотел сказать, что нужно вернуть старую формулу, потому как эта слишком длинная :lol:

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

            коротко говоря: strip_per = 5+5*skilllv+strip_fix/5

            свадьбы от того самого арчера

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

              strip_fix = status_get_dex(src) - status_get_dex(bl);
              if(strip_fix < 0)
              strip_fix=0;
              strip_per = 5+5*skilllv+strip_fix/5;
              if (rand()%100 >= strip_per)
              break;

              (проверка немножко сомнительная)

              , а какий диапазон результатов в функции rand()%100 ? :roll:

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

                Спасибо огромное.
                strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
                получается еще время действия стрипа зависит от разницы_дексы/2.)))
                Вот этого я вообще не знал, спасибо за исходники, их иногда даже приятней смотреть, чем тупо читать разжеваную инфу.

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

                  .....

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

                    @Kpоmyc:
                    strip_fix = status_get_dex(src) - status_get_dex(bl);

                    if(strip_fix < 0)
                    strip_fix=0;
                    strip_per = 5+5*skilllv+strip_fix/5;
                    if (rand()%100 >= strip_per)
                    break;

                    (проверка немножко сомнительная)

                    , а какий диапазон результатов в функции rand()%100 ? :roll:
                    от 0 до 100, вроде все норм.

                    1 ответ Последний ответ Ответить Цитировать 0
                    • St.LukasS Не в сети
                      St.Lukas
                      отредактировано

                      Kpоmyc, смотри внимательнее

                      if (rand()%100 >= strip_per)

                      break;

                      т.е. если случайно сгенерированное число (от 0 до 100) больше чем шанс стрипа (strip_per), то функция стрипа прекращает выполнение.

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

                        if (rand()%100 >= strip_per)
                        break;
                        (проверка немножко сомнительная)

                        это когда 120 декс роуг стрипает нуба с 3го раза...

                        свадьбы от того самого арчера

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

                          если от 0 до 100 (101% :roll: ) то 30% удача , 71% неудача , но если , к примеру , от 1 до 100 , то получается 29% , потому как проверка на "больше-равно" ... вполне резонно что б было от 0 до 99 ...

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