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

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

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