Jump to content

kadze

Members
  • Posts

    58
  • Joined

  • Last visited

Posts posted by kadze

  1. close2; instead of close;

    Remember, close; teminates the script execution, means everything below close; wont happen.

    close2? why? he gets an apple every 15 minutes, why make another one?

  2. in vending.c

     

    rewrite

     

     

    
    
    pc_payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd);
    if( battle_config.vending_tax )
    z -= z * (battle_config.vending_tax/10000.);
    pc_getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);
     

    to 

    else
    {
    pc_payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd);
    if( battle_config.vending_tax )
    z -= z * (battle_config.vending_tax/10000.);
    pc_getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);
    }
    
    
  3. not my,but i have this

    maybe who fix it

    [EXPAMLE]
    npcsetstatus STATUS_STR, 1;
    npcsetstatus STATUS_AGI, 9;
    npcsetstatus STATUS_VIT, 1;
    npcsetstatus STATUS_INT, 40;
    npcsetstatus STATUS_DEX, 55;
    npcsetstatus STATUS_LUK, 1;
    npcsetstatus STATUS_LEVEL, 65;
    npcsetstatus STATUS_JOBLV, 50;
    npcsetstatus STATUS_RECALC, 1;
    [NPC.H]
    struct npc_status {
    int
     blevel, jlevel;
    struct status_data sd;
    short
     head_top, head_mid, head_bottom;
    int
     castrate, delayrate, hprate, sprate,
     atk_rate,hprecov_rate,sprecov_rate,
     matk_rate,critical_rate,hit_rate,flee_rate,flee2_rate,
     def_rate,def2_rate,mdef_rate,mdef2_rate,
     double_rate, double_add_rate,
     perfect_hit, perfect_hit_add, splash_range, splash_add_range;
    };
    struct npc_status* status;
    [sTATUS.C]
    int status_calc_npc_(struct npc_data* nd) {
    struct npc_status *status;
    const struct status_change *sc = &nd->sc;
    int i;
    struct item_data* itd;
    nullpo_ret(nd);
    nullpo_ret(nd->status);
    nullpo_ret(nd->status->sd);
    status = nd->status;
    status->sd.max_hp =
    status->sd.max_sp = 0;
    memset(&status->sd.batk, 0, sizeof(struct status_data)
      -sizeof(status->sd.hp)
      -sizeof(status->sd.sp)
      -sizeof(status->sd.max_hp)
      -sizeof(status->sd.max_sp)
      -sizeof(status->sd.str)
      -sizeof(status->sd.agi)
      -sizeof(status->sd.vit)
      -sizeof(status->sd.int_)
      -sizeof(status->sd.dex)
      -sizeof(status->sd.luk)
    );
    status->castrate =
    status->delayrate =
    status->hprate =
    status->sprate =
    status->atk_rate =
    status->hprecov_rate =
    status->sprecov_rate =
    status->matk_rate =
    status->critical_rate =
    status->hit_rate =
    status->flee_rate =
    status->flee2_rate =
    status->def_rate =
    status->def2_rate =
    status->mdef_rate =
    status->mdef2_rate = 100;
    status->sd.mode = MD_MASK&~(MD_BOSS|MD_PLANT|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK);
    status->sd.size = (nd->class_&JOBL_BABY)?SZ_SMALL:SZ_MEDIUM;
    status->sd.speed = DEFAULT_WALK_SPEED;
    status->sd.aspd_rate = 1000;
    status->sd.ele_lv = 1;
    status->sd.race = RC_DEMIHUMAN;
    if( status->sd.rhw.range < 1 ) status->sd.rhw.range = 1;
    if( status->sd.lhw.range < 1 ) status->sd.lhw.range = 1;
    if( status->sd.rhw.range < status->sd.lhw.range )
     status->sd.rhw.range = status->sd.lhw.range;
    status->double_rate += status->double_add_rate;
    status->perfect_hit += status->perfect_hit_add;
    status->splash_range += status->splash_add_range;
    // Relative modifiers from equipment
    if( status->hprate < 0 )
     status->hprate = 0;
    if( status->hprate != 100 )
     status->sd.max_hp = status->sd.max_hp * status->hprate/100;
    if( battle_config.hp_rate != 100 )
     status->sd.max_hp = status->sd.max_hp * battle_config.hp_rate/100;
    if( status->sd.max_hp > (unsigned int)battle_config.max_hp )
     status->sd.max_hp = battle_config.max_hp;
    else if( !status->sd.max_hp )
     status->sd.max_hp = 1;
    // set the current HP to max HP if current HP is zero.
    if( status->sd.hp == 0 )
     status->sd.hp = status->sd.max_hp;
    //----- SP Calculation
    i = 10 + status->blevel*sp_coefficient[pc_class2idx(nd->class_)]/100;
    i += i * status->sd.int_/100;
    if( nd->class_&JOBL_UPPER )
     i += i * 25/100;
    else if ( nd->class_&JOBL_BABY )
     i -= i * 30/100;
    status->sd.max_sp = cap_value(i, 0, INT_MAX);
    if( status->sprate < 0 )
     status->sprate = 0;
    if( status->sprate != 100 )
     status->sd.max_sp = status->sd.max_sp * status->sprate/100;
    if( battle_config.sp_rate != 100 )
     status->sd.max_sp = status->sd.max_sp * battle_config.sp_rate/100;
    if( status->sd.max_sp > (unsigned int)battle_config.max_sp )
     status->sd.max_sp = battle_config.max_sp;
    else if( !status->sd.max_sp )
     status->sd.max_sp = 1;
    //----- Misc Calculation
    status_calc_misc(&nd->bl, &status->sd, status->blevel);
    if( status->matk_rate < 0 )
     status->matk_rate = 0;
    if( status->matk_rate != 100 ) {
     status->sd.matk_max = status->sd.matk_max * status->matk_rate/100;
     status->sd.matk_min = status->sd.matk_min * status->matk_rate/100;
    }
    if( status->hit_rate < 0 )
     status->hit_rate = 0;
    if( status->hit_rate != 100 )
     status->sd.hit = status->sd.hit * status->hit_rate/100;
    if( status->flee_rate < 0 )
     status->flee_rate = 0;
    if( status->flee_rate != 100 )
     status->sd.flee = status->sd.flee * status->flee_rate/100;
    if( status->def2_rate < 0 )
     status->def2_rate = 0;
    if( status->def2_rate != 100 )
     status->sd.def2 = status->sd.def2 * status->def2_rate/100;
    if( status->mdef2_rate < 0 )
     status->mdef2_rate = 0;
    if( status->mdef2_rate != 100 )
     status->sd.mdef2 = status->sd.mdef2 * status->mdef2_rate/100;
    if( status->critical_rate < 0 )
     status->critical_rate = 0;
    if( status->critical_rate != 100 )
     status->sd.cri = status->sd.cri * status->critical_rate/100;
    if( status->flee2_rate < 0 )
     status->flee2_rate = 0;
    if( status->flee2_rate != 100 )
     status->sd.flee2 = status->sd.flee2 * status->flee2_rate/100;
    if( status->def_rate < 0 )
     status->def_rate = 0;
    if( status->def_rate != 100 ) {
     i = status->sd.def * status->def_rate/100;
     status->sd.def = cap_value(i, CHAR_MIN, CHAR_MAX);
    }
    if( !battle_config.magic_defense_type && status->sd.mdef > battle_config.max_def ) {
     status->sd.mdef2 += battle_config.over_def_bonus*(status->sd.mdef - battle_config.max_def);
     status->sd.mdef = (signed char)battle_config.max_def;
    }
    //----- ASPD Calculation
     // PCs call function status_base_amotion_pc
    i=1000; // instead I set it to this 
    status->sd.amotion = cap_value(i,battle_config.max_aspd,2000);
    status->sd.adelay = 2*status->sd.amotion;
    //----- DMOTION
    i = 800-status->sd.agi*4;
    status->sd.dmotion = cap_value(i, 400, 800);
    if( battle_config.pc_damage_delay_rate != 100 )
     status->sd.dmotion = status->sd.dmotion*battle_config.pc_damage_delay_rate/100;
    return 1;
    }
    if( flag&SCB_BASE ) {// calculate the object's base status too
     switch( bl->type ) {
      case BL_PC:  status_calc_pc_(BL_CAST(BL_PC,bl), first); break;
      case BL_MOB: status_calc_mob_(BL_CAST(BL_MOB,bl), first); break;
      case BL_PET: status_calc_pet_(BL_CAST(BL_PET,bl), first); break;
      case BL_HOM: status_calc_homunculus_(BL_CAST(BL_HOM,bl),first); break;
      case BL_MER: status_calc_mercenary_(BL_CAST(BL_MER,bl), first); break;
      case BL_ELEM: status_calc_elemental_(BL_CAST(BL_ELEM,bl), first);  break;
    +   case BL_NPC: status_calc_npc_(BL_CAST(BL_NPC,bl));   break;
     }
    }
    [sTATUS.H]
    #define status_calc_npc(nd) status_calc_bl_(&(nd)->bl, SCB_ALL, 0)
    [CONST.TXT]
    STATUS_HP	   0
    STATUS_SP	   1
    STATUS_MAXHP	2
    STATUS_MAXSP	3
    STATUS_STR	  4
    STATUS_AGI	  5
    STATUS_VIT	  6
    STATUS_INT	  7
    STATUS_DEX	  8
    STATUS_LUK	  9
    STATUS_MATK_MIN 10
    STATUS_MATK_MAX 11
    STATUS_SPEED	12
    STATUS_AMOTION  13
    STATUS_ADELAY   14
    STATUS_DMOTION  15
    STATUS_MODE	 16
    STATUS_HIT	  17
    STATUS_FLEE	 18
    STATUS_CRI	  19
    STATUS_PDODGE   20
    STATUS_DEF2	 21
    STATUS_MDEF2	22
    STATUS_ASPD	 23
    STATUS_DEF_ELE  24
    STATUS_ELE_LV   25
    STATUS_SIZE	 26
    STATUS_RACE	 27
    STATUS_DEF	  28
    STATUS_MDEF	 29
    STATUS_LEVEL	30
    STATUS_JOBLV	31
    STATUS_RECALC   32
    [sCRIPT.C]
    BUILDIN_DEF(npcsetstatus, "ii"),
    BUILDIN_FUNC(npcsetstatus) {
    TBL_NPC* nd = (TBL_NPC*)map_id2bl(st->oid);
    int type = script_getnum(st,2);
    int value = script_getnum(st,3);
    struct status_data* status;
    if( !nd ) {
     ShowError("script:npcsetstatus: No NPC o.O\n");
     return 0;
    }
    if( !nd->status ) {
     struct npc_status* status;
     status = (struct npc_status*)aMalloc(sizeof(struct npc_status));
     memset(status, 0, sizeof(struct npc_status));
     nd->status = status;
     status_calc_npc(nd);
    }
    status = status_get_status_data(&nd->bl);
    switch( type ) {
     case 0: // HP
      status->hp = value;
      if( status->max_hp < status->hp ) { // should this be an error or a feature?
    status->max_hp = value;
      }
      break;
     case 1: // SP
      status->sp = value;
      if( status->max_sp < status->sp ) { // should this be an error or a feature?
    status->max_sp = value;
      }
      break;
     case 2: // MAX_HP
      status->max_hp = value;
      if( status->hp > status->max_hp ) { // this I'm calling an error
    ShowError("script:npcsetstatus: NPC new max hp (%d) is less than current hp (%d).  Setting current hp to max hp.\n", value, status->hp);
    status->hp = status->max_hp;
      }
      break;
     case 3: // MAX_SP
      status->max_sp = value;
      if( status->sp > status->max_sp ) { // this too!
    ShowError("script:npcsetstatus: NPC new max sp (%d) is less than current sp (%d).  Setting current sp to max sp.\n", value, status->sp);
    status->sp = status->max_sp;
      }
      break;
     case 4: // str
      status->str = value;
      break;
     case 5: // agi
      status->agi = value;
      break;
     case 6: // vit
      status->vit = value;
      break;
     case 7: // int_
      status->int_ = value;
      break;
     case 8: // dex
      status->dex = value;
      break;
     case 9: // luk
      status->luk = value;
      break;
     case 10: // matk_min
      status->matk_min = value;
      break;
     case 11: // matk_max
      status->matk_max = value;
      break;
     case 12: // speed
      status->speed = value;
      break;
     case 13: // amotion
      status->amotion = value;
      break;
     case 14: // adelay
      status->adelay = value;
      break;
     case 15: // dmotion
      status->dmotion = value;
      break;
     case 16: // mode (I don't think this will do anything ><!)
      status->mode = value;
      break;
     case 17: // hit
      status->hit = value;
      break;
     case 18: // flee
      status->flee = value;
      break;
     case 19: // cri
      status->cri = value;
      break;
     case 20: // perfect dodge
      status->flee2 = value;
      break;
     case 21: // def2
      status->def2 = value;
      break;
     case 22: // mdef2
      status->mdef2 = value;
      break;
     case 23: // aspd_rate
      status->aspd_rate = value;
      break;
     case 24: // def_ele
      status->def_ele = value;
      break;
     case 25: // ele_lv
      status->ele_lv = value;
      break;
     case 26: // size
      status->size = value;
      break;
     case 27: // race
      status->race = value;
      break;
     case 28: // def
      status->def = value;
      break;
     case 29: // mdef
      status->mdef = value;
      break;
     case 30: // level
      nd->status->blevel = value;
      break;
     case 31: // jlevel
      nd->status->jlevel = value;
      break;
     case 32: // RECALCULATE VALUES BASED ON STATS
      status_calc_npc(nd);
      break;
     default:
      ShowError("script:npcsetstatus: Unknown type: %d\n", type);
      return 1;
    }
    return 0;
    }
    

    • Upvote 1
  4. для проверки наверно поможет это:

    BUILDIN_FUNC(getpartyid)
    {
       const char* nombre;
       struct party_data* pd;
       TBL_PC* sd;
    
       nombre = script_getstr(st,2);
       sd = script_rid2sd(st);
       if( sd == NULL )
        return 0;    //No est� enganchado a un usuario
       pd = party_searchname(nombre);    //Obtiene el party_data de la party de nombre "nombre"
       if( pd == NULL )
       {
        script_pushint(st, 0);
        return 0;    //No encontr� la party
       }
       script_pushint(st, pd->party.party_id);
       return 0;
    }
    

  5. а как ты выведешь отображение нового слота в эквипе для ожерелья? речь шла об этом,а не о двухслотовой клипе

    переписать itemslotcounttable
    мой же пост

    itemslotcounttable = itemslotcounttable.txt в папке дата либо в грф файле. Но таки да, видимо открыть текстовый файл это снова челленж для избранных ;)

    @Лилит, есть ли возможность забубенить привязку спрайта к чармам? Ну или ауру чтоли... Тоесть чарм попадает к тебе в инвентарь и у тебя меняется аура... Просто не хочу никаких бонусов итд, хочу внешних изменений ) и аура как-то больше мне нравится как вариант чем спрайты... Надеюсь, на чистой рА можно использовать несколько видов аур без изменения сорса?

    Просто кто то не понимает о чем идет речь и начинает строить из себя умного

  6. Это большое ололо,скрипт в 100 строк за такие деньги.

    ну да небольшая срц модификация нужна,но это все делается быстро.

    Напиши в лс сумму,которую готов заплатить может я возьмусь сделать.

    И подробней скрипт опиши

×
×
  • Create New...