Quote:
|
It was a rewrite of the following code that is found in
if(RuleB(Combat, UseIntervalAC)) damage = (max_dmg+eleBane); else damage = MakeRandomInt((min_dmg+eleBane),(max_dmg+eleBane)) ; and not a changing of settings. Yes cavedude I will share the code with you. I want to make a special case for raid mobs or if you want to do that after I show you the code thats fine. A column to npc_types called isRaid will need to be added to check and see if its a raid target because they operate differently as far as this goes than normal mobs. Edit: since you know all of the eqemu code better than me you might see a better way to check for raid target than what I suggested with a new column. I was thinking along the lines of the new isQuest column. |
Personally I'd just use the existing fields.. e.g. if you want them to hit harder give them higher combat stats :)
An easy way to do this is to create a separate table with all the NPC_ID's for 'raid mobs'. Then you can run a query with an = or join on the NPC_ID.. For example, Code:
update npc_types set npc_types.atk = 2 billion, npc_types.accuracy = 3 billion where npc_types.id = raidmobs.id I use something similar to balance non-boss mobs by their level. |
The hell with all this fancy mumbo-jumbo, I just let the raid mob beat the shit out of me for a few hours while I fine tune his stats :D
|
Code:
if(RuleB(Combat, UseIntervalAC)) { Edit: I commented out the current code in my attack.cpp starting at line 1870 and end at line 1874 then pasted the above at line 1875. |
And obviously this values I just made up with what I have seen from all of the parses I have done. They need to be fine tuned to really get it right. I stopped at dividing the mid by 5 at green con because I think that if you go any more you would defeat the purpose of AC. Right now though you dont get hit for continue top end without a ton of AC and if you have a ton AC you still get hit hard on occasion. The most testing I have done so far has been in CoM and EJ with a 50monk wearing gear only from kunark and classic. So far I am not getting completely owned like normal and I still have to stop and bw to keep fighting like it should be for dark blue and light blue mobs. If I use a fungi I have to do this less. Or just wait a bit for the regen to do it. Much like my experiences on live eqmac and p99.
|
For the raid check I was thinking of something along the lines of
if(RuleB(Combat, UseIntervalAC) && raid check) {..... copy paste the rest and then that could be adjusted to what you want raid mobs to reflect =) |
Assuming I am reading this right, this will get screwy when mobs have a relatively high min hit. For argument's sake consider a green mob, that hits for 50-100 damage
65% of the time it hits for 50 (unmitigated) 8 % of the time it hits for 25-50 (unmitigated) 8% of the time it hits for 20-40 (unmitigated) 8% of the time it hits for 16-33 (unmitigated) 8% of the time it hits for 14-28 (unmitigated) In all the latter cases, the max hit is at or below min hit. Once damage is calculated by this code it will go through the mitigation function. At which point damage will be set to min_hit (as it is lower than min_hit). So the final result will be a 97% chance for any green mob with comparably high min_hit a to hit for minimum. Feel free to correct me if I've missed something. |
I see what you're saying but at the same time I know of no mobs with a min hit of 50 that their max hit is only 100 or their min_hit multiplied by 2 to get the max_hit. Most of the time the max is x4 or more than what the min is. So if you had some custom mobs on your server that had only a dmg range of minx2 for max this could be a problem. But just looking through the npc_types, min_hit max_hit, nothing is set at a multiplier of x2 from min to max. Except like I said the level one mobs in the classic zones. In which case they aren't even what live is currently and need to be adjusted to reflect live.
Edit: Also these values are not set in stone. They can be adjusted to anything you want them to be. |
And yes you want green mobs hitting for minimum almost always except for raid mobs.
Unless you have gray con on your server then gray can be made the default and green can adjusted accordingly. |
The code below this.
Code:
//check if we're hitting above our max or below it. And actually this calculation can just be added into the end of the if statements in the switch case. |
Although it affects mobs with a lower ratio to a lesser degree, it's still a significant degree. It's also not part of your design and works against the concept of having brackets which you set. I only chose the green example because it had the most brackets. The figures look bad for other /con's as well.
At the 50% ratio: (over 4400 mobs) yellow mobs hit minimum 50% of the time. white mobs hit for minimum 70% of the time. At 40% ratio, these figures drop by a few % rather than a lot of %. I /coded over 4000 examples of mobs that have a 50% or higher ratio of mindmg to maxdmg, but edited them out on second thought ;) Over 14,000 mobs have 30% or higher ratios.. this is not an insignificant number. Don't let it stop you tinkering, but you might want to rethink the solution. |
But I believe that even if it reverts to a default of 50 unmitigated it will still be fine since by the time you run into a mob with a min or 50 your ac calculations will take over and it should still keep the same curve.
What do you think cavedude? Honestly so far I haven't had any problems but that doesn't mean there aren't any. |
You misunderstand me - it reverts to min_hit AFTER the mitigation from AC.
|
Yeah thats fine. If you go into SoF at lvl90 on live you dont get hit for 1 dmg you frequently get hit for their min if you have max aas and if you dont just straight up avoid or block their dmg. Again these values can be adjusted.
This switch case can be made into a function and then you could add more checks like if the mob has a ratio of .5 or more to follow a different case. |
All times are GMT -4. The time now is 03:20 AM. |
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.