Нужна формула расчета стрипа
-
сабж.., слышал что шанс от дексы увеличивается..
П.С. ногами не пинать. -
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;
**
} -
NNOV, короче archer хотел сказать, что нужно вернуть старую формулу, потому как эта слишком длинная :lol:
-
коротко говоря: strip_per = 5+5*skilllv+strip_fix/5
-
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:
-
Спасибо огромное.
strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
получается еще время действия стрипа зависит от разницы_дексы/2.)))
Вот этого я вообще не знал, спасибо за исходники, их иногда даже приятней смотреть, чем тупо читать разжеваную инфу. -
.....
-
@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, вроде все норм. -
Kpоmyc, смотри внимательнее
if (rand()%100 >= strip_per)
break;
т.е. если случайно сгенерированное число (от 0 до 100) больше чем шанс стрипа (strip_per), то функция стрипа прекращает выполнение.
-
if (rand()%100 >= strip_per)
break;
(проверка немножко сомнительная)это когда 120 декс роуг стрипает нуба с 3го раза...
-
если от 0 до 100 (101% :roll: ) то 30% удача , 71% неудача , но если , к примеру , от 1 до 100 , то получается 29% , потому как проверка на "больше-равно" ... вполне резонно что б было от 0 до 99 ...