Jump to content

Playtester

Developer
  • Posts

    822
  • Joined

  • Last visited

  • Days Won

    22

Posts posted by Playtester

  1. C'mon it's a normal math formula you don't need me to write that down.

    if(sd) //Player
        hitrate += sstatus->hit - flee;
    else //Monster
        hitrate += sstatus->hit - flee/2;

     

  2. Probably easiest to just change the hit calculation or just increase the dex of monsters.

    In battle.c::is_attack_hitting you have this:

    hitrate += sstatus->hit - flee;

    You could change it into something like...

    if(sd) //Player
        hitrate += sstatus->hit - flee;
    else //Monster
        hitrate += sstatus->hit*2 - flee;

    That would for example double their hit in the calculation.

    Maybe a better idea would be to half the flee of the target instead, though.

  3. There may be a client-sided delay that cannot be reduced further.

    Other than that it should work. Which skill fails to cast when you try it? Does it give any error message? Did you check the task bar? It actually marks if a skill is on cooldown.

  4. I only have that with people I've been playing together with. Many of them just disappeared eventually, they never said bye or anything, just didn't come online anymore (of some I even had the skype account but they don't come on there anymore either). Thinking of them really makes me sad and I often wonder if they died, are held prisoner in a cellar of some psychopath or just got a family and don't have time for the internets anymore.

    It's kinda weird because doing something together in real life and playing together in an MMORPG is about the same level for me. You have a good time together in both cases. But in real life it's harder for people to just disappear. Even if they don't come on anymore, you can still go to their house and ask them what's up. You can't do that with people from the internet so easily, so it's hard to find a closure if they just disappear, so they'll just leave scars on you forever.

  5. Okay so you want it to be ground target.

    Spiderweb is a pretty complex skill, it can stack durations and ends when it doesn't trap anymore, so it might not work to just change targeting of the skill.

    If you want to give Sages something like Ankle Snare I guess you have two ways to do that:

    1. Simply replace Spiderweb with Ankle Snare skill in the Sage skill tree (I think it also requires some client file changes so it can actually display Ankle Snare in the skill tree on the interface, but not sure about those).

    2. Search the whole source code for PF_SPIDERWEB and UNT_SPIDERWEB and remove all that code. Then add "PF_SPIDERWEB" whereever HT_ANKLESNARE appears and "UNT_SPIDERWEB" whereever "UNT_ANKLESNARE" appears. Finally the db entries in the skill_db and skill_unit_db also need to be unified (mostly same values except skill id and packet number of sprite).

  6. Why would weapon damage affect it when the damage is based on your MaxHP instead of ATK?

    Anyway you can change it to whatever you want in battle.c:

    		case PA_SACRIFICE:
    			wd.damage = sstatus->max_hp* 9/100;
    			wd.damage2 = 0;

    Cards affecting damage you can all define in skill_db, no code changes needed for that.

    • Upvote 1
  7. Requires packet capturing as the current packet data doesn't support to combine crit with skill. But of course you could just put that into the damage calculation like Focused Arrow Strike:

    	if( !(wd.type&DMG_MULTI_HIT) && sstatus->cri && (!skill_id ||
    		skill_id == KN_AUTOCOUNTER || skill_id == SN_SHARPSHOOTING ||
    		skill_id == MA_SHARPSHOOTING || skill_id == NJ_KIRIKAGE))

    Though this code also checks that it's not a multi hit, so I guess further modifications might be needed.

  8. Sorry, I'm not familiar enough with client mods, so I don't really know how to do it. I just say that you modified the client to show cast range and thought you could configure it to show ground effects as well.

    It's honestly hard to tell from here, why it doesn't work. I could try again on my rAthena if I can reproduce it somehow, but last time I tried, spaming was possible and I also know rAthena based servers where it works.

    You probably will need to debug it on your machine directly using Visual Studio.

    Actually, in the current implementation it doesn't even use timerskill anymore, but I'm not sure if you have that. Let me guide you through the code so you can understand and debug it.

    In the current implementation, the placing of the meteor storm cells starts here (skill.c):

    	case WZ_METEOR:
    	case SU_CN_METEOR: {
    			int area = skill_get_splash(skill_id, skill_lv);
    			short tmpx = 0, tmpy = 0;
    			if (sd && skill_id == SU_CN_METEOR) {
    				short item_idx = pc_search_inventory(sd, ITEMID_CATNIP_FRUIT);
    				if (item_idx >= 0) {
    					pc_delitem(sd, item_idx, 1, 0, 1, LOG_TYPE_CONSUME);
    					flag |= 1;
    				}
    			}
    			for (i = 1; i <= skill_get_time(skill_id, skill_lv)/skill_get_unit_interval(skill_id); i++) {
    				// Creates a random Cell in the Splash Area
    				tmpx = x - area + rnd()%(area * 2 + 1);
    				tmpy = y - area + rnd()%(area * 2 + 1);
    				skill_unitsetting(src, skill_id, skill_lv, tmpx, tmpy, flag+i*skill_get_unit_interval(skill_id));
    			}
    		}
    		break;

    The number of meteor should be "time" define in skill_cast_db.txt (which you quoted early, so at level 9 which you are casting the video it should be 6000) divided by the interval you defined in skill_unit_db which should be 1000. So 6000/1000 = 6 meteor cells placed.

    Each cell will get a different timer as the Meteors will start at different times (but those don't even count as timerskills, so it doesn't add to the limit).

    	case WZ_METEOR:
    	case SU_CN_METEOR:
    		limit = flag - (flag&1);
    		val1 = (flag&1);
    		flag = 0; // Flag should not influence anything else for these skills
    		break;

    ^ Here we make sure that the values of the cell are set correctly.

    			default:
    				if (group->val2 == 1 && (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR)) {
    					// Deal damage before expiration
    					break;
    				}
    				skill_delunit(unit);
    				break;

    ^ This code ensure that Meteor Storm cells don't get removed before dealing damage.

    			default:
    				if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR) {
    					if (group->val2 == 0 && (DIFF_TICK(tick, group->tick) >= group->limit - group->interval || DIFF_TICK(tick, group->tick) >= unit->limit - group->interval)) {
    						// Unit will expire the next interval, start dropping Meteor
    						struct block_list* src;
    						if ((src = map_id2bl(group->src_id)) != NULL) {
    							clif_skill_poseffect(src, group->skill_id, group->skill_lv, bl->x, bl->y, tick);
    							group->val2 = 1;
    						}
    					}
    					// No damage until expiration
    					return 0;
    				}
    				break;

    ^ This code handles the display of the falling meteor which is 1 second before the cell expires.

    		else if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR) {
    			skill_delunit(unit);
    			return 0;
    		}

    ^ And here we finally delete it after they dealt damage.

     

    So, that's how it works in the current rAthena implementation.

    It doesn't show any error in the map server, right? Something like unit limit reached?

    • Upvote 2
  9. I already replied to you in your previous thread:

    The results of your tests would actually indicate that you have an older implementation of Meteor Storm. In skill.h, check your MAX_SKILLTIMERSKILL value. Also maybe post your current Meteor Storm code. Also setting up your client so that it shows UNT_DUMMYSKILL (the cells where the meteors will land) would most likely make the problem visible.

    • Upvote 1
  10. It already has damage variance. It's from DEX to WeaponATK. So e.g. if you have 50 dex and the weapon has 140 attack power you have a variance from 50 to 140, plus the base damage. At least that's how it works in pre-renewal.

    Other than that, you can always modify damage formulas in battle.c

    Seach for "atkmin", then you find the relevant code locations (there are multiple).

    https://raw.githubusercontent.com/rathena/rathena/master/src/map/battle.c

×
×
  • Create New...