PDA

Просмотр полной версии : Автокасты - механика работы каст с автокастами статусов или скилов



Faifer
14.11.2012, 18:06
Магнолия: bonus2 bAddEff,Eff_Curse,500;
Металинг: bonus3 bAutoSpell,"RG_STRIPWEAPON",1,50;


01 static int pc_bonus_addeff(struct s_addeffect* effect, int max, enum sc_type id, short rate, short arrow_rate, unsigned char flag)
02 {
03 int i;
04 if (!(flag&(ATF_SHORT|ATF_LONG)))
05 flag|=ATF_SHORT|ATF_LONG; //Default range: both
06 if (!(flag&(ATF_TARGET|ATF_SELF)))
07 flag|=ATF_TARGET; //Default target: enemy.

08 for (i = 0; i < max && effect[i].flag; i++) {
09 if (effect[i].id == id && effect[i].flag == flag)
10 {
11 effect[i].rate += rate;
12 effect[i].arrow_rate += arrow_rate;
13 return 1;
14 }
15 }
16 if (i == max) {
17 ShowWarning("pc_bonus: Reached max (%d) number of add effects per character!\n", max);
18 return 0;
19 }
20 effect[i].id = id;
21 effect[i].rate = rate;
22 effect[i].arrow_rate = arrow_rate;
23 effect[i].flag = flag;
24 return 1;
25 }


Эффекты, в данном случае наложение статуса, однозначно складываются что видно в строчках 11 и 12.
ВСЕ ОДНОТИПНЫЕ ЭФФЕКТЫ СКЛАДЫВАЮТСЯ. Мифы про то что каждая карта срабатывает отдельно не соответсвуют действительности.


01 static int pc_bonus_autospell(struct s_autospell *spell, int max, short id, short lv, short rate, short flag, short card_id)
02 {
03 int i;
04 if (rate < 0) return //Remove the autobonus.
05 pc_bonus_autospell_del(spell, max, id, lv, -rate, card_id);

06 for (i = 0; i < max && spell[i].id; i++) {
07 if ((spell[i].card_id == card_id || spell[i].rate < 0) &&
08 spell[i].id == id && spell[i].lv == lv)
09 {
10 if (!battle_config.autospell_stacking && spell[i].rate > 0)
11 return 0;
12 rate += spell[i].rate;
13 break;
14 }
15 }
16 if (i == max) {
17 ShowWarning("pc_bonus: Reached max (%d) number of autospells per character!\n", max);
18 return 0;
19 }
20 spell[i].id = id;
21 spell[i].lv = lv;
22 spell[i].rate = rate;
23 //Auto-update flag value.
24 if (!(flag&BF_RANGEMASK)) flag|=BF_SHORT|BF_LONG; //No range defined? Use both.
25 if (!(flag&BF_WEAPONMASK)) flag|=BF_WEAPON; //No attack type defined? Use weapon.
26 if (!(flag&BF_SKILLMASK)) {
27 if (flag&(BF_MAGIC|BF_MISC)) flag|=BF_SKILL; //These two would never trigger without BF_SKILL
28 if (flag&BF_WEAPON) flag|=BF_NORMAL; //By default autospells should only trigger on normal weapon attacks.
29 }
30 spell[i].flag|= flag;
31 spell[i].card_id = card_id;
32 return 1;
33 }

Обращаем внимание на сторчку 10 и присутсвующую в ней переменную battle_config.autospell_stacking. Видно что если она равна нолю то произойдёт выход из функции если такой автокаст (автокасты спелов разных уровней - разные автокасты) уже имеется. Если 1 то в строчках 12 и 13 эффекты складываются.
Значение battle_config.autospell_stacking по умолчанию равно 0.
АВТОКАСТЫ НЕ СУММИРУЮТСЯ.

KOBbI4
14.11.2012, 20:11
а если бить критами ваще нефига не сумируется