Jump to content

Playtester

Developer
  • Posts

    820
  • Joined

  • Last visited

  • Days Won

    22

Posts posted by Playtester

  1. It's not so easy. Generally speaking, the max level for monster skills is already higher, you could do that at least by just raising the level in mob_skill_db. For players, the max level is defined in skill_db, but just raising it might not be sufficient.

    If you have levels above 13, you will need to update the define in skill.h:

    #define MAX_SKILL_LEVEL 13 /// Max Skill Level (for skill_db storage)
    

    Keep in mind that the system expects you to now define the required values for each level. It will try to continue a fixed pattern like when you define 4:8:12:16:20 it will automatically continues with 24, etc. but in other cases this can cause problem, like the values going negative in case of decreasing values. So in worst case you'll have to update all the skill_xxx_db stuff for every single skill.

    Finally just increasing the level server-sided much not actually affect how much you can learn on the client. You might need to modify the client to allow values above 10, which I'm not sure if anyone knows how to do. You could also write your own client but then you'll be busy with that the next 10 years.

    So in short, it's hard to do and that's why nobody replies.

  2. There's no switch for it as the iRO ASPD formula hasn't been coded at all.

    You could however, use pre-renewal ASPD which is probably closer to iRO than the renewal one. For that you need to open renewal.h and comment RENEWAL_ASPD.

    If you want to implement iRO ASPD yourself, you need to read yourself into status.c (just search for "aspd" to find the relevant code).

    • Upvote 1
  3. I think easiest way to do that would be to add some code in battle_calc_attack.

    You have already a min damage check there:

    	if( d.damage + d.damage2 < 1 )
    	{	//Miss/Absorbed
    		//Weapon attacks should go through to cause additional effects.
    		if (d.dmg_lv == ATK_DEF /*&& attack_type&(BF_MAGIC|BF_MISC)*/) // Isn't it that additional effects don't apply if miss?
    			d.dmg_lv = ATK_MISS;
    		d.dmotion = 0;
    	}

    above that I guess you could add something like:

    if(d.damage > 100000) d.damage = 100000;

     

  4. I can't do anything about it unless you tell me what packet needs to be send to the client so it works.

    Unit spells can't hit ice wall. LoV can not hit ice wall. Must be an iRO custom if it does on iRO.

    On rA you can already recast icewall on a destroyed wall tile.

    Everything is working as on Aegis already.

  5. It doesn't has much to do with immune attack.

    I didn't try around with that code too much but if you always set state |= BCT_ENEMY there, then I think monsters will always attack each other.

    If you find a good condition you can write for that you could pull it off.

  6. So if the player is a super player he should be able to chain combos however he wants?

    If guess you can get group_id via:

    int pc_get_group_id(struct map_session_data *sd);

    So for example... uh...

    		case MO_CHAINCOMBO:
    			if(!sc)
    				return false;
    			if(sc->data[SC_BLADESTOP])
    				break;
    			if(sc->data[SC_COMBO] && (pc_get_group_id(sd) > 0 || sc->data[SC_COMBO]->val1 == MO_TRIPLEATTACK))
    				break;
    			return false;

    Like this maybe?

    • Upvote 1
  7. Is it so hard to press Ctrl+F and then enter that text to find it?

    Or just search for AL_BLESSING to see whereever it applies. As I said it's the block that is for all normal status changes without special rules.

    	case AL_INCAGI:
    	case AL_BLESSING:
    	case MER_INCAGI:
    	case MER_BLESSING:
    		if (dstsd != NULL && tsc->data[SC_CHANGEUNDEAD]) {
    			skill_attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag);
    			break;
    		}
    	case PR_SLOWPOISON:
    	case PR_IMPOSITIO:
    	case PR_LEXAETERNA:
    	case PR_SUFFRAGIUM:
    	case PR_BENEDICTIO:
    	case LK_BERSERK:
    	case MS_BERSERK:
    	case KN_TWOHANDQUICKEN:
    	case KN_ONEHAND:
    	case MER_QUICKEN:
    	case CR_SPEARQUICKEN:
    	case CR_REFLECTSHIELD:
    	case MS_REFLECTSHIELD:
    	case AS_POISONREACT:
    	case MC_LOUD:
    	case MG_ENERGYCOAT:
    	case MO_EXPLOSIONSPIRITS:
    	case MO_STEELBODY:
    	case MO_BLADESTOP:
    	case LK_AURABLADE:
    	case LK_PARRYING:
    	case MS_PARRYING:
    	case LK_CONCENTRATION:
    	case WS_CARTBOOST:
    	case SN_SIGHT:
    	case WS_MELTDOWN:
    	case WS_OVERTHRUSTMAX:
    	case ST_REJECTSWORD:
    	case HW_MAGICPOWER:
    	case PF_MEMORIZE:
    	case PA_SACRIFICE:
    	case ASC_EDP:
    	case PF_DOUBLECASTING:
    	case SG_SUN_COMFORT:
    	case SG_MOON_COMFORT:
    	case SG_STAR_COMFORT:
    	case GS_MADNESSCANCEL:
    	case GS_ADJUSTMENT:
    	case GS_INCREASING:
    	case NJ_KASUMIKIRI:
    	case NJ_UTSUSEMI:
    	case NJ_NEN:
    	case NPC_DEFENDER:
    	case NPC_MAGICMIRROR:
    	case ST_PRESERVE:
    	case NPC_INVINCIBLE:
    	case NPC_INVINCIBLEOFF:
    	case RK_DEATHBOUND:
    	case AB_RENOVATIO:
    	case AB_EXPIATIO:
    	case AB_DUPLELIGHT:
    	case AB_SECRAMENT:
    	case AB_OFFERTORIUM:
    	case NC_ACCELERATION:
    	case NC_HOVERING:
    	case NC_SHAPESHIFT:
    	case WL_MARSHOFABYSS:
    	case WL_RECOGNIZEDSPELL:
    	case GC_VENOMIMPRESS:
    	case SC_DEADLYINFECT:
    	case LG_EXEEDBREAK:
    	case LG_PRESTIGE:
    	case SR_CRESCENTELBOW:
    	case SR_LIGHTNINGWALK:
    	case GN_CARTBOOST:
    	case KO_MEIKYOUSISUI:
    	case ALL_ODINS_POWER:
    	case ALL_FULL_THROTTLE:
    	case RA_UNLIMIT:
    	case WL_TELEKINESIS_INTENSE:
    	case RL_HEAT_BARREL:
    	case RL_P_ALTER:
    	case RL_E_CHAIN:
    	case SU_FRESHSHRIMP:
    	case SU_ARCLOUSEDASH:
    		clif_skill_nodamage(src,bl,skill_id,skill_lv,
    			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
    		break;

     

×
×
  • Create New...