helgardh

Membro
  • Total de itens

    22
  • Registro em

  • Última visita

Reputação

2 Iniciante

1 Seguidor

Sobre helgardh

  • Rank
    Membro Novato

Últimos Visitantes

185 visualizações
  1. quanto de ataque eu ganho por ponto de forca, quando de esquiva ganho por ponto de agilidade, quanto de aspd, critico, essas coisas...
  2. Galera, estava procurando o local onde eu poderia alterar as formulas dos atributos e achei no status.c esse codigo: void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { const struct status_data *bst = status->get_base_status(bl); struct status_data *st = status->get_status_data(bl); struct status_change *sc = status->get_sc(bl); TBL_PC *sd = BL_CAST(BL_PC,bl); int temp; if (!bst || !st) return; /** [Playtester] * This needs to be done even if there is currently no status change active, because * we need to update the speed on the client when the last status change ends. **/ if(flag&SCB_SPEED) { struct unit_data *ud = unit->bl2ud(bl); /** [Skotlex] * Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER * because if you step on something while walking, the moment this * piece of code triggers the walk-timer is set on INVALID_TIMER) **/ if (ud) ud->state.change_walk_target = ud->state.speed_changed = 1; } if((!(bl->type&BL_REGEN)) && (!sc || !sc->count)) { //No difference. status_cpy(st, bst); return; } if(flag&SCB_STR) { st->str = status->calc_str(bl, sc, bst->str); flag|=SCB_BATK; if( bl->type&BL_HOM ) flag |= SCB_WATK; } if(flag&SCB_AGI) { st->agi = status->calc_agi(bl, sc, bst->agi); flag|=SCB_FLEE #ifdef RENEWAL |SCB_DEF2 #endif ; if( bl->type&(BL_PC|BL_HOM) ) flag |= SCB_ASPD|SCB_DSPD; } if(flag&SCB_VIT) { st->vit = status->calc_vit(bl, sc, bst->vit); flag|=SCB_DEF2|SCB_MDEF2; if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) ) flag |= SCB_MAXHP; if( bl->type&BL_HOM ) flag |= SCB_DEF; } if(flag&SCB_INT) { st->int_ = status->calc_int(bl, sc, bst->int_); flag|=SCB_MATK|SCB_MDEF2; if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) ) flag |= SCB_MAXSP; if( bl->type&BL_HOM ) flag |= SCB_MDEF; } if(flag&SCB_DEX) { st->dex = status->calc_dex(bl, sc, bst->dex); flag|=SCB_BATK|SCB_HIT #ifdef RENEWAL |SCB_MATK|SCB_MDEF2 #endif ; if( bl->type&(BL_PC|BL_HOM) ) flag |= SCB_ASPD; if( bl->type&BL_HOM ) flag |= SCB_WATK; } if(flag&SCB_LUK) { st->luk = status->calc_luk(bl, sc, bst->luk); flag|=SCB_BATK|SCB_CRI|SCB_FLEE2 #ifdef RENEWAL |SCB_MATK|SCB_HIT|SCB_FLEE #endif ; } if(flag&SCB_BATK && bst->batk) { st->batk = status->base_atk(bl,st); temp = bst->batk - status->base_atk(bl,bst); if (temp) { temp += st->batk; st->batk = cap_value(temp, 0, USHRT_MAX); } st->batk = status->calc_batk(bl, sc, st->batk, true); } if(flag&SCB_WATK) { st->rhw.atk = status->calc_watk(bl, sc, bst->rhw.atk, true); if (!sd) //Should not affect weapon refine bonus st->rhw.atk2 = status->calc_watk(bl, sc, bst->rhw.atk2, true); if(bst->lhw.atk) { if (sd) { sd->state.lr_flag = 1; st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true); sd->state.lr_flag = 0; } else { st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true); st->lhw.atk2 = status->calc_watk(bl, sc, bst->lhw.atk2, true); } } } if(flag&SCB_HIT) { if (st->dex == bst->dex #ifdef RENEWAL && st->luk == bst->luk #endif ) st->hit = status->calc_hit(bl, sc, bst->hit, true); else st->hit = status->calc_hit(bl, sc, bst->hit + (st->dex - bst->dex) #ifdef RENEWAL + (st->luk/3 - bst->luk/3) #endif , true); } if(flag&SCB_FLEE) { if (st->agi == bst->agi #ifdef RENEWAL && st->luk == bst->luk #endif ) st->flee = status->calc_flee(bl, sc, bst->flee, true); else st->flee = status->calc_flee(bl, sc, bst->flee +(st->agi - bst->agi) #ifdef RENEWAL + (st->luk/5 - bst->luk/5) #endif , true); } if(flag&SCB_DEF) { st->def = status->calc_def(bl, sc, bst->def, true); if( bl->type&BL_HOM ) st->def += (st->vit/5 - bst->vit/5); } if(flag&SCB_DEF2) { if (st->vit == bst->vit #ifdef RENEWAL && st->agi == bst->agi #endif ) st->def2 = status->calc_def2(bl, sc, bst->def2, true); else st->def2 = status->calc_def2(bl, sc, bst->def2 #ifdef RENEWAL + (int)( ((float)st->vit/2 - (float)bst->vit/2) + ((float)st->agi/5 - (float)bst->agi/5) ) #else + (st->vit - bst->vit) #endif , true); } if(flag&SCB_MDEF) { st->mdef = status->calc_mdef(bl, sc, bst->mdef, true); if( bl->type&BL_HOM ) st->mdef += (st->int_/5 - bst->int_/5); } if(flag&SCB_MDEF2) { if (st->int_ == bst->int_ && st->vit == bst->vit #ifdef RENEWAL && st->dex == bst->dex #endif ) st->mdef2 = status->calc_mdef2(bl, sc, bst->mdef2, true); else st->mdef2 = status->calc_mdef2(bl, sc, bst->mdef2 +(st->int_ - bst->int_) #ifdef RENEWAL + (int)( ((float)st->dex/5 - (float)bst->dex/5) + ((float)st->vit/5 - (float)bst->vit/5) ) #else + ((st->vit - bst->vit)>>1) #endif , true); } if(flag&SCB_SPEED) { st->speed = status->calc_speed(bl, sc, bst->speed); if( bl->type&BL_PC && !(sd && sd->state.permanent_speed) && st->speed < battle_config.max_walk_speed ) st->speed = battle_config.max_walk_speed; if( bl->type&BL_HOM && battle_config.hom_setting&0x8 && ((TBL_HOM*)bl)->master) st->speed = status->get_speed(&((TBL_HOM*)bl)->master->bl); } if(flag&SCB_CRI && bst->cri) { if (st->luk == bst->luk) st->cri = status->calc_critical(bl, sc, bst->cri, true); else st->cri = status->calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true); } if(flag&SCB_FLEE2 && bst->flee2) { if (st->luk == bst->luk) st->flee2 = status->calc_flee2(bl, sc, bst->flee2, true); else st->flee2 = status->calc_flee2(bl, sc, bst->flee2 +(st->luk - bst->luk), true); } if(flag&SCB_ATK_ELE) { st->rhw.ele = status->calc_attack_element(bl, sc, bst->rhw.ele); if (sd) sd->state.lr_flag = 1; st->lhw.ele = status->calc_attack_element(bl, sc, bst->lhw.ele); if (sd) sd->state.lr_flag = 0; } if(flag&SCB_DEF_ELE) { st->def_ele = status->calc_element(bl, sc, bst->def_ele); st->ele_lv = status->calc_element_lv(bl, sc, bst->ele_lv); } if(flag&SCB_MODE) { st->mode = status->calc_mode(bl, sc, bst->mode); //Since mode changed, reset their state. if (!(st->mode&MD_CANATTACK)) unit->stop_attack(bl); if (!(st->mode&MD_CANMOVE)) unit->stop_walking(bl, STOPWALKING_FLAG_FIXPOS); } // No status changes alter these yet. //if(flag&SCB_SIZE) //if(flag&SCB_RACE) //if(flag&SCB_RANGE) if(flag&SCB_MAXHP) { if( bl->type&BL_PC ) { st->max_hp = status->base_pc_maxhp(sd,st); if (sd) st->max_hp += bst->max_hp - sd->status.max_hp; st->max_hp = status->calc_maxhp(bl, sc, st->max_hp); if( st->max_hp > (unsigned int)battle_config.max_hp ) st->max_hp = (unsigned int)battle_config.max_hp; } else { st->max_hp = status->calc_maxhp(bl, sc, bst->max_hp); } if( st->hp > st->max_hp ) { //FIXME: Should perhaps a status_zap should be issued? st->hp = st->max_hp; if( sd ) clif->updatestatus(sd,SP_HP); } } if(flag&SCB_MAXSP) { if( bl->type&BL_PC ) { st->max_sp = status->base_pc_maxsp(sd,st); if (sd) st->max_sp += bst->max_sp - sd->status.max_sp; st->max_sp = status->calc_maxsp(&sd->bl, &sd->sc, st->max_sp); if( st->max_sp > (unsigned int)battle_config.max_sp ) st->max_sp = (unsigned int)battle_config.max_sp; } else { st->max_sp = status->calc_maxsp(bl, sc, bst->max_sp); } if( st->sp > st->max_sp ) { st->sp = st->max_sp; if( sd ) clif->updatestatus(sd,SP_SP); } } if(flag&SCB_MATK) { status->update_matk(bl); } if ( flag&SCB_DSPD ) { int dmotion; if ( bl->type&BL_PC ) { if (bst->agi == st->agi) st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); else { dmotion = 800-st->agi*4; st->dmotion = cap_value(dmotion, 400, 800); if ( battle_config.pc_damage_delay_rate != 100 ) st->dmotion = st->dmotion*battle_config.pc_damage_delay_rate / 100; //It's safe to ignore bst->dmotion since no bonus affects it. st->dmotion = status->calc_dmotion(bl, sc, st->dmotion); } } else if ( bl->type&BL_HOM ) { dmotion = 800 - st->agi * 4; st->dmotion = cap_value(dmotion, 400, 800); st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); } else { // mercenary and mobs st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); } } if(flag&SCB_ASPD) { int amotion; if ( bl->type&BL_HOM ) { #ifdef RENEWAL amotion = ((TBL_HOM*)bl)->homunculusDB->baseASPD; amotion = amotion - amotion * status_get_homdex(bl) / 1000 - status_get_homagi(bl) * amotion / 250; amotion = (amotion * status->calc_aspd(bl, sc, 1) + status->calc_aspd(bl, sc, 2)) / -100 + amotion; #else amotion = (1000 - 4 * st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD / 1000; amotion = status->calc_aspd_rate(bl, sc, amotion); if ( st->aspd_rate != 1000 ) amotion = amotion*st->aspd_rate / 1000; #endif amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion, battle_config.max_aspd, 2000); st->adelay = st->amotion; } else if ( bl->type&BL_PC ) { amotion = status->base_amotion_pc(sd, st); #ifndef RENEWAL_ASPD st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if(st->aspd_rate != 1000) amotion = amotion*st->aspd_rate/1000; #else // aspd = baseaspd + floor(sqrt((agi^2/2) + (dex^2/5))/4 + (potskillbonus*agi/200)) amotion -= (int)(sqrt((pow(st->agi, 2) / 2) + (pow(st->dex, 2) / 5)) / 4 + ((float)status->calc_aspd(bl, sc, 1) * st->agi / 200)) * 10; if ( (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) != 0 ) // RE ASPD percertage modifier amotion -= ((amotion - ((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd)) * (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) / 10 + 5) / 10; if ( st->aspd_rate != 1000 ) // absolute percentage modifier amotion = (200 - (200 - amotion / 10) * st->aspd_rate / 1000) * 10; #endif amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion, ((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd), 2000); st->adelay = 2 * st->amotion; } else { // mercenary and mobs amotion = bst->amotion; st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if ( st->aspd_rate != 1000 ) amotion = amotion*st->aspd_rate / 1000; amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion, battle_config.monster_max_aspd, 2000); temp = bst->adelay*st->aspd_rate / 1000; st->adelay = cap_value(temp, battle_config.monster_max_aspd * 2, 4000); } } if(flag&(SCB_VIT|SCB_MAXHP|SCB_INT|SCB_MAXSP) && bl->type&BL_REGEN) status->calc_regen(bl, st, status->get_regen_data(bl)); if(flag&SCB_REGEN && bl->type&BL_REGEN) status->calc_regen_rate(bl, status->get_regen_data(bl), sc); } Mas quando eu altero e recompilo, nao muda nada no servidor. Alguma ideia do problema ?
  3. os atributos eu ja aumentei mas queria aumentar o dano base normal :/ pq ta muito baixo pra atributos altos
  4. Como faço pra aumentar o dano básico do meu servidor ?
  5. Como eu aumento a taxa de dano base no emulador ? To achando o dano básico muito baixo. Preciso de ajuda por favor.
  6. Seja bem-vindo ao Cronus-Emulator, helgardh :)